// src/main.rs use actix_web::{App, HttpServer, Responder, get}; use log::error; use std::env; use crate::hwinfo::PhysicalHost; mod hwinfo; mod local_presence; #[get("/inventory")] async fn inventory() -> impl Responder { log::info!("Received inventory request"); let host = PhysicalHost::gather(); match host { Ok(host) => { log::info!("Inventory data gathered successfully"); actix_web::HttpResponse::Ok().json(host) } Err(error) => { log::error!("Inventory data gathering FAILED"); actix_web::HttpResponse::InternalServerError().json(error) } } } #[actix_web::main] async fn main() -> std::io::Result<()> { env_logger::init(); let port = env::var("HARMONY_INVENTORY_AGENT_PORT").unwrap_or_else(|_| "8080".to_string()); let port = port .parse::() .expect(&format!("Invalid port number, cannot parse to u16 {port}")); let bind_addr = format!("0.0.0.0:{}", port); log::info!("Starting inventory agent on {}", bind_addr); if let Err(e) = local_presence::advertise(port) { error!("Could not start advertise local presence : {e}"); } HttpServer::new(|| App::new().service(inventory)) .bind(&bind_addr)? .run() .await }