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

John Ferlan jferlan at redhat.com
Tue Nov 22 19:42:49 UTC 2016



On 11/22/2016 11:29 AM, Erik Skultety wrote:
> 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.
> 

Fair enough - no sense in making a new class of command abbreviations.

John

> 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




More information about the libvir-list mailing list