@@ -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; |
@@ -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) | |||
@@ -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 */ |