Files
oott/backend/src/main.rs
T

61 lines
1.5 KiB
Rust
Raw Normal View History

use crate::settings::get_settings;
use clap::Parser;
use log::{LevelFilter, info};
mod db;
2026-01-13 07:57:47 -05:00
mod device_finders;
2026-01-21 11:09:58 -05:00
mod events;
2026-01-19 12:45:52 -05:00
mod mac_vendor_finder;
2026-02-14 12:30:12 -05:00
mod model;
mod scanner;
mod settings;
mod web_server;
2026-01-13 07:57:47 -05:00
2026-02-17 19:34:26 -05:00
#[cfg(test)]
mod tests_common;
// Command line parameters
#[derive(Parser, Debug)]
#[command(version, about, long_about = None)]
struct Args {
/// Config file path
#[arg(short, long)]
config: Option<String>,
}
2026-01-13 15:48:17 -05:00
#[tokio::main]
async fn main() -> Result<(), String> {
// Parse command line parameters and init settings
// this is not thread safe so it needs to run just once
let args = Args::parse();
let config_path = args
.config
.unwrap_or(settings::DEFAULT_CONFIG_FILE_PATH.to_string());
settings::init(config_path);
// Initialize logging
let log_level = match get_settings().log.level.as_str() {
"off" => LevelFilter::Off,
"error" => LevelFilter::Error,
"warn" => LevelFilter::Warn,
"info" => LevelFilter::Info,
"debug" => LevelFilter::Debug,
"trace" => LevelFilter::Trace,
_ => LevelFilter::Error,
};
env_logger::Builder::new()
.filter(None, log_level)
.write_style(env_logger::WriteStyle::Always)
.init();
// Now onto the important stuff
info!("Starting up oott");
2026-01-13 07:57:47 -05:00
2026-02-17 15:20:47 -05:00
// Initialize database
db::init_db().await?;
// Start the device scanner and web server (for API and UI) in parallel
tokio::join!(scanner::scan(), web_server::serve()).0
2026-01-13 07:57:47 -05:00
}