fn real_main()

in below/src/main.rs [536:758]


fn real_main(init: init::InitToken) {
    let opts = Opt::parse();
    let debug = opts.debug;
    config::BELOW_CONFIG
        .set(match BelowConfig::load(&opts.config) {
            Ok(c) => c,
            Err(e) => {
                eprintln!("{:#}", e);
                exit(1);
            }
        })
        .expect("BELOW_CONFIG singleton set twice");
    let below_config = config::BELOW_CONFIG
        .get()
        .expect("BELOW_CONFIG empty after set");

    // Use live mode as default
    let cmd = opts.cmd.as_ref().unwrap_or(&Command::Live {
        interval_s: 5,
        host: None,
        port: None,
    });
    let rc = match cmd {
        Command::External(command) => commands::run_command(init, debug, below_config, command),
        Command::Live {
            ref interval_s,
            ref host,
            ref port,
        } => {
            let host = host.clone();
            let port = port.clone();
            run(
                init,
                debug,
                below_config,
                Service::Off,
                RedirectLogOnFail::On,
                |_, below_config, logger, errs| {
                    live(
                        logger,
                        errs,
                        Duration::from_secs(*interval_s as u64),
                        debug,
                        below_config,
                        host,
                        port,
                    )
                },
            )
        }
        Command::Record {
            ref interval_s,
            ref retain_for_s,
            ref store_size_limit,
            ref collect_io_stat,
            ref port,
            ref skew_detection_threshold_ms,
            ref disable_disk_stat,
            ref disable_exitstats,
            ref enable_gpu_stats,
            ref compress_opts,
        } => {
            logutil::set_current_log_target(logutil::TargetLog::Term);
            run(
                init,
                debug,
                below_config,
                Service::On(*port),
                RedirectLogOnFail::Off,
                |init, below_config, logger, errs| {
                    record(
                        init,
                        logger,
                        errs,
                        Duration::from_secs(*interval_s as u64),
                        below_config,
                        retain_for_s.map(|r| Duration::from_secs(r as u64)),
                        *store_size_limit,
                        *collect_io_stat,
                        Duration::from_millis(*skew_detection_threshold_ms),
                        debug,
                        *disable_disk_stat,
                        *disable_exitstats,
                        *enable_gpu_stats,
                        compress_opts,
                    )
                },
            )
        }
        Command::Replay {
            ref time,
            ref host,
            ref port,
            ref yesterdays,
            ref snapshot,
        } => {
            let time = time.clone();
            let host = host.clone();
            let port = port.clone();
            let days_adjuster = yesterdays.clone();
            let snapshot = snapshot.clone();
            run(
                init,
                debug,
                below_config,
                Service::Off,
                RedirectLogOnFail::Off,
                |_, below_config, logger, errs| {
                    replay(
                        logger,
                        errs,
                        time,
                        below_config,
                        host,
                        port,
                        days_adjuster,
                        snapshot,
                    )
                },
            )
        }
        Command::Snapshot {
            ref begin,
            ref end,
            ref host,
            ref port,
        } => {
            let begin = begin.clone();
            let end = end.clone();
            let host = host.clone();
            let port = port.clone();
            run(
                init,
                debug,
                below_config,
                Service::Off,
                RedirectLogOnFail::Off,
                |_, below_config, logger, _errs| {
                    snapshot(logger, below_config, begin, end, host, port)
                },
            )
        }
        Command::Debug { ref cmd } => match cmd {
            DebugCommand::DumpStore { ref time, ref json } => {
                let time = time.clone();
                let json = json.clone();
                run(
                    init,
                    debug,
                    below_config,
                    Service::Off,
                    RedirectLogOnFail::Off,
                    |_, below_config, logger, _errs| dump_store(logger, time, below_config, json),
                )
            }
            DebugCommand::ConvertStore {
                ref start_time,
                ref end_time,
                ref from_store_dir,
                ref to_store_dir,
                ref host,
                ref port,
                ref compress_opts,
            } => {
                let start_time = start_time.clone();
                let end_time = end_time.clone();
                let from_store_dir = from_store_dir.clone();
                let to_store_dir = to_store_dir.clone();
                let host = host.clone();
                let port = port.clone();
                run(
                    init,
                    debug,
                    below_config,
                    Service::Off,
                    RedirectLogOnFail::Off,
                    |_, below_config, logger, _errs| {
                        convert_store(
                            logger,
                            below_config,
                            start_time,
                            end_time,
                            from_store_dir,
                            to_store_dir,
                            host,
                            port,
                            compress_opts,
                        )
                    },
                )
            }
        },
        Command::Dump {
            ref host,
            ref port,
            ref cmd,
        } => {
            let store_dir = below_config.store_dir.clone();
            let host = host.clone();
            let port = port.clone();
            let cmd = cmd.clone();
            run(
                init,
                debug,
                below_config,
                Service::Off,
                RedirectLogOnFail::Off,
                |_, _below_config, logger, errs| {
                    dump::run(logger, errs, store_dir, host, port, cmd)
                },
            )
        }
        Command::GenerateCompletions {
            ref shell,
            ref output,
        } => {
            generate_completions(shell.clone(), output.clone())
                .unwrap_or_else(|_| panic!("Failed to generate completions for {:?}", shell));
            0
        }
    };
    exit(rc);
}