diff options
Diffstat (limited to 'src/utils/uptime.rs')
-rw-r--r-- | src/utils/uptime.rs | 34 |
1 files changed, 23 insertions, 11 deletions
diff --git a/src/utils/uptime.rs b/src/utils/uptime.rs index 4bb06cc..f635b6b 100644 --- a/src/utils/uptime.rs +++ b/src/utils/uptime.rs @@ -1,21 +1,33 @@ use crate::config::CONFIG; use crate::types::ThreadsData; -use chrono::Duration; -use nix::sys::sysinfo; +use nix::time::clock_gettime; pub fn get_uptime() -> ThreadsData { - let duration = sysinfo::sysinfo().unwrap().uptime(); - let uptime_sec = Duration::from_std(duration).unwrap().num_seconds(); - - let hour = uptime_sec / 3600; - let rem = uptime_sec - hour * 3600; - let minutes = rem / 60; - + let (_, hour, minutes, seconds) = get_uptime_data(); let uptime = if hour > 0 { - format!("{}:{}", hour, minutes) + format!("{}:{}:{}", hour, minutes, seconds) } else { - format!("{} min", minutes) + format!("{} min, {} sec", minutes, seconds) }; let result = format!(" {} {} {}", CONFIG.uptime.icon, uptime, CONFIG.seperator); ThreadsData::Uptime(result) } + +// This helper function will use the system call clock_gettime +// it will return a tuple of (days, hours, minutes, seconds) +fn get_uptime_data() -> (i64, i64, i64, i64) { + let mut uptime = clock_gettime(nix::time::ClockId::CLOCK_MONOTONIC) + .unwrap() + .tv_sec(); + + if uptime > 60 { + uptime += 30; + } + let days = uptime / 86400; + uptime %= 86400; + let hours = uptime / 3600; + uptime %= 3600; + let minutes = uptime / 60; + let seconds = uptime % 60; + (days, hours, minutes, seconds) +} |