1use falcorn_sdk::ControlClient;
2use falcorn_sdk::proto::control::DEFAULT_CONTROL_SOCKET;
3use std::env;
4
5fn main() -> Result<(), Box<dyn std::error::Error>> {
6 let mut args = env::args().skip(1);
7 let action = args.next().unwrap_or_else(|| "status".to_string());
8
9 let socket =
10 env::var("FALCORN_CONTROL_SOCKET").unwrap_or_else(|_| DEFAULT_CONTROL_SOCKET.to_string());
11 let token = env::var("FALCORN_CONTROL_TOKEN").ok();
12 let client_name = env::var("FALCORN_CONTROL_CLIENT").ok();
13
14 let mut builder = ControlClient::builder(socket);
15 if let Some(token) = token {
16 builder = builder.auth_token(token);
17 }
18 if let Some(client_name) = client_name {
19 builder = builder.client_name(client_name);
20 }
21
22 let mut client = builder.connect()?;
23
24 match action.as_str() {
25 "status" => {
26 let status = client.get_status()?;
27 println!("{:#?}", status);
28 }
29 "workers" => {
30 let workers = client.get_workers()?;
31 println!("{:#?}", workers);
32 }
33 "show-config" => {
34 let config = client.show_config()?;
35 println!("{}", config);
36 }
37 "scale" => {
38 let workers = args
39 .next()
40 .ok_or("scale requires worker count")?
41 .parse::<usize>()?;
42 let message = client.scale_to(workers)?;
43 println!("{}", message);
44 }
45 "restart" => {
46 let id = args.next().and_then(|value| value.parse::<u32>().ok());
47 let force = args.any(|value| value == "--force");
48 let message = client.restart_worker(id, !force)?;
49 println!("{}", message);
50 }
51 "shutdown" => {
52 let force = args.any(|value| value == "--force");
53 let message = client.shutdown(!force)?;
54 println!("{}", message);
55 }
56 "reload" => {
57 let mut path = None;
58 let mut rolling = true;
59 for value in args {
60 if value == "--no-rolling" {
61 rolling = false;
62 } else if value.starts_with("--path=") {
63 path = value.split('=').nth(1).map(|s| s.to_string());
64 } else if path.is_none() {
65 path = Some(value);
66 }
67 }
68 let message = client.reload_config(path, rolling)?;
69 println!("{}", message);
70 }
71 other => {
72 eprintln!(
73 "Unknown action: {} (use status|workers|show-config|scale|restart|shutdown|reload)",
74 other
75 );
76 }
77 }
78
79 Ok(())
80}