MEDIUM: stats: add the ability to kill sessions from the admin interface

It was not possible to kill remaining sessions from the admin interface,
which is annoying especially when switching to maintenance mode. Now it's
possible.
This commit is contained in:
Willy Tarreau 2012-06-04 00:26:23 +02:00
parent d72822442d
commit 4f8a83cb6e
3 changed files with 17 additions and 0 deletions

View File

@ -264,6 +264,7 @@ enum {
ST_ADM_ACTION_ENABLE,
ST_ADM_ACTION_STOP,
ST_ADM_ACTION_START,
ST_ADM_ACTION_SHUTDOWN,
};
/* status codes available for the stats admin page */

View File

@ -3173,6 +3173,7 @@ static int stats_dump_proxy(struct stream_interface *si, struct proxy *px, struc
"<option value=\"enable\">Enable</option>"
"<option value=\"stop\">Soft Stop</option>"
"<option value=\"start\">Soft Start</option>"
"<option value=\"shutdown\">Kill Sessions</option>"
"</select>"
"<input type=\"hidden\" name=\"b\" value=\"#%d\">"
"&nbsp;<input type=\"submit\" value=\"Apply\">"

View File

@ -2611,6 +2611,9 @@ int http_process_req_stat_post(struct stream_interface *si, struct http_txn *txn
else if (strcmp(value, "start") == 0) {
action = ST_ADM_ACTION_START;
}
else if (strcmp(value, "shutdown") == 0) {
action = ST_ADM_ACTION_SHUTDOWN;
}
else {
si->applet.ctx.stats.st_code = STAT_STATUS_ERRP;
goto out;
@ -2680,6 +2683,18 @@ int http_process_req_stat_post(struct stream_interface *si, struct http_txn *txn
altered_servers++;
total_servers++;
break;
case ST_ADM_ACTION_SHUTDOWN:
if (px->state != PR_STSTOPPED) {
struct session *sess, *sess_bck;
list_for_each_entry_safe(sess, sess_bck, &sv->actconns, by_srv)
if (sess->srv_conn == sv)
session_shutdown(sess, SN_ERR_KILLED);
altered_servers++;
total_servers++;
}
break;
}
} else {
/* the server name is unknown or ambiguous (duplicate names) */