From: Vsevolod Stakhov Date: Mon, 15 Oct 2018 14:22:33 +0000 (+0100) Subject: [Minor] Store more information about symbols added X-Git-Tag: 1.8.1~20 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=bedf3ff40869ab417aae52e36a2c4dc89772ae57;p=rspamd.git [Minor] Store more information about symbols added --- 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 */