You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

60 lines
1.1 KiB

mod app;
mod apps;
mod config;
mod logger;
mod proc;
mod result;
mod run;
use std::path::PathBuf;
use log::{info, error};
use apps::Apps;
use config::Config;
use proc::Proc;
use result::Result;
use run::run;
fn main() {
// config comes from command line arguments
let config = Config::from_args();
// logger must be initialized because we use it a bunch
if let Err(e) = logger::setup(config.log_file, config.log_level) {
println!("FATAL: Error initializing logger: {:?}", e);
std::process::exit(1);
}
// apps_file is where the applications to start are configured
let mut apps_file = config.config_directory.clone();
apps_file.push("apps.toml");
// start the apps
match startup(apps_file) {
Ok(p) => {
info!("shutting down");
for mut proc in p {
proc.stop();
}
}
Err(e) => {
error!("FATAL: {:?}", e);
std::process::exit(1);
}
};
}
/// Load the apps file and start the apps
fn startup(apps_file: PathBuf) -> Result<Vec<Proc>> {
let apps = Apps::load(apps_file)?;
// start all the apps
let (procs, holds, poll) = apps.start();
// wait for events
let procs = run(procs, holds, poll)?;
Ok(procs)
}