On 09/01/2014 11:05 AM, Jiri Denemark wrote:
New --completed flag for virsh domjobinfo command.
Signed-off-by: Jiri Denemark <jdenemar(a)redhat.com>
---
tools/virsh-domain.c | 27 ++++++++++++++++++++++++---
tools/virsh.pod | 5 +++--
2 files changed, 27 insertions(+), 5 deletions(-)
diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index c75cd73..1ff264e 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -5164,6 +5164,10 @@ static const vshCmdOptDef opts_domjobinfo[] = {
.flags = VSH_OFLAG_REQ,
.help = N_("domain name, id or uuid")
},
+ {.name = "completed",
+ .type = VSH_OT_BOOL,
+ .help = N_("return statistics of a recently completed job")
+ },
{.name = NULL}
};
@@ -5195,14 +5199,18 @@ cmdDomjobinfo(vshControl *ctl, const vshCmd *cmd)
virTypedParameterPtr params = NULL;
int nparams = 0;
unsigned long long value;
+ unsigned int flags = 0;
int rc;
if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
return false;
+ if (vshCommandOptBool(cmd, "completed"))
+ flags |= VIR_DOMAIN_JOB_STATS_COMPLETED;
+
memset(&info, 0, sizeof(info));
- rc = virDomainGetJobStats(dom, &info.type, ¶ms, &nparams, 0);
+ rc = virDomainGetJobStats(dom, &info.type, ¶ms, &nparams, flags);
if (rc == 0) {
if (virTypedParamsGetULLong(params, nparams,
VIR_DOMAIN_JOB_TIME_ELAPSED,
@@ -5239,6 +5247,11 @@ cmdDomjobinfo(vshControl *ctl, const vshCmd *cmd)
&info.fileRemaining) < 0)
goto save_error;
} else if (last_error->code == VIR_ERR_NO_SUPPORT) {
+ if (flags) {
+ vshError(ctl, "%s", _("Optional flags are not supported by
the "
+ "daemon"));
+ goto cleanup;
+ }
vshDebug(ctl, VSH_ERR_DEBUG, "detailed statistics not supported\n");
vshResetLibvirtError();
rc = virDomainGetJobInfo(dom, &info);
@@ -5249,7 +5262,9 @@ cmdDomjobinfo(vshControl *ctl, const vshCmd *cmd)
vshPrint(ctl, "%-17s %-12s\n", _("Job type:"),
vshDomainJobToString(info.type));
if (info.type != VIR_DOMAIN_JOB_BOUNDED &&
- info.type != VIR_DOMAIN_JOB_UNBOUNDED) {
+ info.type != VIR_DOMAIN_JOB_UNBOUNDED &&
+ (!(flags & VIR_DOMAIN_JOB_STATS_COMPLETED) ||
+ info.type != VIR_DOMAIN_JOB_COMPLETED)) {
ret = true;
goto cleanup;
}
@@ -5314,7 +5329,13 @@ cmdDomjobinfo(vshControl *ctl, const vshCmd *cmd)
&value)) < 0) {
goto save_error;
} else if (rc) {
- vshPrint(ctl, "%-17s %-12llu ms\n", _("Expected downtime:"),
value);
+ if (info.type == VIR_DOMAIN_JOB_COMPLETED) {
+ vshPrint(ctl, "%-17s %-12llu ms\n",
+ _("Total downtime:"), value);
+ } else {
+ vshPrint(ctl, "%-17s %-12llu ms\n",
+ _("Expected downtime:"), value);
+ }
}
if ((rc = virTypedParamsGetULLong(params, nparams,
diff --git a/tools/virsh.pod b/tools/virsh.pod
index ea9267e..3c71db9 100644
--- a/tools/virsh.pod
+++ b/tools/virsh.pod
@@ -1112,9 +1112,10 @@ Convert a domain name (or UUID) to a domain id
Abort the currently running domain job.
-=item B<domjobinfo> I<domain>
+=item B<domjobinfo> I<domain> [I<--completed>]
-Returns information about jobs running on a domain.
+Returns information about jobs running on a domain. I<--completed> tells
+virsh to return information about a recently finished job.
Perhaps a bit more about the "once read" or "libvirtd" restart will
cause statistics to be destroyed.
ACK with that
John
=item B<domname> I<domain-id-or-uuid>