From 59304edcc98c30e028e307c5c1bc6fdb6eee5287 Mon Sep 17 00:00:00 2001 From: danda Date: Wed, 19 Feb 2025 18:58:07 +0000 Subject: [PATCH] feat: mining status duration as human-time adds a dep on the humantime crate in order to display durations as eg 3d 5h 25s instead of xxx seconds. --- Cargo.lock | 1 + Cargo.toml | 1 + src/bin/dashboard_src/overview_screen.rs | 2 +- src/models/state/mining_status.rs | 15 ++++++++++++--- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 706991e1..a8ed8ff7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1849,6 +1849,7 @@ dependencies = [ "field_count", "futures", "get-size2", + "humantime", "itertools 0.11.0", "leveldb-sys", "memmap2", diff --git a/Cargo.toml b/Cargo.toml index 7b5d6c6b..08a3c6d9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -123,6 +123,7 @@ systemstat = "0.2.3" sysinfo = "0.31.4" thread-priority = "1.2.0" rayon = "1.10" +humantime = "2.1.0" [dev-dependencies] diff --git a/src/bin/dashboard_src/overview_screen.rs b/src/bin/dashboard_src/overview_screen.rs index 9c96e29d..0e00fbec 100644 --- a/src/bin/dashboard_src/overview_screen.rs +++ b/src/bin/dashboard_src/overview_screen.rs @@ -470,7 +470,7 @@ impl Widget for OverviewScreen { .unwrap() .as_secs(); let uptime = Duration::from_secs(now - upsince); - format!("{:?}", uptime) + format!("{}", humantime::format_duration(uptime)) } else { "-".to_string() }; diff --git a/src/models/state/mining_status.rs b/src/models/state/mining_status.rs index 3d734416..61cc094e 100644 --- a/src/models/state/mining_status.rs +++ b/src/models/state/mining_status.rs @@ -51,7 +51,7 @@ pub enum MiningStatus { impl Display for MiningStatus { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - let elapsed_time = match self { + let elapsed_time_exact = match self { MiningStatus::Guessing(guessing_work_info) => Some( guessing_work_info .work_start @@ -66,6 +66,9 @@ impl Display for MiningStatus { ), MiningStatus::Inactive => None, }; + // remove sub-second component, so humantime ends with seconds. + let elapsed_time = + elapsed_time_exact.map(|v| v - Duration::from_nanos(v.subsec_nanos().into())); let input_output_info = match self { MiningStatus::Guessing(info) => { format!(" {}/{}", info.num_inputs, info.num_outputs) @@ -75,10 +78,16 @@ impl Display for MiningStatus { let work_type_and_duration = match self { MiningStatus::Guessing(_) => { - format!("guessing for {} seconds", elapsed_time.unwrap().as_secs(),) + format!( + "guessing for {}", + humantime::format_duration(elapsed_time.unwrap()) + ) } MiningStatus::Composing(_) => { - format!("composing for {} seconds", elapsed_time.unwrap().as_secs()) + format!( + "composing for {}", + humantime::format_duration(elapsed_time.unwrap()) + ) } MiningStatus::Inactive => "inactive".to_owned(), };