mirror of
https://github.com/Dvorinka/Primora.git
synced 2026-06-04 04:23:00 +00:00
initiall commit
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
package observability
|
||||
|
||||
import (
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
// Metrics provides basic in-memory metrics collection
|
||||
type Metrics struct {
|
||||
mu sync.RWMutex
|
||||
requestCount int64
|
||||
errorCount int64
|
||||
totalResponseTime time.Duration
|
||||
activeRequests int64
|
||||
}
|
||||
|
||||
func NewMetrics() *Metrics {
|
||||
return &Metrics{}
|
||||
}
|
||||
|
||||
func (m *Metrics) RecordRequest(duration time.Duration, isError bool) {
|
||||
m.mu.Lock()
|
||||
defer m.mu.Unlock()
|
||||
m.requestCount++
|
||||
m.totalResponseTime += duration
|
||||
if isError {
|
||||
m.errorCount++
|
||||
}
|
||||
}
|
||||
|
||||
func (m *Metrics) IncrementActive() {
|
||||
m.mu.Lock()
|
||||
defer m.mu.Unlock()
|
||||
m.activeRequests++
|
||||
}
|
||||
|
||||
func (m *Metrics) DecrementActive() {
|
||||
m.mu.Lock()
|
||||
defer m.mu.Unlock()
|
||||
m.activeRequests--
|
||||
}
|
||||
|
||||
func (m *Metrics) GetStats() map[string]any {
|
||||
m.mu.RLock()
|
||||
defer m.mu.RUnlock()
|
||||
|
||||
avgResponseTime := int64(0)
|
||||
if m.requestCount > 0 {
|
||||
avgResponseTime = m.totalResponseTime.Milliseconds() / m.requestCount
|
||||
}
|
||||
|
||||
return map[string]any{
|
||||
"total_requests": m.requestCount,
|
||||
"total_errors": m.errorCount,
|
||||
"active_requests": m.activeRequests,
|
||||
"avg_response_time_ms": avgResponseTime,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user