package observability import ( "sync/atomic" "time" ) // Metrics collects system metrics type Metrics struct { SessionCreations int64 ActiveSessions int64 MessagesProcessed int64 ASRLatency int64 // microseconds TTSLatency int64 // microseconds LLMLatency int64 // microseconds Errors int64 } var globalMetrics = &Metrics{} // GetMetrics returns current metrics func GetMetrics() *Metrics { return &Metrics{ SessionCreations: atomic.LoadInt64(&globalMetrics.SessionCreations), ActiveSessions: atomic.LoadInt64(&globalMetrics.ActiveSessions), MessagesProcessed: atomic.LoadInt64(&globalMetrics.MessagesProcessed), ASRLatency: atomic.LoadInt64(&globalMetrics.ASRLatency), TTSLatency: atomic.LoadInt64(&globalMetrics.TTSLatency), LLMLatency: atomic.LoadInt64(&globalMetrics.LLMLatency), Errors: atomic.LoadInt64(&globalMetrics.Errors), } } // IncrementSessionCreations increments session creation count func IncrementSessionCreations() { atomic.AddInt64(&globalMetrics.SessionCreations, 1) } // IncrementActiveSessions increments active session count func IncrementActiveSessions() { atomic.AddInt64(&globalMetrics.ActiveSessions, 1) } // DecrementActiveSessions decrements active session count func DecrementActiveSessions() { atomic.AddInt64(&globalMetrics.ActiveSessions, -1) } // IncrementMessagesProcessed increments message count func IncrementMessagesProcessed() { atomic.AddInt64(&globalMetrics.MessagesProcessed, 1) } // RecordASRLatency records ASR latency func RecordASRLatency(duration time.Duration) { atomic.StoreInt64(&globalMetrics.ASRLatency, duration.Microseconds()) } // RecordTTSLatency records TTS latency func RecordTTSLatency(duration time.Duration) { atomic.StoreInt64(&globalMetrics.TTSLatency, duration.Microseconds()) } // RecordLLMLatency records LLM latency func RecordLLMLatency(duration time.Duration) { atomic.StoreInt64(&globalMetrics.LLMLatency, duration.Microseconds()) } // IncrementErrors increments error count func IncrementErrors() { atomic.AddInt64(&globalMetrics.Errors, 1) }