diff options
author | cebka@mailsupport.rambler.ru <cebka@mailsupport.rambler.ru> | 2008-09-24 01:53:39 +0400 |
---|---|---|
committer | cebka@mailsupport.rambler.ru <cebka@mailsupport.rambler.ru> | 2008-09-24 01:53:39 +0400 |
commit | 774c6c63fa0e185e597e5899c0bc610ed7854379 (patch) | |
tree | 2a103baf74d87c260f73db6d8178831f408d4ff3 | |
parent | ffe2b54bd024bb45fe7ee182d452ad61283df8ca (diff) | |
download | rspamd-774c6c63fa0e185e597e5899c0bc610ed7854379.tar.gz rspamd-774c6c63fa0e185e597e5899c0bc610ed7854379.zip |
* Implement factors consolidation function (default consolidation function for metrics)
-rw-r--r-- | filter.c | 32 | ||||
-rw-r--r-- | filter.h | 3 |
2 files changed, 34 insertions, 1 deletions
@@ -36,6 +36,38 @@ insert_result (struct worker_task *task, const char *metric_name, const char *sy LIST_INSERT_HEAD (&metric_res->results, result, next); } +/* + * Default consolidation function based on factors in config file + */ +int +factor_consolidation_func (struct worker_task *task, const char *metric_name) +{ + struct metric_result *metric_res; + struct filter_result *result; + double *factor; + int res = 0; + + metric_res = g_hash_table_lookup (task->results, metric_name); + if (metric_res == NULL) { + return res; + } + + LIST_FOREACH (result, &metric_res->results, next) { + if (result->flag) { + factor = g_hash_table_lookup (task->worker->srv->cfg->factors, result->symbol); + if (factor == NULL) { + /* Default multiplier is 1 */ + res ++; + } + else { + res += *factor; + } + } + } + + return res; +} + int process_filters (struct worker_task *task) { @@ -11,7 +11,7 @@ struct worker_task; -typedef void (*metric_cons_func)(struct worker_task *task, const char *metric_name); +typedef int (*metric_cons_func)(struct worker_task *task, const char *metric_name); typedef void (*filter_func)(struct worker_task *task); enum filter_type { C_FILTER, PERL_FILTER }; @@ -42,5 +42,6 @@ struct metric_result { int process_filters (struct worker_task *task); void insert_result (struct worker_task *task, const char *metric_name, const char *symbol, u_char flag); +int factor_consolidation_func (struct worker_task *task, const char *metric_name); #endif |