api2/node/syslog.rs: improve error handling
This commit is contained in:
parent
0441886842
commit
e182ab4a4a
|
@ -18,11 +18,11 @@ fn dump_journal(
|
||||||
service: Option<&str>,
|
service: Option<&str>,
|
||||||
) -> Result<(u64, Vec<Value>), Error> {
|
) -> Result<(u64, Vec<Value>), Error> {
|
||||||
|
|
||||||
let mut args = vec!["-o", "short", "--no-pager"];
|
let mut args = vec!["-o", "short", "--no-pagera"];
|
||||||
|
|
||||||
if let Some(service) = service { args.push("--unit"); args.push(service); }
|
if let Some(service) = service { args.extend(&["--unit", service]); }
|
||||||
if let Some(since) = since { args.push("--since"); args.push(since); }
|
if let Some(since) = since { args.extend(&["--since", since]); }
|
||||||
if let Some(until) = until { args.push("--until"); args.push(until); }
|
if let Some(until) = until { args.extend(&["--until", until]); }
|
||||||
|
|
||||||
let mut lines: Vec<Value> = vec![];
|
let mut lines: Vec<Value> = vec![];
|
||||||
let mut limit = limit.unwrap_or(50);
|
let mut limit = limit.unwrap_or(50);
|
||||||
|
@ -38,18 +38,29 @@ fn dump_journal(
|
||||||
|
|
||||||
if let Some(ref mut stdout) = child.stdout {
|
if let Some(ref mut stdout) = child.stdout {
|
||||||
for line in BufReader::new(stdout).lines() {
|
for line in BufReader::new(stdout).lines() {
|
||||||
count += 1;
|
match line {
|
||||||
if count < start { continue };
|
Ok(line) => {
|
||||||
if limit <= 0 { continue };
|
count += 1;
|
||||||
|
if count < start { continue };
|
||||||
|
if limit <= 0 { continue };
|
||||||
|
|
||||||
let line = line?; // fixme: nom utf8??
|
lines.push(json!({ "n": count, "t": line }));
|
||||||
lines.push(json!({ "n": count, "t": line }));
|
|
||||||
|
|
||||||
limit -= 1;
|
limit -= 1;
|
||||||
|
}
|
||||||
|
Err(err) => {
|
||||||
|
eprintln!("reading journal failed: {}", err);
|
||||||
|
let _ = child.kill();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let status = child.wait()?; // fixme: check status
|
let status = child.wait().unwrap();
|
||||||
|
if !status.success() {
|
||||||
|
eprintln!("journalctl failed with {}", status);
|
||||||
|
}
|
||||||
|
|
||||||
// HACK: ExtJS store.guaranteeRange() does not like empty array
|
// HACK: ExtJS store.guaranteeRange() does not like empty array
|
||||||
// so we add a line
|
// so we add a line
|
||||||
|
@ -68,7 +79,7 @@ fn get_syslog(param: Value, _info: &ApiMethod) -> Result<Value, Error> {
|
||||||
param["limit"].as_u64(),
|
param["limit"].as_u64(),
|
||||||
param["since"].as_str(),
|
param["since"].as_str(),
|
||||||
param["until"].as_str(),
|
param["until"].as_str(),
|
||||||
param["service"].as_str());
|
param["service"].as_str())?;
|
||||||
|
|
||||||
//fixme: $restenv->set_result_attrib('total', $count);
|
//fixme: $restenv->set_result_attrib('total', $count);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue