agent_procs/cli/
status.rs1use crate::protocol::{Request, Response, ProcessState};
2
3pub async fn execute(session: &str, json: bool) -> i32 {
4 let req = Request::Status;
5 match crate::cli::request(session, &req, false).await {
6 Ok(Response::Status { processes }) => {
7 if json {
8 println!("{}", serde_json::to_string_pretty(&processes).unwrap());
9 } else {
10 println!("{:<12} {:<8} {:<10} {:<6} UPTIME", "NAME", "PID", "STATE", "EXIT");
11 for p in &processes {
12 let state = match p.state { ProcessState::Running => "running", ProcessState::Exited => "exited" };
13 let exit = p.exit_code.map(|c| c.to_string()).unwrap_or("-".into());
14 let uptime = p.uptime_secs.map(format_uptime).unwrap_or("-".into());
15 println!("{:<12} {:<8} {:<10} {:<6} {}", p.name, p.pid, state, exit, uptime);
16 }
17 }
18 0
19 }
20 Ok(Response::Error { code, message }) => { eprintln!("error: {}", message); code }
21 _ => 1,
22 }
23}
24
25fn format_uptime(secs: u64) -> String {
26 if secs < 60 { format!("{}s", secs) }
27 else if secs < 3600 { format!("{}m{}s", secs / 60, secs % 60) }
28 else { format!("{}h{}m", secs / 3600, (secs % 3600) / 60) }
29}