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.
This commit is contained in:
Willy Tarreau 2018-11-05 14:38:13 +01:00
parent 086735a688
commit 00098ea034
2 changed files with 9 additions and 0 deletions

View File

@ -288,6 +288,9 @@ enum info_field {
INF_IDLE_PCT, INF_IDLE_PCT,
INF_NODE, INF_NODE,
INF_DESCRIPTION, INF_DESCRIPTION,
INF_STOPPING,
INF_JOBS,
INF_LISTENERS,
/* must always be the last one */ /* must always be the last one */
INF_TOTAL_FIELDS INF_TOTAL_FIELDS

View File

@ -130,6 +130,9 @@ const char *info_field_names[INF_TOTAL_FIELDS] = {
[INF_IDLE_PCT] = "Idle_pct", [INF_IDLE_PCT] = "Idle_pct",
[INF_NODE] = "node", [INF_NODE] = "node",
[INF_DESCRIPTION] = "description", [INF_DESCRIPTION] = "description",
[INF_STOPPING] = "Stopping",
[INF_JOBS] = "Jobs",
[INF_LISTENERS] = "Listeners",
}; };
const char *stat_field_names[ST_F_TOTAL_FIELDS] = { 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); info[INF_NODE] = mkf_str(FO_CONFIG|FN_OUTPUT|FS_SERVICE, global.node);
if (global.desc) if (global.desc)
info[INF_DESCRIPTION] = mkf_str(FO_CONFIG|FN_OUTPUT|FS_SERVICE, 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; return 1;
} }