Add sys:iostat
This commit is contained in:
60
src/scheme/sys/iostat.rs
Normal file
60
src/scheme/sys/iostat.rs
Normal file
@@ -0,0 +1,60 @@
|
||||
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()));
|
||||
|
||||
Reference in New Issue
Block a user