On 11/01/2016 06:27 AM, Erik Skultety wrote:
Finally, now that all APIs have been introduced, wire them up to
virt-admin
and introduce dmn-log-info and dmn-log-define commands.
Signed-off-by: Erik Skultety <eskultet(a)redhat.com>
---
tools/virt-admin.c | 141 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 141 insertions(+)
virt-admin.pod?
It seems you're defining a new set of configuration alteration comments,
so the virt-admin.pod would have a new "CONFIGURATION" section and all
the commands could be prefixed with "cfg-" - thoughts?
Then you'd have:
cfg-log-outputs [outputs]
where if [outputs] was provided, then you have a SET function while if
not you have a GET function
Naturally then you'd have:
cfg-log-filters [filters]
and you could also have:
cfg-log-level [level]
which would allow adjustment of that too.
OK - so I'm looking really far forward.
diff --git a/tools/virt-admin.c b/tools/virt-admin.c
index b1e0c49..0bada05 100644
--- a/tools/virt-admin.c
+++ b/tools/virt-admin.c
@@ -971,6 +971,135 @@ cmdSrvClientsSet(vshControl *ctl, const vshCmd *cmd)
goto cleanup;
}
+/* -------------------
+ * Command dmn-log-info
Is this dmn- or daemon-
I know this was discussed at KVM Forum, but I've forgotten...
+ * -------------------
+ */
+static const vshCmdInfo info_dmn_log_info[] = {
+ {.name = "help",
+ .data = N_("view daemon's current logging settings")
+ },
+ {.name = "desc",
+ .data = N_("Returns all currently active logging settings on daemon. "
+ "These include global logging level, logging filters and "
+ "logging outputs.")
+ },
+ {.name = NULL}
+};
+
+static const vshCmdOptDef opts_dmn_log_info[] = {
+ {.name = "outputs",
+ .type = VSH_OT_BOOL,
+ .help = N_("query logging outputs")
+ },
+ {.name = "filters",
+ .type = VSH_OT_BOOL,
+ .help = N_("query logging filters")
+ },
+ {.name = NULL}
+};
+
+static bool
+cmdDmnLogInfo(vshControl *ctl, const vshCmd *cmd)
+{
+ bool optOutputs = vshCommandOptBool(cmd, "outputs");
+ bool optFilters = vshCommandOptBool(cmd, "filters");
+ bool all = optOutputs + optFilters == 0;
+ int nfilters, noutputs;
+ char *filters, *outputs;
+ vshAdmControlPtr priv = ctl->privData;
+
+ if (all || optFilters) {
+ if ((nfilters = virAdmConnectGetLoggingFilters(priv->conn,
+ &filters, 0)) < 0) {
+ vshError(ctl, _("Unable to get daemon logging filters
information"));
+ return false;
+ }
+ }
+
+ if (all || optOutputs) {
+ if ((noutputs = virAdmConnectGetLoggingOutputs(priv->conn,
+ &outputs, 0)) < 0) {
+ vshError(ctl, _("Unable to get daemon logging outputs
information"));
+ return false;
+ }
+ }
+
+ if (all || optFilters) {
+ vshPrintExtra(ctl, " %-15s", _("Logging filters: "));
+ vshPrint(ctl, "%s\n", filters);
+ }
+
+ if (all || optOutputs) {
+ vshPrintExtra(ctl, " %-15s", _("Logging outputs: "));
+ vshPrint(ctl, "%s\n", outputs);
+ }
+
+ return true;
+}
+
+/* -------------------------
+ * Command daemon-log-define
Is the dmn- or daemon-
+ * -------------------------
+ */
+static const vshCmdInfo info_dmn_log_define[] = {
+ {.name = "help",
+ .data = N_("change daemon's logging settings")
+ },
+ {.name = "desc",
+ .data = N_("Defines and installs a new set of logging settings on a daemon.
"
+ "These include global logging level, logging filters and "
+ "logging outputs.")
+ },
+ {.name = NULL}
+};
+
+static const vshCmdOptDef opts_dmn_log_define[] = {
+ {.name = "outputs",
+ .type = VSH_OT_STRING,
+ .help = N_("comma separated list of logging outputs"),
+ .flags = VSH_OFLAG_EMPTY_OK
+ },
+ {.name = "filters",
+ .type = VSH_OT_STRING,
+ .help = N_("comma separated list of logging filters"),
+ .flags = VSH_OFLAG_EMPTY_OK
+ },
+ {.name = NULL}
+};
+
+static bool
+cmdDmnLogDefine(vshControl *ctl, const vshCmd *cmd)
+{
+ const char *filters = NULL;
+ const char *outputs = NULL;
+ bool optOutputs = vshCommandOptBool(cmd, "outputs");
+ bool optFilters = vshCommandOptBool(cmd, "filters");
+ vshAdmControlPtr priv = ctl->privData;
+
+ if (!(optOutputs + optFilters)) {
+ vshError(ctl, _("At least one of options --outputs, --filters "
+ "is mandatory"));
+ return false;
+ }
+
+ if (optFilters &&
+ (vshCommandOptStringReq(ctl, cmd, "filters", &filters) < 0 ||
+ virAdmConnectSetLoggingFilters(priv->conn, filters, 0) < 0)) {
+ vshError(ctl, _("Unable to change daemon logging settings"));
+ return false;
+ }
+
+ if (optOutputs &&
+ (vshCommandOptStringReq(ctl, cmd, "outputs", &outputs) < 0 ||
+ virAdmConnectSetLoggingOutputs(priv->conn, outputs, 0) < 0)) {
+ vshError(ctl, _("Unable to change daemon logging settings"));
+ return false;
+ }
+
+ return true;
+}
+
static void *
vshAdmConnectionHandler(vshControl *ctl)
{
@@ -1311,6 +1440,12 @@ static const vshCmdDef monitoringCmds[] = {
.info = info_srv_clients_info,
.flags = 0
},
+ {.name = "daemon-log-info",
+ .handler = cmdDmnLogInfo,
+ .opts = opts_dmn_log_info,
+ .info = info_dmn_log_info,
+ .flags = 0
+ },
{.name = NULL}
};
@@ -1341,6 +1476,12 @@ static const vshCmdDef managementCmds[] = {
.info = info_srv_clients_set,
.flags = 0
},
+ {.name = "daemon-log-define",
+ .handler = cmdDmnLogDefine,
+ .opts = opts_dmn_log_define,
+ .info = info_dmn_log_define,
+ .flags = 0
+ },
{.name = NULL}
};