diff --git a/Cargo.lock b/Cargo.lock index d68cc18..592bba6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -13,6 +13,7 @@ dependencies = [ "flate2", "futures-util", "indicatif", + "lazy_static", "reqwest", "serde", "serde_json", diff --git a/Cargo.toml b/Cargo.toml index 33adca6..00ab73c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,6 +23,7 @@ reqwest = { version = "0.12.19", features = ["stream", "gzip"] } flate2 = "1.1.1" chrono = "0.4.44" blake3 = { version = "1.8.3", features = ["rayon"] } +lazy_static = "1.5.0" [profile.release] strip = true diff --git a/src/main.rs b/src/main.rs index 0476b8c..d13b61f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,12 +7,14 @@ mod scanning; use clap::Parser; use config::load_config; +use lazy_static::lazy_static; use sqlx::ConnectOptions; use sqlx::postgres::{PgConnectOptions, PgPoolOptions}; use std::time::Duration; use tracing::error; use tracing::log::LevelFilter; +use crate::config::Config; use crate::database::Database; use crate::scanning::rescanner::{Rescanner, ServerRescanPriority}; @@ -38,26 +40,31 @@ pub enum Mode { Rescanner, } +lazy_static! { + static ref CONFIG: Config = { + match load_config(&Args::parse().config_file) { + Ok(config) => config, + Err(e) => { + error!("Fatal error loading config file: {}", e); + std::process::exit(1); + } + } + }; +} + #[tokio::main] async fn main() { tracing_subscriber::fmt::init(); let arguments = Args::parse(); - let config = match load_config(&arguments.config_file) { - Ok(config) => config, - Err(e) => { - error!("Fatal error loading config file: {}", e); - std::process::exit(1); - } - }; // Credentials for database let options = PgConnectOptions::new() - .username(&config.database.user) - .password(&config.database.password) - .host(&config.database.host) - .port(config.database.port) - .database(&config.database.table) + .username(&CONFIG.database.user) + .password(&CONFIG.database.password) + .host(&CONFIG.database.host) + .port(CONFIG.database.port) + .database(&CONFIG.database.table) .log_slow_statements(LevelFilter::Off, Duration::from_secs(60)); // Connect to the database with options @@ -69,6 +76,7 @@ async fn main() { .await .expect("Failed to connect to database!"); + // Run migrations to setup database sqlx::migrate!("./migrations") .run(&pool) .await