From ddec997069bbdb56fa1438c07a211cd66b4a79c8 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Wed, 18 Feb 2015 15:06:41 +0000 Subject: Implement statistics relearning. --- src/libstat/backends/backends.h | 3 +++ src/libstat/backends/mmaped_file.c | 40 +++++++++++++++++++++++++++++++++----- 2 files changed, 38 insertions(+), 5 deletions(-) (limited to 'src/libstat/backends') diff --git a/src/libstat/backends/backends.h b/src/libstat/backends/backends.h index c7c4210fb..f8a2af72c 100644 --- a/src/libstat/backends/backends.h +++ b/src/libstat/backends/backends.h @@ -49,6 +49,7 @@ struct rspamd_stat_backend { struct rspamd_token_result *res, gpointer ctx); gulong (*total_learns)(struct rspamd_statfile_runtime *runtime, gpointer ctx); gulong (*inc_learns)(struct rspamd_statfile_runtime *runtime, gpointer ctx); + gulong (*dec_learns)(struct rspamd_statfile_runtime *runtime, gpointer ctx); ucl_object_t* (*get_stat)(struct rspamd_statfile_runtime *runtime, gpointer ctx); gpointer ctx; }; @@ -66,6 +67,8 @@ gulong rspamd_mmaped_file_total_learns (struct rspamd_statfile_runtime *runtime, gpointer ctx); gulong rspamd_mmaped_file_inc_learns (struct rspamd_statfile_runtime *runtime, gpointer ctx); +gulong rspamd_mmaped_file_dec_learns (struct rspamd_statfile_runtime *runtime, + gpointer ctx); ucl_object_t * rspamd_mmaped_file_get_stat (struct rspamd_statfile_runtime *runtime, gpointer ctx); diff --git a/src/libstat/backends/mmaped_file.c b/src/libstat/backends/mmaped_file.c index 0fb386f61..02ea17c28 100644 --- a/src/libstat/backends/mmaped_file.c +++ b/src/libstat/backends/mmaped_file.c @@ -290,6 +290,23 @@ rspamd_mmaped_file_inc_revision (rspamd_mmaped_file_t *file) return TRUE; } +gboolean +rspamd_mmaped_file_dec_revision (rspamd_mmaped_file_t *file) +{ + struct stat_file_header *header; + + if (file == NULL || file->map == NULL) { + return FALSE; + } + + header = (struct stat_file_header *)file->map; + + header->revision--; + + return TRUE; +} + + gboolean rspamd_mmaped_file_get_revision (rspamd_mmaped_file_t *file, guint64 *rev, time_t *time) { @@ -939,11 +956,7 @@ rspamd_mmaped_file_learn_token (rspamd_token_t *tok, memcpy (&h2, tok->data + sizeof (h1), sizeof (h2)); rspamd_mmaped_file_set_block (ctx, mf, h1, h2, res->value); - if (res->value > 0.0) { - return TRUE; - } - - return FALSE; + return TRUE; } gulong @@ -977,6 +990,23 @@ rspamd_mmaped_file_inc_learns (struct rspamd_statfile_runtime *runtime, return rev; } +gulong +rspamd_mmaped_file_dec_learns (struct rspamd_statfile_runtime *runtime, + gpointer ctx) +{ + rspamd_mmaped_file_t *mf = (rspamd_mmaped_file_t *)runtime; + guint64 rev = 0; + time_t t; + + if (mf != NULL) { + rspamd_mmaped_file_dec_revision (mf); + rspamd_mmaped_file_get_revision (mf, &rev, &t); + } + + return rev; +} + + ucl_object_t * rspamd_mmaped_file_get_stat (struct rspamd_statfile_runtime *runtime, gpointer ctx) -- cgit v1.2.3