diff options
| author | Kyren223 <Kyren223@proton.me> | 2025-07-13 17:33:37 +0300 |
|---|---|---|
| committer | Kyren223 <Kyren223@proton.me> | 2025-07-19 18:32:12 +0300 |
| commit | 34c944c35030caf507d3a4f1c938bd655a88a2cf (patch) | |
| tree | 0d22eeba5e8c41baac83f57d34f1919fc658a001 | |
| parent | 12f50940b4702ec5888ce110a6e67a00e32d1d05 (diff) | |
Added some metrics
| -rw-r--r-- | internal/server/metrics/metrics.go | 65 | ||||
| -rw-r--r-- | internal/server/server.go | 16 |
2 files changed, 71 insertions, 10 deletions
diff --git a/internal/server/metrics/metrics.go b/internal/server/metrics/metrics.go index 9c80665..725952b 100644 --- a/internal/server/metrics/metrics.go +++ b/internal/server/metrics/metrics.go @@ -5,14 +5,61 @@ import ( "github.com/prometheus/client_golang/prometheus/promauto" ) -var ( - reg = prometheus.DefaultRegisterer +const namespace = "eko" - namespace = "eko" +var RequestsProcessed = promauto.NewCounterVec(prometheus.CounterOpts{ + Namespace: namespace, + Name: "requests_processed_total", + Help: "The total number of processed requests", +}, []string{"request_type"}) - RequestsProcessed = promauto.With(reg).NewCounter(prometheus.CounterOpts{ - Namespace: namespace, - Name: "processed_requests_total", - Help: "The total number of processed requests", - }) -) +// var RequestsInProgress = promauto.NewCounterVec(prometheus.CounterOpts{ +// Namespace: namespace, +// Name: "requests_in_progress_total", +// Help: "The total number of in-progress requests", +// }, []string{"request_type"}) + +var RequestProcessingDuration = promauto.NewHistogramVec(prometheus.HistogramOpts{ + Namespace: namespace, + Name: "request_processing_duration_seconds", + Help: "The duration in seconds it took to process a request", + NativeHistogramBucketFactor: 1.00271, +}, []string{"request_type"}) + +// var RequestProcessingDuration = promauto.NewSummaryVec(prometheus.SummaryOpts{ +// Namespace: namespace, +// Name: "request_processing_duration_seconds", +// Help: "The duration in seconds it took to process a request", +// Objectives: map[float64]float64{ +// 0.01: 0.001, +// 0.50: 0.005, +// 0.90: 0.009, +// 0.95: 0.0095, +// 0.99: 0.0099, +// }, +// MaxAge: 1 * time.Hour, +// }, []string{"request_type"}) + +var ConnectionsEstablished = promauto.NewCounter(prometheus.CounterOpts{ + Namespace: namespace, + Name: "connections_established_total", + Help: "The total number of established connections", +}) + +var ConnectionsClosed = promauto.NewCounter(prometheus.CounterOpts{ + Namespace: namespace, + Name: "connections_closed_total", + Help: "The total number of closed connections", +}) + +var ConnectionsActive = promauto.NewGauge(prometheus.GaugeOpts{ + Namespace: namespace, + Name: "connections_active_total", + Help: "The total number of active connections", +}) + +var UsersActive = promauto.NewGauge(prometheus.GaugeOpts{ + Namespace: namespace, + Name: "users_active_total", + Help: "The total number of active users", +}) diff --git a/internal/server/server.go b/internal/server/server.go index fcc904d..28c1ae2 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -29,6 +29,7 @@ import ( "github.com/kyren223/eko/internal/server/session" "github.com/kyren223/eko/pkg/assert" "github.com/kyren223/eko/pkg/snowflake" + "github.com/prometheus/client_golang/prometheus" ) var nodeId int64 = 0 @@ -129,6 +130,7 @@ func (s *server) AddSession(session *session.Session, userId snowflake.ID, pubKe if sess, ok := s.sessions[session.ID()]; ok { EvictSession(sess) // last connection wins + metrics.UsersActive.Dec() slog.Info("closed due to new connection from another location", ctxkeys.IpAddr.String(), sess.Addr(), ctxkeys.UserID.String(), sess.ID(), @@ -142,6 +144,7 @@ func (s *server) AddSession(session *session.Session, userId snowflake.ID, pubKe } s.sessions[session.ID()] = session + metrics.UsersActive.Inc() } func EvictSession(sess *session.Session) { @@ -160,6 +163,7 @@ func (s *server) RemoveSession(id snowflake.ID) { s.sessMu.Lock() defer s.sessMu.Unlock() delete(s.sessions, id) + metrics.UsersActive.Dec() } func (s *server) Session(id snowflake.ID) *session.Session { @@ -214,7 +218,11 @@ func (s *server) Run() { } wg.Add(1) go func() { + metrics.ConnectionsEstablished.Inc() + metrics.ConnectionsActive.Inc() s.handleConnection(conn) + metrics.ConnectionsActive.Dec() + metrics.ConnectionsClosed.Inc() wg.Done() }() } @@ -292,8 +300,14 @@ func (server *server) handleConnection(conn net.Conn) { // will still have a time limit upper bound, from timeout() for request := range framer.Out { + start := time.Now().UTC() processPacket(localCtx, sess, request) - metrics.RequestsProcessed.Inc() + duration := time.Since(start) + + labels := prometheus.Labels{"request_type": request.Type().String()} + metrics.RequestsProcessed.With(labels).Inc() + metrics.RequestProcessingDuration.With(labels).Observe(float64(duration.Seconds())) + slog.InfoContext(ctx, "processed request", "request_type", request.Type().String(), "duration", duration.String(), "duration_ns", duration.Nanoseconds()) } slog.InfoContext(ctx, "processor done") }() |
