[libvirt] [PATCH 8/8] virt-admin: Wire-up the logging APIs

Erik Skultety eskultet at redhat.com
Tue Nov 22 16:29:48 UTC 2016


On Wed, Nov 09, 2016 at 11:26:31AM -0500, John Ferlan wrote:
> 
> 
> 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 at redhat.com>
> > ---
> >  tools/virt-admin.c | 141 +++++++++++++++++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 141 insertions(+)
> 
> virt-admin.pod?
>

Shame on me. I'll fix this in the next version right after we reach a consensus
on all the patches.

> 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?
> 

We already have some cfg- stuff implemented under server- and client-, not
mentioning that we already have some aliases too, so I think it's a bit late
for this now that we follow the philosophy of placing server-related cfg stuff
under server- and client-related stuff under client-, so I think having
daemon-generic cfg stuff under daemon- might be reasonable.

Erik

> 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}
> >  };
> >  
> > 
> 
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20161122/11ed4fd4/attachment-0001.sig>


More information about the libvir-list mailing list