]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
peak sessions step 1
authorKen Rice <krice@freeswitch.org>
Sat, 20 Jul 2013 20:00:06 +0000 (15:00 -0500)
committerKen Rice <krice@freeswitch.org>
Sun, 21 Jul 2013 01:12:18 +0000 (20:12 -0500)
src/include/private/switch_core_pvt.h
src/include/switch_types.h
src/mod/event_handlers/mod_snmp/FREESWITCH-MIB
src/mod/event_handlers/mod_snmp/subagent.c
src/mod/event_handlers/mod_snmp/subagent.h
src/switch_core.c
src/switch_core_session.c
src/switch_time.c

index 99f2cd9387f8c0d3b599e8215b128268dd33e506..0acd41c3fb2b3145f7b08659b8732de95e8924fc 100644 (file)
@@ -240,6 +240,8 @@ struct switch_runtime {
        int32_t sps_last;
        int32_t sps_peak;
        int32_t sps_peak_fivemin;
+       int32_t sessions_peak;
+       int32_t sessions_peak_fivemin;
        switch_log_level_t hard_log_level;
        char *mailer_app;
        char *mailer_app_args;
index 806410b0c50f93e2099fb6597057790ae5288d47..e386dc277fbd15eb00688e1cc8fb38e1b9ef4208 100644 (file)
@@ -1863,7 +1863,9 @@ typedef enum {
        SCSC_API_EXPANSION,
        SCSC_RECOVER,
        SCSC_SPS_PEAK,
-       SCSC_SPS_PEAK_FIVEMIN
+       SCSC_SPS_PEAK_FIVEMIN,
+       SCSC_SESSIONS_PEAK,
+       SCSC_SESSIONS_PEAK_FIVEMIN
 } switch_session_ctl_t;
 
 typedef enum {
index 6b5aeace950390c9d7f6f4113c6b88ffc1a0ee13..82fdf4bbed41c22f035c0d47a2942c5b3121b201 100644 (file)
@@ -149,7 +149,7 @@ peakSessionsPerSecond OBJECT-TYPE
         "Peak sessions per second"
     ::= { systemStats 8 }
 
-peakSessionsPerSecond OBJECT-TYPE
+peakSessionsPerSecondFiveMin OBJECT-TYPE
     SYNTAX      Gauge32
     MAX-ACCESS  read-only
     STATUS      current
@@ -157,6 +157,21 @@ peakSessionsPerSecond OBJECT-TYPE
         "Peak sessions per second last 5 minutes"
     ::= { systemStats 9 }
 
+peakSessions OBJECT-TYPE
+    SYNTAX      Gauge32
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "Peak sessions"
+    ::= { systemStats 10 }
+
+peakSessionsFiveMin OBJECT-TYPE
+    SYNTAX      Gauge32
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "Peak sessions last 5 minutes"
+    ::= { systemStats 11 }
 
 ChannelEntry ::= SEQUENCE {
     chanIndex           Integer32,
index f9bd4610d65671f7b8402191bb8dac26d57d7776..e5921b7381a081dabd4c8a90633aa545e35d7f29 100644 (file)
@@ -158,7 +158,7 @@ void init_subagent(switch_memory_pool_t *pool)
        DEBUGMSGTL(("init_subagent", "mod_snmp subagent initializing\n"));
 
        netsnmp_register_scalar_group(netsnmp_create_handler_registration("identity", handle_identity, identity_oid, OID_LENGTH(identity_oid), HANDLER_CAN_RONLY), 1, 2);
-       netsnmp_register_scalar_group(netsnmp_create_handler_registration("systemStats", handle_systemStats, systemStats_oid, OID_LENGTH(systemStats_oid), HANDLER_CAN_RONLY), 1, 9);
+       netsnmp_register_scalar_group(netsnmp_create_handler_registration("systemStats", handle_systemStats, systemStats_oid, OID_LENGTH(systemStats_oid), HANDLER_CAN_RONLY), 1, 11);
 
        ch_table_info = switch_core_alloc(pool, sizeof(netsnmp_table_registration_info));
        netsnmp_table_helper_add_indexes(ch_table_info, ASN_INTEGER, 0);
@@ -266,6 +266,14 @@ int handle_systemStats(netsnmp_mib_handler *handler, netsnmp_handler_registratio
                        switch_core_session_ctl(SCSC_SPS_PEAK_FIVEMIN, &int_val);
                        snmp_set_var_typed_integer(requests->requestvb, ASN_GAUGE, int_val);
                        break;
+               case SS_PEAK_SESSIONS:
+                       switch_core_session_ctl(SCSC_SESSIONS_PEAK, &int_val);
+                       snmp_set_var_typed_integer(requests->requestvb, ASN_GAUGE, int_val);
+                       break;
+               case SS_PEAK_SESSIONS_FIVEMIN:
+                       switch_core_session_ctl(SCSC_SESSIONS_PEAK_FIVEMIN, &int_val);
+                       snmp_set_var_typed_integer(requests->requestvb, ASN_GAUGE, int_val);
+                       break;
                default:
                        snmp_log(LOG_WARNING, "Unregistered OID-suffix requested (%d)\n", (int) subid);
                        netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
index 2cf5d3f964840272cb0fcb251f8fcf777446f56a..2b7974fd86667dee3bc3edcefeab375fb41a95a6 100644 (file)
@@ -48,6 +48,8 @@
 #define SS_MAX_SESSIONS_PER_SECOND     7
 #define SS_PEAK_SESSIONS_PER_SECOND    8
 #define SS_PEAK_SESSIONS_PER_FIVEMIN   9
+#define SS_PEAK_SESSIONS               10
+#define SS_PEAK_SESSIONS_FIVEMIN       11
 
 /* .1.3.6.1.4.1.27880.1.9 */
 #define CH_INDEX                       1
index 542c6741f949bf41bb0e1e9b66b0be67644ee3b3..b1f3e929381efeb9e0a6fc0eee80d3d5e8b6a362 100644 (file)
@@ -91,6 +91,8 @@ static void send_heartbeat(void)
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Session-Per-Sec-Max", "%u", runtime.sps_peak);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Session-Per-Sec-FiveMin", "%u", runtime.sps_peak_fivemin);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Session-Since-Startup", "%" SWITCH_SIZE_T_FMT, switch_core_session_id() - 1);
+               switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Session-Peak-Max", "%u", runtime.sessions_peak);
+               switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Session-Peak-FiveMin", "%u", runtime.sessions_peak_fivemin);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Idle-CPU", "%f", switch_core_idle_cpu());
                switch_event_fire(&event);
        }
@@ -2475,6 +2477,12 @@ SWITCH_DECLARE(int32_t) switch_core_session_ctl(switch_session_ctl_t cmd, void *
        case SCSC_SPS_PEAK_FIVEMIN:
                newintval = runtime.sps_peak_fivemin;
                break;
+       case SCSC_SESSIONS_PEAK:
+               newintval = runtime.sessions_peak;
+               break;
+       case SCSC_SESSIONS_PEAK_FIVEMIN:
+               newintval = runtime.sessions_peak_fivemin;
+               break;
        case SCSC_MAX_DTMF_DURATION:
                newintval = switch_core_max_dtmf_duration(oldintval);
                break;
index 8a40bd34541d29c60ae975a6918ca04525b98eeb..17254198c1d5669b9c1686625b8e7674cfe82f75 100644 (file)
@@ -2293,6 +2293,14 @@ SWITCH_DECLARE(switch_core_session_t *) switch_core_session_request_uuid(switch_
        switch_core_hash_insert(session_manager.session_table, session->uuid_str, session);
        session->id = session_manager.session_id++;
        session_manager.session_count++;
+
+       if (session_manager.session_count > runtime.sessions_peak) {
+               runtime.sessions_peak = session_manager.session_count;
+       }
+       if (session_manager.session_count > runtime.sessions_peak_fivemin) {
+               runtime.sessions_peak_fivemin = session_manager.session_count;
+       }
+
        switch_mutex_unlock(runtime.session_hash_mutex);
 
        switch_channel_set_variable_printf(session->channel, "session_id", "%u", session->id);
index d1c5926c8c8ba74dd1279c7bc99b5bf3a82be5a0..2a67a56b5e80f0eac583ee01dda84342d8b3cee2 100644 (file)
@@ -1012,7 +1012,11 @@ SWITCH_MODULE_RUNTIME_FUNCTION(softtimer_runtime)
                        if (sps_interval_ticks >= 300) {
                                runtime.sps_peak_fivemin = 0;
                                sps_interval_ticks = 0;
+                               switch_mutex_lock(runtime.session_hash_mutex);
+                               runtime.sessions_peak_fivemin = session_manager.session_count;
+                               switch_mutex_unlock(runtime.session_hash_mutex);
                        }
+
                        sps_interval_ticks++;
                        
                        if (runtime.sps_last > runtime.sps_peak_fivemin) {