]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
add peak SPS for last 5 minutes
authorKen Rice <krice@freeswitch.org>
Sat, 20 Jul 2013 03:40:05 +0000 (22:40 -0500)
committerKen Rice <krice@freeswitch.org>
Sat, 20 Jul 2013 03:40:59 +0000 (22:40 -0500)
src/include/private/switch_core_pvt.h
src/include/switch_types.h
src/mod/applications/mod_commands/mod_commands.c
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_time.c

index 8ba0ebbca802d0ee69b4b02e0cafc58c8677da21..2b9cf628e739c98943af763d4e488c58d75cc92c 100644 (file)
@@ -241,6 +241,7 @@ struct switch_runtime {
        int32_t sps;
        int32_t sps_last;
        int32_t sps_peak;
+       int32_t sps_peak_fivemin;
        switch_log_level_t hard_log_level;
        char *mailer_app;
        char *mailer_app_args;
index 034c4c1cd3fe709265a82800a6e1bcca4ba9e8a7..3554d213c090da28f8f143234570ed6875497da6 100644 (file)
@@ -1888,7 +1888,8 @@ typedef enum {
        SCSC_SQL,
        SCSC_API_EXPANSION,
        SCSC_RECOVER,
-       SCSC_SPS_PEAK
+       SCSC_SPS_PEAK,
+       SCSC_SPS_PEAK_FIVEMIN
 } switch_session_ctl_t;
 
 typedef enum {
index 2c6195c43144b575e77fb7092d554f45698c52c1..627d81273882b85e4982a7f9ce19367f25d358c7 100644 (file)
@@ -2012,7 +2012,7 @@ SWITCH_STANDARD_API(lan_addr_function)
 SWITCH_STANDARD_API(status_function)
 {
        switch_core_time_duration_t duration = { 0 };
-       int sps = 0, last_sps = 0, max_sps = 0;
+       int sps = 0, last_sps = 0, max_sps = 0, max_sps_fivemin = 0;
        switch_bool_t html = SWITCH_FALSE;      /* shortcut to format.html      */
        char * nl = "\n";                                       /* shortcut to format.nl        */
        stream_format format = { 0 };
@@ -2059,7 +2059,8 @@ SWITCH_STANDARD_API(status_function)
        switch_core_session_ctl(SCSC_LAST_SPS, &last_sps);
        switch_core_session_ctl(SCSC_SPS, &sps);
        switch_core_session_ctl(SCSC_SPS_PEAK, &max_sps);
-       stream->write_function(stream, "%d session(s) - %d out of max %d per sec peak %d %s", switch_core_session_count(), last_sps, sps, max_sps, nl);
+       switch_core_session_ctl(SCSC_SPS_PEAK_FIVEMIN, &max_sps_fivemin);
+       stream->write_function(stream, "%d session(s) - %d out of max %d per sec peak %d (%d last 5min) %s", switch_core_session_count(), last_sps, sps, max_sps, max_sps_fivemin, nl);
        stream->write_function(stream, "%d session(s) max%s", switch_core_session_limit(0), nl);
        stream->write_function(stream, "min idle cpu %0.2f/%0.2f%s", switch_core_min_idle_cpu(-1.0), switch_core_idle_cpu(), nl);
 
index b68f3e537e3915de343a7fc6e00eaa2bfe8aa8a1..6b5aeace950390c9d7f6f4113c6b88ffc1a0ee13 100644 (file)
@@ -146,9 +146,17 @@ peakSessionsPerSecond OBJECT-TYPE
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
-        "Maximum sessions per second"
+        "Peak sessions per second"
     ::= { systemStats 8 }
 
+peakSessionsPerSecond OBJECT-TYPE
+    SYNTAX      Gauge32
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+        "Peak sessions per second last 5 minutes"
+    ::= { systemStats 9 }
+
 
 ChannelEntry ::= SEQUENCE {
     chanIndex           Integer32,
index 179dda11e7c942950207918204891920366ece01..f9bd4610d65671f7b8402191bb8dac26d57d7776 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, 8);
+       netsnmp_register_scalar_group(netsnmp_create_handler_registration("systemStats", handle_systemStats, systemStats_oid, OID_LENGTH(systemStats_oid), HANDLER_CAN_RONLY), 1, 9);
 
        ch_table_info = switch_core_alloc(pool, sizeof(netsnmp_table_registration_info));
        netsnmp_table_helper_add_indexes(ch_table_info, ASN_INTEGER, 0);
@@ -216,6 +216,7 @@ int handle_systemStats(netsnmp_mib_handler *handler, netsnmp_handler_registratio
        switch(reqinfo->mode) {
        case MODE_GET:
                subid = requests->requestvb->name[reginfo->rootoid_len - 2];
+               snmp_log(LOG_DEBUG, "systemStats OID-suffix requested (%d)\n", (int) subid);
 
                switch (subid) {
                case SS_UPTIME:
@@ -261,6 +262,10 @@ int handle_systemStats(netsnmp_mib_handler *handler, netsnmp_handler_registratio
                        switch_core_session_ctl(SCSC_SPS_PEAK, &int_val);
                        snmp_set_var_typed_integer(requests->requestvb, ASN_GAUGE, int_val);
                        break;
+               case SS_PEAK_SESSIONS_PER_FIVEMIN:
+                       switch_core_session_ctl(SCSC_SPS_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 60bd7e5735d67a95f4d626bc144f3843608215d7..2cf5d3f964840272cb0fcb251f8fcf777446f56a 100644 (file)
@@ -47,6 +47,7 @@
 #define SS_SESSIONS_PER_SECOND         6
 #define SS_MAX_SESSIONS_PER_SECOND     7
 #define SS_PEAK_SESSIONS_PER_SECOND    8
+#define SS_PEAK_SESSIONS_PER_FIVEMIN   9
 
 /* .1.3.6.1.4.1.27880.1.9 */
 #define CH_INDEX                       1
index 151915c2b0fe4322c1d8f855d4f3457db91349e2..5964fa3019b4e0c235665ed047ca1afc2506abd9 100644 (file)
@@ -89,6 +89,7 @@ static void send_heartbeat(void)
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Max-Sessions", "%u", switch_core_session_limit(0));
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Session-Per-Sec", "%u", runtime.sps);
                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, "Idle-CPU", "%f", switch_core_idle_cpu());
                switch_event_fire(&event);
@@ -2484,6 +2485,9 @@ SWITCH_DECLARE(int32_t) switch_core_session_ctl(switch_session_ctl_t cmd, void *
                }
                newintval = runtime.sps_peak;
                break;
+       case SCSC_SPS_PEAK_FIVEMIN:
+               newintval = runtime.sps_peak_fivemin;
+               break;
        case SCSC_MAX_DTMF_DURATION:
                newintval = switch_core_max_dtmf_duration(oldintval);
                break;
index 1c25b11e6936d32b46b0127fb9f707254229a18c..d1c5926c8c8ba74dd1279c7bc99b5bf3a82be5a0 100644 (file)
@@ -802,7 +802,7 @@ SWITCH_MODULE_RUNTIME_FUNCTION(softtimer_runtime)
 {
        switch_time_t too_late = runtime.microseconds_per_tick * 1000;
        uint32_t current_ms = 0;
-       uint32_t x, tick = 0;
+       uint32_t x, tick = 0, sps_interval_ticks = 0;
        switch_time_t ts = 0, last = 0;
        int fwd_errs = 0, rev_errs = 0;
        int profile_tick = 0;
@@ -1009,6 +1009,16 @@ SWITCH_MODULE_RUNTIME_FUNCTION(softtimer_runtime)
                        switch_mutex_lock(runtime.throttle_mutex);
                        runtime.sps_last = runtime.sps_total - runtime.sps;
 
+                       if (sps_interval_ticks >= 300) {
+                               runtime.sps_peak_fivemin = 0;
+                               sps_interval_ticks = 0;
+                       }
+                       sps_interval_ticks++;
+                       
+                       if (runtime.sps_last > runtime.sps_peak_fivemin) {
+                               runtime.sps_peak_fivemin = runtime.sps_last;
+                       }
+
                        if (runtime.sps_last > runtime.sps_peak) {
                                runtime.sps_peak = runtime.sps_last;
                        }