mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-09-22 01:25:10 -07:00
[Server] Instrument command processing, game starts, and event loops
Add a lock-free MetricsRegistry that accumulates per-command processing times in preallocated histogram slots (one per protobuf command type, bucketed at 1/5/10/25/50/100/250/500/1000/2500/5000 ms +Inf). The hot-path observeCommand() uses only relaxed atomic adds — no locks, no allocations, no cache-line ping-pong beyond the unavoidable counter updates. Wire the registry into AbstractServerSocketInterface::processCommandContainer() so every processed command is attributed with its container's wall-clock time. When a container exceeds metrics/slow_command_ms (default 500), a warning is logged including the connected username. Add an EventLoopWatchdog heartbeat that runs on every socket pool thread. If a heartbeat overshoots metrics/stall_warn_ms (default 2000 ms), the overshoot is recorded in atomic counters and a warning is logged. Both thresholds are configurable in servatrice.ini; setting stall_warn_ms to 0 disables the watchdogs entirely. Track game-start durations via a separate histogram in MetricsRegistry. Server_Game::startGameNow() measures the time from zone creation through player materialization and reports it via Server::observeGameStartDurationMs(). Add a live card-count gauge: Server_Game exposes getCardsInGame() and Servatrice::getCardsInGamesTotal() sums across all running games under the appropriate read locks. Include a standalone metrics_registry_test (Google Test) that validates empty registries, single/multi-sample histograms, kind encoding, overflow-slot collapse, negative-duration clamping, gauge rendering, and the game-start histogram separation. Took 10 minutes
This commit is contained in:
parent
2b33cbfb66
commit
a542831aad
18 changed files with 749 additions and 1 deletions
|
|
@ -382,6 +382,17 @@ max_reports_per_day=10
|
|||
; Maximum number of report comments a single user can post per hour; default is 30; set to 0 to disable the limit
|
||||
max_comments_per_hour=30
|
||||
|
||||
[metrics]
|
||||
; Command containers that take longer than this many milliseconds are logged
|
||||
; as slow commands. Set to 0 to disable the log line.
|
||||
slow_command_ms=500
|
||||
|
||||
; Each socket pool thread runs a watchdog heartbeat. If a heartbeat arrives
|
||||
; this many milliseconds late, the stall is logged and exposed as
|
||||
; servatrice_eventloop_* metrics in the Developer tab. Set to 0 to disable
|
||||
; the watchdogs.
|
||||
stall_warn_ms=2000
|
||||
|
||||
[logging]
|
||||
; Admin/Moderators can query the stored logs for information when looking up reports by various players. This
|
||||
; option can allow or disallow them from doing so.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue