$status = -1;
$elapsed = microtime(true);
try {
    $config = dirname(__FILE__) . "/logmon.conf.php";
    $requiredConfigs = array($config);
    CheckConfig::configs($requiredConfigs);
    require_once $config;
    $requiredExtensions = array("mbstring", "pcre", "PDO");
    CheckConfig::extensions($requiredExtensions);
    mb_internal_encoding("UTF-8");
    Options::setDebug(DEBUG || array_search("--debug", $argv));
    Options::setPretend(array_search("--pretend", $argv));
    Options::setVerbose(Options::debug() || Options::pretend() || array_search("--verbose", $argv));
    Log::open(__FILE__, true, Options::verbose(), Options::debug());
    Log::notice(sprintf("Running '%s'...", implode(" ", $argv)));
    $monitor = Monitor::create(dirname(__FILE__) . "/monitor");
    if ($monitor !== false) {
        $sources = $monitor->getEnabledSources();
        $dbh = new DBH(DBDSN, DBUSER, DBPASS);
        $processor = new Processor($dbh);
        foreach ($sources as $source) {
            $processor->process($monitor, $source);
        }
        $processor->discard(EVENT_DISCARD_THRESHOLD);
        $status = 0;
    } else {
        $status = 1;
    }
} catch (Exception $e) {
    Log::err(sprintf("Log file processing failed with exception: %s\nDetails: %s", $e->getMessage(), $e));
    $status = 1;