[MEDIUM] report disabled servers as "NOLB" when they are still UP
It's important to be able to distinguish between servers which are UP
and those which are UP but disabled via a 404 response. For this reason,
the status entries report "NOLB" instead of "UP", and the HTML page uses
darker colors. As a complement, write "DOWN" in bold red on the backend
if it has no server left for load balancing.
diff --git a/src/dumpstats.c b/src/dumpstats.c
index cac57cf..388a5f7 100644
--- a/src/dumpstats.c
+++ b/src/dumpstats.c
@@ -349,12 +349,16 @@
".active1 {background: #ffd020;}\n"
".active2 {background: #ffffa0;}\n"
".active3 {background: #c0ffc0;}\n"
- ".active4 {background: #e0e0e0;}\n"
+ ".active4 {background: #ffffa0;}\n" /* NOLB state shows same as going down */
+ ".active5 {background: #a0e0a0;}\n" /* NOLB state shows darker than up */
+ ".active6 {background: #e0e0e0;}\n"
".backup0 {background: #ff9090;}\n"
".backup1 {background: #ff80ff;}\n"
".backup2 {background: #c060ff;}\n"
".backup3 {background: #b0d0ff;}\n"
- ".backup4 {background: #e0e0e0;}\n"
+ ".backup4 {background: #c060ff;}\n" /* NOLB state shows same as going down */
+ ".backup5 {background: #90b0e0;}\n" /* NOLB state shows same as going down */
+ ".backup6 {background: #e0e0e0;}\n"
"table.tbl { border-collapse: collapse; border-style: none;}\n"
"table.tbl td { border-width: 1px 1px 1px 1px; border-style: solid solid solid solid; padding: 2px 3px; border-color: gray;}\n"
"table.tbl th { border-width: 1px; border-style: solid solid solid solid; border-color: gray;}\n"
@@ -416,8 +420,9 @@
"<td class=\"backup1\"></td><td class=\"noborder\">backup DOWN, going up </td>"
"</tr><tr>\n"
"<td class=\"active0\"></td><td class=\"noborder\">active or backup DOWN </td>"
- "<td class=\"active4\"></td><td class=\"noborder\">not checked </td>"
+ "<td class=\"active6\"></td><td class=\"noborder\">not checked </td>"
"</tr></table>\n"
+ "Note: UP with load-balancing disabled is reported as \"NOLB\"."
"</td>"
"<td align=\"left\" valign=\"top\" nowrap width=\"1%%\">"
"<b>Display option:</b><ul style=\"margin-top: 0.25em;\">"
@@ -685,18 +690,22 @@
case DATA_ST_PX_SV:
/* stats.sv has been initialized above */
while (s->data_ctx.stats.sv != NULL) {
- int sv_state; /* 0=DOWN, 1=going up, 2=going down, 3=UP, 4=unchecked */
+ int sv_state; /* 0=DOWN, 1=going up, 2=going down, 3=UP, 4,5=NOLB, 6=unchecked */
sv = s->data_ctx.stats.sv;
/* FIXME: produce some small strings for "UP/DOWN x/y &#xxxx;" */
if (!(sv->state & SRV_CHECKED))
- sv_state = 4;
- else if (sv->state & SRV_RUNNING)
+ sv_state = 6;
+ else if (sv->state & SRV_RUNNING) {
if (sv->health == sv->rise + sv->fall - 1)
sv_state = 3; /* UP */
else
sv_state = 2; /* going down */
+
+ if (sv->state & SRV_GOINGDOWN)
+ sv_state += 2;
+ }
else
if (sv->health)
sv_state = 1; /* going up */
@@ -710,8 +719,10 @@
}
if (flags & STAT_FMT_HTML) {
- static char *srv_hlt_st[5] = { "DOWN", "DN %d/%d ↑", "UP %d/%d ↓",
- "UP", "<i>no check</i>" };
+ static char *srv_hlt_st[7] = { "DOWN", "DN %d/%d ↑",
+ "UP %d/%d ↓", "UP",
+ "NOLB %d/%d ↓", "NOLB",
+ "<i>no check</i>" };
chunk_printf(&msg, sizeof(trash),
/* name */
"<tr align=\"center\" class=\"%s%d\"><td>%s</td>"
@@ -772,8 +783,10 @@
chunk_printf(&msg, sizeof(trash),
"<td colspan=3></td></tr>\n");
} else {
- static char *srv_hlt_st[5] = { "DOWN,", "DOWN %d/%d,", "UP %d/%d,",
- "UP,", "no check," };
+ static char *srv_hlt_st[7] = { "DOWN,", "DOWN %d/%d,",
+ "UP %d/%d,", "UP,",
+ "NOLB %d/%d,", "NOLB,",
+ "no check," };
chunk_printf(&msg, sizeof(trash),
/* pxid, name */
"%s,%s,"
@@ -871,7 +884,8 @@
px->failed_conns, px->failed_resp,
px->retries, px->redispatches,
human_time(now.tv_sec - px->last_change, 1),
- (px->lbprm.tot_weight > 0 || !px->srv) ? "UP" : "DOWN",
+ (px->lbprm.tot_weight > 0 || !px->srv) ? "UP" :
+ "<font color=\"red\"><b>DOWN</b></font>",
px->lbprm.tot_weight * px->lbprm.wmult / px->lbprm.wdiv,
px->srv_act, px->srv_bck);