static int parse_argv(int argc, char *argv[]) { enum { ARG_VERSION = 0x100, ARG_LOG_LEVEL, ARG_LOG_TIME, }; static const struct option options[] = { { "help", no_argument, NULL, 'h' }, { "version", no_argument, NULL, ARG_VERSION }, { "log-level", required_argument, NULL, ARG_LOG_LEVEL }, { "log-time", no_argument, NULL, ARG_LOG_TIME }, {} }; int c; while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) { switch (c) { case 'h': return help(); case ARG_VERSION: puts(PACKAGE_STRING); return 0; case ARG_LOG_LEVEL: log_max_sev = atoi(optarg); break; case ARG_LOG_TIME: log_init_time(); break; case '?': return -EINVAL; } } if (optind < argc) { log_error("unparsed remaining arguments starting with: %s", argv[optind]); return -EINVAL; } log_format(LOG_DEFAULT_BASE, NULL, LOG_INFO, "miracled - revision %s %s %s", "some-rev-TODO-xyz", __DATE__, __TIME__); return 1; }
static void json_getlog(struct command *cmd, const char *buffer, const jsmntok_t *params) { struct log_info info; struct log_record *lr = cmd->dstate->log_record; jsmntok_t *level; json_get_params(buffer, params, "?level", &level, NULL); info.num_skipped = 0; if (!level) info.level = LOG_INFORM; else if (json_tok_streq(buffer, level, "io")) info.level = LOG_IO; else if (json_tok_streq(buffer, level, "debug")) info.level = LOG_DBG; else if (json_tok_streq(buffer, level, "info")) info.level = LOG_INFORM; else if (json_tok_streq(buffer, level, "unusual")) info.level = LOG_UNUSUAL; else { command_fail(cmd, "Invalid level param"); return; } info.response = new_json_result(cmd); json_object_start(info.response, NULL); json_add_time(info.response, "creation_time", log_init_time(lr)->ts); json_add_num(info.response, "bytes_used", (unsigned int)log_used(lr)); json_add_num(info.response, "bytes_max", (unsigned int)log_max_mem(lr)); json_object_start(info.response, "log"); log_each_line(lr, log_to_json, &info); json_object_end(info.response); json_object_end(info.response); command_success(cmd, info.response); }