diff --git a/src/cli.c b/src/cli.c index 3e560c3e3..8a5bf7fca 100644 --- a/src/cli.c +++ b/src/cli.c @@ -881,28 +881,6 @@ static int stats_sock_parse_request(struct stream_interface *si, char *line) stream_shutdown(sess, SF_ERR_KILLED); return 1; } - else if (strcmp(args[1], "sessions") == 0) { - if (strcmp(args[2], "server") == 0) { - struct server *sv; - struct stream *sess, *sess_bck; - - sv = expect_server_admin(s, si, args[3]); - if (!sv) - return 1; - - /* kill all the stream that are on this server */ - list_for_each_entry_safe(sess, sess_bck, &sv->actconns, by_srv) - if (sess->srv_conn == sv) - stream_shutdown(sess, SF_ERR_KILLED); - - return 1; - } - else { - appctx->ctx.cli.msg = "'shutdown sessions' only supports 'server'.\n"; - appctx->st0 = STAT_CLI_PRINT; - return 1; - } - } else { /* unknown "disable" parameter */ appctx->ctx.cli.msg = "'shutdown' only supports 'frontend', 'session' and 'sessions'.\n"; appctx->st0 = STAT_CLI_PRINT; diff --git a/src/stream.c b/src/stream.c index 0d987452b..721736cec 100644 --- a/src/stream.c +++ b/src/stream.c @@ -3914,9 +3914,30 @@ static void cli_release_show_sess(struct appctx *appctx) } } +/* Parses the "shutdown session server" directive, it always returns 1 */ +static int cli_parse_shutdown_sessions_server(char **args, struct appctx *appctx, void *private) +{ + struct server *sv; + struct stream *strm, *strm_bck; + + if (!cli_has_level(appctx, ACCESS_LVL_ADMIN)) + return 1; + + sv = cli_find_server(appctx, args[3]); + if (!sv) + return 1; + + /* kill all the stream that are on this server */ + list_for_each_entry_safe(strm, strm_bck, &sv->actconns, by_srv) + if (strm->srv_conn == sv) + stream_shutdown(strm, SF_ERR_KILLED); + return 1; +} + /* register cli keywords */ static struct cli_kw_list cli_kws = {{ },{ { { "show", "sess", NULL }, "show sess [id] : report the list of current sessions or dump this session", cli_parse_show_sess, cli_io_handler_dump_sess, cli_release_show_sess }, + { { "shutdown", "sessions", "server" }, "shutdown sessions server : kill sessions on a server", cli_parse_shutdown_sessions_server, NULL, NULL }, {{},} }};