use arcbox_cli::client::{self, ContainerSummary};
use anyhow::Result;
use clap::Args;
#[derive(Args)]
pub struct PsArgs {
#[arg(short, long)]
pub all: bool,
#[arg(short, long)]
pub quiet: bool,
#[arg(short, long)]
pub size: bool,
}
pub async fn execute(args: PsArgs) -> Result<()> {
let daemon = client::get_client().await?;
let path = if args.all {
"/v1.43/containers/json?all=true"
} else {
"/v1.43/containers/json"
};
let containers: Vec<ContainerSummary> = daemon.get(path).await?;
if args.quiet {
for container in containers {
println!("{}", client::short_id(&container.id));
}
} else {
println!(
"{:<12} {:<20} {:<20} {:<15} {:<20}",
"CONTAINER ID", "IMAGE", "COMMAND", "STATUS", "NAMES"
);
for container in containers {
let names = container
.names
.first()
.map(|n| n.trim_start_matches('/'))
.unwrap_or("unknown");
println!(
"{:<12} {:<20} {:<20} {:<15} {:<20}",
client::short_id(&container.id),
client::truncate(&container.image, 20),
client::truncate(&container.command, 20),
container.status,
client::truncate(names, 20),
);
}
}
Ok(())
}