omni_agent/
main.rs

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    // Collect routes information before launch
80    index::collect_routes(&rocket_instance);
81    
82    // Launch the server
83    let _server = rocket_instance.launch().await?;
84    
85
86    Ok(())
87}