2024-08-05 01:37:13 +03:00
|
|
|
use color_eyre::Result;
|
|
|
|
use nix::sys::sysinfo::sysinfo;
|
|
|
|
use std::io;
|
2024-08-03 20:42:48 +03:00
|
|
|
|
2024-08-04 00:07:11 +03:00
|
|
|
pub fn get_current() -> Result<String, io::Error> {
|
2024-08-05 01:37:13 +03:00
|
|
|
let info = sysinfo().map_err(|e| io::Error::new(io::ErrorKind::Other, e))?;
|
|
|
|
let uptime_seconds = info.uptime().as_secs_f64();
|
2024-08-03 20:42:48 +03:00
|
|
|
|
|
|
|
let total_minutes = (uptime_seconds / 60.0).round() as u64;
|
|
|
|
let days = total_minutes / (60 * 24);
|
|
|
|
let hours = (total_minutes % (60 * 24)) / 60;
|
|
|
|
let minutes = total_minutes % 60;
|
|
|
|
|
2024-08-04 12:44:12 +03:00
|
|
|
let mut parts = Vec::with_capacity(3);
|
2024-08-03 20:42:48 +03:00
|
|
|
if days > 0 {
|
2024-08-03 23:04:26 +03:00
|
|
|
parts.push(format!("{days} days"));
|
2024-08-03 20:42:48 +03:00
|
|
|
}
|
|
|
|
if hours > 0 || days > 0 {
|
2024-08-03 23:04:26 +03:00
|
|
|
parts.push(format!("{hours} hours"));
|
2024-08-03 20:42:48 +03:00
|
|
|
}
|
|
|
|
if minutes > 0 || hours > 0 || days > 0 {
|
2024-08-03 23:04:26 +03:00
|
|
|
parts.push(format!("{minutes} minutes"));
|
2024-08-03 20:42:48 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
Ok(parts.join(", "))
|
|
|
|
}
|