36auto main(
int argc,
char** argv) ->
int
38 auto cli_args = CLI::App{
"SRS system command line interface" };
41 argv = cli_args.ensure_utf8(argv);
45 auto spdlog_level = spdlog::level::info;
47 auto output_filenames = std::vector<std::string>{
"" };
48 auto is_version_print =
false;
49 auto is_root_version_print =
false;
50 auto is_dump_needed =
false;
51 auto n_output_split = 1;
52 const auto home_dir = []() -> std::string
54 const auto* home_var = getenv(
"HOME");
55 if (home_var !=
nullptr)
57 return std::string{ home_var };
61 auto json_filepath = home_dir.empty() ?
"" : std::format(
"{}/.config/srs-control/config.json", getenv(
"HOME"));
63 auto dump_config_callback = [&json_filepath, &is_dump_needed](
const std::string& filename)
65 is_dump_needed =
true;
66 json_filepath = filename;
68 cli_args.add_flag(
"-v, --version", is_version_print,
"Show the current version");
69 cli_args.add_flag(
"--root-version", is_root_version_print,
"Show the ROOT version if used");
75 fmt::format(
"Set the action of program\nAvailable options: [{}]", fmt::join(
ACTION_MODE_NAMES,
", ")))
76 ->transform(CLI::CheckedTransformer(
action_mode_map, CLI::ignore_case).description(
""))
80 .add_option(
"-l, --log-level",
82 fmt::format(
"Set log level\nAvailable options: [{}]", fmt::join(
SPDLOG_LOG_NAMES,
", ")))
83 ->transform(CLI::CheckedTransformer(
spdlog_map, CLI::ignore_case).description(
""))
87 .add_option(
"-p, --print-mode",
89 fmt::format(
"Set data print mode\nAvailable options: [{}]", fmt::join(
PRINT_MODE_NAMES,
", ")))
90 ->transform(CLI::CheckedTransformer(
print_mode_map, CLI::ignore_case).description(
""))
93 cli_args.add_option(
"-c, --config-file", json_filepath,
"Set the path of the JSON config file")
94 ->capture_default_str();
95 cli_args.add_option(
"-s, --split-output", n_output_split,
"Splitting the output data into different files.")
96 ->capture_default_str();
98 .add_option_function<std::string>(
99 "--dump-config", dump_config_callback,
"Dump default configuration to the file")
100 ->default_val(json_filepath)
101 ->run_callback_for_default()
104 cli_args.add_option(
"-o, --output-files", output_filenames,
"Set output file (or socket) names")
105 ->capture_default_str()
107 cli_args.parse(argc, argv);
109 if (is_version_print)
111 std::println(
"{}", SRS_PROJECT_VERSION);
121 if (is_root_version_print)
124 std::println(
"{}", gROOT->GetVersion());
126 std::println(
"ROOT is not built");
131 spdlog::set_level(spdlog_level);
136 app.set_options(std::move(app_config));
137 app.set_print_mode(print_mode);
138 app.set_output_filenames(output_filenames, n_output_split);
142 switch (action_mode_enum)
147 app.start_workflow();
150 app.wait_for_workflow();
166 app.start_workflow();
168 app.wait_for_workflow();
177 catch (
const CLI::ParseError& e)
181 catch (std::exception& ex)
183 spdlog::critical(
"Exception occurred: {}", ex.what());
187 spdlog::critical(
"A unrecognized exception occurred!");
constexpr auto ACTION_MODE_NAMES
const auto action_mode_map
constexpr auto get_enum_dashed_names()
constexpr auto PRINT_MODE_NAMES
constexpr auto get_enum_dashed_name()
const auto print_mode_map
auto main(int argc, char **argv) -> int
constexpr auto get_enum_dash_map()
constexpr auto SPDLOG_LOG_NAMES