From b4295684a5e02da89cbc665e16b9b9dd611f255d Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Tue, 31 Aug 2021 15:25:50 -0400 Subject: [PATCH] TT#101150 convert stats gauge handling to macros Change-Id: I583bb1a09196d055710ee5e1d379541f23c54117 --- daemon/call.c | 2 +- daemon/statistics.c | 22 +++++++++++----------- include/call.h | 12 ++++++++++++ include/gauge_stats_fields.inc | 5 +++++ include/statistics.h | 8 +++----- 5 files changed, 32 insertions(+), 17 deletions(-) create mode 100644 include/gauge_stats_fields.inc diff --git a/daemon/call.c b/daemon/call.c index 3451ab724..27d74d49f 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -553,7 +553,7 @@ void call_timer(void *ptr) { stats_counters_min_max(&rtpe_stats_graphite_min_max, &rtpe_stats.intv); // stats derived while iterating calls - atomic64_set(&rtpe_stats_gauge.transcoded_media, hlp.transcoded_media); + RTPE_GAUGE_SET(transcoded_media, hlp.transcoded_media); i = kernel_list(); while (i) { diff --git a/daemon/statistics.c b/daemon/statistics.c index 4434ff080..617941e79 100644 --- a/daemon/statistics.c +++ b/daemon/statistics.c @@ -98,15 +98,15 @@ void statistics_update_ip46_inc_dec(struct call* c, int op) { if (c->is_ipv4_media_offer && !c->is_ipv6_media_offer) { // answer is ipv4 only if (c->is_ipv4_media_answer && !c->is_ipv6_media_answer) { - (op == CMC_INCREMENT) ? atomic64_inc(&rtpe_stats_gauge.ipv4_sessions) : atomic64_dec(&rtpe_stats_gauge.ipv4_sessions); + RTPE_GAUGE_ADD(ipv4_sessions, op == CMC_INCREMENT ? 1 : -1); // answer is ipv6 only } else if (!c->is_ipv4_media_answer && c->is_ipv6_media_answer) { - (op == CMC_INCREMENT) ? atomic64_inc(&rtpe_stats_gauge.mixed_sessions) : atomic64_dec(&rtpe_stats_gauge.mixed_sessions); + RTPE_GAUGE_ADD(mixed_sessions, op == CMC_INCREMENT ? 1 : -1); // answer is both ipv4 and ipv6 } else if (c->is_ipv4_media_answer && c->is_ipv6_media_answer) { - (op == CMC_INCREMENT) ? atomic64_inc(&rtpe_stats_gauge.ipv4_sessions) : atomic64_dec(&rtpe_stats_gauge.ipv4_sessions); + RTPE_GAUGE_ADD(ipv4_sessions, op == CMC_INCREMENT ? 1 : -1); // answer is neither ipv4 nor ipv6 } else { @@ -117,15 +117,15 @@ void statistics_update_ip46_inc_dec(struct call* c, int op) { } else if (!c->is_ipv4_media_offer && c->is_ipv6_media_offer) { // answer is ipv4 only if (c->is_ipv4_media_answer && !c->is_ipv6_media_answer) { - (op == CMC_INCREMENT) ? atomic64_inc(&rtpe_stats_gauge.mixed_sessions) : atomic64_dec(&rtpe_stats_gauge.mixed_sessions); + RTPE_GAUGE_ADD(mixed_sessions, op == CMC_INCREMENT ? 1 : -1); // answer is ipv6 only } else if (!c->is_ipv4_media_answer && c->is_ipv6_media_answer) { - (op == CMC_INCREMENT) ? atomic64_inc(&rtpe_stats_gauge.ipv6_sessions) : atomic64_dec(&rtpe_stats_gauge.ipv6_sessions); + RTPE_GAUGE_ADD(ipv6_sessions, op == CMC_INCREMENT ? 1 : -1); // answer is both ipv4 and ipv6 } else if (c->is_ipv4_media_answer && c->is_ipv6_media_answer) { - (op == CMC_INCREMENT) ? atomic64_inc(&rtpe_stats_gauge.ipv6_sessions) : atomic64_dec(&rtpe_stats_gauge.ipv6_sessions); + RTPE_GAUGE_ADD(ipv6_sessions, op == CMC_INCREMENT ? 1 : -1); // answer is neither ipv4 nor ipv6 } else { @@ -136,15 +136,15 @@ void statistics_update_ip46_inc_dec(struct call* c, int op) { } else if (c->is_ipv4_media_offer && c->is_ipv6_media_offer) { // answer is ipv4 only if (c->is_ipv4_media_answer && !c->is_ipv6_media_answer) { - (op == CMC_INCREMENT) ? atomic64_inc(&rtpe_stats_gauge.ipv4_sessions) : atomic64_dec(&rtpe_stats_gauge.ipv4_sessions); + RTPE_GAUGE_ADD(ipv4_sessions, op == CMC_INCREMENT ? 1 : -1); // answer is ipv6 only } else if (!c->is_ipv4_media_answer && c->is_ipv6_media_answer) { - (op == CMC_INCREMENT) ? atomic64_inc(&rtpe_stats_gauge.ipv6_sessions) : atomic64_dec(&rtpe_stats_gauge.ipv6_sessions); + RTPE_GAUGE_ADD(ipv6_sessions, op == CMC_INCREMENT ? 1 : -1); // answer is both ipv4 and ipv6 } else if (c->is_ipv4_media_answer && c->is_ipv6_media_answer) { - (op == CMC_INCREMENT) ? atomic64_inc(&rtpe_stats_gauge.mixed_sessions) : atomic64_dec(&rtpe_stats_gauge.mixed_sessions); + RTPE_GAUGE_ADD(mixed_sessions, op == CMC_INCREMENT ? 1 : -1); // answer is neither ipv4 nor ipv6 } else { @@ -162,7 +162,7 @@ void statistics_update_ip46_inc_dec(struct call* c, int op) { void statistics_update_foreignown_dec(struct call* c) { if (IS_FOREIGN_CALL(c)) { - atomic64_dec(&rtpe_stats_gauge.foreign_sessions); + RTPE_GAUGE_DEC(foreign_sessions); } if(IS_OWN_CALL(c)) { @@ -184,7 +184,7 @@ void statistics_update_foreignown_inc(struct call* c) { mutex_unlock(&rtpe_totalstats_interval.managed_sess_lock); } else if (IS_FOREIGN_CALL(c)) { /* foreign call*/ - atomic64_inc(&rtpe_stats_gauge.foreign_sessions); + RTPE_GAUGE_INC(foreign_sessions); RTPE_STATS_INC(foreign_sess); } diff --git a/include/call.h b/include/call.h index 8dcf481bc..3de93caec 100644 --- a/include/call.h +++ b/include/call.h @@ -542,6 +542,18 @@ extern GHashTable *rtpe_callhash; extern struct call_iterator_list rtpe_call_iterators[NUM_CALL_ITERATORS]; extern struct global_stats_gauge rtpe_stats_gauge; + +#define RTPE_GAUGE_SET(field, num) \ + do { \ + atomic64_set(&rtpe_stats_gauge.field, num); \ + } while (0) +#define RTPE_GAUGE_ADD(field, num) \ + do { \ + atomic64_add(&rtpe_stats_gauge.field, num); \ + } while (0) +#define RTPE_GAUGE_INC(field) RTPE_GAUGE_ADD(field, 1) +#define RTPE_GAUGE_DEC(field) RTPE_GAUGE_ADD(field, -1) + extern struct global_stats_ax rtpe_stats; extern struct global_stats_counter rtpe_stats_interval; // accumulators copied out once per interval extern struct global_stats_counter rtpe_stats_cumulative; // total, cumulative diff --git a/include/gauge_stats_fields.inc b/include/gauge_stats_fields.inc new file mode 100644 index 000000000..9fcee8b85 --- /dev/null +++ b/include/gauge_stats_fields.inc @@ -0,0 +1,5 @@ +F(foreign_sessions) +F(transcoded_media) +F(ipv4_sessions) +F(ipv6_sessions) +F(mixed_sessions) diff --git a/include/statistics.h b/include/statistics.h index 40c7d2140..bd59f9782 100644 --- a/include/statistics.h +++ b/include/statistics.h @@ -21,11 +21,9 @@ struct stream_stats { // "gauge" style stats struct global_stats_gauge { - atomic64 foreign_sessions; // unresponsible via redis notification - atomic64 transcoded_media; - atomic64 ipv4_sessions; - atomic64 ipv6_sessions; - atomic64 mixed_sessions; +#define F(x) atomic64 x; +#include "gauge_stats_fields.inc" +#undef F }; // "counter" style stats that are incremental and are kept cumulative or per-interval