mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-03 19:28:53 +00:00
Add The Status Of A Module To The Output Of "CLI> module show"
When a module's configuration is not loadable, we still load the module but it is not in a running state. When trying to troubleshoot, let's say, why chan_motif is ignoring inbound XMPP traffic, there is no way to indicate that a loaded module is not currently running. (closes issue ASTERISK-21108) Reported by: Rusty Newton Tested by: Michael L. Young Patches: asterisk-21108_add_status-v2.diff Michael L. Young (license 5026) Review: https://reviewboard.asterisk.org/r/2331/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@381749 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -2719,7 +2719,7 @@ static int load_module(void)
|
|||||||
ast_format_cap_add_all_by_type(jingle_tech.capabilities, AST_FORMAT_TYPE_AUDIO);
|
ast_format_cap_add_all_by_type(jingle_tech.capabilities, AST_FORMAT_TYPE_AUDIO);
|
||||||
|
|
||||||
if (aco_process_config(&cfg_info, 0)) {
|
if (aco_process_config(&cfg_info, 0)) {
|
||||||
ast_log(LOG_ERROR, "Unable to read config file motif.conf. Not loading module.\n");
|
ast_log(LOG_ERROR, "Unable to read config file motif.conf. Module loaded but not running.\n");
|
||||||
aco_info_destroy(&cfg_info);
|
aco_info_destroy(&cfg_info);
|
||||||
return AST_MODULE_LOAD_DECLINE;
|
return AST_MODULE_LOAD_DECLINE;
|
||||||
}
|
}
|
||||||
|
@@ -110,17 +110,17 @@ int ast_unload_resource(const char *resource_name, enum ast_module_unload_mode);
|
|||||||
*/
|
*/
|
||||||
void ast_update_use_count(void);
|
void ast_update_use_count(void);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Ask for a list of modules, descriptions, and use counts.
|
* \brief Ask for a list of modules, descriptions, use counts and status.
|
||||||
* \param modentry A callback to an updater function.
|
* \param modentry A callback to an updater function.
|
||||||
* \param like
|
* \param like
|
||||||
*
|
*
|
||||||
* For each of the modules loaded, modentry will be executed with the resource,
|
* For each of the modules loaded, modentry will be executed with the resource,
|
||||||
* description, and usecount values of each particular module.
|
* description, and usecount values of each particular module.
|
||||||
*
|
*
|
||||||
* \return the number of modules loaded
|
* \return the number of modules loaded
|
||||||
*/
|
*/
|
||||||
int ast_update_module_list(int (*modentry)(const char *module, const char *description, int usecnt, const char *like),
|
int ast_update_module_list(int (*modentry)(const char *module, const char *description, int usecnt, const char *status, const char *like),
|
||||||
const char *like);
|
const char *like);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
10
main/cli.c
10
main/cli.c
@@ -651,17 +651,17 @@ static char *handle_unload(struct ast_cli_entry *e, int cmd, struct ast_cli_args
|
|||||||
return CLI_SUCCESS;
|
return CLI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MODLIST_FORMAT "%-30s %-40.40s %-10d\n"
|
#define MODLIST_FORMAT "%-30s %-40.40s %-10d %s\n"
|
||||||
#define MODLIST_FORMAT2 "%-30s %-40.40s %-10s\n"
|
#define MODLIST_FORMAT2 "%-30s %-40.40s %-10s %s\n"
|
||||||
|
|
||||||
AST_MUTEX_DEFINE_STATIC(climodentrylock);
|
AST_MUTEX_DEFINE_STATIC(climodentrylock);
|
||||||
static int climodentryfd = -1;
|
static int climodentryfd = -1;
|
||||||
|
|
||||||
static int modlist_modentry(const char *module, const char *description, int usecnt, const char *like)
|
static int modlist_modentry(const char *module, const char *description, int usecnt, const char *status, const char *like)
|
||||||
{
|
{
|
||||||
/* Comparing the like with the module */
|
/* Comparing the like with the module */
|
||||||
if (strcasestr(module, like) ) {
|
if (strcasestr(module, like) ) {
|
||||||
ast_cli(climodentryfd, MODLIST_FORMAT, module, description, usecnt);
|
ast_cli(climodentryfd, MODLIST_FORMAT, module, description, usecnt, status);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@@ -788,7 +788,7 @@ static char *handle_modlist(struct ast_cli_entry *e, int cmd, struct ast_cli_arg
|
|||||||
|
|
||||||
ast_mutex_lock(&climodentrylock);
|
ast_mutex_lock(&climodentrylock);
|
||||||
climodentryfd = a->fd; /* global, protected by climodentrylock */
|
climodentryfd = a->fd; /* global, protected by climodentrylock */
|
||||||
ast_cli(a->fd, MODLIST_FORMAT2, "Module", "Description", "Use Count");
|
ast_cli(a->fd, MODLIST_FORMAT2, "Module", "Description", "Use Count", "Status");
|
||||||
ast_cli(a->fd,"%d modules loaded\n", ast_update_module_list(modlist_modentry, like));
|
ast_cli(a->fd,"%d modules loaded\n", ast_update_module_list(modlist_modentry, like));
|
||||||
climodentryfd = -1;
|
climodentryfd = -1;
|
||||||
ast_mutex_unlock(&climodentrylock);
|
ast_mutex_unlock(&climodentrylock);
|
||||||
|
@@ -1240,7 +1240,7 @@ void ast_update_use_count(void)
|
|||||||
AST_LIST_UNLOCK(&updaters);
|
AST_LIST_UNLOCK(&updaters);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ast_update_module_list(int (*modentry)(const char *module, const char *description, int usecnt, const char *like),
|
int ast_update_module_list(int (*modentry)(const char *module, const char *description, int usecnt, const char *status, const char *like),
|
||||||
const char *like)
|
const char *like)
|
||||||
{
|
{
|
||||||
struct ast_module *cur;
|
struct ast_module *cur;
|
||||||
@@ -1251,7 +1251,8 @@ int ast_update_module_list(int (*modentry)(const char *module, const char *descr
|
|||||||
unlock = 0;
|
unlock = 0;
|
||||||
|
|
||||||
AST_LIST_TRAVERSE(&module_list, cur, entry) {
|
AST_LIST_TRAVERSE(&module_list, cur, entry) {
|
||||||
total_mod_loaded += modentry(cur->resource, cur->info->description, cur->usecount, like);
|
total_mod_loaded += modentry(cur->resource, cur->info->description, cur->usecount,
|
||||||
|
cur->flags.running ? "Running" : "Not Running", like);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (unlock)
|
if (unlock)
|
||||||
|
@@ -760,7 +760,7 @@ static u_char *ast_var_indications_table(struct variable *vp, oid *name, size_t
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int countmodule(const char *mod, const char *desc, int use, const char *like)
|
static int countmodule(const char *mod, const char *desc, int use, const char *status, const char *like)
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user