pub mod fs;
#[cfg(feature = "oci")]
pub mod manager;
#[cfg(feature = "oci")]
pub use manager::{FsManager, Manager, SystemdManager};
pub mod stats;
pub use stats::CgroupStats;
pub mod systemd;
pub const CPU_SHARES_V1_MAX: u64 = 262144;
pub const CPU_WEIGHT_V2_MAX: u64 = 10000;
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum FreezerState {
Thawed,
Freezing,
Frozen,
}
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy)]
pub struct CgroupPid {
pub pid: u64,
}
impl From<u64> for CgroupPid {
fn from(u: u64) -> CgroupPid {
CgroupPid { pid: u }
}
}
impl From<&std::process::Child> for CgroupPid {
fn from(u: &std::process::Child) -> CgroupPid {
CgroupPid { pid: u.id() as u64 }
}
}
#[cfg(test)]
pub mod tests {
use std::fs;
use std::process::{Child, Command, Stdio};
pub fn spawn_sleep_inf() -> Child {
let child = Command::new("sleep")
.arg("infinity")
.spawn()
.expect("Failed to start mock subprocess");
child
}
pub fn spawn_yes() -> Child {
let devnull = fs::File::create("/dev/null").expect("cannot open /dev/null");
let child = Command::new("yes")
.stdout(Stdio::from(devnull))
.spawn()
.expect("Failed to start mock subprocess");
child
}
pub fn systemd_version() -> Option<String> {
let output = Command::new("systemd").arg("--version").output().ok()?; if !output.status.success() {
return None;
}
Some(String::from_utf8_lossy(&output.stdout).to_string())
}
}