From: Andrea Bolognani Date: Mon, 21 Dec 2015 15:22:58 +0000 (+0100) Subject: virsh: Add timestamps to QEMU monitor events X-Git-Tag: v1.3.1-rc1~36 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=75a96e0cc4f4e2e019a92b9d3baa39876c07bf6c;p=thirdparty%2Flibvirt.git virsh: Add timestamps to QEMU monitor events Implement a --timestamp option for 'virsh qemu-monitor-event', similar to the one for 'virsh event'. When the option is used, the human-readable timestamp will be printed before the message, and the timing information provided by QEMU will not be displayed. --- diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index 7c65bf4886..adcb6c8a17 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -9173,6 +9173,7 @@ struct virshQemuEventData { vshControl *ctl; bool loop; bool pretty; + bool timestamp; int count; }; typedef struct virshQemuEventData virshQemuEventData; @@ -9197,8 +9198,20 @@ virshEventQemuPrint(virConnectPtr conn ATTRIBUTE_UNUSED, if (pretty && (str = virJSONValueToString(pretty, true))) details = str; } - vshPrint(data->ctl, "event %s at %lld.%06u for domain %s: %s\n", - event, seconds, micros, virDomainGetName(dom), NULLSTR(details)); + + if (data->timestamp) { + char timestamp[VIR_TIME_STRING_BUFLEN]; + + if (virTimeStringNowRaw(timestamp) < 0) + timestamp[0] = '\0'; + + vshPrint(data->ctl, "%s: event %s for domain %s: %s\n", + timestamp, event, virDomainGetName(dom), NULLSTR(details)); + } else { + vshPrint(data->ctl, "event %s at %lld.%06u for domain %s: %s\n", + event, seconds, micros, virDomainGetName(dom), NULLSTR(details)); + } + data->count++; if (!data->loop) vshEventDone(data->ctl); @@ -9245,6 +9258,10 @@ static const vshCmdOptDef opts_qemu_monitor_event[] = { .type = VSH_OT_BOOL, .help = N_("treat event case-insensitively") }, + {.name = "timestamp", + .type = VSH_OT_BOOL, + .help = N_("show timestamp for each printed event") + }, {.name = NULL} }; @@ -9268,6 +9285,7 @@ cmdQemuMonitorEvent(vshControl *ctl, const vshCmd *cmd) data.ctl = ctl; data.loop = vshCommandOptBool(cmd, "loop"); data.pretty = vshCommandOptBool(cmd, "pretty"); + data.timestamp = vshCommandOptBool(cmd, "timestamp"); data.count = 0; if (vshCommandOptTimeoutToMs(ctl, cmd, &timeout) < 0) return false;