src/tools/procfs.rs: implement read_memory_usage()
Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
This commit is contained in:
		
				
					committed by
					
						 Dietmar Maurer
						Dietmar Maurer
					
				
			
			
				
	
			
			
			
						parent
						
							3005ef48b6
						
					
				
				
					commit
					13abfdc57a
				
			| @ -3,6 +3,7 @@ use failure::*; | |||||||
| use std::fs::OpenOptions; | use std::fs::OpenOptions; | ||||||
| use std::io::{BufRead, BufReader}; | use std::io::{BufRead, BufReader}; | ||||||
| use std::collections::HashSet; | use std::collections::HashSet; | ||||||
|  | use std::process; | ||||||
| use crate::tools; | use crate::tools; | ||||||
| use lazy_static::lazy_static; | use lazy_static::lazy_static; | ||||||
| use regex::Regex; | use regex::Regex; | ||||||
| @ -208,3 +209,27 @@ pub fn read_cpuinfo() -> Result<ProcFsCPUInfo, Error> { | |||||||
|  |  | ||||||
|     Ok(cpuinfo) |     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), | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user