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 &uarr;",
@@ -2953,6 +2953,7 @@ static int stats_dump_sv_stats(struct stream_interface 
*si, struct proxy *px, in
                        "NOLB",
                        "DRAIN %d/%d &darr;",
                        "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


Reply via email to