Hello Everybody,

I did this patch with the following purpose:
Provide the bearerbox status web page with an online incoming and
outgoing sms rate display (msg/sec).

For example, if you take a look to the current bearerbox status web
page, you will see that the sms rate is the average since the
bearerbox is online, because the current code is:

        (float) counter_value(incoming_sms_counter)/t,
        (float) counter_value(outgoing_sms_counter)/t,

So, I added a new feature to the core group cfg: "sms-rate-refresh".
This will launch a thread that will be sampling the
"counter_value(incoming_sms_counter)" and
"counter_value(outgoing_sms_counter)" every "sms_rate_refresh"
seconds, and with this information we can calculate the current sms
rate (msg/sec).

If the "sms-rate-refresh" feature is not used at the configuration
file, by default, the average since bearerbox is online will be
displayed (like right now is coded).

Best Regards,
-- 
Rafael Alfaro.
 VAP O&M Engineer
 Telemovil El Salvador
 Centro Financiero Gigante, Torre "D", Piso 9
 San Salvador, El Salvador
 Mobile: +503 78889841
 NOC: +503 22809447
 Fax: +503 22809450
diff -urN gateway/gw/bearerbox.c gateway-patched/gw/bearerbox.c
--- gateway/gw/bearerbox.c	2008-01-09 14:06:57.000000000 -0600
+++ gateway-patched/gw/bearerbox.c	2008-03-23 20:30:26.000000000 -0600
@@ -95,6 +95,13 @@
 long max_incoming_sms_qlength;
 long max_outgoing_sms_qlength;
 
+/*sms rate refresh control*/
+long sms_rate_refresh;
+
+/*sms rate variables*/
+float outgoing_sms_rate;
+float incoming_sms_rate;
+
 
 /* this is not a list of items; instead it is used as
  * indicator to note how many threads we have.
@@ -372,6 +379,8 @@
         log_open(octstr_get_cstr(log), loglevel, GW_NON_EXCL);
         octstr_destroy(log);
     }
+    if (cfg_get_integer(&sms_rate_refresh, grp, octstr_imm("sms-rate-refresh")) == -1)
+        sms_rate_refresh = -1;
 
     if (check_config(cfg) == -1)
         panic(0, "Cannot start with corrupted configuration");
@@ -567,6 +576,19 @@
     }
 }
 
+static void sms_rate_refresh_thread(void *arg)
+{
+
+    gwthread_sleep(1);
+    while (1) {
+        int prev_outgoing_sms_counter = (int)counter_value(outgoing_sms_counter);
+        int prev_incoming_sms_counter = (int)counter_value(incoming_sms_counter);
+        gwthread_sleep(sms_rate_refresh);
+        outgoing_sms_rate = (float)(((float)counter_value(outgoing_sms_counter) - (float)prev_outgoing_sms_counter) / (float)sms_rate_refresh);
+        incoming_sms_rate = (float)(((float)counter_value(incoming_sms_counter) - (float)prev_incoming_sms_counter) / (float)sms_rate_refresh);
+    }
+
+}
 
 int main(int argc, char **argv)
 {
@@ -574,6 +596,8 @@
     Cfg *cfg;
     Octstr *filename;
 
+    long t_sms_rate_refresh;
+
     bb_status = BB_RUNNING;
     
     gwlib_init();
@@ -624,7 +648,10 @@
         gwlist_remove_producer(suspended);	
         gwlist_remove_producer(isolated);
     }
-
+    if (sms_rate_refresh != -1) {
+        t_sms_rate_refresh = gwthread_create(sms_rate_refresh_thread, NULL);
+        gwthread_wakeup(t_sms_rate_refresh);
+    }
     while (bb_status != BB_SHUTDOWN && bb_status != BB_DEAD && 
            gwlist_producer_count(flow_threads) > 0) {
         /* debug("bb", 0, "Main Thread: going to sleep."); */
@@ -824,7 +851,10 @@
         return octstr_create("Un-supported format");
 
     t = time(NULL) - start_time;
-    
+    if (sms_rate_refresh == -1) {
+        incoming_sms_rate = (float)counter_value(incoming_sms_counter) / t;
+        outgoing_sms_rate = (float)counter_value(outgoing_sms_counter) / t;
+    }    
     if (bb_status == BB_RUNNING)
         s = "running";
     else if (bb_status == BB_ISOLATED)
@@ -891,8 +921,8 @@
         counter_value(incoming_sms_counter), gwlist_len(incoming_sms),
         counter_value(outgoing_sms_counter), gwlist_len(outgoing_sms),
         store_messages(),
-        (float) counter_value(incoming_sms_counter)/t,
-        (float) counter_value(outgoing_sms_counter)/t,
+        incoming_sms_rate,
+        outgoing_sms_rate,
         dlr_messages(), dlr_type());
 
     octstr_destroy(version);
diff -urN gateway/gwlib/cfg.def gateway-patched/gwlib/cfg.def
--- gateway/gwlib/cfg.def	2008-03-16 05:38:16.000000000 -0600
+++ gateway-patched/gwlib/cfg.def	2008-03-23 19:43:54.000000000 -0600
@@ -126,6 +126,8 @@
     OCTSTR(sms-resend-retry)
     OCTSTR(sms-combine-concatenated-mo)
     OCTSTR(sms-combine-concatenated-mo-timeout)
+    OCTSTR(sms-rate-refresh)
+
 )
 
 

Reply via email to