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
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)
|
|
}
|