mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-05-07 02:08:04 +00:00
[MEDIUM] stats: offer the possibility to kill a session from the CLI
It's now possible to issue "shutdown session 0xXXXXXXXX" and have this session immediately killed. Useful for long-running fantoms.
This commit is contained in:
parent
a2a64e9689
commit
a295edc51c
@ -9830,6 +9830,14 @@ shutdown frontend <frontend>
|
|||||||
This command is restricted and can only be issued on sockets configured for
|
This command is restricted and can only be issued on sockets configured for
|
||||||
level "admin".
|
level "admin".
|
||||||
|
|
||||||
|
shutdown session <id>
|
||||||
|
Immediately terminate the session matching the specified session identifier.
|
||||||
|
This identifier is the first field at the beginning of the lines in the dumps
|
||||||
|
of "show sess" (it corresponds to the session pointer). This can be used to
|
||||||
|
terminate a long-running session without waiting for a timeout or when an
|
||||||
|
endless transfer is ongoing. Such terminated sessions are reported with a 'K'
|
||||||
|
flag in the logs.
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Local variables:
|
* Local variables:
|
||||||
* fill-column: 79
|
* fill-column: 79
|
||||||
|
@ -82,11 +82,11 @@ static const char stats_sock_usage_msg[] =
|
|||||||
" get weight : report a server's current weight\n"
|
" get weight : report a server's current weight\n"
|
||||||
" set weight : change a server's weight\n"
|
" set weight : change a server's weight\n"
|
||||||
" set timeout : change a timeout setting\n"
|
" set timeout : change a timeout setting\n"
|
||||||
" disable : put a server or frontend in maintenance mode\n"
|
|
||||||
" enable : re-enable a server or frontend which is in maintenance mode\n"
|
|
||||||
" shutdown : irreversibly stop a frontend (eg: to release listening ports)\n"
|
|
||||||
" set maxconn : change a maxconn setting\n"
|
" set maxconn : change a maxconn setting\n"
|
||||||
" set rate-limit : change a rate limiting value\n"
|
" set rate-limit : change a rate limiting value\n"
|
||||||
|
" disable : put a server or frontend in maintenance mode\n"
|
||||||
|
" enable : re-enable a server or frontend which is in maintenance mode\n"
|
||||||
|
" shutdown : kill a session or a frontend (eg:to release listening ports)\n"
|
||||||
"";
|
"";
|
||||||
|
|
||||||
static const char stats_permission_denied_msg[] =
|
static const char stats_permission_denied_msg[] =
|
||||||
@ -1311,8 +1311,41 @@ static int stats_sock_parse_request(struct stream_interface *si, char *line)
|
|||||||
stop_proxy(px);
|
stop_proxy(px);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
else if (strcmp(args[1], "session") == 0) {
|
||||||
|
struct session *sess, *ptr;
|
||||||
|
|
||||||
|
if (s->listener->perm.ux.level < ACCESS_LVL_ADMIN) {
|
||||||
|
si->applet.ctx.cli.msg = stats_permission_denied_msg;
|
||||||
|
si->applet.st0 = STAT_CLI_PRINT;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!*args[2]) {
|
||||||
|
si->applet.ctx.cli.msg = "Session pointer expected (use 'show sess').\n";
|
||||||
|
si->applet.st0 = STAT_CLI_PRINT;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
ptr = (void *)strtoul(args[2], NULL, 0);
|
||||||
|
|
||||||
|
/* first, look for the requested session in the session table */
|
||||||
|
list_for_each_entry(sess, &sessions, list) {
|
||||||
|
if (sess == ptr)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* do we have the session ? */
|
||||||
|
if (sess != ptr) {
|
||||||
|
si->applet.ctx.cli.msg = "No such session (use 'show sess').\n";
|
||||||
|
si->applet.st0 = STAT_CLI_PRINT;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
session_shutdown(sess, SN_ERR_KILLED);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
else { /* unknown "disable" parameter */
|
else { /* unknown "disable" parameter */
|
||||||
si->applet.ctx.cli.msg = "'shutdown' only supports 'frontend'.\n";
|
si->applet.ctx.cli.msg = "'shutdown' only supports 'frontend' and 'session'.\n";
|
||||||
si->applet.st0 = STAT_CLI_PRINT;
|
si->applet.st0 = STAT_CLI_PRINT;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user