src/tools/procfs.rs: implement read_memory_usage()
Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
This commit is contained in:
parent
3005ef48b6
commit
13abfdc57a
@ -3,6 +3,7 @@ use failure::*;
|
||||
use std::fs::OpenOptions;
|
||||
use std::io::{BufRead, BufReader};
|
||||
use std::collections::HashSet;
|
||||
use std::process;
|
||||
use crate::tools;
|
||||
use lazy_static::lazy_static;
|
||||
use regex::Regex;
|
||||
@ -208,3 +209,27 @@ pub fn read_cpuinfo() -> Result<ProcFsCPUInfo, Error> {
|
||||
|
||||
Ok(cpuinfo)
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct ProcFsMemUsage {
|
||||
pub size: u64,
|
||||
pub resident: u64,
|
||||
pub shared: u64,
|
||||
}
|
||||
|
||||
pub fn read_memory_usage() -> Result<ProcFsMemUsage, Error> {
|
||||
let path = format!("/proc/{}/statm", process::id());
|
||||
let line = tools::file_read_firstline(&path)?;
|
||||
let mut values = line.split_whitespace().map(|v| v.parse::<u64>());
|
||||
|
||||
let ps = 4096;
|
||||
match (values.next(), values.next(), values.next()) {
|
||||
(Some(Ok(size)), Some(Ok(resident)), Some(Ok(shared))) =>
|
||||
Ok(ProcFsMemUsage {
|
||||
size: size * ps,
|
||||
resident: resident * ps,
|
||||
shared: shared * ps,
|
||||
}),
|
||||
_ => bail!("Error while parsing '{}'", path),
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user