|
1 | 1 | #include <algorithm> |
2 | | -#include <args.hxx> |
3 | 2 | #include <array> |
4 | 3 | #include <cstdio> |
5 | 4 | #include <cstring> |
@@ -39,6 +38,7 @@ StorageManager *storage_manager; |
39 | 38 | Backend *backend; |
40 | 39 |
|
41 | 40 | #include "handlers.hpp" |
| 41 | +#include "utils/cli_parser.hpp" |
42 | 42 | #include "utils/location.hpp" |
43 | 43 | #include "utils/signals.hpp" |
44 | 44 |
|
@@ -111,171 +111,6 @@ static constexpr std::array<CSHandler_t, CAPIO_NR_REQUESTS> build_request_handle |
111 | 111 | } |
112 | 112 | } |
113 | 113 |
|
114 | | -struct CapioParsedConfig { |
115 | | - std::string backend_name; |
116 | | - std::string capio_cl_config_path; |
117 | | - std::string capio_cl_resolve_path; |
118 | | - bool capio_cl_dynamic_config = false; |
119 | | - bool store_all_in_memory = false; |
120 | | -}; |
121 | | - |
122 | | -CapioParsedConfig parseCLI(int argc, char **argv) { |
123 | | - CapioParsedConfig capio_config; |
124 | | - Logger *log; |
125 | | - |
126 | | - args::ArgumentParser parser(CAPIO_SERVER_ARG_PARSER_PRE, CAPIO_SERVER_ARG_PARSER_EPILOGUE); |
127 | | - parser.LongSeparator(" "); |
128 | | - parser.LongPrefix("--"); |
129 | | - parser.ShortPrefix("-"); |
130 | | - |
131 | | - args::Group arguments(parser, "Arguments"); |
132 | | - args::HelpFlag help(arguments, "help", "Display this help menu", {'h', "help"}); |
133 | | - args::ValueFlag<std::string> logfile_src(arguments, "filename", |
134 | | - CAPIO_SERVER_ARG_PARSER_LOGILE_OPT_HELP, {'l', "log"}); |
135 | | - args::ValueFlag<std::string> logfile_folder( |
136 | | - arguments, "filename", CAPIO_SERVER_ARG_PARSER_LOGILE_DIR_OPT_HELP, {'d', "log-dir"}); |
137 | | - args::ValueFlag<std::string> resolve_prefix(arguments, "resolve-prefix", |
138 | | - CAPIO_SERVER_ARG_PARSER_RESOLVE_PREFIX_OPT_HELP, |
139 | | - {'r', "resolve-prefix"}); |
140 | | - |
141 | | - args::ValueFlag<std::string> config(arguments, "filename", |
142 | | - CAPIO_SERVER_ARG_PARSER_CONFIG_OPT_HELP, {'c', "config"}); |
143 | | - args::Flag noConfigFile(arguments, "no-config", |
144 | | - CAPIO_SERVER_ARG_PARSER_CONFIG_NO_CONF_FILE_HELP, {"no-config"}); |
145 | | - args::ValueFlag<std::string> backend_flag( |
146 | | - arguments, "backend", CAPIO_SERVER_ARG_PARSER_CONFIG_BACKEND_HELP, {'b', "backend"}); |
147 | | - |
148 | | - args::Flag continueOnErrorFlag(arguments, "continue-on-error", |
149 | | - CAPIO_SERVER_ARG_PARSER_CONFIG_NCONTINUE_ON_ERROR_HELP, |
150 | | - {"continue-on-error"}); |
151 | | - args::Flag mem_only_flag(arguments, "mem-only", |
152 | | - CAPIO_SERVER_ARG_PARSER_STORE_ALL_IN_MEMORY_OPT_HELP, {"mem-only"}); |
153 | | - |
154 | | - try { |
155 | | - parser.ParseCLI(argc, argv); |
156 | | - } catch (args::Help &) { |
157 | | - std::cout << parser; |
158 | | - exit(EXIT_SUCCESS); |
159 | | - } catch (args::ParseError &e) { |
160 | | - std::cerr << e.what() << std::endl; |
161 | | - std::cerr << parser; |
162 | | - exit(EXIT_FAILURE); |
163 | | - } catch (args::ValidationError &e) { |
164 | | - std::cerr << e.what() << std::endl; |
165 | | - std::cerr << parser; |
166 | | - exit(EXIT_FAILURE); |
167 | | - } |
168 | | - |
169 | | - if (continueOnErrorFlag) { |
170 | | -#ifdef CAPIO_LOG |
171 | | - continue_on_error = true; |
172 | | - for (const auto line : CAPIO_LOG_SERVER_CLI_CONT_ON_ERR_WARNING) { |
173 | | - server_println(CAPIO_LOG_SERVER_CLI_LEVEL_ERROR, "parseCLI", line); |
174 | | - } |
175 | | - |
176 | | -#else |
177 | | - server_println(CAPIO_LOG_SERVER_CLI_LEVEL_WARNING, "parseCLI", |
178 | | - "--continue-on-error flag given, but logger is not compiled into CAPIO. " |
179 | | - "Flag is ignored."); |
180 | | -#endif |
181 | | - } |
182 | | - |
183 | | - if (logfile_folder) { |
184 | | -#ifdef CAPIO_LOG |
185 | | - log_master_dir_name = args::get(logfile_folder); |
186 | | -#else |
187 | | - server_println(CAPIO_LOG_SERVER_CLI_LEVEL_WARNING, "parseCLI", |
188 | | - "Capio logfile folder, but logging capabilities not compiled into capio!"); |
189 | | -#endif |
190 | | - } |
191 | | - |
192 | | - if (logfile_src) { |
193 | | -#ifdef CAPIO_LOG |
194 | | - // log file was given |
195 | | - std::string token = args::get(logfile_src); |
196 | | - if (token.find(".log") != std::string::npos) { |
197 | | - token.erase(token.length() - 4); // delete .log if for some reason |
198 | | - // is given as parameter |
199 | | - } |
200 | | - logfile_prefix = token; |
201 | | -#else |
202 | | - server_println(CAPIO_LOG_SERVER_CLI_LEVEL_WARNING, "parseCLI", |
203 | | - "Capio logfile provided, but logging capabilities not compiled into capio!"); |
204 | | -#endif |
205 | | - } |
206 | | -#ifdef CAPIO_LOG |
207 | | - auto logname = open_server_logfile(); |
208 | | - log = new Logger(__func__, __FILE__, __LINE__, gettid(), "Created new log file"); |
209 | | - server_println(CAPIO_LOG_SERVER_CLI_LEVEL_INFO, "parseCLI", |
210 | | - "started logging to logfile " + logname.string()); |
211 | | -#endif |
212 | | - |
213 | | - if (mem_only_flag) { |
214 | | - capio_config.store_all_in_memory = args::get(mem_only_flag); |
215 | | - } |
216 | | - |
217 | | - if (config) { |
218 | | - |
219 | | - capio_config.capio_cl_config_path = args::get(config); |
220 | | - |
221 | | - if (std::string token = args::get(config); token == "dynamic") { |
222 | | - server_println(CAPIO_LOG_SERVER_CLI_LEVEL_INFO, "parseCLI", |
223 | | - "Starting CAPIO-CL engine with dynamic configuration"); |
224 | | - capio_config.capio_cl_dynamic_config = true; |
225 | | - |
226 | | - } else { |
227 | | - std::filesystem::path resolve_path = ""; |
228 | | - |
229 | | - if (resolve_prefix) { |
230 | | - capio_config.capio_cl_resolve_path = args::get(resolve_prefix); |
231 | | - } |
232 | | - } |
233 | | - |
234 | | - } else if (noConfigFile) { |
235 | | - |
236 | | - server_println(CAPIO_LOG_SERVER_CLI_LEVEL_WARNING, "parseCLI", |
237 | | - "skipping config file parsing."); |
238 | | - server_println(CAPIO_LOG_SERVER_CLI_LEVEL_WARNING, "parseCLI", |
239 | | - "Obtained from environment variable current workflow name: " + |
240 | | - get_capio_workflow_name()); |
241 | | - } else { |
242 | | - server_println( |
243 | | - CAPIO_LOG_SERVER_CLI_LEVEL_ERROR, "parseCLI", |
244 | | - "Error: no config file provided. To skip config file use --no-config option!"); |
245 | | -#ifdef CAPIO_LOG |
246 | | - log->log("no config file provided, and --no-config not provided"); |
247 | | -#endif |
248 | | - exit(EXIT_FAILURE); |
249 | | - } |
250 | | - |
251 | | - server_println(CAPIO_LOG_SERVER_CLI_LEVEL_INFO, "parseCLI", |
252 | | - "CAPIO_DIR=" + get_capio_dir().string()); |
253 | | - |
254 | | -#ifdef CAPIO_LOG |
255 | | - CAPIO_LOG_LEVEL = get_capio_log_level(); |
256 | | - server_println(CAPIO_LOG_SERVER_CLI_LEVEL_INFO, "parseCLI", |
257 | | - "LOG_LEVEL set to: " + std::to_string(CAPIO_LOG_LEVEL)); |
258 | | - for (const auto &msg : CAPIO_LOG_SERVER_CLI_LOGGING_ENABLED_WARNING) { |
259 | | - server_println(CAPIO_LOG_SERVER_CLI_LEVEL_WARNING, "Logger", msg); |
260 | | - } |
261 | | - |
262 | | - log->log("LOG_LEVEL set to: %d", CAPIO_LOG_LEVEL); |
263 | | - delete log; |
264 | | -#else |
265 | | - if (std::getenv("CAPIO_LOG_LEVEL") != nullptr) { |
266 | | - server_println(CAPIO_LOG_SERVER_CLI_LEVEL_WARNING, "parseCLI", |
267 | | - CAPIO_LOG_SERVER_CLI_LOGGING_NOT_AVAILABLE); |
268 | | - } |
269 | | -#endif |
270 | | - |
271 | | - // Backend selection phase |
272 | | - if (backend_flag) { |
273 | | - capio_config.backend_name = args::get(backend_flag); |
274 | | - } |
275 | | - |
276 | | - return capio_config; |
277 | | -} |
278 | | - |
279 | 114 | int main(int argc, char **argv) { |
280 | 115 |
|
281 | 116 | Semaphore internal_server_sem(0); |
|
0 commit comments