From 58fa012f4bd6ee93ded8f10f24961ce6a1e0559e Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Wed, 23 Apr 2014 13:20:35 +0100 Subject: [PATCH] Make human readable `uptime` output. --- src/client/rspamc.c | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/src/client/rspamc.c b/src/client/rspamc.c index 68b5cacab0..65de5de48a 100644 --- a/src/client/rspamc.c +++ b/src/client/rspamc.c @@ -81,6 +81,7 @@ static GOptionEntry entries[] = }; static void rspamc_symbols_output (ucl_object_t *obj); +static void rspamc_uptime_output (ucl_object_t *obj); enum rspamc_command_type { RSPAMC_COMMAND_UNKNOWN = 0, @@ -195,7 +196,7 @@ struct rspamc_command { .is_controller = TRUE, .is_privileged = FALSE, .need_input = FALSE, - .command_output_func = NULL + .command_output_func = rspamc_uptime_output }, { .cmd = RSPAMC_COMMAND_ADD_SYMBOL, @@ -499,6 +500,47 @@ rspamc_symbols_output (ucl_object_t *obj) } } +static void +rspamc_uptime_output (ucl_object_t *obj) +{ + const ucl_object_t *elt; + int64_t seconds, days, hours, minutes; + + elt = ucl_object_find_key (obj, "version"); + if (elt != NULL) { + rspamd_fprintf (stdout, "Rspamd version: %s\n", ucl_object_tostring (elt)); + } + + elt = ucl_object_find_key (obj, "uptime"); + if (elt != NULL) { + rspamd_printf ("Uptime: "); + seconds = ucl_object_toint (elt); + if (seconds >= 2 * 3600) { + days = seconds / 86400; + hours = seconds / 3600 - days * 24; + minutes = seconds / 60 - hours * 60 - days * 1440; + rspamd_printf ("%L day%s %L hour%s %L minute%s\n", days, + days > 1 ? "s" : " ", hours, hours > 1 ? "s" : " ", + minutes, minutes > 1 ? "s" : " "); + } + /* If uptime is less than 1 minute print only seconds */ + else if (seconds / 60 == 0) { + rspamd_printf ("%L second%s\n", (gint)seconds, + (gint)seconds > 1 ? "s" : " "); + } + /* Else print the minutes and seconds. */ + else { + hours = seconds / 3600; + minutes = seconds / 60 - hours * 60; + seconds -= hours * 3600 + minutes * 60; + rspamd_printf ("%L hour%s %L minute%s %L second%s\n", hours, + hours > 1 ? "s" : " ", minutes, + minutes > 1 ? "s" : " ", + seconds, seconds > 1 ? "s" : " "); + } + } +} + static void rspamc_output_headers (struct rspamd_http_message *msg) { -- 2.47.3