mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-02 11:58:40 +00:00
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
This commit is contained in:
@@ -11,7 +11,7 @@ IMPORTS
|
||||
FROM DIGIUM-MIB;
|
||||
|
||||
asterisk MODULE-IDENTITY
|
||||
LAST-UPDATED "200606081626Z"
|
||||
LAST-UPDATED "200708211450Z"
|
||||
ORGANIZATION "Digium, Inc."
|
||||
CONTACT-INFO
|
||||
"Mark A. Spencer
|
||||
@@ -29,6 +29,9 @@ asterisk MODULE-IDENTITY
|
||||
Norway
|
||||
Tel: +47 5598 7200
|
||||
Email: tholo@voop.no"
|
||||
DESCRIPTION
|
||||
"Add total and current call counter statistics."
|
||||
REVISION "200708211450Z"
|
||||
DESCRIPTION
|
||||
"Asterisk is an Open Source PBX. This MIB defined
|
||||
objects for managing Asterisk instances."
|
||||
@@ -104,6 +107,23 @@ astConfigSocket OBJECT-TYPE
|
||||
"The control socket for giving Asterisk commands."
|
||||
::= { asteriskConfiguration 4 }
|
||||
|
||||
astConfigCallsActive OBJECT-TYPE
|
||||
SYNTAX Gauge32
|
||||
MAX-ACCESS read-only
|
||||
STATUS current
|
||||
DESCRIPTION
|
||||
"The number of calls currently active on the Asterisk PBX."
|
||||
::= { asteriskConfiguration 5 }
|
||||
|
||||
astConfigCallsProcessed OBJECT-TYPE
|
||||
SYNTAX Counter32
|
||||
MAX-ACCESS read-only
|
||||
STATUS current
|
||||
DESCRIPTION
|
||||
"The total number of calls processed through the Asterisk PBX since last
|
||||
restart."
|
||||
::= { asteriskConfiguration 6 }
|
||||
|
||||
-- asteriskModules
|
||||
|
||||
astNumModules OBJECT-TYPE
|
||||
@@ -194,7 +214,7 @@ astIndDescription OBJECT-TYPE
|
||||
-- asteriskChannels
|
||||
|
||||
astNumChannels OBJECT-TYPE
|
||||
SYNTAX Integer32
|
||||
SYNTAX Gauge32
|
||||
MAX-ACCESS read-only
|
||||
STATUS current
|
||||
DESCRIPTION
|
||||
|
||||
@@ -892,6 +892,11 @@ int __ast_custom_function_register(struct ast_custom_function *acf, struct ast_m
|
||||
* \brief Retrieve the number of active calls
|
||||
*/
|
||||
int ast_active_calls(void);
|
||||
|
||||
/*!
|
||||
* \brief Retrieve the total number of calls processed through the PBX since last restart
|
||||
*/
|
||||
int ast_processed_calls(void);
|
||||
|
||||
/*!
|
||||
* \brief executes a read operation on a function
|
||||
|
||||
59
main/cli.c
59
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",
|
||||
|
||||
10
main/pbx.c
10
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;
|
||||
|
||||
@@ -67,6 +67,8 @@ static oid asterisk_oid[] = { 1, 3, 6, 1, 4, 1, 22736, 1 };
|
||||
#define ASTCONFRELOADTIME 2
|
||||
#define ASTCONFPID 3
|
||||
#define ASTCONFSOCKET 4
|
||||
#define ASTCONFACTIVECALLS 5
|
||||
#define ASTCONFPROCESSEDCALLS 6
|
||||
|
||||
#define ASTMODULES 3
|
||||
#define ASTMODCOUNT 1
|
||||
@@ -592,6 +594,12 @@ static u_char *ast_var_Config(struct variable *vp, oid *name, size_t *length,
|
||||
case ASTCONFSOCKET:
|
||||
*var_len = strlen(ast_config_AST_SOCKET);
|
||||
return (u_char *)ast_config_AST_SOCKET;
|
||||
case ASTCONFACTIVECALLS:
|
||||
long_ret = ast_active_calls();
|
||||
return (u_char *)&long_ret;
|
||||
case ASTCONFPROCESSEDCALLS:
|
||||
long_ret = ast_processed_calls();
|
||||
return (u_char *)&long_ret;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -723,6 +731,8 @@ static void init_asterisk_mib(void)
|
||||
{ASTCONFRELOADTIME, ASN_TIMETICKS, RONLY, ast_var_Config, 2, {ASTCONFIGURATION, ASTCONFRELOADTIME}},
|
||||
{ASTCONFPID, ASN_INTEGER, RONLY, ast_var_Config, 2, {ASTCONFIGURATION, ASTCONFPID}},
|
||||
{ASTCONFSOCKET, ASN_OCTET_STR, RONLY, ast_var_Config, 2, {ASTCONFIGURATION, ASTCONFSOCKET}},
|
||||
{ASTCONFACTIVECALLS, ASN_GAUGE, RONLY, ast_var_Config, 2, {ASTCONFIGURATION, ASTCONFACTIVECALLS}},
|
||||
{ASTCONFPROCESSEDCALLS, ASN_INTEGER, RONLY, ast_var_Config, 2, {ASTCONFIGURATION, ASTCONFPROCESSEDCALLS}},
|
||||
{ASTMODCOUNT, ASN_INTEGER, RONLY, ast_var_Modules , 2, {ASTMODULES, ASTMODCOUNT}},
|
||||
{ASTINDCOUNT, ASN_INTEGER, RONLY, ast_var_indications, 2, {ASTINDICATIONS, ASTINDCOUNT}},
|
||||
{ASTINDCURRENT, ASN_OCTET_STR, RONLY, ast_var_indications, 2, {ASTINDICATIONS, ASTINDCURRENT}},
|
||||
|
||||
Reference in New Issue
Block a user