Skip to content
Snippets Groups Projects
Commit 1e8df4b9 authored by Jeremy Soller's avatar Jeremy Soller
Browse files

Add sys:iostat

parent a38f32c7
No related branches found
No related tags found
No related merge requests found
use collections::{String, Vec};
use core::fmt::Write;
use core::str;
use context;
use scheme;
use syscall::error::Result;
pub fn resource() -> Result<Vec<u8>> {
let mut string = String::new();
{
let mut rows = Vec::new();
{
let contexts = context::contexts();
for (id, context_lock) in contexts.iter() {
let context = context_lock.read();
rows.push((*id, context.name.lock().clone(), context.files.lock().clone()));
}
}
for row in rows.iter() {
let id: usize = row.0.into();
let name = str::from_utf8(&row.1).unwrap_or(".");
let _ = writeln!(string, "{}: {}", id, name);
for (fd, f) in row.2.iter().enumerate() {
let file = match *f {
None => continue,
Some(file) => file
};
let scheme = {
let schemes = scheme::schemes();
match schemes.get(file.scheme) {
Some(scheme) => scheme.clone(),
None => {
let _ = writeln!(string, " {:>4}: {:>8} {:>8}: no scheme", fd, file.scheme.into(), file.number);
continue;
}
}
};
let mut fpath = [0; 4096];
match scheme.fpath(file.number, &mut fpath) {
Ok(path_len) => {
let fname = str::from_utf8(&fpath[..path_len]).unwrap_or("?");
let _ = writeln!(string, " {:>4}: {:>8} {:>8}: {}", fd, file.scheme.into(), file.number, fname);
},
Err(err) => {
let _ = writeln!(string, " {:>4}: {:>8} {:>8}: {}", fd, file.scheme.into(), file.number, err);
}
}
}
}
}
Ok(string.into_bytes())
}
......@@ -12,6 +12,7 @@ use syscall::scheme::Scheme;
mod context;
mod cpu;
mod exe;
mod iostat;
mod scheme;
//mod interrupt;
//mod log;
......@@ -40,6 +41,7 @@ impl SysScheme {
files.insert(b"context", Box::new(move || context::resource()));
files.insert(b"cpu", Box::new(move || cpu::resource()));
files.insert(b"exe", Box::new(move || exe::resource()));
files.insert(b"iostat", Box::new(move || iostat::resource()));
files.insert(b"scheme", Box::new(move || scheme::resource()));
//files.insert(b"interrupt", Box::new(move || interrupt::resource()));
//files.insert(b"log", Box::new(move || log::resource()));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment