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)
{
int argc;
char *mydata = NULL, *argv[3];
const char *err = NULL;
char *mycmd = NULL, *argv[3] = { 0 };
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) {
err = "bad args";
goto end;
if (session)
return SWITCH_STATUS_FALSE;
if (switch_strlen_zero(cmd)) {
stream->write_function(stream, "%s", usage_string);
goto done;
}
mydata = strdup(cmd);
assert(mydata);
if (!(mycmd = strdup(cmd))) {
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) {
err = "missing arg";
goto end;
if (argc > 1) {
if (!strcasecmp(argv[1], "help")) {
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")) {
int level = hard_log_level;
if (argc > 1) {
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 syntax error, console log level not set!\n");
} else if (!strcasecmp(argv[0], "colorize")) {
if (argc > 1) {
if (!strcasecmp(argv[1], "help")) {
stream->write_function(stream, "%s", colorize_usage_string);
goto done;
} else if (!strcasecmp(argv[1], "toggle")) {
COLORIZE ^= 1;
} 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]);
}
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);
}
end:
if (err) {
stream->write_function(stream, "-Error %s\n", err);
}
free(mydata);
return SWITCH_STATUS_SUCCESS;
done:
switch_safe_free(mycmd);
return status;
}
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 */
*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 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 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 */
switch_log_bind_logger(switch_console_logger, SWITCH_LOG_DEBUG, SWITCH_TRUE);