1use colored::Colorize;
2use rocket::routes;
3
4pub mod routes;
5use routes::{index, instances};
6use routes::instances::AppManager;
7
8mod agent;
9use agent::Agent;
10
11
12
13const BANNER: &str = r#"
14 ____ __ __ _ _ _____ _____ ______ _ _ _______
15 / __ \| \/ | \ | |_ _| /\ / ____| ____| \ | |__ __|
16 | | | | \ / | \| | | | / \ | | __| |__ | \| | | |
17 | | | | |\/| | . ` | | | / /\ \| | |_ | __| | . ` | | |
18 | |__| | | | | |\ |_| |_ / ____ \ |__| | |____| |\ | | |
19 \____/|_| |_|_| \_|_____| /_/ \_\_____|______|_| \_| |_|
20 Version: {}
21"#;
22#[rocket::main]
23async fn main() -> Result<(), rocket::Error> {
24 println!("{}", BANNER.replace("{}", &env!("CARGO_PKG_VERSION")));
25 let agent = Agent::new("OmniAgent 1".to_string(), env!("CARGO_PKG_VERSION").to_string());
26 println!("+-----------------------------------------------------------------");
27 println!("| Selected UUID for agent: {}", agent.id().to_string().bright_green());
28 println!("| Agent name: {}", agent.name().bright_blue());
29 println!("+-----------------------------------------------------------------");
30
31 let routes = routes![
32 index:: index,
33 instances:: list_instances,
34 instances:: get_instance,
35 instances:: create_instance,
36 instances:: start_instance,
37 instances:: stop_instance,
38 instances:: restart_instance,
39 instances:: update_instance,
40 instances:: delete_instance,
41 instances:: list_images,
42 instances:: stream_events,
43 instances:: health_check,
44 instances:: get_instance_logs,
45 instances:: get_instance_stats,
46 instances:: pause_instance,
47 instances:: unpause_instance,
48 instances:: inspect_instance,
49 instances:: list_volumes,
50 instances:: create_volume,
51 instances:: delete_volume,
52 instances:: list_networks,
53 instances:: create_network,
54 instances:: delete_network,
55 instances:: connect_instance_to_network,
56 instances:: disconnect_instance_from_network,
57 instances:: get_agent_info
58
59 ];
60
61 let routes_clone = routes.clone();
62 let app_manager = match AppManager::new() {
63 Ok(manager) => manager,
64 Err(e) => {
65 eprintln!("Failed to initialize AppManager: {}", e);
66 std::process::exit(1);
67 }
68 };
69
70 let rocket_instance = rocket::build()
71 .mount("/", routes)
72 .configure(rocket::Config {
73 address: "0.0.0.0".parse().unwrap(),
74 ..rocket::Config::default()
75 })
76 .manage(routes_clone)
77 .manage(app_manager);
78
79 index::collect_routes(&rocket_instance);
81
82 let _server = rocket_instance.launch().await?;
84
85
86 Ok(())
87}