From d0cd64f47cf0de8dba41d77265ccdabb5fcb06df Mon Sep 17 00:00:00 2001 From: ale <ale@incal.net> Date: Mon, 19 Dec 2022 17:24:21 +0000 Subject: [PATCH] Add a metric for active sessions, fix locking --- server/instrumentation.go | 17 ++++++++++++++++- server/map.go | 4 ++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/server/instrumentation.go b/server/instrumentation.go index af32af3a..aa8e1b59 100644 --- a/server/instrumentation.go +++ b/server/instrumentation.go @@ -8,6 +8,11 @@ var ( "Total number of unlocked keys in-memory.", nil, nil, ) + totalSessionsInMemory = prometheus.NewDesc( + "keystored_sessions_total", + "Total number of active user sessions.", + nil, nil, + ) requestsCounter = prometheus.NewCounterVec(prometheus.CounterOpts{ Name: "keystored_requests_total", Help: "Counter of requests by method and status.", @@ -43,9 +48,19 @@ func (c *keystoreCollector) Describe(ch chan<- *prometheus.Desc) { } func (c *keystoreCollector) Collect(ch chan<- prometheus.Metric) { + c.ks.mx.Lock() + numKeys := c.ks.userKeys.numCachedKeys() + numSessions := c.ks.userKeys.numSessions() + c.ks.mx.Unlock() + ch <- prometheus.MustNewConstMetric( totalKeysInMemory, prometheus.GaugeValue, - float64(c.ks.userKeys.numCachedKeys()), + float64(numKeys), + ) + ch <- prometheus.MustNewConstMetric( + totalSessionsInMemory, + prometheus.GaugeValue, + float64(numSessions), ) } diff --git a/server/map.go b/server/map.go index 83afcf07..bde53d6d 100644 --- a/server/map.go +++ b/server/map.go @@ -103,6 +103,10 @@ func (u *userKeyMap) numCachedKeys() int { return len(u.userKeys) } +func (u *userKeyMap) numSessions() int { + return u.sessions.pq.Len() +} + func (u *userKeyMap) get(username string) (*userKey, bool) { k, ok := u.userKeys[username] return k, ok -- GitLab