aboutsummaryrefslogtreecommitdiffstats
path: root/src/libstat
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2015-08-03 15:00:01 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2015-08-03 15:00:01 +0100
commita829e43304c479e6eceecdf5d5d7322a2b5dc65c (patch)
treea69b0011b4e8b5dde5697d28c07c3e0e089200c7 /src/libstat
parent05ca72e767b9e90b82b21685299017cf39416a7e (diff)
downloadrspamd-a829e43304c479e6eceecdf5d5d7322a2b5dc65c.tar.gz
rspamd-a829e43304c479e6eceecdf5d5d7322a2b5dc65c.zip
Rework stat get function to allow async behaviour.
Diffstat (limited to 'src/libstat')
-rw-r--r--src/libstat/stat_api.h6
-rw-r--r--src/libstat/stat_process.c16
2 files changed, 15 insertions, 7 deletions
diff --git a/src/libstat/stat_api.h b/src/libstat/stat_api.h
index 94734adef..493354007 100644
--- a/src/libstat/stat_api.h
+++ b/src/libstat/stat_api.h
@@ -80,8 +80,10 @@ rspamd_stat_result_t rspamd_stat_learn (struct rspamd_task *task,
* @param total_learns the total number of learns is stored here
* @return array of statistical information
*/
-ucl_object_t * rspamd_stat_statistics (struct rspamd_config *cfg,
- guint64 *total_learns);
+rspamd_stat_result_t rspamd_stat_statistics (struct rspamd_task *task,
+ struct rspamd_config *cfg,
+ guint64 *total_learns,
+ ucl_object_t **res);
void rspamd_stat_unload (void);
diff --git a/src/libstat/stat_process.c b/src/libstat/stat_process.c
index 93f48b3e9..630d73a95 100644
--- a/src/libstat/stat_process.c
+++ b/src/libstat/stat_process.c
@@ -768,8 +768,10 @@ rspamd_stat_learn (struct rspamd_task *task, gboolean spam, lua_State *L,
return ret;
}
-ucl_object_t *
-rspamd_stat_statistics (struct rspamd_config *cfg, guint64 *total_learns)
+rspamd_stat_result_t rspamd_stat_statistics (struct rspamd_task *task,
+ struct rspamd_config *cfg,
+ guint64 *total_learns,
+ ucl_object_t **target)
{
struct rspamd_classifier_config *clcf;
struct rspamd_statfile_config *stcf;
@@ -801,9 +803,9 @@ rspamd_stat_statistics (struct rspamd_config *cfg, guint64 *total_learns)
continue;
}
- backend_runtime = bk->runtime (NULL, stcf, FALSE, bk->ctx);
+ backend_runtime = bk->runtime (task, stcf, FALSE, bk->ctx);
- learns += bk->total_learns (NULL, backend_runtime, bk->ctx);
+ learns += bk->total_learns (task, backend_runtime, bk->ctx);
elt = bk->get_stat (backend_runtime, bk->ctx);
if (elt != NULL) {
@@ -822,5 +824,9 @@ rspamd_stat_statistics (struct rspamd_config *cfg, guint64 *total_learns)
}
}
- return res;
+ if (*target) {
+ *target = res;
+ }
+
+ return RSPAMD_STAT_PROCESS_OK;
}