From 00098ea034d4e3a548916cac7f50058a7c1b5256 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Mon, 5 Nov 2018 14:38:13 +0100 Subject: [PATCH] MINOR: stats: report the number of active jobs and listeners in "show info" When an haproxy process doesn't stop after a reload, it's because it still has some active "jobs", which mainly are active sessions, listeners, peers or other specific activities. Sometimes it's difficult to troubleshoot the cause of these issues (which generally are the result of a bug) only because some indicators are missing. This patch add the number of listeners, the number of jobs, and the stopping status to the output of "show info". This way it becomes a bit easier to try to narrow down the cause of such an issue should it happen. A typical use case is to connect to the CLI before reloading, then issuing the "show info" command to see what happens. In the normal situation, stopping should equal 1, jobs should equal 1 (meaning only the CLI is still active) and listeners should equal zero. The patch is so trivial that it could make sense to backport it to 1.8 in order to help with troubleshooting. --- include/types/stats.h | 3 +++ src/stats.c | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/include/types/stats.h b/include/types/stats.h index a22be365e..8df848978 100644 --- a/include/types/stats.h +++ b/include/types/stats.h @@ -288,6 +288,9 @@ enum info_field { INF_IDLE_PCT, INF_NODE, INF_DESCRIPTION, + INF_STOPPING, + INF_JOBS, + INF_LISTENERS, /* must always be the last one */ INF_TOTAL_FIELDS diff --git a/src/stats.c b/src/stats.c index efa5c090c..cbb987002 100644 --- a/src/stats.c +++ b/src/stats.c @@ -130,6 +130,9 @@ const char *info_field_names[INF_TOTAL_FIELDS] = { [INF_IDLE_PCT] = "Idle_pct", [INF_NODE] = "node", [INF_DESCRIPTION] = "description", + [INF_STOPPING] = "Stopping", + [INF_JOBS] = "Jobs", + [INF_LISTENERS] = "Listeners", }; const char *stat_field_names[ST_F_TOTAL_FIELDS] = { @@ -3292,6 +3295,9 @@ int stats_fill_info(struct field *info, int len) info[INF_NODE] = mkf_str(FO_CONFIG|FN_OUTPUT|FS_SERVICE, global.node); if (global.desc) info[INF_DESCRIPTION] = mkf_str(FO_CONFIG|FN_OUTPUT|FS_SERVICE, global.desc); + info[INF_STOPPING] = mkf_u32(0, stopping); + info[INF_JOBS] = mkf_u32(0, jobs); + info[INF_LISTENERS] = mkf_u32(0, listeners); return 1; }