aboutsummaryrefslogtreecommitdiffstats
path: root/src/libserver
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2017-01-24 12:24:48 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2017-01-24 12:25:22 +0000
commitf217ad81ea039a7662a8fa58b9d3d6b8098ff65b (patch)
tree79d77788f278a50bac62238910349aec80d20c19 /src/libserver
parent241e2f4c577df4b5c9f52369c3d5041996956feb (diff)
downloadrspamd-f217ad81ea039a7662a8fa58b9d3d6b8098ff65b.tar.gz
rspamd-f217ad81ea039a7662a8fa58b9d3d6b8098ff65b.zip
[Minor] Store stddev for counters
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;
}
}