Skip to main content

agent_procs/cli/
status.rs

1use 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}