diff --git a/server/instrumentation.go b/server/instrumentation.go index af32af3a9264df1c214ffba9873a4acf368a4034..aa8e1b591f4ab3c68767ce05ffc8512b6853deb1 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 83afcf07fd62c677f7b30431bbfd052d436df96f..bde53d6d9aca0a2a15358327bdd0cbe41ee4992d 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