From 4ae60696aed938347cc1cf2a5d8f5a2b86292132 Mon Sep 17 00:00:00 2001 From: David Härdeman Date: Tue, 7 Jul 2020 22:32:11 +0200 Subject: Improve handling of info and status commands --- minecctl/misc-commands.c | 92 ++++++++++++++++++++++-------------------------- 1 file changed, 42 insertions(+), 50 deletions(-) (limited to 'minecctl/misc-commands.c') diff --git a/minecctl/misc-commands.c b/minecctl/misc-commands.c index c7c09d0..e23de37 100644 --- a/minecctl/misc-commands.c +++ b/minecctl/misc-commands.c @@ -58,40 +58,11 @@ static bool saddr_match(struct list_head *la, struct list_head *lb) bool do_lint(struct cfg *cfg) { - struct server *server; - unsigned lineno; - const char *error; - bool rv = true; struct server *a, *b; unsigned ia, ib; + bool rv = true; - /* server->scfg.filename check excludes servers created from cmdline */ - list_for_each_entry(server, &cfg->servers, list) { - if (!server->scfg.filename) - continue; - - if (!server_read_config(cfg, server, &lineno, &error)) { - if (lineno != 0) - info("• %s: %sfail%s - line %u: %s", - server->name, ansi_red, ansi_normal, - lineno, error); - else - info("• %s: %sfail%s - %s", - server->name, ansi_red, ansi_normal, - error); - rv = false; - } else if (!scfg_validate(&server->scfg, &error)) { - info("• %s: %sfail%s - %s", - server->name, ansi_red, ansi_normal, - error); - rv = false; - } else { - info("• %s: %sok%s", server->name, ansi_green, - ansi_normal); - } - } - - info(""); + rv = server_read_all_configs(cfg, true); dump_config(cfg); @@ -155,44 +126,65 @@ bool do_pcount(struct cfg *cfg) return true; } -bool do_status(struct cfg *cfg) +static bool do_one_status(struct cfg *cfg, struct server *server) { - struct server *server; - const char *error; unsigned online, max; - - /* FIXME: Do all servers when default not given */ - server = server_get_default(cfg); - if (!server) { - error("failed to get default server"); - return false; - } + const char *error; + bool rv = true; info("• %s", server->name); if (list_empty(&server->scfg.rcons)) info(" rcon : not configured"); - else if (!do_rcon_pcount(cfg, server, &online, &max, &error)) + else if (do_rcon_pcount(cfg, server, &online, &max, &error)) + info(" rcon : %sok%s", ansi_green, ansi_normal); + else { info(" rcon : %sfail%s (%s)", ansi_red, ansi_normal, error); - else - info(" rcon : %sok%s", ansi_green, ansi_normal); + rv = false; + } if (list_empty(&server->scfg.remotes)) info(" mc : not configured"); - else if (!do_mc_pcount(cfg, server, &online, &max, &error)) + else if (do_mc_pcount(cfg, server, &online, &max, &error)) + info(" mc : %sok%s", ansi_green, ansi_normal); + else { info(" mc : %sfail%s (%s)", ansi_red, ansi_normal, error); - else - info(" mc : %sok%s", ansi_green, ansi_normal); + rv = false; + } if (!server->scfg.systemd_service || !server->scfg.systemd_obj) info(" systemd service : not configured"); - else if (!systemd_service_running(&server->scfg, &error)) + else if (systemd_service_running(&server->scfg, &error)) + info(" systemd service : %sactive%s", ansi_green, ansi_normal); + else { info(" systemd service : %sfail%s (%s)", ansi_red, ansi_normal, error); - else - info(" systemd service : %sactive%s", ansi_green, ansi_normal); + rv = false; + } + + return rv; +} + +bool do_status(struct cfg *cfg) +{ + struct server *server; + + if (cfg->default_set) { + server = server_get_default(cfg); + if (!server) { + error("failed to get default server"); + return false; + } + + do_one_status(cfg, server); + } else { + server_read_all_configs(cfg, false); + list_for_each_entry(server, &cfg->servers, list) + do_one_status(cfg, server); + } + systemd_delete(); return true; -- cgit v1.2.3