From: Vsevolod Stakhov Date: Mon, 12 Oct 2015 10:49:50 +0000 (+0100) Subject: Handle stats command. X-Git-Tag: 1.0.5~34 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=783f85f3df791a3f948acd9554094d7b352a8d9b;p=thirdparty%2Frspamd.git Handle stats command. --- diff --git a/src/libserver/rspamd_control.c b/src/libserver/rspamd_control.c index d1861a5afd..3217798ced 100644 --- a/src/libserver/rspamd_control.c +++ b/src/libserver/rspamd_control.c @@ -334,12 +334,25 @@ rspamd_control_default_cmd_handler (gint fd, { struct rspamd_control_reply rep; gssize r; + struct rusage rusg; memset (&rep, 0, sizeof (rep)); rep.type = cmd->type; switch (cmd->type) { case RSPAMD_CONTROL_STAT: + if (getrusage (RUSAGE_SELF, &rusg) == -1) { + msg_err ("cannot get rusage stats: %s", + strerror (errno)); + } + else { + rep.reply.stat.utime = tv_to_double (&rusg.ru_utime); + rep.reply.stat.systime = tv_to_double (&rusg.ru_stime); + rep.reply.stat.maxrss = rusg.ru_maxrss; + } + + rep.reply.stat.conns = cd->worker->nconns; + rep.reply.stat.utime = rspamd_get_calendar_ticks () - cd->worker->start_time; break; case RSPAMD_CONTROL_RELOAD: break; diff --git a/src/libutil/util.h b/src/libutil/util.h index bf55f901f1..f39730b0f1 100644 --- a/src/libutil/util.h +++ b/src/libutil/util.h @@ -193,6 +193,7 @@ void g_queue_clear (GQueue *queue); ((dbl) - (int)(dbl)) * 1000 * 1000; \ } while (0) #define tv_to_msec(tv) ((tv)->tv_sec * 1000LLU + (tv)->tv_usec / 1000LLU) +#define tv_to_double(tv) ((tv)->tv_sec + (tv)->tv_usec / 1e6f) #define ts_to_usec(ts) ((ts)->tv_sec * 1000000LLU + \ (ts)->tv_nsec / 1000LLU) diff --git a/src/rspamd.h b/src/rspamd.h index 88e8059472..970046eb57 100644 --- a/src/rspamd.h +++ b/src/rspamd.h @@ -45,6 +45,8 @@ struct rspamd_worker { pid_t pid; /**< pid of worker */ guint index; /**< index number */ + guint nconns; /**< current connections count */ + gdouble start_time; /**< start time */ struct rspamd_main *srv; /**< pointer to server structure */ GQuark type; /**< process type */ GHashTable *signal_events; /**< signal events */