summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorJason Parker <jparker@digium.com>2007-12-07 16:11:05 +0000
committerJason Parker <jparker@digium.com>2007-12-07 16:11:05 +0000
commit02ea9face7d5bef3fa1c4bb14a3a2147c5f3b737 (patch)
treea4fa144f2008bf16fa24587b437b590a946b4b54 /main
parent00297c91e52d468e7c778886982290a310a4ebe3 (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.c59
-rw-r--r--main/pbx.c10
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;