aboutsummaryrefslogtreecommitdiffstats
path: root/src/libserver
diff options
context:
space:
mode:
Diffstat (limited to 'src/libserver')
-rw-r--r--src/libserver/symbols_cache.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/libserver/symbols_cache.c b/src/libserver/symbols_cache.c
index a47500968..b2a363500 100644
--- a/src/libserver/symbols_cache.c
+++ b/src/libserver/symbols_cache.c
@@ -80,7 +80,8 @@ struct symbols_cache {
};
struct counter_data {
- gdouble value;
+ gdouble mean;
+ gdouble stddev;
gint number;
};
@@ -328,12 +329,14 @@ rspamd_set_counter (struct cache_item *item, gdouble value)
/* Cumulative moving average using per-process counter data */
if (cd->number == 0) {
- cd->value = 0;
+ cd->mean = 0;
+ cd->stddev = 0;
}
- cd->value = cd->value + (value - cd->value) / (gdouble)(++cd->number);
+ cd->mean += (value - cd->mean) / (gdouble)(++cd->number);
+ cd->stddev += (value - cd->mean) * (value - cd->mean);
- return cd->value;
+ return cd->mean;
}
static void
@@ -1840,9 +1843,9 @@ rspamd_symbols_cache_resort_cb (gint fd, short what, gpointer ud)
if (item->cd->number > 0) {
item->st->avg_counter += item->cd->number + 1;
item->st->avg_time = item->st->avg_time +
- (item->cd->value - item->st->avg_time) /
+ (item->cd->mean - item->st->avg_time) /
(gdouble)item->st->avg_counter;
- item->cd->value = item->st->avg_time;
+ item->cd->mean = item->st->avg_time;
item->cd->number = item->st->avg_counter;
}
}