Differentiate between DRAIN and DRAIN (agent) when reporting stats. This is consistent with the distinction made between DOWN and DOWN (agent).
Signed-off-by: Simon Horman <ho...@verge.net.au> --- src/dumpstats.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/dumpstats.c b/src/dumpstats.c index 9f5a4349d231..efc08ab38764 100644 --- a/src/dumpstats.c +++ b/src/dumpstats.c @@ -2924,7 +2924,7 @@ static int stats_dump_li_stats(struct stream_interface *si, struct proxy *px, st * The caller is responsible for clearing the trash if needed. Returns non-zero * if it emits anything, zero otherwise. The <state> parameter can take the * following values : 0=DOWN, 1=DOWN(agent) 2=going up, 3=going down, 4=UP, 5,6=NOLB, - * 7,8=DRAIN, 9=unchecked. + * 7,8=DRAIN, 9=DRAIN(agent), 10=unchecked. */ static int stats_dump_sv_stats(struct stream_interface *si, struct proxy *px, int flags, struct server *sv, int state) { @@ -2943,7 +2943,7 @@ static int stats_dump_sv_stats(struct stream_interface *si, struct proxy *px, in ref = ref->track; if (appctx->ctx.stats.flags & STAT_FMT_HTML) { - static char *srv_hlt_st[10] = { + static char *srv_hlt_st[11] = { "DOWN", "DOWN (agent)", "DN %d/%d ↑", @@ -2953,6 +2953,7 @@ static int stats_dump_sv_stats(struct stream_interface *si, struct proxy *px, in "NOLB", "DRAIN %d/%d ↓", "DRAIN", + "DRAIN (agent)", "<i>no check</i>" }; @@ -3197,7 +3198,7 @@ static int stats_dump_sv_stats(struct stream_interface *si, struct proxy *px, in chunk_appendf(&trash, "<td class=ac>-</td></tr>\n"); } else { /* CSV mode */ - static char *srv_hlt_st[10] = { + static char *srv_hlt_st[11] = { "DOWN,", "DOWN (agent),", "DOWN %d/%d,", @@ -3207,6 +3208,7 @@ static int stats_dump_sv_stats(struct stream_interface *si, struct proxy *px, in "NOLB,", "DRAIN %d/%d,", "DRAIN,", + "DRAIN (agent),", "no check," }; @@ -3864,8 +3866,9 @@ static int stats_dump_proxy_to_buffer(struct stream_interface *si, struct proxy * - UP, draining, going down => state = 7 * - UP, going down => state = 3 * - UP, draining => state = 8 + * - UP, draining (agent) => state = 9 * - UP, checked => state = 4 - * - UP, not checked nor tracked => state = 9 + * - UP, not checked nor tracked => state = 10 */ if ((svs->check.state & CHK_ST_ENABLED) && @@ -3874,11 +3877,15 @@ static int stats_dump_proxy_to_buffer(struct stream_interface *si, struct proxy else sv_state = 4; - if (sv->admin & SRV_ADMF_DRAIN) - sv_state += 4; + if (sv->admin & SRV_ADMF_DRAIN) { + if (svs->agent.state & CHK_ST_ENABLED) + sv_state = 9; + else + sv_state += 4; + } if (sv_state == 4 && !(svs->check.state & CHK_ST_ENABLED)) - sv_state = 9; /* unchecked UP */ + sv_state = 10; /* unchecked UP */ } else if (sv->state == SRV_ST_STOPPING) { if ((!(sv->check.state & CHK_ST_ENABLED) && !sv->track) || -- 2.1.4