changeset 1372:6b1a2405cebb

test_cc, loadtest_cc: write current statistics every second
author Thomas Klausner <tk@giga.or.at>
date Wed, 12 Jun 2019 14:54:35 +0200
parents d1c40627673c
children a4dd31276f17
files extensions/loadtest_cc/loadtest_cc.c extensions/test_cc/test_cc.c
diffstat 2 files changed, 63 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/extensions/loadtest_cc/loadtest_cc.c	Mon Jun 10 16:56:40 2019 +0200
+++ b/extensions/loadtest_cc/loadtest_cc.c	Wed Jun 12 14:54:35 2019 +0200
@@ -67,6 +67,23 @@
 	time_t last;
 } statistics;
 
+void print_statistics(void) {
+	uint64_t missing;
+
+	if (statistics.first == 0 || statistics.last == 0 || statistics.last == statistics.first) {
+		return;
+	}
+
+	missing = statistics.sent - statistics.error - statistics.success;
+
+	fd_log_error("%s: %lld CCR messages sent in %llds (%.2f messages/second), %lld success (%.2f%%), %lld errors (%.2f%%), %lld missing (%.2f%%)",
+		     fd_g_config->cnf_diamid,
+		     (long long)statistics.sent, (long long)(statistics.last-statistics.first), (float)statistics.sent / (statistics.last-statistics.first),
+		     (long long)statistics.success,
+		     100*(float)statistics.success/statistics.sent, (long long)statistics.error, 100*(float)statistics.error/statistics.sent,
+		     missing, 100*(float)missing/statistics.sent);
+}
+
 static int handle_message(struct msg **msg) {
 	struct msg_hdr *hdr = NULL;
 	struct avp_hdr *ahdr = NULL;
@@ -298,12 +315,17 @@
 
 	do {
 		if (do_generate) {
+			time_t now;
 			if (statistics.first == 0) {
 				statistics.first = time(NULL);
 			}
 			msg = create_message(target);
 			fd_msg_send(&msg, NULL, NULL);
 			fd_log_debug("[%s] sent message", MODULE_NAME);
+			now = time(NULL);
+			if (statistics.last != now) {
+				print_statistics();
+			}
 			statistics.last = time(NULL);
 			statistics.sent++;
 		} else {
@@ -386,7 +408,6 @@
 /* And terminate it */
 void fd_ext_fini(void)
 {
-	uint64_t missing;
 	/* stop sending */
 	do_generate = 0;
 
@@ -399,13 +420,7 @@
 		ccr_local_hdl = NULL;
 	}
 
-	missing = statistics.sent - statistics.error - statistics.success;
-
-	fd_log_error("%lld messages sent in %llds (%.2f messages/second), %lld success (%.2f%%), %lld errors (%.2f%%), %lld missing (%.2f%%)",
-		     (long long)statistics.sent, (long long)(statistics.last-statistics.first), (float)statistics.sent / (statistics.last-statistics.first),
-		     (long long)statistics.success,
-		     100*(float)statistics.success/statistics.sent, (long long)statistics.error, 100*(float)statistics.error/statistics.sent,
-		     missing, 100*(float)missing/statistics.sent);
+	print_statistics();
 
 	return;
 }
--- a/extensions/test_cc/test_cc.c	Mon Jun 10 16:56:40 2019 +0200
+++ b/extensions/test_cc/test_cc.c	Wed Jun 12 14:54:35 2019 +0200
@@ -41,9 +41,25 @@
 
 #define MODULE_NAME "test_cc"
 
+struct statistics {
+        uint64_t sent;
+        time_t first;
+        time_t last;
+} statistics;
+
+void print_statistics(void) {
+        if (statistics.first == 0 || statistics.last == 0 || statistics.last == statistics.first) {
+                return;
+        }
+
+        fd_log_error("%s: %lld CCA messages sent in %llds (%.2f messages/second)", fd_g_config->cnf_diamid,
+                     (long long)statistics.sent, (long long)(statistics.last-statistics.first), (float)statistics.sent / (statistics.last-statistics.first));
+}
+
 static int ccr_handler(struct msg ** msg, struct avp * avp, struct session * sess, void * data, enum disp_action * act)
 {
 	struct msg_hdr *hdr = NULL;
+	time_t now;
 
 	TRACE_ENTRY("%p %p %p %p", msg, avp, sess, act);
 
@@ -133,6 +149,15 @@
 
 		/* Send the answer */
 		CHECK_FCT(fd_msg_send(msg, NULL, NULL));
+		now = time(NULL);
+		if (!statistics.first) {
+			statistics.first = now;
+		}
+		if (statistics.last != now) {
+			print_statistics();
+		}
+		statistics.last = now;
+		statistics.sent++;
 		fd_log_debug("reply sent");
 	} else {
 		/* We received an answer message, just discard it */
@@ -170,4 +195,19 @@
 	return 0;
 }
 
+/* And terminate it */
+void fd_ext_fini(void)
+{
+        /* Unregister the callbacks */
+        if (ccr_handler_hdl) {
+                CHECK_FCT_DO( fd_disp_unregister(&ccr_handler_hdl, NULL), );
+                ccr_handler_hdl = NULL;
+        }
+
+	print_statistics();
+
+        return;
+}
+
+
 EXTENSION_ENTRY(MODULE_NAME, cc_entry);
"Welcome to our mercurial repository"