use crate::contract::budget::{BudgetAvailability, BudgetProfile};
use crate::contract::capability::{Enforcement, EvidenceClaim, EvidenceSet};
pub(super) fn observed_budget_profile(
cgroup_pids_enforced: bool,
pids_peak_witness: bool,
) -> BudgetProfile {
let observed = |mechanism: &str| BudgetAvailability {
available: u64::MAX,
enforcement: Enforcement::Mediated,
evidence: EvidenceSet::new(),
mechanism: mechanism.to_string(),
};
let process_count = if cgroup_pids_enforced {
let evidence = if pids_peak_witness {
[EvidenceClaim::ResourceUsage].into_iter().collect()
} else {
EvidenceSet::new()
};
BudgetAvailability {
available: u64::MAX,
enforcement: Enforcement::Enforced,
evidence,
mechanism: "cgroup_v2_pids:enforced".to_string(),
}
} else {
observed("os_process:observed-not-capped")
};
BudgetProfile {
wall_micros: observed("os_process_wait:observed-not-capped"),
cpu_micros: observed("os_rusage:observed-not-capped"),
resident_bytes: observed("os_rusage:observed-not-capped"),
process_count,
handle_count: observed("os_fd:observed-not-capped"),
storage_bytes: observed("os_fs:observed-not-capped"),
network_bytes: observed("os_net:observed-not-capped"),
}
}