]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
add support for getting current call count
authorDaniel Swarbrick <daniel@seventhsignal.de>
Fri, 28 Jan 2011 19:36:06 +0000 (20:36 +0100)
committerDaniel Swarbrick <daniel@seventhsignal.de>
Fri, 28 Jan 2011 19:36:18 +0000 (20:36 +0100)
src/mod/event_handlers/mod_snmp/subagent.c

index 8f08baf84cbd86c4d4fb164a79bb36f59813ec99..bad3dc6ff2b8d4a70aa250c6d980958b494f3a85 100644 (file)
@@ -49,6 +49,14 @@ void init_subagent(void)
 }
 
 
+static int sql_count_callback(void *pArg, int argc, char **argv, char **columnNames)
+{
+       uint32_t *count = (uint32_t *) pArg;
+       *count = atoi(argv[0]);
+       return 0;
+}
+
+
 int handle_identity(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info *requests)
 {
        netsnmp_request_info *request = NULL;
@@ -113,13 +121,20 @@ int handle_systemStats(netsnmp_mib_handler *handler, netsnmp_handler_registratio
                        snmp_set_var_typed_value(requests->requestvb, ASN_GAUGE, (u_char *) &int_val, sizeof(int_val));
                        break;
                case SS_CURRENT_CALLS:
-                       /*
-                        * This is zero for now, since there is no convenient way to get total call
-                        * count (not to be confused with session count), without touching the
-                        * database.
-                        */
-                       int_val = 0;
+                       {
+                       switch_cache_db_handle_t *dbh;
+                       char sql[1024] = "", hostname[256] = "";
+
+                       if (switch_core_db_handle(&dbh) != SWITCH_STATUS_SUCCESS) {
+                               return SNMP_ERR_GENERR;
+                       }
+
+                       gethostname(hostname, sizeof(hostname));
+                       sprintf(sql, "SELECT COUNT(*) FROM calls WHERE hostname='%s'", hostname);
+                       switch_cache_db_execute_sql_callback(dbh, sql, sql_count_callback, &int_val, NULL);
                        snmp_set_var_typed_value(requests->requestvb, ASN_GAUGE, (u_char *) &int_val, sizeof(int_val));
+                       switch_cache_db_release_db_handle(&dbh);
+                       }
                        break;
                case SS_SESSIONS_PER_SECOND:
                        switch_core_session_ctl(SCSC_LAST_SPS, &int_val);