aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcebka@mailsupport.rambler.ru <cebka@mailsupport.rambler.ru>2008-09-24 01:53:39 +0400
committercebka@mailsupport.rambler.ru <cebka@mailsupport.rambler.ru>2008-09-24 01:53:39 +0400
commit774c6c63fa0e185e597e5899c0bc610ed7854379 (patch)
tree2a103baf74d87c260f73db6d8178831f408d4ff3
parentffe2b54bd024bb45fe7ee182d452ad61283df8ca (diff)
downloadrspamd-774c6c63fa0e185e597e5899c0bc610ed7854379.tar.gz
rspamd-774c6c63fa0e185e597e5899c0bc610ed7854379.zip
* Implement factors consolidation function (default consolidation function for metrics)
-rw-r--r--filter.c32
-rw-r--r--filter.h3
2 files changed, 34 insertions, 1 deletions
diff --git a/filter.c b/filter.c
index 7fcd4a4f7..9130a9e9c 100644
--- a/filter.c
+++ b/filter.c
@@ -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)
{
diff --git a/filter.h b/filter.h
index 3eb97ac93..9f0a96da9 100644
--- a/filter.h
+++ b/filter.h
@@ -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