| use axum::{routing::{get, post}, Router}; |
| use tower_http::{cors::CorsLayer, trace::TraceLayer}; |
| use tracing_subscriber::EnvFilter; |
|
|
| use rustvital_amd::{handlers, state::AppState}; |
|
|
| #[tokio::main] |
| async fn main() -> anyhow::Result<()> { |
| dotenvy::dotenv().ok(); |
|
|
| tracing_subscriber::fmt() |
| .json() |
| .with_env_filter(EnvFilter::from_default_env()) |
| .with_current_span(true) |
| .with_span_events(tracing_subscriber::fmt::format::FmtSpan::CLOSE) |
| .init(); |
|
|
| let state = AppState::from_env()?; |
| let port = std::env::var("PORT").unwrap_or_else(|_| "7860".to_string()); |
| let addr = format!("0.0.0.0:{port}"); |
| tracing::info!("starting RustVital-AMD on {}", addr); |
|
|
| let app = Router::new() |
| .route("/", get(handlers::index)) |
| .route("/health", get(handlers::health)) |
| .route("/status", get(handlers::status)) |
| .route("/dashboard", get(handlers::dashboard)) |
| .route("/history", get(handlers::history_json)) |
| .route("/triage", post(handlers::triage_json)) |
| .route("/triage/html", post(handlers::triage_html)) |
| .route("/triage/stream", get(handlers::triage_stream)) |
| .route("/agents/status", get(handlers::agents_ws)) |
| .route("/dicom/redact", post(handlers::dicom_redact)) |
| .route("/medical/enrich", get(handlers::enrich_medical)) |
| .route("/trigger-federated-tune", post(handlers::trigger_federated_tune)) |
| .route("/federation/round", get(handlers::federation_round)) |
| .with_state(state) |
| .layer(CorsLayer::permissive()) |
| .layer(TraceLayer::new_for_http()); |
|
|
| let listener = tokio::net::TcpListener::bind(&addr).await?; |
| axum::serve(listener, app).await?; |
| Ok(()) |
| } |
|
|