mirror of
https://github.com/rzuasti/oott.git
synced 2026-07-08 19:21:54 +02:00
61 lines
1.5 KiB
Rust
61 lines
1.5 KiB
Rust
use crate::settings::get_settings;
|
|
use clap::Parser;
|
|
use log::{LevelFilter, info};
|
|
|
|
mod db;
|
|
mod device_finders;
|
|
mod events;
|
|
mod mac_vendor_finder;
|
|
mod model;
|
|
mod scanner;
|
|
mod settings;
|
|
mod web_server;
|
|
|
|
#[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>,
|
|
}
|
|
|
|
#[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");
|
|
|
|
// 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
|
|
}
|