diff options
author | Jason Parker <jparker@digium.com> | 2007-12-07 16:11:05 +0000 |
---|---|---|
committer | Jason Parker <jparker@digium.com> | 2007-12-07 16:11:05 +0000 |
commit | 02ea9face7d5bef3fa1c4bb14a3a2147c5f3b737 (patch) | |
tree | a4fa144f2008bf16fa24587b437b590a946b4b54 /main | |
parent | 00297c91e52d468e7c778886982290a310a4ebe3 (diff) |
Add count of total number of calls processed by asterisk during it's lifetime.
Add number of total calls and current calls to SNMP.
Closes issue #10057, patch by jcmoore.
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@91779 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main')
-rw-r--r-- | main/cli.c | 59 | ||||
-rw-r--r-- | main/pbx.c | 10 |
2 files changed, 68 insertions, 1 deletions
diff --git a/main/cli.c b/main/cli.c index 52b8d51b4..94ed6b565 100644 --- a/main/cli.c +++ b/main/cli.c @@ -570,6 +570,61 @@ static char *handle_modlist(struct ast_cli_entry *e, int cmd, struct ast_cli_arg #undef MODLIST_FORMAT #undef MODLIST_FORMAT2 +static char *handle_showcalls(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) +{ + struct timeval curtime = ast_tvnow(); + int showuptime, printsec; + + switch (cmd) { + case CLI_INIT: + e->command = "core show calls [uptime]"; + e->usage = + "Usage: core show calls [uptime] [seconds]\n" + " Lists number of currently active calls and total number of calls\n" + " processed through PBX since last restart. If 'uptime' is specified\n" + " the system uptime is also displayed. If 'seconds' is specified in\n" + " addition to 'uptime', the system uptime is displayed in seconds.\n"; + return NULL; + + case CLI_GENERATE: + if (a->pos != e->args) + return NULL; + return a->n == 0 ? ast_strdup("seconds") : NULL; + } + + /* regular handler */ + if (a->argc >= e->args && !strcasecmp(a->argv[e->args-1],"uptime")) { + showuptime = 1; + + if (a->argc == e->args+1 && !strcasecmp(a->argv[e->args],"seconds")) + printsec = 1; + else if (a->argc == e->args) + printsec = 0; + else + return CLI_SHOWUSAGE; + } else if (a->argc == e->args-1) { + showuptime = 0; + printsec = 0; + } else + return CLI_SHOWUSAGE; + + if (option_maxcalls) { + ast_cli(a->fd, "%d of %d max active call%s (%5.2f%% of capacity)\n", + ast_active_calls(), option_maxcalls, ESS(ast_active_calls()), + ((double)ast_active_calls() / (double)option_maxcalls) * 100.0); + } else { + ast_cli(a->fd, "%d active call%s\n", ast_active_calls(), ESS(ast_active_calls())); + } + + ast_cli(a->fd, "%d call%s processed\n", ast_processed_calls(), ESS(ast_processed_calls())); + + if (ast_startuptime.tv_sec && showuptime) { + print_uptimestr(a->fd, ast_tvsub(curtime, ast_startuptime), "System uptime", printsec); + } + + return RESULT_SUCCESS; +} + static char *handle_chanlist(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) { #define FORMAT_STRING "%-20.20s %-20.20s %-7.7s %-30.30s\n" @@ -680,6 +735,8 @@ static char *handle_chanlist(struct ast_cli_entry *e, int cmd, struct ast_cli_ar ((double)ast_active_calls() / (double)option_maxcalls) * 100.0); else ast_cli(fd, "%d active call%s\n", ast_active_calls(), ESS(ast_active_calls())); + + ast_cli(fd, "%d call%s processed\n", ast_processed_calls(), ESS(ast_processed_calls())); } return CLI_SUCCESS; @@ -1124,6 +1181,8 @@ static struct ast_cli_entry cli_cli[] = { AST_CLI_DEFINE(handle_chanlist, "Display information on channels"), + AST_CLI_DEFINE(handle_showcalls, "Display information on calls"), + AST_CLI_DEFINE(handle_showchan, "Display information on a specific channel"), AST_CLI_DEFINE(handle_core_set_debug_channel, "Enable/disable debugging on a channel", diff --git a/main/pbx.c b/main/pbx.c index d27011834..2d8205575 100644 --- a/main/pbx.c +++ b/main/pbx.c @@ -416,6 +416,7 @@ static struct ast_event_sub *device_state_sub; AST_MUTEX_DEFINE_STATIC(maxcalllock); static int countcalls; +static int totalcalls; static AST_RWLIST_HEAD_STATIC(acf_root, ast_custom_function); @@ -3472,8 +3473,10 @@ static int increase_call_count(const struct ast_channel *c) } #endif - if (!failed) + if (!failed) { countcalls++; + totalcalls++; + } ast_mutex_unlock(&maxcalllock); return failed; @@ -3560,6 +3563,11 @@ int ast_active_calls(void) return countcalls; } +int ast_processed_calls(void) +{ + return totalcalls; +} + int pbx_set_autofallthrough(int newval) { int oldval = autofallthrough; |