# HG changeset patch # User Thomas Klausner # Date 1560344075 -7200 # Node ID 6b1a2405cebb710b339082d068ee106bd5aab562 # Parent d1c40627673cf1271476c7ecedb26767a7451d0c test_cc, loadtest_cc: write current statistics every second diff -r d1c40627673c -r 6b1a2405cebb extensions/loadtest_cc/loadtest_cc.c --- 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; } diff -r d1c40627673c -r 6b1a2405cebb extensions/test_cc/test_cc.c --- 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);