Browse Source

TT#156052 add call duration stddev metric

Change-Id: Idb8cf304323ba33e1cdbd4dbe343dc508041cc93
pull/1421/head
Richard Fuchs 4 years ago
parent
commit
8b79a6074f
3 changed files with 69 additions and 6 deletions
  1. +12
    -6
      daemon/statistics.c
  2. +1
    -0
      include/counter_stats_fields.inc
  3. +56
    -0
      t/test-stats.c

+ 12
- 6
daemon/statistics.c View File

@ -177,6 +177,8 @@ void statistics_update_oneway(struct call* c) {
c->destroyed = rtpe_now;
long long duration = timeval_diff(&c->destroyed, &c->created);
RTPE_STATS_ADD(call_duration, duration);
duration /= 1000; // millisecond precision for the squared value to avoid overflows
RTPE_STATS_ADD(call_duration2, duration * duration);
}
if (ml->term_reason==FINAL_TIMEOUT)
@ -328,7 +330,6 @@ void statistics_update_oneway(struct call* c) {
GQueue *statistics_gather_metrics(void) {
GQueue *ret = g_queue_new();
struct timeval avg;
double calls_dur_iv;
uint64_t cur_sessions, num_sessions, min_sess_iv, max_sess_iv;
@ -390,8 +391,7 @@ GQueue *statistics_gather_metrics(void) {
num_sessions = atomic64_get(&rtpe_stats_cumulative.managed_sess);
uint64_t total_duration = atomic64_get(&rtpe_stats_cumulative.call_duration);
long long avg_us = num_sessions ? total_duration / num_sessions : 0;
timeval_from_us(&avg, avg_us);
uint64_t avg_us = num_sessions ? total_duration / num_sessions : 0;
HEADER("}", "");
HEADER("totalstatistics", "Total statistics (does not include current running sessions):");
@ -464,13 +464,19 @@ GQueue *statistics_gather_metrics(void) {
PROM("zero_packet_streams_total", "counter");
METRIC("onewaystreams", "Total number of 1-way streams", UINT64F, UINT64F,atomic64_get(&rtpe_stats_cumulative.oneway_stream_sess));
PROM("one_way_sessions_total", "counter");
METRICva("avgcallduration", "Average call duration", "%" TIME_T_INT_FMT ".%06" TIME_T_INT_FMT, "%" TIME_T_INT_FMT ".%06" TIME_T_INT_FMT " seconds", avg.tv_sec, avg.tv_usec);
METRICva("avgcallduration", "Average call duration", "%.6f", "%.6f seconds", (double) avg_us / 1000000.0);
PROM("call_duration_avg", "gauge");
calls_dur_iv = (double) total_duration / 1000000.0;
METRICva("totalcallsduration", "Total calls duration", "%.6f", "%.6f seconds", calls_dur_iv);
METRICva("totalcallsduration", "Total calls duration", "%.6f", "%.6f seconds", (double) total_duration / 1000000.0);
PROM("call_duration_total", "counter");
total_duration = atomic64_get(&rtpe_stats_cumulative.call_duration2);
METRICva("totalcallsduration2", "Total calls duration squared", "%.6f", "%.6f seconds squared", (double) total_duration / 1000000.0);
PROM("call_duration2_total", "counter");
double variance = num_sessions ? fabs((double) total_duration / (double) num_sessions - ((double) avg_us / 1000.0) * ((double) avg_us / 1000.0)) : 0.0;
METRICva("totalcallsduration_stddev", "Total calls duration standard deviation", "%.6f", "%.6f seconds", sqrt(variance) / 1000.0);
calls_dur_iv = (double) atomic64_get_na(&rtpe_stats_graphite_interval.total_calls_duration_intv) / 1000000.0;
min_sess_iv = atomic64_get(&rtpe_stats_gauge_graphite_min_max_interval.min.total_sessions);
max_sess_iv = atomic64_get(&rtpe_stats_gauge_graphite_min_max_interval.max.total_sessions);


+ 1
- 0
include/counter_stats_fields.inc View File

@ -17,6 +17,7 @@ F(forced_term_sess)
F(nopacket_relayed_sess)
F(oneway_stream_sess)
F(call_duration)
F(call_duration2)
F(total_calls_duration_intv)
F(mos)
F(mos2)


+ 56
- 0
t/test-stats.c View File

@ -434,6 +434,14 @@ int main(void) {
"totalcallsduration\n"
"0.000000 seconds\n"
"0.000000\n"
"Total calls duration squared\n"
"totalcallsduration2\n"
"0.000000 seconds squared\n"
"0.000000\n"
"Total calls duration standard deviation\n"
"totalcallsduration_stddev\n"
"0.000000 seconds\n"
"0.000000\n"
"\n"
"\n"
"}\n"
@ -1303,6 +1311,14 @@ int main(void) {
"totalcallsduration\n"
"0.000000 seconds\n"
"0.000000\n"
"Total calls duration squared\n"
"totalcallsduration2\n"
"0.000000 seconds squared\n"
"0.000000\n"
"Total calls duration standard deviation\n"
"totalcallsduration_stddev\n"
"0.000000 seconds\n"
"0.000000\n"
"\n"
"\n"
"}\n"
@ -2169,6 +2185,14 @@ int main(void) {
"totalcallsduration\n"
"0.000000 seconds\n"
"0.000000\n"
"Total calls duration squared\n"
"totalcallsduration2\n"
"0.000000 seconds squared\n"
"0.000000\n"
"Total calls duration standard deviation\n"
"totalcallsduration_stddev\n"
"0.000000 seconds\n"
"0.000000\n"
"\n"
"\n"
"}\n"
@ -3048,6 +3072,14 @@ int main(void) {
"totalcallsduration\n"
"0.000000 seconds\n"
"0.000000\n"
"Total calls duration squared\n"
"totalcallsduration2\n"
"0.000000 seconds squared\n"
"0.000000\n"
"Total calls duration standard deviation\n"
"totalcallsduration_stddev\n"
"0.000000 seconds\n"
"0.000000\n"
"\n"
"\n"
"}\n"
@ -3922,6 +3954,14 @@ int main(void) {
"totalcallsduration\n"
"0.000000 seconds\n"
"0.000000\n"
"Total calls duration squared\n"
"totalcallsduration2\n"
"0.000000 seconds squared\n"
"0.000000\n"
"Total calls duration standard deviation\n"
"totalcallsduration_stddev\n"
"0.000000 seconds\n"
"0.000000\n"
"\n"
"\n"
"}\n"
@ -4791,6 +4831,14 @@ int main(void) {
"totalcallsduration\n"
"0.000000 seconds\n"
"0.000000\n"
"Total calls duration squared\n"
"totalcallsduration2\n"
"0.000000 seconds squared\n"
"0.000000\n"
"Total calls duration standard deviation\n"
"totalcallsduration_stddev\n"
"0.000000 seconds\n"
"0.000000\n"
"\n"
"\n"
"}\n"
@ -5662,6 +5710,14 @@ int main(void) {
"totalcallsduration\n"
"186.000000 seconds\n"
"186.000000\n"
"Total calls duration squared\n"
"totalcallsduration2\n"
"22298.000000 seconds squared\n"
"22298.000000\n"
"Total calls duration standard deviation\n"
"totalcallsduration_stddev\n"
"50.000000 seconds\n"
"50.000000\n"
"\n"
"\n"
"}\n"


Loading…
Cancel
Save