REORG: cli: move 'show backend' to proxy.c
Move 'show backend' CLI functions to proxy.c and use the cli keyword API
to register it on the CLI.
diff --git a/include/types/cli.h b/include/types/cli.h
index 72b2c2d..5c703d4 100644
--- a/include/types/cli.h
+++ b/include/types/cli.h
@@ -116,7 +116,6 @@
STAT_CLI_O_CLR, /* clear tables */
STAT_CLI_O_SET, /* set entries in tables */
STAT_CLI_O_STAT, /* dump stats */
- STAT_CLI_O_BACKEND, /* dump backend list */
STAT_CLI_O_ENV, /* dump environment */
STAT_CLI_O_CUSTOM, /* custom callback pointer */
};
diff --git a/src/cli.c b/src/cli.c
index 11f7e44..efceb72 100644
--- a/src/cli.c
+++ b/src/cli.c
@@ -133,7 +133,6 @@
/* one line of stats */
static struct field info[INF_TOTAL_FIELDS];
-static int stats_dump_backend_to_buffer(struct stream_interface *si);
static int stats_dump_env_to_buffer(struct stream_interface *si);
static int stats_dump_info_to_buffer(struct stream_interface *si);
static int stats_dump_errors_to_buffer(struct stream_interface *si);
@@ -149,7 +148,6 @@
" help : this message\n"
" prompt : toggle interactive mode with prompt\n"
" quit : disconnect\n"
- " show backend : list backends in the current running config\n"
" show env [var] : dump environment variables known to the process\n"
" show info : report information about the running process\n"
" show stat : report counters for each proxy and server\n"
@@ -1053,12 +1051,7 @@
}
}
} else if (strcmp(args[0], "show") == 0) {
- if (strcmp(args[1], "backend") == 0) {
- appctx->ctx.be.px = NULL;
- appctx->st2 = STAT_ST_INIT;
- appctx->st0 = STAT_CLI_O_BACKEND;
- }
- else if (strcmp(args[1], "env") == 0) {
+ if (strcmp(args[1], "env") == 0) {
extern char **environ;
if (strm_li(s)->bind_conf->level < ACCESS_LVL_OPER) {
@@ -1882,10 +1875,6 @@
else
si_applet_cant_put(si);
break;
- case STAT_CLI_O_BACKEND:
- if (stats_dump_backend_to_buffer(si))
- appctx->st0 = STAT_CLI_PROMPT;
- break;
case STAT_CLI_O_INFO:
if (stats_dump_info_to_buffer(si))
appctx->st0 = STAT_CLI_PROMPT;
@@ -2137,44 +2126,6 @@
return 1;
}
-/* Parses backend list and simply report backend names */
-static int stats_dump_backend_to_buffer(struct stream_interface *si)
-{
- struct appctx *appctx = __objt_appctx(si->end);
- extern struct proxy *proxy;
- struct proxy *curproxy;
-
- chunk_reset(&trash);
-
- if (!appctx->ctx.be.px) {
- chunk_printf(&trash, "# name\n");
- if (bi_putchk(si_ic(si), &trash) == -1) {
- si_applet_cant_put(si);
- return 0;
- }
- appctx->ctx.be.px = proxy;
- }
-
- for (; appctx->ctx.be.px != NULL; appctx->ctx.be.px = curproxy->next) {
- curproxy = appctx->ctx.be.px;
-
- /* looking for backends only */
- if (!(curproxy->cap & PR_CAP_BE))
- continue;
-
- /* we don't want to list a backend which is bound to this process */
- if (curproxy->bind_proc && !(curproxy->bind_proc & (1UL << (relative_pid - 1))))
- continue;
-
- chunk_appendf(&trash, "%s\n", curproxy->id);
- if (bi_putchk(si_ic(si), &trash) == -1) {
- si_applet_cant_put(si);
- return 0;
- }
- }
-
- return 1;
-}
/* This is called when the stream interface is closed. For instance, upon an
* external abort, we won't call the i/o handler anymore so we may need to
diff --git a/src/proxy.c b/src/proxy.c
index 5313333..45a3db0 100644
--- a/src/proxy.c
+++ b/src/proxy.c
@@ -1374,10 +1374,55 @@
return 1;
}
+static int cli_parse_show_backend(char **args, struct appctx *appctx, void *private)
+{
+ appctx->ctx.be.px = NULL;
+ return 0;
+}
+
+/* Parses backend list and simply report backend names */
+static int cli_io_handler_show_backend(struct appctx *appctx)
+{
+ extern struct proxy *proxy;
+ struct stream_interface *si = appctx->owner;
+ struct proxy *curproxy;
+
+ chunk_reset(&trash);
+
+ if (!appctx->ctx.be.px) {
+ chunk_printf(&trash, "# name\n");
+ if (bi_putchk(si_ic(si), &trash) == -1) {
+ si_applet_cant_put(si);
+ return 0;
+ }
+ appctx->ctx.be.px = proxy;
+ }
+
+ for (; appctx->ctx.be.px != NULL; appctx->ctx.be.px = curproxy->next) {
+ curproxy = appctx->ctx.be.px;
+
+ /* looking for backends only */
+ if (!(curproxy->cap & PR_CAP_BE))
+ continue;
+
+ /* we don't want to list a backend which is bound to this process */
+ if (curproxy->bind_proc && !(curproxy->bind_proc & (1UL << (relative_pid - 1))))
+ continue;
+
+ chunk_appendf(&trash, "%s\n", curproxy->id);
+ if (bi_putchk(si_ic(si), &trash) == -1) {
+ si_applet_cant_put(si);
+ return 0;
+ }
+ }
+
+ return 1;
+}
/* register cli keywords */
static struct cli_kw_list cli_kws = {{ },{
{ { "show","servers", "state", NULL }, "show servers state [id]: dump volatile server information (for backend <id>)", cli_parse_show_servers, cli_io_handler_servers_state },
+ { { "show", "backend", NULL }, "show backend : list backends in the current running config", cli_parse_show_backend, cli_io_handler_show_backend },
{{},}
}};