You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
3.4 KiB
123 lines
3.4 KiB
use structopt::StructOpt; |
|
use u_lib::{ |
|
api::ClientHandler, |
|
models::JobMeta |
|
}; |
|
use std::path::PathBuf; |
|
use uuid::Uuid; |
|
|
|
const DELIM: &'static str = "*************\n"; |
|
|
|
#[derive(StructOpt, Debug)] |
|
struct Args { |
|
#[structopt(subcommand)] |
|
cmd: Cmd |
|
} |
|
|
|
#[derive(StructOpt, Debug)] |
|
enum Cmd { |
|
Agents(LD), |
|
Jobs(JobALD), |
|
Jobmap(JmALD) |
|
} |
|
|
|
#[derive(StructOpt, Debug)] |
|
enum JobALD { |
|
Add { |
|
#[structopt(long, parse(try_from_str = parse_uuid))] |
|
agent: Option<Uuid>, |
|
|
|
#[structopt(subcommand)] |
|
cmd: JobCmd |
|
}, |
|
#[structopt(flatten)] |
|
LD(LD) |
|
} |
|
|
|
#[derive(StructOpt, Debug)] |
|
enum JobCmd { |
|
#[structopt(external_subcommand)] |
|
Cmd(Vec<String>) |
|
} |
|
|
|
#[derive(StructOpt, Debug)] |
|
enum JmALD { |
|
Add { |
|
#[structopt(parse(try_from_str = parse_uuid))] |
|
agent_uid: Uuid, |
|
|
|
#[structopt(parse(try_from_str = parse_uuid))] |
|
job_uids: Vec<Uuid> |
|
}, |
|
List { |
|
#[structopt(parse(try_from_str = parse_uuid))] |
|
uid: Option<Uuid>, |
|
|
|
#[structopt(short, long)] |
|
results: bool |
|
}, |
|
Delete { |
|
#[structopt(parse(try_from_str = parse_uuid))] |
|
uid: Uuid |
|
} |
|
} |
|
|
|
#[derive(StructOpt, Debug)] |
|
enum LD { |
|
List { |
|
#[structopt(parse(try_from_str = parse_uuid))] |
|
uid: Option<Uuid>, |
|
}, |
|
Delete { |
|
#[structopt(parse(try_from_str = parse_uuid))] |
|
uid: Uuid |
|
} |
|
} |
|
|
|
fn parse_uuid(src: &str) -> Result<Uuid, String> { |
|
Uuid::parse_str(src).map_err(|e| e.to_string()) |
|
} |
|
|
|
#[tokio::main] |
|
async fn main() -> Result<(), &'static str> { |
|
let args: Args = Args::from_args(); |
|
let cli_handler = ClientHandler::new(None) |
|
.password("123qwe".to_string()); |
|
match args.cmd { |
|
Cmd::Agents(action) => match action { |
|
LD::List {uid} => cli_handler.get_agents(uid.as_ref()) |
|
.await.unwrap().into_iter().for_each(|r| println!("{}{}", DELIM, r)), |
|
LD::Delete {uid} => { |
|
println!("{}", cli_handler.del(Some(&uid)).await.unwrap()); |
|
} |
|
}, |
|
Cmd::Jobs(action) => match action { |
|
JobALD::Add {cmd: JobCmd::Cmd(cmd), agent} => { |
|
let job = JobMeta::from_shell(cmd.join(" ")); |
|
let job_uid = job.id; |
|
cli_handler.upload_jobs(&vec![job]).await.unwrap(); |
|
if agent.is_some() { |
|
cli_handler.set_jobs(&vec![job_uid], agent.as_ref()).await.unwrap() |
|
} |
|
}, |
|
JobALD::LD(LD::List {uid}) => cli_handler.get_jobs(uid.as_ref()) |
|
.await.unwrap().into_iter().for_each(|r| println!("{}{}", DELIM, r)), |
|
JobALD::LD(LD::Delete {uid}) => { |
|
println!("{}", cli_handler.del(Some(&uid)).await.unwrap()) |
|
} |
|
} |
|
Cmd::Jobmap(action) => match action { |
|
JmALD::Add {agent_uid, job_uids} => cli_handler.set_jobs(&job_uids, Some(&agent_uid)) |
|
.await.unwrap(), |
|
JmALD::List {uid, results} => if results { |
|
cli_handler.get_results(uid.as_ref()) |
|
.await.unwrap().into_iter().for_each(|r| println!("{}{}", DELIM, r)) |
|
} else { |
|
cli_handler.get_agent_jobs(uid.as_ref()) |
|
.await.unwrap().into_iter().for_each(|r| println!("{}{}", DELIM, r)) |
|
}, |
|
JmALD::Delete {uid} => println!("{}", cli_handler.del(Some(&uid)).await.unwrap()) |
|
} |
|
} |
|
Ok(()) |
|
}
|
|
|