All checks were successful
check / check (push) Successful in 1m4s
Add the following counters to the healthcheck JSON response: - sessions: current active session count (from DB) - clients: current connected client count (from DB) - queuedLines: total entries in client output queues (from DB) - channels: current channel count (from DB) - connectionsSinceBoot: total client connections since server start - sessionsSinceBoot: total sessions created since server start - messagesSinceBoot: total PRIVMSG/NOTICE messages since server start Implementation: - New internal/stats package with atomic counters for boot-scoped metrics - New DB queries GetClientCount and GetQueueEntryCount - Healthcheck.Healthcheck() now accepts context for DB queries - Counter increments in session creation, registration, login, and messaging - Stats tracker wired via Uber fx dependency injection - Unit tests for stats package (100% coverage) and integration tests - README updated with full healthcheck response documentation closes #74
53 lines
1.4 KiB
Go
53 lines
1.4 KiB
Go
// Package stats tracks runtime statistics since server boot.
|
|
package stats
|
|
|
|
import (
|
|
"sync/atomic"
|
|
)
|
|
|
|
// Tracker holds atomic counters for runtime statistics
|
|
// that accumulate since the server started.
|
|
type Tracker struct {
|
|
connectionsSinceBoot atomic.Int64
|
|
sessionsSinceBoot atomic.Int64
|
|
messagesSinceBoot atomic.Int64
|
|
}
|
|
|
|
// New creates a new Tracker with all counters at zero.
|
|
func New() *Tracker {
|
|
return &Tracker{} //nolint:exhaustruct // atomic fields have zero-value defaults
|
|
}
|
|
|
|
// IncrConnections increments the total connection count.
|
|
func (t *Tracker) IncrConnections() {
|
|
t.connectionsSinceBoot.Add(1)
|
|
}
|
|
|
|
// IncrSessions increments the total session count.
|
|
func (t *Tracker) IncrSessions() {
|
|
t.sessionsSinceBoot.Add(1)
|
|
}
|
|
|
|
// IncrMessages increments the total PRIVMSG/NOTICE count.
|
|
func (t *Tracker) IncrMessages() {
|
|
t.messagesSinceBoot.Add(1)
|
|
}
|
|
|
|
// ConnectionsSinceBoot returns the total number of
|
|
// client connections since boot.
|
|
func (t *Tracker) ConnectionsSinceBoot() int64 {
|
|
return t.connectionsSinceBoot.Load()
|
|
}
|
|
|
|
// SessionsSinceBoot returns the total number of sessions
|
|
// created since boot.
|
|
func (t *Tracker) SessionsSinceBoot() int64 {
|
|
return t.sessionsSinceBoot.Load()
|
|
}
|
|
|
|
// MessagesSinceBoot returns the total number of
|
|
// PRIVMSG/NOTICE messages sent since boot.
|
|
func (t *Tracker) MessagesSinceBoot() int64 {
|
|
return t.messagesSinceBoot.Load()
|
|
}
|