procinsh 0.1.2

A local, read-only Linux x86-64 process inspector
use super::ProcessObservation;
use serde::Serialize;
use std::collections::VecDeque;

#[derive(Clone, Debug, Serialize)]
pub struct HistoryPoint {
    pub timestamp: u64,
    pub cpu_percent: Option<f64>,
    pub rss_bytes: u64,
    pub vms_bytes: u64,
}

pub fn push(history: &mut VecDeque<HistoryPoint>, observation: &ProcessObservation) {
    let cutoff = observation.timestamp.saturating_sub(60_000);
    history.push_back(HistoryPoint {
        timestamp: observation.timestamp,
        cpu_percent: observation.cpu_percent,
        rss_bytes: observation.rss_bytes,
        vms_bytes: observation.vms_bytes,
    });
    while history.front().is_some_and(|o| o.timestamp < cutoff) || history.len() > 601 {
        history.pop_front();
    }
}