Re: [PATCH v2 08/10] virt-admin: Wire-up the logging APIs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Dec 09, 2016 at 07:29:36AM -0500, John Ferlan wrote:
> 
> 
> On 11/25/2016 08:12 AM, Erik Skultety wrote:
> > Finally, now that all APIs have been introduced, wire them up to virt-admin
> > and introduce daemon-log-outputs and daemon-log-filters commands.
> > 
> > Signed-off-by: Erik Skultety <eskultet@xxxxxxxxxx>
> > ---
> >  tools/virt-admin.c   | 120 +++++++++++++++++++++++++++++++++++++++++++++++++++
> >  tools/virt-admin.pod |  90 ++++++++++++++++++++++++++++++++++++++
> >  2 files changed, 210 insertions(+)
> > 
> 
> Now it *is* the coffee - should there be any concerns along the way over
> escaping characters?  I think this is the only place where we
> read/print, but via the API if someone passes a string - do we need to
> worry about that? Yes, I know - not the normal thing, but you know
> someone will try...

Is it an issue though? If someone sends a binary garbage for filename, we have
to create a logfile with that name on the filesystem. When we retrieve it, I
think we should print it as we created it - garbage. The other option we have
is to strip all the control characters and print the rest which in the worst
case scenario will end up as an empty string...

> 
> 
> > diff --git a/tools/virt-admin.c b/tools/virt-admin.c
> > index 70b0e51..0b9945a 100644
> > --- a/tools/virt-admin.c
> > +++ b/tools/virt-admin.c
> > @@ -971,6 +971,114 @@ cmdSrvClientsSet(vshControl *ctl, const vshCmd *cmd)
> >      goto cleanup;
> >  }
> >  
> > +/* --------------------------
> > + * Command daemon-log-filters
> > + * --------------------------
> > + */
> > +static const vshCmdInfo info_daemon_log_filters[] = {
> > +    {.name = "help",
> > +     .data = N_("fetch or set the currently defined set of logging filters on "
> > +                "daemon")
> > +    },
> > +    {.name = "desc",
> > +     .data = N_("Depending on whether run with or without options, the command "
> > +                "fetches or redefines the existing active set of filters on "
> > +                "daemon.")
> > +    },
> > +    {.name = NULL}
> > +};
> > +
> > +static const vshCmdOptDef opts_daemon_log_filters[] = {
> > +    {.name = "filters",
> > +     .type = VSH_OT_STRING,
> > +     .help = N_("redefine the existing set of logging filters"),
> > +     .flags = VSH_OFLAG_EMPTY_OK
> > +    },
> > +    {.name = NULL}
> > +};
> > +
> > +static bool
> > +cmdDaemonLogFilters(vshControl *ctl, const vshCmd *cmd)
> > +{
> > +    int nfilters;
> > +    char *filters = NULL;
> > +    vshAdmControlPtr priv = ctl->privData;
> > +
> > +    if (vshCommandOptBool(cmd, "filters")) {
> > +        if ((vshCommandOptStringReq(ctl, cmd, "filters",
> > +                                    (const char **) &filters) < 0 ||
> > +             virAdmConnectSetLoggingFilters(priv->conn, filters, 0) < 0)) {
> > +            vshError(ctl, _("Unable to change daemon logging settings"));
> > +            return false;
> > +        }
> > +    } else {
> > +        if ((nfilters = virAdmConnectGetLoggingFilters(priv->conn,
> > +                                                       &filters, 0)) < 0) {
> > +            vshError(ctl, _("Unable to get daemon logging filters information"));
> > +            return false;
> > +        }
> > +
> > +        vshPrintExtra(ctl, " %-15s", _("Logging filters: "));
> > +        vshPrint(ctl, "%s\n", filters ? filters : "");
> > +    }
> > +
> > +    return true;
> > +}
> > +
> > +/* --------------------------
> > + * Command daemon-log-outputs
> > + * --------------------------
> > + */
> > +static const vshCmdInfo info_daemon_log_outputs[] = {
> > +    {.name = "help",
> > +     .data = N_("fetch or set the currently defined set of logging outputs on "
> > +                "daemon")
> > +    },
> > +    {.name = "desc",
> > +     .data = N_("Depending on whether run with or without options, the command "
> > +                "fetches or redefines the existing active set of outputs on "
> > +                "daemon.")
> > +    },
> > +    {.name = NULL}
> > +};
> > +
> > +static const vshCmdOptDef opts_daemon_log_outputs[] = {
> > +    {.name = "outputs",
> > +     .type = VSH_OT_STRING,
> > +     .help = N_("redefine the existing set of logging outputs"),
> > +     .flags = VSH_OFLAG_EMPTY_OK
> > +    },
> > +    {.name = NULL}
> > +};
> > +
> > +static bool
> > +cmdDaemonLogOutputs(vshControl *ctl, const vshCmd *cmd)
> > +{
> > +    int noutputs;
> > +    char *outputs = NULL;
> > +    vshAdmControlPtr priv = ctl->privData;
> > +
> > +    if (vshCommandOptBool(cmd, "outputs")) {
> > +        if ((vshCommandOptStringReq(ctl, cmd, "outputs",
> > +                                    (const char **) &outputs) < 0 ||
> > +             virAdmConnectSetLoggingOutputs(priv->conn, outputs, 0) < 0)) {
> > +            vshError(ctl, _("Unable to change daemon logging settings"));
> > +            return false;
> > +        }
> > +    } else {
> > +        if ((noutputs = virAdmConnectGetLoggingOutputs(priv->conn,
> > +                                                       &outputs, 0)) < 0) {
> > +            vshError(ctl, _("Unable to get daemon logging filters information"));
> > +            return false;
> > +        }
> > +
> > +        vshPrintExtra(ctl, " %-15s", _("Logging outputs: "));
> > +        vshPrint(ctl, "%s\n", outputs ? outputs : "");
> > +    }
> > +
> > +    return true;
> > +}
> > +
> >  static void *
> >  vshAdmConnectionHandler(vshControl *ctl)
> >  {
> > @@ -1341,6 +1449,18 @@ static const vshCmdDef managementCmds[] = {
> >       .info = info_srv_clients_set,
> >       .flags = 0
> >      },
> > +    {.name = "daemon-log-filters",
> > +     .handler = cmdDaemonLogFilters,
> > +     .opts = opts_daemon_log_filters,
> > +     .info = info_daemon_log_filters,
> > +     .flags = 0
> > +    },
> > +    {.name = "daemon-log-outputs",
> > +     .handler = cmdDaemonLogOutputs,
> > +     .opts = opts_daemon_log_outputs,
> > +     .info = info_daemon_log_outputs,
> > +     .flags = 0
> > +    },
> >      {.name = NULL}
> >  };
> >  
> > diff --git a/tools/virt-admin.pod b/tools/virt-admin.pod
> > index 443730e..d3f1a35 100644
> > --- a/tools/virt-admin.pod
> > +++ b/tools/virt-admin.pod
> 
> All of this is way off - no such command as daemon-log-info or
> daemon-log-define.
>
> I think you should reference /etc/libvirt/libvirtd.conf in order to
> point at the place which describes the format.

Not sure what you mean, should I just add a reference or replace the sections
explaining the format with the reference completely?

Erik

> 
> Although I trust you know what should be there so...
> 
> ACK once you clean this up.
> 
> John
> 
> > @@ -155,6 +155,96 @@ change its internal configuration.
> >  Lists all manageable servers contained within the daemon the client is
> >  currently connected to.
> >  
> > +=item B<daemon-log-info> [I<--outputs> B<string>] [I<--filters> B<string>]
> > +
> > +Print the currently defined set of logging outputs and/or filters.
> > +
> > +=over 4
> > +
> > +=item I<--outputs>
> > +
> > +Print the currently defined set of logging outputs
> > +
> > +=item I<--filters>
> > +
> > +Print the currently defined set of logging filters
> > +
> > +=back
> > +
> > +=item B<daemon-log-define>
> > +
> > +Redefine the currently defined sets of logging outputs and/or filters with
> > +completely new ones.
> > +
> > +=over 4
> > +
> > +=item I<--outputs>
> > +
> > +Replaces the current set of logging outputs with a new one where multiple
> > +outputs are delimited by space and each output must be of the following form:
> > +
> > +I<< X:<destination>:<auxiliary_data> >> where
> > +
> > +=over 4
> > +
> > +=item * I<X> denotes the minimal debug level:
> > +
> > +=over 4
> > +
> > +=item * 1: DEBUG
> > +
> > +=item * 2: INFO
> > +
> > +=item * 3: WARNING
> > +
> > +=item * 4: ERROR
> > +
> > +=back
> > +
> > +=item * I<< <destination> >> is one of I<stderr>, I<file>, I<syslog>, or I<journald>
> > +
> > +=item * I<< <auxiliary_data> >> is only required for the I<file> and I<syslog>
> > +destination types and shall therefore contain either a path to a file or a message tag
> > +respectively, see the B<Examples> section below.
> > +
> > +=back
> > +
> > +=item I<--filters>
> > +
> > +Replaces the current set of logging filters with a new one where multiple
> > +filters are delimited by space and each filter must be of the following form:
> > +
> > +I<< X:<match_string> >> where
> > +
> > +=over 4
> > +
> > +=item * I<X> denotes the minimal debug level the same way as for I<--outputs>
> > +
> > +=item * I<< <match_string> >> references either a specific module in libvirt's
> > +source tree or the whole directory in the source tree, thus affecting all
> > +modules in the directory
> > +
> > +=back
> > +
> > +=back
> > +
> > +B<Examples>
> > +    To replace the current logging output with one that writes to a file while
> > +    logging logging errors only, the following could be used:
> > +
> > +        $ virt-admin daemon-log-define --outputs "4:file:<path_to_the_file>"
> > +
> > +    To define multiple outputs at once:
> > +
> > +        $ virt-admin daemon-log-define --outputs "4:stderr 2:syslog:<tag>"
> > +
> > +    To define a filter which suppresses all e.g. 'virObjectUnref' DEBUG
> > +    messages, use the following (note the '.' symbol which can be used to more
> > +    fine-grained filters tailored to specific modules, in contrast, to affect
> > +    a whole directory containing several modules it would become "4:util"):
> > +
> > +        $ virt-admin daemon-log-define --filters "4:util.object"
> > +
> >  =back
> >  
> >  =head1 SERVER COMMANDS
> > 

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]
  Powered by Linux