aboutsummaryrefslogtreecommitdiff
path: root/src/utils/uptime.rs
blob: e575e781f1f40984ffca417e5e25a657946b3e26 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use crate::config::CONFIG;
use crate::types::ThreadsData;
use nix::time::clock_gettime;

pub async fn get_uptime() -> ThreadsData {
    let (_, hour, minutes, seconds) = get_uptime_data();
    let uptime = if hour > 0 {
        format!("{}:{}:{}", hour, minutes, seconds)
    } else {
        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)
}