Index: gw/smscconn_p.h
===================================================================
--- gw/smscconn_p.h (revision 4871)
+++ gw/smscconn_p.h (working copy)
@@ -144,6 +144,7 @@
#include "gwlib/gwlib.h"
#include "gwlib/regex.h"
#include "smscconn.h"
+#include "load.h"
struct smscconn {
/* variables set by appropriate SMSCConn driver */
@@ -207,6 +208,11 @@
long max_sms_octets; /* max allowed octets for this SMSC */
+ Load *outgoing_sms_load;
+ Load *incoming_sms_load;
+ Load *incoming_dlr_load;
+ Load *outgoing_dlr_load;
+
/* XXX: move rest global data from Smsc here
*/
Index: gw/smscconn.c
===================================================================
--- gw/smscconn.c (revision 4871)
+++ gw/smscconn.c (working copy)
@@ -176,6 +176,31 @@
conn->failed = counter_create();
conn->flow_mutex = mutex_create();
+ conn->outgoing_sms_load = load_create();
+ /* add 60,300,-1 entries */
+ load_add_interval(conn->outgoing_sms_load, 60);
+ load_add_interval(conn->outgoing_sms_load, 300);
+ load_add_interval(conn->outgoing_sms_load, -1);
+
+ conn->incoming_sms_load = load_create();
+ /* add 60,300,-1 entries */
+ load_add_interval(conn->incoming_sms_load, 60);
+ load_add_interval(conn->incoming_sms_load, 300);
+ load_add_interval(conn->incoming_sms_load, -1);
+
+ conn->incoming_dlr_load = load_create();
+ /* add 60,300,-1 entries to dlr */
+ load_add_interval(conn->incoming_dlr_load, 60);
+ load_add_interval(conn->incoming_dlr_load, 300);
+ load_add_interval(conn->incoming_dlr_load, -1);
+
+ conn->outgoing_dlr_load = load_create();
+ /* add 60,300,-1 entries to dlr */
+ load_add_interval(conn->outgoing_dlr_load, 60);
+ load_add_interval(conn->outgoing_dlr_load, 300);
+ load_add_interval(conn->outgoing_dlr_load, -1);
+
+
#define GET_OPTIONAL_VAL(x, n) x = cfg_get(grp, octstr_imm(n))
#define SPLIT_OPTIONAL_VAL(x, n) \
do { \
@@ -341,6 +366,11 @@
counter_destroy(conn->sent_dlr);
counter_destroy(conn->failed);
+ load_destroy(conn->incoming_sms_load);
+ load_destroy(conn->incoming_dlr_load);
+ load_destroy(conn->outgoing_sms_load);
+ load_destroy(conn->outgoing_dlr_load);
+
octstr_destroy(conn->name);
octstr_destroy(conn->id);
octstr_destroy(conn->admin_id);
Index: gw/bb_smscconn.c
===================================================================
--- gw/bb_smscconn.c (revision 4871)
+++ gw/bb_smscconn.c (working copy)
@@ -283,12 +283,18 @@
bb_alog_sms(conn, sms, "Sent SMS");
counter_increase(outgoing_sms_counter);
load_increase(outgoing_sms_load);
- if (conn) counter_increase(conn->sent);
+ if (conn != NULL) {
+ counter_increase(conn->sent);
+ load_increase(conn->outgoing_sms_load);
+ }
} else {
bb_alog_sms(conn, sms, "Sent DLR");
counter_increase(outgoing_dlr_counter);
load_increase(outgoing_dlr_load);
- if (conn) counter_increase(conn->sent_dlr);
+ if (conn != NULL) {
+ counter_increase(conn->sent_dlr);
+ load_increase(conn->outgoing_dlr_load);
+ }
}
/* generate relay confirmancy message */
@@ -469,8 +475,10 @@
case concat_pending:
counter_increase(incoming_sms_counter); /* ?? */
load_increase(incoming_sms_load);
- if (conn != NULL)
+ if (conn != NULL) {
counter_increase(conn->received);
+ load_increase(conn->incoming_sms_load);
+ }
msg_destroy(sms);
return SMSCCONN_SUCCESS;
case concat_complete:
@@ -519,12 +527,18 @@
bb_alog_sms(conn, sms, "Receive SMS");
counter_increase(incoming_sms_counter);
load_increase(incoming_sms_load);
- if (conn != NULL) counter_increase(conn->received);
+ if (conn != NULL) {
+ counter_increase(conn->received);
+ load_increase(conn->incoming_sms_load);
+ }
} else {
bb_alog_sms(conn, sms, "Receive DLR");
counter_increase(incoming_dlr_counter);
load_increase(incoming_dlr_load);
- if (conn != NULL) counter_increase(conn->received_dlr);
+ if (conn != NULL) {
+ counter_increase(conn->received_dlr);
+ load_increase(conn->incoming_dlr_load);
+ }
}
msg_destroy(sms);
@@ -1105,6 +1119,10 @@
const Octstr *conn_id = NULL;
const Octstr *conn_admin_id = NULL;
const Octstr *conn_name = NULL;
+ float incoming_sms_load_0, incoming_sms_load_1, incoming_sms_load_2;
+ float outgoing_sms_load_0, outgoing_sms_load_1, outgoing_sms_load_2;
+ float incoming_dlr_load_0, incoming_dlr_load_1, incoming_dlr_load_2;
+ float outgoing_dlr_load_0, outgoing_dlr_load_1, outgoing_dlr_load_2;
if ((lb = bb_status_linebreak(status_type)) == NULL)
return octstr_create("Un-supported format");
@@ -1127,6 +1145,10 @@
gw_rwlock_rdlock(&smsc_list_lock);
for (i = 0; i < gwlist_len(smsc_list); i++) {
+ incoming_sms_load_0 = incoming_sms_load_1 = incoming_sms_load_2 = 0.0;
+ outgoing_sms_load_0 = outgoing_sms_load_1 = outgoing_sms_load_2 = 0.0;
+ incoming_dlr_load_0 = incoming_dlr_load_1 = incoming_dlr_load_2 = 0.0;
+ outgoing_dlr_load_0 = outgoing_dlr_load_1 = outgoing_dlr_load_2 = 0.0;
conn = gwlist_get(smsc_list, i);
if ((smscconn_info(conn, &info) == -1)) {
@@ -1171,6 +1193,18 @@
case SMSCCONN_ACTIVE:
case SMSCCONN_ACTIVE_RECV:
sprintf(tmp3, "online %lds", info.online);
+ incoming_sms_load_0 = load_get(incoming_sms_load,0);
+ incoming_sms_load_1 = load_get(incoming_sms_load,1);
+ incoming_sms_load_2 = load_get(incoming_sms_load,2);
+ outgoing_sms_load_0 = load_get(outgoing_sms_load,0);
+ outgoing_sms_load_1 = load_get(outgoing_sms_load,1);
+ outgoing_sms_load_2 = load_get(outgoing_sms_load,2);
+ incoming_dlr_load_0 = load_get(incoming_dlr_load,0);
+ incoming_dlr_load_1 = load_get(incoming_dlr_load,1);
+ incoming_dlr_load_2 = load_get(incoming_dlr_load,2);
+ outgoing_dlr_load_0 = load_get(outgoing_dlr_load,0);
+ outgoing_dlr_load_1 = load_get(outgoing_dlr_load,1);
+ outgoing_dlr_load_2 = load_get(outgoing_dlr_load,2);
break;
case SMSCCONN_DISCONNECTED:
sprintf(tmp3, "disconnected");
@@ -1189,19 +1223,44 @@
}
if (status_type == BBSTATUS_XML)
- octstr_format_append(tmp, "%s\n\t\t"
- "%ld%ld\n\t\t"
- "%ld%ld\n\t\t"
- "%ld\n\t\t"
- "%ld\n\t\n", tmp3,
- info.received, info.received_dlr, info.sent, info.sent_dlr, info.failed,
- info.queued);
+ octstr_format_append(tmp, "%s\n"
+ "\t\t%ld\n"
+ "\t\t%ld\n"
+ "\t\t\n"
+ "\t\t\t%ld\n"
+ "\t\t\t%ld\n"
+ "\t\t\t%.2f,%.2f,%.2f\n"
+ "\t\t\t%.2f,%.2f,%.2f\n"
+ "\t\t\n\t\t\n"
+ "\t\t\t%ld\n"
+ "\t\t\t%ld\n"
+ "\t\t\t%.2f,%.2f,%.2f\n"
+ "\t\t\t%.2f,%.2f,%.2f\n"
+ "\t\t\n"
+ "\t\n", tmp3,
+ info.failed, info.queued, info.received, info.sent,
+ incoming_sms_load_0, incoming_sms_load_1, incoming_sms_load_2,
+ outgoing_sms_load_0, outgoing_sms_load_1, outgoing_sms_load_2,
+ info.received_dlr, info.sent_dlr,
+ incoming_dlr_load_0, incoming_dlr_load_1, incoming_dlr_load_2,
+ outgoing_dlr_load_0, outgoing_dlr_load_1, outgoing_dlr_load_2);
else
octstr_format_append(tmp, " (%s, rcvd: sms %ld / dlr %ld, sent: sms %ld / dlr %ld, failed %ld, "
- "queued %ld msgs)%s", tmp3,
+ "queued %ld msgs), "
+ "SMS: inbound (%.2f,%.2f,%.2f) msg/sec, outbound (%.2f,%.2f,%.2f) msg/sec, "
+ "DLR: inbound (%.2f,%.2f,%.2f) msg/sec, outbound (%.2f,%.2f,%.2f) msg/sec%s", tmp3,
info.received, info.received_dlr, info.sent, info.sent_dlr, info.failed,
- info.queued, lb);
+ info.queued,
+ incoming_sms_load_0, incoming_sms_load_1, incoming_sms_load_2,
+ outgoing_sms_load_0, outgoing_sms_load_1, outgoing_sms_load_2,
+ incoming_dlr_load_0, incoming_dlr_load_1, incoming_dlr_load_2,
+ outgoing_dlr_load_0, outgoing_dlr_load_1, outgoing_dlr_load_2,
+ lb);
}
+
+
+
+
gw_rwlock_unlock(&smsc_list_lock);
if (para)