]> source.dussan.org Git - rspamd.git/commitdiff
* Implement factors consolidation function (default consolidation function for metrics)
authorcebka@mailsupport.rambler.ru <cebka@mailsupport.rambler.ru>
Tue, 23 Sep 2008 21:53:39 +0000 (01:53 +0400)
committercebka@mailsupport.rambler.ru <cebka@mailsupport.rambler.ru>
Tue, 23 Sep 2008 21:53:39 +0000 (01:53 +0400)
filter.c
filter.h

index 7fcd4a4f78b974072ecae0369baae2638ed80656..9130a9e9c7f26875ba2bd4b826bb053d5eea422f 100644 (file)
--- 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)
 {
index 3eb97ac93cb631d243bbc81e664d06bd6f681be1..9f0a96da97d3f9728fc32874a2d34bf674ae9ddf 100644 (file)
--- 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