From: Vsevolod Stakhov Date: Tue, 29 Mar 2016 08:59:11 +0000 (+0100) Subject: [Feature] Store actions limits in metric result X-Git-Tag: 1.2.2~29 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=365d60218dac672472b0405a088e06394a1a371c;p=rspamd.git [Feature] Store actions limits in metric result --- diff --git a/src/libmime/filter.c b/src/libmime/filter.c index cc34fcb0c..f5c819821 100644 --- a/src/libmime/filter.c +++ b/src/libmime/filter.c @@ -29,6 +29,7 @@ rspamd_create_metric_result (struct rspamd_task *task, const gchar *name) { struct metric_result *metric_res; struct metric *metric; + guint i; metric_res = g_hash_table_lookup (task->results, name); @@ -53,12 +54,16 @@ rspamd_create_metric_result (struct rspamd_task *task, const gchar *name) rspamd_mempool_add_destructor (task->task_pool, (rspamd_mempool_destruct_t) g_hash_table_unref, metric_res->sym_groups); - metric_res->checked = FALSE; metric_res->metric = metric; metric_res->grow_factor = 0; metric_res->score = 0; g_hash_table_insert (task->results, (gpointer) metric->name, metric_res); + + for (i = 0; i < METRIC_ACTION_MAX; i++) { + metric_res->actions_limits[i] = metric->actions[i].score; + } + metric_res->action = METRIC_ACTION_MAX; return metric_res; diff --git a/src/libmime/filter.h b/src/libmime/filter.h index bacbede06..6bb0ef4e9 100644 --- a/src/libmime/filter.h +++ b/src/libmime/filter.h @@ -30,12 +30,11 @@ struct symbol { struct metric_result { struct metric *metric; /**< pointer to metric structure */ double score; /**< total score */ - double required_score; /**< real required score */ double grow_factor; /**< current grow factor */ GHashTable *symbols; /**< symbols of metric */ GHashTable *sym_groups; /**< groups of symbols */ - gboolean checked; /**< whether metric result is consolidated */ - enum rspamd_metric_action action; /**< the current action */ + gdouble actions_limits[METRIC_ACTION_MAX]; /**< set of actions for this metric */ + enum rspamd_metric_action action; /**< the current action */ }; /** diff --git a/src/libserver/protocol.c b/src/libserver/protocol.c index ef1c25b19..f949ca0a5 100644 --- a/src/libserver/protocol.c +++ b/src/libserver/protocol.c @@ -802,7 +802,7 @@ rspamd_metric_result_ucl (struct rspamd_task *task, m = mres->metric; mres->action = rspamd_check_action_metric (task, mres->score, - &mres->required_score, m); + &mres->actions_limits[METRIC_ACTION_REJECT], m); action = mres->action; is_spam = (action < METRIC_ACTION_GREYLIST); @@ -814,7 +814,7 @@ rspamd_metric_result_ucl (struct rspamd_task *task, "is_skipped", 0, false); ucl_object_insert_key (obj, ucl_object_fromdouble (mres->score), "score", 0, false); - ucl_object_insert_key (obj, ucl_object_fromdouble (mres->required_score), + ucl_object_insert_key (obj, ucl_object_fromdouble (mres->actions_limits[METRIC_ACTION_REJECT]), "required_score", 0, false); ucl_object_insert_key (obj, ucl_object_fromstring (rspamd_action_to_str (action)), diff --git a/src/libserver/task.c b/src/libserver/task.c index cf26655f1..8444d3fba 100644 --- a/src/libserver/task.c +++ b/src/libserver/task.c @@ -821,7 +821,7 @@ rspamd_task_log_metric_res (struct rspamd_task *task, break; case RSPAMD_LOG_SCORES: res.len = rspamd_snprintf (scorebuf, sizeof (scorebuf), "%.2f/%.2f", - mres->score, mres->required_score); + mres->score, mres->actions_limits[METRIC_ACTION_REJECT]); res.begin = scorebuf; break; case RSPAMD_LOG_SYMBOLS: diff --git a/src/libstat/stat_process.c b/src/libstat/stat_process.c index 1761dc7a3..2a40ca26c 100644 --- a/src/libstat/stat_process.c +++ b/src/libstat/stat_process.c @@ -735,7 +735,7 @@ rspamd_stat_check_autolearn (struct rspamd_task *task) if (mres) { mres->action = rspamd_check_action_metric (task, mres->score, - &mres->required_score, + &mres->actions_limits[METRIC_ACTION_REJECT], mres->metric); if (mres->action == METRIC_ACTION_REJECT) {