From dd3406a9b60e1fb9308f1e68e247aa8f67e440b4 Mon Sep 17 00:00:00 2001 From: Kjetil Orbekk Date: Fri, 26 May 2017 06:44:52 -0400 Subject: Add minimial unit details page. --- src/main.rs | 24 ++++++++++++++++++++---- src/render/mod.rs | 4 +++- src/systemd/unit.rs | 4 ++-- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/main.rs b/src/main.rs index f96ebdc..710fbda 100644 --- a/src/main.rs +++ b/src/main.rs @@ -52,7 +52,7 @@ fn overview(r: &mut Request) -> IronResult { .find("name") .unwrap_or("World").to_owned(); - let units = unit::get_units().unwrap(); + let units = unit::get_units("*").unwrap(); let sections = ["service", "timer", "socket", "target", "slice", "mount", "path"]; @@ -81,7 +81,6 @@ fn journal(r: &mut Request) -> IronResult { .get::() .unwrap() .find("unit"), status::BadRequest); - info!("got here"); let re = Regex::new(r"[-_\w\d]*").unwrap(); if !re.is_match(unit) { return Ok(Response::with( @@ -89,17 +88,34 @@ fn journal(r: &mut Request) -> IronResult { format!("Unit ({}) does not match {}", unit, re)))); } - info!("got here"); Ok(Response::with((status::Ok, itry!(journal::get_log(unit, 100))))) } +fn unit_status(r: &mut Request) -> IronResult { + let unit_name = iexpect!(r.extensions + .get::() + .unwrap() + .find("unit"), status::BadRequest); + let re = Regex::new(r"[-_\w\d]*").unwrap(); + if !re.is_match(unit_name) { + return Ok(Response::with( + (status::BadRequest, + format!("Unit ({}) does not match {}", + unit_name, re)))); + } + let unit = unit::get_units(unit_name); + let log = itry!(journal::get_log(unit_name, 15)); + Ok(Response::with((status::Ok, + format!("{:?}\n{}", unit, log)))) +} + fn main() { env_logger::init().unwrap(); let secret = b"secret2".to_vec(); let router = router!( root: get "/" => overview, - name: get "/:name" => overview, + details: get "/status/:unit" => unit_status, journal: get "/journal/:unit" => journal, css: get "/static/main.css" => Static::new(""), ); diff --git a/src/render/mod.rs b/src/render/mod.rs index 49c3086..f7ad1d1 100644 --- a/src/render/mod.rs +++ b/src/render/mod.rs @@ -23,7 +23,9 @@ fn unit_table<'a>(units: &'a [&unit::Unit]) -> Box { box_html! { tr { td { - : &unit.name + a(href=format_args!("/status/{}", &unit.name)) { + : &unit.name + } } td { : format_args!("{} ({})", diff --git a/src/systemd/unit.rs b/src/systemd/unit.rs index 22752cb..116ffdb 100644 --- a/src/systemd/unit.rs +++ b/src/systemd/unit.rs @@ -60,10 +60,10 @@ fn test_make_unit() { assert_eq!(None, make_unit(info)); } -pub fn get_units() -> io::Result> { +pub fn get_units(filter: &str) -> io::Result> { let mut units = Vec::new(); let status = try!(Command::new("systemctl") - .args(&["show", "*"]).output()); + .args(&["show", filter]).output()); let mut unit_info = HashMap::new(); for line in String::from_utf8_lossy(&status.stdout).split('\n') { -- cgit v1.2.3