cli_batteries/
heartbeat.rs

1use crate::shutdown::await_shutdown;
2use std::time::{Duration, Instant};
3use tokio::time::{interval, MissedTickBehavior};
4use tracing::info;
5
6pub async fn heartbeat() {
7    let start = Instant::now();
8
9    let mut interval = interval(Duration::from_secs(5 * 60));
10    interval.set_missed_tick_behavior(MissedTickBehavior::Delay);
11    interval.reset(); // Skip immediate first tick
12
13    loop {
14        tokio::select! {
15            _ = await_shutdown() => break,
16            _ = interval.tick() => {},
17        };
18
19        // Measure uptime
20        let uptime = start.elapsed();
21
22        info!(?uptime, "Heartbeat");
23
24        // FEATURE: Log Tokio metrics once API is available.
25    }
26}