]> git.proxmox.com Git - proxmox-backup.git/blob - src/client/task_log.rs
switch from failure to anyhow
[proxmox-backup.git] / src / client / task_log.rs
1 use anyhow::{bail, Error};
2 use serde_json::json;
3
4 use super::HttpClient;
5
6 pub async fn display_task_log(
7 client: HttpClient,
8 upid_str: &str,
9 strip_date: bool,
10 ) -> Result<(), Error> {
11
12 let path = format!("api2/json/nodes/localhost/tasks/{}/log", upid_str);
13
14 let mut start = 1;
15 let limit = 500;
16
17 loop {
18 let param = json!({ "start": start, "limit": limit, "test-status": true });
19 let result = client.get(&path, Some(param)).await?;
20
21 let active = result["active"].as_bool().unwrap();
22 let total = result["total"].as_u64().unwrap();
23 let data = result["data"].as_array().unwrap();
24
25 let lines = data.len();
26
27 for item in data {
28 let n = item["n"].as_u64().unwrap();
29 let t = item["t"].as_str().unwrap();
30 if n != start { bail!("got wrong line number in response data ({} != {}", n, start); }
31 if strip_date && t.len() > 27 && &t[25..27] == ": " {
32 let line = &t[27..];
33 println!("{}", line);
34 } else {
35 println!("{}", t);
36 }
37 start += 1;
38 }
39
40 if start > total {
41 if active {
42 std::thread::sleep(std::time::Duration::from_millis(1000));
43 } else {
44 break;
45 }
46 } else {
47 if lines != limit { bail!("got wrong number of lines from server ({} != {})", lines, limit); }
48 }
49 }
50
51 Ok(())
52 }