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
118 lines
1.9 KiB
Go
118 lines
1.9 KiB
Go
package stats_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"git.eeqj.de/sneak/neoirc/internal/stats"
|
|
)
|
|
|
|
func TestNew(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
tracker := stats.New()
|
|
if tracker == nil {
|
|
t.Fatal("expected non-nil tracker")
|
|
}
|
|
|
|
if tracker.ConnectionsSinceBoot() != 0 {
|
|
t.Errorf(
|
|
"expected 0 connections, got %d",
|
|
tracker.ConnectionsSinceBoot(),
|
|
)
|
|
}
|
|
|
|
if tracker.SessionsSinceBoot() != 0 {
|
|
t.Errorf(
|
|
"expected 0 sessions, got %d",
|
|
tracker.SessionsSinceBoot(),
|
|
)
|
|
}
|
|
|
|
if tracker.MessagesSinceBoot() != 0 {
|
|
t.Errorf(
|
|
"expected 0 messages, got %d",
|
|
tracker.MessagesSinceBoot(),
|
|
)
|
|
}
|
|
}
|
|
|
|
func TestIncrConnections(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
tracker := stats.New()
|
|
|
|
tracker.IncrConnections()
|
|
tracker.IncrConnections()
|
|
tracker.IncrConnections()
|
|
|
|
got := tracker.ConnectionsSinceBoot()
|
|
if got != 3 {
|
|
t.Errorf(
|
|
"expected 3 connections, got %d", got,
|
|
)
|
|
}
|
|
}
|
|
|
|
func TestIncrSessions(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
tracker := stats.New()
|
|
|
|
tracker.IncrSessions()
|
|
tracker.IncrSessions()
|
|
|
|
got := tracker.SessionsSinceBoot()
|
|
if got != 2 {
|
|
t.Errorf(
|
|
"expected 2 sessions, got %d", got,
|
|
)
|
|
}
|
|
}
|
|
|
|
func TestIncrMessages(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
tracker := stats.New()
|
|
|
|
tracker.IncrMessages()
|
|
|
|
got := tracker.MessagesSinceBoot()
|
|
if got != 1 {
|
|
t.Errorf(
|
|
"expected 1 message, got %d", got,
|
|
)
|
|
}
|
|
}
|
|
|
|
func TestCountersAreIndependent(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
tracker := stats.New()
|
|
|
|
tracker.IncrConnections()
|
|
tracker.IncrSessions()
|
|
tracker.IncrMessages()
|
|
tracker.IncrMessages()
|
|
|
|
if tracker.ConnectionsSinceBoot() != 1 {
|
|
t.Errorf(
|
|
"expected 1 connection, got %d",
|
|
tracker.ConnectionsSinceBoot(),
|
|
)
|
|
}
|
|
|
|
if tracker.SessionsSinceBoot() != 1 {
|
|
t.Errorf(
|
|
"expected 1 session, got %d",
|
|
tracker.SessionsSinceBoot(),
|
|
)
|
|
}
|
|
|
|
if tracker.MessagesSinceBoot() != 2 {
|
|
t.Errorf(
|
|
"expected 2 messages, got %d",
|
|
tracker.MessagesSinceBoot(),
|
|
)
|
|
}
|
|
}
|