From 5b69fb7c00b2a1afdb6fc533e8ed8a818477b52e Mon Sep 17 00:00:00 2001 From: DirectPool Date: Mon, 5 Oct 2026 02:00:30 +0000 Subject: [PATCH] Report open connections per worker (worker_connections metric) --- p2poolv2_lib/src/accounting/stats/metrics.rs | 33 ++++++++++++++++++++ p2poolv2_lib/src/accounting/stats/prom.rs | 22 +++++++++++++ p2poolv2_lib/src/accounting/stats/worker.rs | 4 +++ 3 files changed, 59 insertions(+) diff --git a/p2poolv2_lib/src/accounting/stats/metrics.rs b/p2poolv2_lib/src/accounting/stats/metrics.rs index 188f58d..249acce 100644 --- a/p2poolv2_lib/src/accounting/stats/metrics.rs +++ b/p2poolv2_lib/src/accounting/stats/metrics.rs @@ -239,6 +239,7 @@ impl MetricsActor { .or_default(); worker.active = true; worker.best_share = 0; + worker.connections = worker.connections.saturating_add(1); } /// Decrement pool wide worker counts, if worker found as authorised. Unauthorised workers are not counted. @@ -248,6 +249,7 @@ impl MetricsActor { if let Some(user) = self.metrics.users.get_mut(&btcaddress) { if let Some(worker) = user.workers.get_mut(&workername) { worker.active = false; + worker.connections = worker.connections.saturating_sub(1); } } } @@ -415,6 +417,37 @@ pub async fn start_metrics(log_dir: String) -> Result 0) { + let display_name = if workername.is_empty() { + "unnamed" + } else { + workername + }; + output.push_str(&format!( + "worker_connections{{btcaddress=\"{}\",workername=\"{}\"}} {}\n", + btcaddress, display_name, worker.connections + )); + } + } + output.push('\n'); + output } } @@ -270,6 +289,7 @@ mod tests { active: true, best_share: 800, best_share_ever: 1500, + ..Default::default() }; let worker2 = Worker { @@ -278,6 +298,7 @@ mod tests { active: false, best_share: 600, best_share_ever: 0, + ..Default::default() }; user1.workers.insert("worker1".to_string(), worker1); @@ -374,6 +395,7 @@ mod tests { active: true, best_share: 500, best_share_ever: 500, + ..Default::default() }; user1.workers.insert("".to_string(), worker_with_empty_name); diff --git a/p2poolv2_lib/src/accounting/stats/worker.rs b/p2poolv2_lib/src/accounting/stats/worker.rs index 03bf551..7f21cf5 100644 --- a/p2poolv2_lib/src/accounting/stats/worker.rs +++ b/p2poolv2_lib/src/accounting/stats/worker.rs @@ -44,6 +44,10 @@ pub struct Worker { pub best_share: u64, /// Best ever share, loaded from disk on startup pub best_share_ever: u64, + /// Number of open, authorized Stratum connections for this worker. + /// Not saved: after a restart every miner reconnects and is counted again. + #[serde(skip)] + pub connections: u32, } impl Worker { -- 2.43.0