From 657392b5926c913f6bc8b9b9658dedcc863b0176 Mon Sep 17 00:00:00 2001 From: Gary Yu Date: Mon, 7 Jan 2019 07:19:25 +0800 Subject: [PATCH] minor improvement on stratum server log for miner status (#2301) * add a log to show the stratum worker status * add miner starting time (height) * rustfmt --- servers/src/common/stats.rs | 3 +++ servers/src/mining/stratumserver.rs | 22 +++++++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/servers/src/common/stats.rs b/servers/src/common/stats.rs index 47befa75..005cf90c 100644 --- a/servers/src/common/stats.rs +++ b/servers/src/common/stats.rs @@ -72,6 +72,8 @@ pub struct WorkerStats { pub is_connected: bool, /// Timestamp of most recent communication with this worker pub last_seen: SystemTime, + /// which block height it starts mining + pub initial_block_height: u64, /// pow difficulty this worker is using pub pow_difficulty: u64, /// number of valid shares submitted @@ -207,6 +209,7 @@ impl Default for WorkerStats { id: String::from("unknown"), is_connected: false, last_seen: SystemTime::now(), + initial_block_height: 0, pow_difficulty: 0, num_accepted: 0, num_rejected: 0, diff --git a/servers/src/mining/stratumserver.rs b/servers/src/mining/stratumserver.rs index c868ac0b..4a17c97d 100644 --- a/servers/src/mining/stratumserver.rs +++ b/servers/src/mining/stratumserver.rs @@ -312,7 +312,11 @@ impl StratumServer { // Call the handler function for requested method let response = match request.method.as_str() { - "login" => self.handle_login(request.params, &mut workers_l[num]), + "login" => { + stratum_stats.worker_stats[worker_stats_id].initial_block_height = + self.current_block_versions.last().unwrap().header.height; + self.handle_login(request.params, &mut workers_l[num]) + } "submit" => { let res = self.handle_submit( request.params, @@ -338,7 +342,7 @@ impl StratumServer { } } "status" => { - self.handle_status(&stratum_stats.worker_stats[worker_stats_id]) + self.handle_status(&mut stratum_stats.worker_stats[worker_stats_id]) } _ => { // Called undefined method @@ -384,7 +388,7 @@ impl StratumServer { } // Handle STATUS message - fn handle_status(&self, worker_stats: &WorkerStats) -> Result { + fn handle_status(&self, worker_stats: &mut WorkerStats) -> Result { // Return worker status in json for use by a dashboard or healthcheck. let status = WorkerStatus { id: worker_stats.id.clone(), @@ -394,6 +398,18 @@ impl StratumServer { rejected: worker_stats.num_rejected, stale: worker_stats.num_stale, }; + if worker_stats.initial_block_height == 0 { + worker_stats.initial_block_height = status.height; + } + debug!("(Server ID: {}) Status of worker: {} - Share Accepted: {}, Rejected: {}, Stale: {}. Blocks Found: {}/{}", + self.id, + worker_stats.id, + worker_stats.num_accepted, + worker_stats.num_rejected, + worker_stats.num_stale, + worker_stats.num_blocks_found, + status.height - worker_stats.initial_block_height, + ); let response = serde_json::to_value(&status).unwrap(); return Ok(response); }