From f8c3f93f5771cca04843b5fb2c54977c87bdfa7d Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Thu, 12 Aug 2021 14:29:59 -0400 Subject: [PATCH] TT#101150 add support for local copy-out of stats Change-Id: I1752fa8fe94799eedbac7f3fb674a61a0b6de162 --- daemon/call.c | 2 +- include/statistics.h | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/daemon/call.c b/daemon/call.c index fb77dfaae..bd3e28d4a 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -560,7 +560,7 @@ void call_timer(void *ptr) { call_timer_iterator(c, &hlp); ITERATE_CALL_LIST_NEXT_END(c); - stats_counters_ax_calc_avg(&rtpe_stats, run_diff_us); + stats_counters_ax_calc_avg(&rtpe_stats, run_diff_us, NULL); /* update statistics regarding requests per second */ update_requests_per_second_stats(&rtpe_totalstats_interval.offers_ps, atomic64_get(&rtpe_stats.intv.offers)); diff --git a/include/statistics.h b/include/statistics.h index 889fbd89a..93f0bbc3d 100644 --- a/include/statistics.h +++ b/include/statistics.h @@ -151,16 +151,22 @@ GQueue *statistics_gather_metrics(void); void statistics_free_metrics(GQueue **); const char *statistics_ng(bencode_item_t *input, bencode_item_t *output); -INLINE void stats_counters_ax_calc_avg1(atomic64 *ax_var, atomic64 *intv_var, long long run_diff_us) { +INLINE void stats_counters_ax_calc_avg1(atomic64 *ax_var, atomic64 *intv_var, atomic64 *loc_var, + long long run_diff_us) +{ uint64_t tmp = atomic64_get_set(ax_var, 0); + if (loc_var) + atomic64_set(loc_var, tmp); atomic64_set(intv_var, tmp * 1000000LL / run_diff_us); } -INLINE void stats_counters_ax_calc_avg(struct global_stats_ax *stats, long long run_diff_us) { +INLINE void stats_counters_ax_calc_avg(struct global_stats_ax *stats, long long run_diff_us, + struct global_stats_counter *loc) +{ if (run_diff_us <= 0) return; -#define F(x) stats_counters_ax_calc_avg1(&stats->ax.x, &stats->intv.x, run_diff_us); +#define F(x) stats_counters_ax_calc_avg1(&stats->ax.x, &stats->intv.x, loc ? &loc->x : NULL, run_diff_us); #include "counter_stats_fields.inc" #undef F }