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(), };