From: Vsevolod Stakhov Date: Sat, 14 Oct 2017 11:44:23 +0000 (+0100) Subject: [Feature] Periodically save rspamd stats to disk X-Git-Tag: 1.7.0~557 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=41f51d1a129340fa8be5539f37ad5462fc6157eb;p=thirdparty%2Frspamd.git [Feature] Periodically save rspamd stats to disk Issue: #1823 --- diff --git a/src/controller.c b/src/controller.c index c3af1e4bac..9d39627dc9 100644 --- a/src/controller.c +++ b/src/controller.c @@ -178,6 +178,7 @@ struct rspamd_controller_worker_ctx { struct event *rrd_event; struct rspamd_rrd_file *rrd; + struct event save_stats_event; }; struct rspamd_controller_plugin_cbdata { @@ -3206,6 +3207,14 @@ rspamd_controller_store_saved_stats (struct rspamd_controller_worker_ctx *ctx) close (fd); } +static void +rspamd_controller_stats_save_periodic (int fd, short what, gpointer ud) +{ + struct rspamd_controller_worker_ctx *ctx = ud; + + rspamd_controller_store_saved_stats (ctx); +} + static void rspamd_controller_password_sane (struct rspamd_controller_worker_ctx *ctx, const gchar *password, const gchar *type) @@ -3603,6 +3612,8 @@ start_controller_worker (struct rspamd_worker *worker) GHashTableIter iter; gpointer key, value; struct rspamd_keypair_cache *cache; + struct timeval stv; + const guint save_stats_interval = 60 * 1000; /* 1 minute */ gpointer m; ctx->ev_base = rspamd_prepare_worker (worker, @@ -3805,6 +3816,13 @@ start_controller_worker (struct rspamd_worker *worker) rspamd_lua_run_postloads (ctx->cfg->lua_state, ctx->cfg, ctx->ev_base, worker); + /* Schedule periodic stats saving, see #1823 */ + evtimer_set (&ctx->save_stats_event, rspamd_controller_stats_save_periodic, + ctx); + event_base_set (ctx->ev_base, &ctx->save_stats_event); + msec_to_tv (save_stats_interval, &stv); + evtimer_add (&ctx->save_stats_event, &stv); + /* Start event loop */ event_base_loop (ctx->ev_base, 0); rspamd_worker_block_signals ();