mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-11-27 05:41:10 +01:00
MEDIUM: stats: add support for soft stop/soft start in the admin interface
One important missing feature on the web interface is the ability to perform a soft stop/soft start. This is now possible.
This commit is contained in:
parent
eb2c24ae2a
commit
d72822442d
@ -262,6 +262,8 @@ enum {
|
|||||||
ST_ADM_ACTION_NONE = 0,
|
ST_ADM_ACTION_NONE = 0,
|
||||||
ST_ADM_ACTION_DISABLE,
|
ST_ADM_ACTION_DISABLE,
|
||||||
ST_ADM_ACTION_ENABLE,
|
ST_ADM_ACTION_ENABLE,
|
||||||
|
ST_ADM_ACTION_STOP,
|
||||||
|
ST_ADM_ACTION_START,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* status codes available for the stats admin page */
|
/* status codes available for the stats admin page */
|
||||||
|
|||||||
@ -3171,6 +3171,8 @@ static int stats_dump_proxy(struct stream_interface *si, struct proxy *px, struc
|
|||||||
"<option value=\"\"></option>"
|
"<option value=\"\"></option>"
|
||||||
"<option value=\"disable\">Disable</option>"
|
"<option value=\"disable\">Disable</option>"
|
||||||
"<option value=\"enable\">Enable</option>"
|
"<option value=\"enable\">Enable</option>"
|
||||||
|
"<option value=\"stop\">Soft Stop</option>"
|
||||||
|
"<option value=\"start\">Soft Start</option>"
|
||||||
"</select>"
|
"</select>"
|
||||||
"<input type=\"hidden\" name=\"b\" value=\"#%d\">"
|
"<input type=\"hidden\" name=\"b\" value=\"#%d\">"
|
||||||
" <input type=\"submit\" value=\"Apply\">"
|
" <input type=\"submit\" value=\"Apply\">"
|
||||||
|
|||||||
@ -2605,6 +2605,12 @@ int http_process_req_stat_post(struct stream_interface *si, struct http_txn *txn
|
|||||||
else if (strcmp(value, "enable") == 0) {
|
else if (strcmp(value, "enable") == 0) {
|
||||||
action = ST_ADM_ACTION_ENABLE;
|
action = ST_ADM_ACTION_ENABLE;
|
||||||
}
|
}
|
||||||
|
else if (strcmp(value, "stop") == 0) {
|
||||||
|
action = ST_ADM_ACTION_STOP;
|
||||||
|
}
|
||||||
|
else if (strcmp(value, "start") == 0) {
|
||||||
|
action = ST_ADM_ACTION_START;
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
si->applet.ctx.stats.st_code = STAT_STATUS_ERRP;
|
si->applet.ctx.stats.st_code = STAT_STATUS_ERRP;
|
||||||
goto out;
|
goto out;
|
||||||
@ -2642,6 +2648,38 @@ int http_process_req_stat_post(struct stream_interface *si, struct http_txn *txn
|
|||||||
total_servers++;
|
total_servers++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case ST_ADM_ACTION_STOP:
|
||||||
|
case ST_ADM_ACTION_START:
|
||||||
|
if (action == ST_ADM_ACTION_START)
|
||||||
|
sv->uweight = sv->iweight;
|
||||||
|
else
|
||||||
|
sv->uweight = 0;
|
||||||
|
|
||||||
|
if (px->lbprm.algo & BE_LB_PROP_DYN) {
|
||||||
|
/* we must take care of not pushing the server to full throttle during slow starts */
|
||||||
|
if ((sv->state & SRV_WARMINGUP) && (px->lbprm.algo & BE_LB_PROP_DYN))
|
||||||
|
sv->eweight = (BE_WEIGHT_SCALE * (now.tv_sec - sv->last_change) + sv->slowstart - 1) / sv->slowstart;
|
||||||
|
else
|
||||||
|
sv->eweight = BE_WEIGHT_SCALE;
|
||||||
|
sv->eweight *= sv->uweight;
|
||||||
|
} else {
|
||||||
|
sv->eweight = sv->uweight;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* static LB algorithms are a bit harder to update */
|
||||||
|
if (px->lbprm.update_server_eweight)
|
||||||
|
px->lbprm.update_server_eweight(sv);
|
||||||
|
else if (sv->eweight) {
|
||||||
|
if (px->lbprm.set_server_status_up)
|
||||||
|
px->lbprm.set_server_status_up(sv);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (px->lbprm.set_server_status_down)
|
||||||
|
px->lbprm.set_server_status_down(sv);
|
||||||
|
}
|
||||||
|
altered_servers++;
|
||||||
|
total_servers++;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* the server name is unknown or ambiguous (duplicate names) */
|
/* the server name is unknown or ambiguous (duplicate names) */
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user