aboutsummaryrefslogtreecommitdiffstats
path: root/src/libmime
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2018-10-15 15:22:33 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2018-10-15 16:24:15 +0100
commitbedf3ff40869ab417aae52e36a2c4dc89772ae57 (patch)
tree03659ae153c38bf6f591c7999faa7f1bf1f34269 /src/libmime
parent94f36ba73ea4d91273245cff791493e5b17f6e2a (diff)
downloadrspamd-bedf3ff40869ab417aae52e36a2c4dc89772ae57.tar.gz
rspamd-bedf3ff40869ab417aae52e36a2c4dc89772ae57.zip
[Minor] Store more information about symbols added
Diffstat (limited to 'src/libmime')
-rw-r--r--src/libmime/filter.c20
-rw-r--r--src/libmime/filter.h4
2 files changed, 20 insertions, 4 deletions
diff --git a/src/libmime/filter.c b/src/libmime/filter.c
index 7d7836d6f..d2b549251 100644
--- a/src/libmime/filter.c
+++ b/src/libmime/filter.c
@@ -54,13 +54,10 @@ rspamd_create_metric_result (struct rspamd_task *task)
return metric_res;
}
- metric_res = rspamd_mempool_alloc (task->task_pool,
+ metric_res = rspamd_mempool_alloc0 (task->task_pool,
sizeof (struct rspamd_metric_result));
metric_res->symbols = kh_init (rspamd_symbols_hash);
metric_res->sym_groups = kh_init (rspamd_symbols_group_hash);
- metric_res->grow_factor = 0;
- metric_res->score = 0;
- metric_res->passthrough_result = NULL;
/* Optimize allocation */
kh_resize (rspamd_symbols_group_hash, metric_res->sym_groups, 4);
@@ -364,9 +361,24 @@ insert_metric_result (struct rspamd_task *task,
}
if (!isnan (final_score)) {
+#ifndef DBL_EPSILON
+#define DBL_EPSILON 2.2204460492503131e-16
+#endif
+ const double epsilon = DBL_EPSILON;
+
metric_res->score += final_score;
metric_res->grow_factor = next_gf;
s->score = final_score;
+
+ /* We ignore zero scored symbols */
+ if (final_score > epsilon) {
+ metric_res->npositive ++;
+ metric_res->positive_score += final_score;
+ }
+ else if (final_score < epsilon) {
+ metric_res->nnegative ++;
+ metric_res->negative_score += fabs (final_score);
+ }
}
else {
s->score = 0;
diff --git a/src/libmime/filter.h b/src/libmime/filter.h
index fdd0f8dc9..78d67e77c 100644
--- a/src/libmime/filter.h
+++ b/src/libmime/filter.h
@@ -77,6 +77,10 @@ struct rspamd_metric_result {
double score; /**< total score */
double grow_factor; /**< current grow factor */
struct rspamd_passthrough_result *passthrough_result;
+ guint npositive;
+ guint nnegative;
+ double positive_score;
+ double negative_score;
khash_t(rspamd_symbols_hash) *symbols; /**< symbols of metric */
khash_t(rspamd_symbols_group_hash) *sym_groups; /**< groups of symbols */
gdouble actions_limits[METRIC_ACTION_MAX]; /**< set of actions for this metric */