mod_console: Improved tab completions, and more description usage informations (LOGGER-2)

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@15103 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
Marc Olivier Chouinard 2009-10-07 01:08:36 +00:00
parent 9c5cc1f14e
commit 6cf3927a04
1 changed files with 89 additions and 48 deletions

View File

@ -255,68 +255,95 @@ static switch_status_t switch_console_logger(const switch_log_node_t *node, swit
SWITCH_STANDARD_API(console_api_function) SWITCH_STANDARD_API(console_api_function)
{ {
int argc; int argc;
char *mydata = NULL, *argv[3]; char *mycmd = NULL, *argv[3] = { 0 };
const char *err = NULL; switch_status_t status = SWITCH_STATUS_SUCCESS;
const char *usage_string = "USAGE:\n"
"--------------------------------------------------------------------------------\n"
"console help\n"
"console loglevel [[0-7] | <loglevel_string>]\n"
"console colorize [on|off|toggle]\n"
"--------------------------------------------------------------------------------\n";
const char *loglevel_usage_string = "USAGE:\n"
"--------------------------------------------------------------------------------\n"
"console loglevel [[0-7] | <loglevel_string>]\n"
"\n"
"Set the logging verbosity of the console from 0 (least verbose) to\n"
"7 (debugging), or specify the loglevel as a string:\n"
"\n"
" 0 console\n"
" 1 alert\n"
" 2 crit\n"
" 3 err\n"
" 4 warning\n"
" 5 notice\n"
" 6 info\n"
" 7 debug\n"
"--------------------------------------------------------------------------------\n";
const char *colorize_usage_string = "USAGE:\n"
"--------------------------------------------------------------------------------\n"
"console colorize [on|off|toggle]\n"
"\n"
"Enable, disable, or toggle console coloring.\n"
"--------------------------------------------------------------------------------\n";
if (!cmd) { if (session)
err = "bad args"; return SWITCH_STATUS_FALSE;
goto end;
if (switch_strlen_zero(cmd)) {
stream->write_function(stream, "%s", usage_string);
goto done;
} }
mydata = strdup(cmd); if (!(mycmd = strdup(cmd))) {
assert(mydata); status = SWITCH_STATUS_MEMERR;
goto done;
}
argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0]))); if (!(argc = switch_separate_string(mycmd, ' ', argv, (sizeof(argv) / sizeof(argv[0])))) || !argv[0]) {
stream->write_function(stream, "%s", usage_string);
goto done;
}
if (argc > 0) { if (!strcasecmp(argv[0], "loglevel")) {
int level = hard_log_level;
if (argc < 1) { if (argc > 1) {
err = "missing arg"; if (!strcasecmp(argv[1], "help")) {
goto end; stream->write_function(stream, "%s", loglevel_usage_string);
goto done;
} else if (*argv[1] > 47 && *argv[1] < 58) {
level = atoi(argv[1]);
} else {
level = switch_log_str2level(argv[1]);
}
}
if (level == SWITCH_LOG_INVALID) {
stream->write_function(stream, "-ERR Invalid console loglevel (%s)!\n\n", argc>1? argv[1] : "");
} else {
hard_log_level = level;
stream->write_function(stream, "+OK console log level set to %s\n", switch_log_level2str(hard_log_level));
} }
if (!strcasecmp(argv[0], "loglevel")) { } else if (!strcasecmp(argv[0], "colorize")) {
int level = hard_log_level; if (argc > 1) {
if (!strcasecmp(argv[1], "help")) {
if (argc > 1) { stream->write_function(stream, "%s", colorize_usage_string);
if (*argv[1] > 47 && *argv[1] < 58) { goto done;
level = atoi(argv[1]); } else if (!strcasecmp(argv[1], "toggle")) {
} else { COLORIZE ^= 1;
level = switch_log_str2level(argv[1]);
}
}
if (level == SWITCH_LOG_INVALID) {
stream->write_function(stream, "-ERR syntax error, console log level not set!\n");
} else { } else {
hard_log_level = level;
stream->write_function(stream, "+OK console log level set to %s\n", switch_log_level2str(hard_log_level));
}
goto end;
} else if (!strcasecmp(argv[0], "colorize")) {
if (argc > 1) {
COLORIZE = switch_true(argv[1]); COLORIZE = switch_true(argv[1]);
} }
stream->write_function(stream, "+OK console color %s\n", COLORIZE ? "enabled" : "disabled");
goto end;
} }
stream->write_function(stream, "+OK console color %s\n", COLORIZE ? "enabled" : "disabled");
err = "invalid command"; } else { /* if (!strcasecmp(argv[0], "help")) { */
stream->write_function(stream, "%s", usage_string);
} }
done:
end: switch_safe_free(mycmd);
return status;
if (err) {
stream->write_function(stream, "-Error %s\n", err);
}
free(mydata);
return SWITCH_STATUS_SUCCESS;
} }
SWITCH_MODULE_LOAD_FUNCTION(mod_console_load) SWITCH_MODULE_LOAD_FUNCTION(mod_console_load)
@ -329,9 +356,23 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_console_load)
/* connect my internal structure to the blank pointer passed to me */ /* connect my internal structure to the blank pointer passed to me */
*module_interface = switch_loadable_module_create_module_interface(pool, modname); *module_interface = switch_loadable_module_create_module_interface(pool, modname);
SWITCH_ADD_API(api_interface, "console", "Console", console_api_function, "loglevel [level]|colorize [on|off]"); SWITCH_ADD_API(api_interface, "console", "Console", console_api_function, "loglevel [level]|colorize [on|toggle|off]");
switch_console_set_complete("add console help");
switch_console_set_complete("add console loglevel"); switch_console_set_complete("add console loglevel");
switch_console_set_complete("add console loglevel help");
switch_console_set_complete("add console loglevel console");
switch_console_set_complete("add console loglevel alert");
switch_console_set_complete("add console loglevel crit");
switch_console_set_complete("add console loglevel err");
switch_console_set_complete("add console loglevel warning");
switch_console_set_complete("add console loglevel notice");
switch_console_set_complete("add console loglevel info");
switch_console_set_complete("add console loglevel debug");
switch_console_set_complete("add console colorize"); switch_console_set_complete("add console colorize");
switch_console_set_complete("add console colorize help");
switch_console_set_complete("add console colorize on");
switch_console_set_complete("add console colorize off");
switch_console_set_complete("add console colorize toggle");
/* setup my logger function */ /* setup my logger function */
switch_log_bind_logger(switch_console_logger, SWITCH_LOG_DEBUG, SWITCH_TRUE); switch_log_bind_logger(switch_console_logger, SWITCH_LOG_DEBUG, SWITCH_TRUE);