2026-01-23 11:00:24 -05:00
|
|
|
use crate::settings::CONFIG;
|
2026-02-17 09:34:22 -05:00
|
|
|
use log::{LevelFilter, info};
|
2026-01-21 15:36:27 -05:00
|
|
|
|
2026-01-19 19:03:08 -05:00
|
|
|
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;
|
2026-02-17 09:34:22 -05:00
|
|
|
mod scanner;
|
2026-01-21 15:36:27 -05:00
|
|
|
mod settings;
|
2026-02-17 09:34:22 -05:00
|
|
|
mod web_server;
|
2026-01-13 07:57:47 -05:00
|
|
|
|
2026-01-13 15:48:17 -05:00
|
|
|
#[tokio::main]
|
2026-01-21 10:30:37 -05:00
|
|
|
async fn main() -> Result<(), String> {
|
2026-01-21 15:36:27 -05:00
|
|
|
// Initialize logging
|
|
|
|
|
let log_level = match CONFIG.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
|
2026-01-14 09:53:01 -05:00
|
|
|
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?;
|
|
|
|
|
|
2026-02-17 09:34:22 -05:00
|
|
|
// 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
|
|
|
}
|