dashboard for your PDS
at main 1.2 kB view raw
1use std::{net::SocketAddr, sync::Arc}; 2 3use tracing::Level; 4use tracing_subscriber::EnvFilter; 5 6use crate::state::AppState; 7 8pub mod router; 9pub mod state; 10pub mod templates; 11 12#[tokio::main] 13async fn main() { 14 tracing_subscriber::fmt::fmt() 15 .with_env_filter( 16 EnvFilter::builder() 17 .with_default_directive(Level::INFO.into()) 18 .from_env_lossy(), 19 ) 20 .compact() 21 .init(); 22 23 let addr = SocketAddr::from(( 24 [0, 0, 0, 0], 25 std::env::var("PORT") 26 .ok() 27 .and_then(|s| s.parse::<u16>().ok()) 28 .unwrap_or(3713), 29 )); 30 let listener = tokio::net::TcpListener::bind(addr).await.unwrap(); 31 32 let state = Arc::new(AppState::new()); 33 let app = router::build(state); 34 35 tracing::info!("hi! serving on {addr}... (^_^)"); 36 tokio::select! { 37 res = axum::serve(listener, app) => { 38 if let Err(e) = res { 39 tracing::error!("oops: serve failed: {e}! (@,@)"); 40 } 41 } 42 _ = tokio::signal::ctrl_c() => { 43 tracing::info!("received ctrl-c! bye bye... (T.T)/"); 44 } 45 } 46}