mirror of
https://github.com/Xevion/banner.git
synced 2026-01-31 04:23:34 -06:00
72 lines
1.6 KiB
Rust
72 lines
1.6 KiB
Rust
use crate::app::App;
|
|
use crate::cli::{Args, ServiceName};
|
|
use crate::logging::setup_logging;
|
|
use clap::Parser;
|
|
use std::process::ExitCode;
|
|
use tracing::info;
|
|
|
|
mod app;
|
|
mod banner;
|
|
mod bot;
|
|
mod cli;
|
|
mod config;
|
|
mod data;
|
|
mod error;
|
|
mod formatter;
|
|
mod logging;
|
|
mod rmp;
|
|
mod scraper;
|
|
mod services;
|
|
mod signals;
|
|
mod state;
|
|
mod status;
|
|
mod web;
|
|
|
|
#[tokio::main]
|
|
async fn main() -> ExitCode {
|
|
dotenvy::dotenv().ok();
|
|
|
|
// Parse CLI arguments
|
|
let args = Args::parse();
|
|
|
|
// Always run all services
|
|
let enabled_services = ServiceName::all();
|
|
|
|
// Create and initialize the application
|
|
let mut app = App::new().await.expect("Failed to initialize application");
|
|
|
|
// Setup logging — must happen before any info!() calls to avoid silently dropped logs
|
|
setup_logging(app.config(), args.tracing);
|
|
|
|
info!(
|
|
enabled_services = ?enabled_services,
|
|
"services configuration loaded"
|
|
);
|
|
|
|
// Log application startup context
|
|
info!(
|
|
version = env!("CARGO_PKG_VERSION"),
|
|
environment = if cfg!(debug_assertions) {
|
|
"development"
|
|
} else {
|
|
"production"
|
|
},
|
|
"starting banner"
|
|
);
|
|
|
|
// Setup services (web, scraper)
|
|
app.setup_services(&enabled_services)
|
|
.expect("Failed to setup services");
|
|
|
|
// Setup bot service if enabled
|
|
if enabled_services.contains(&ServiceName::Bot) {
|
|
app.setup_bot_service()
|
|
.await
|
|
.expect("Failed to setup bot service");
|
|
}
|
|
|
|
// Start all services and run the application
|
|
app.start_services();
|
|
app.run().await
|
|
}
|