blob: b2683aa9c2d8d52ebd62ad236ba7cc1995535b33 [file] [log] [blame]
// Copyright 2020 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
mod socket_rpc;
mod storage;
use std::env;
use std::process::exit;
use getopts::Options;
use libsirenia::cli::HelpOption;
use libsirenia::linux::events::EventMultiplexer;
use sys_util::{error, info, syslog};
use socket_rpc::register_socket_rpc;
use storage::initialize_storage;
fn get_usage() -> String {
"cronista".to_string()
}
fn main() {
// Set up command line arguments.
let mut opts = Options::new();
let help_opt = HelpOption::new(&mut opts);
let socket_rpc_cli = socket_rpc::CliConfigGenerator::new(&mut opts);
// Parse command line arguments and perform initialization.
let args: Vec<String> = env::args().collect();
let matches = help_opt.parse_and_check_self(&opts, &args, get_usage);
syslog::init().unwrap();
info!("starting cronista");
initialize_storage().unwrap();
let mut ctx = EventMultiplexer::new().unwrap();
// Initialize and register event handlers.
let listen_addr = register_socket_rpc(
&socket_rpc_cli
.generate_config(&matches)
.unwrap_or_else(|e| -> socket_rpc::Config {
eprintln!("{}", e);
opts.usage(&get_usage());
exit(1)
}),
&mut ctx,
)
.unwrap();
if let Some(addr) = listen_addr {
info!("waiting for connection at: {}", addr);
} else {
info!("waiting for connection");
}
// Main loop.
info!("initialization complete");
while !ctx.is_empty() {
if let Err(e) = ctx.run_once() {
error!("{}", e);
};
}
}