]> source.dussan.org Git - rspamd.git/commitdiff
[Feature] Output number of messages processed to proctitle
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 16 Sep 2019 16:01:18 +0000 (17:01 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 16 Sep 2019 16:01:18 +0000 (17:01 +0100)
src/rspamd.c

index 808ca6aaa2478018facbc1ad149f39b70ccb3478..d0dd7ff1059dbd5b866376fb908ca18c1e0e8809 100644 (file)
@@ -83,6 +83,8 @@ static void rspamd_cld_handler (EV_P_ ev_child *w,
 /* Control socket */
 static gint control_fd;
 static ev_io control_ev;
+static struct rspamd_stat old_stat;
+static ev_timer stat_ev;
 
 static gboolean valgrind_mode = FALSE;
 
@@ -968,6 +970,39 @@ rspamd_usr1_handler (struct ev_loop *loop, ev_signal *w, int revents)
        }
 }
 
+static void
+rspamd_stat_update_handler (struct ev_loop *loop, ev_timer *w, int revents)
+{
+       struct rspamd_main *rspamd_main = (struct rspamd_main *)w->data;
+       struct rspamd_stat cur_stat;
+       gchar proctitle[128];
+
+       memcpy (&cur_stat, rspamd_main->stat, sizeof (cur_stat));
+
+       if (old_stat.messages_scanned > 0 &&
+               cur_stat.messages_scanned > old_stat.messages_scanned) {
+               gdouble rate = (double)(cur_stat.messages_scanned - old_stat.messages_scanned) /
+                               w->repeat;
+               gdouble old_spam = old_stat.actions_stat[METRIC_ACTION_REJECT] +
+                               old_stat.actions_stat[METRIC_ACTION_ADD_HEADER] +
+                               old_stat.actions_stat[METRIC_ACTION_REWRITE_SUBJECT];
+               gdouble old_ham = old_stat.actions_stat[METRIC_ACTION_NOACTION];
+               gdouble new_spam = cur_stat.actions_stat[METRIC_ACTION_REJECT] +
+                               cur_stat.actions_stat[METRIC_ACTION_ADD_HEADER] +
+                               cur_stat.actions_stat[METRIC_ACTION_REWRITE_SUBJECT];
+               gdouble new_ham = cur_stat.actions_stat[METRIC_ACTION_NOACTION];
+
+               rspamd_snprintf (proctitle, sizeof (proctitle),
+                               "main process; %.1f msg/sec, %.1f msg/sec spam, %.1f msg/sec ham",
+                               rate,
+                               (new_spam - old_spam) / w->repeat,
+                               (new_ham - old_ham) / w->repeat);
+               setproctitle (proctitle);
+       }
+
+       memcpy (&old_stat, &cur_stat, sizeof (cur_stat));
+}
+
 static void
 rspamd_hup_handler (struct ev_loop *loop, ev_signal *w, int revents)
 {
@@ -1375,6 +1410,15 @@ main (gint argc, gchar **argv, gchar **env)
        rspamd_main->usr1_ev.data = rspamd_main;
        ev_signal_start (event_loop, &rspamd_main->usr1_ev);
 
+       /* Update proctitle according to number of messages processed */
+       static const ev_tstamp stat_update_time = 10.0;
+
+       memset (&old_stat, 0, sizeof (old_stat));
+       stat_ev.data = rspamd_main;
+       ev_timer_init (&stat_ev, rspamd_stat_update_handler,
+                       stat_update_time, stat_update_time);
+       ev_timer_start (event_loop, &stat_ev);
+
        rspamd_check_core_limits (rspamd_main);
        rspamd_mempool_lock_mutex (rspamd_main->start_mtx);
        spawn_workers (rspamd_main, event_loop);