]> xenbits.xensource.com Git - libvirt.git/commitdiff
getstats: add block.n.path stat
authorEric Blake <eblake@redhat.com>
Tue, 25 Nov 2014 00:12:30 +0000 (17:12 -0700)
committerEric Blake <eblake@redhat.com>
Mon, 8 Dec 2014 18:58:39 +0000 (11:58 -0700)
I'm about to make block stats optionally more complex to cover
backing chains, where block.count will no longer equal the number
of <disks> for a domain.  For these reasons, it is nicer if the
statistics output includes the source path (for local files).
This patch doesn't add anything for network disks, although we
may decide to add that later.

With this patch, I now see the following for the same domain as
in the previous patch (one qcow2 file, and an empty cdrom drive):
$ virsh domstats --block foo
Domain: 'foo'
  block.count=2
  block.0.name=hda
  block.0.path=/var/lib/libvirt/images/foo.qcow2
  block.1.name=hdc

* src/libvirt-domain.c (virConnectGetAllDomainStats): Document
new field.
* tools/virsh.pod (domstats): Document new field.
* src/qemu/qemu_driver.c (qemuDomainGetStatsBlock): Return the new
stat for local files/block devices.
(QEMU_ADD_NAME_PARAM): Add parameter.
(qemuDomainGetStatsInterface): Update caller.

Signed-off-by: Eric Blake <eblake@redhat.com>
src/libvirt-domain.c
src/qemu/qemu_driver.c
tools/virsh.pod

index 87123d1184dd9b01caedbd7a0cf90815dd5b0d47..cb76d8ce58d745978727193efb3465a0780651b9 100644 (file)
@@ -10910,6 +10910,9 @@ virConnectGetDomainCapabilities(virConnectPtr conn,
  * "block.<num>.name" - name of the block device <num> as string.
  *                      matches the target name (vda/sda/hda) of the
  *                      block device.
+ * "block.<num>.path" - string describing the source of block device <num>,
+ *                      if it is a file or block device (omitted for network
+ *                      sources and drives with no media inserted).
  * "block.<num>.rd.reqs" - number of read requests as unsigned long long.
  * "block.<num>.rd.bytes" - number of read bytes as unsigned long long.
  * "block.<num>.rd.times" - total time (ns) spent on reads as
index d87ea98fd91f46e7cdc9d6ee86f23edef2f6dd8a..dc62a75df7ef173b3f09a9947a2aebd065e092e1 100644 (file)
@@ -18374,11 +18374,11 @@ do { \
         goto cleanup; \
 } while (0)
 
-#define QEMU_ADD_NAME_PARAM(record, maxparams, type, num, name) \
+#define QEMU_ADD_NAME_PARAM(record, maxparams, type, subtype, num, name) \
 do { \
     char param_name[VIR_TYPED_PARAM_FIELD_LENGTH]; \
     snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH, \
-             "%s.%zu.name", type, num); \
+             "%s.%zu.%s", type, num, subtype); \
     if (virTypedParamsAddString(&(record)->params, \
                                 &(record)->nparams, \
                                 maxparams, \
@@ -18424,7 +18424,7 @@ qemuDomainGetStatsInterface(virQEMUDriverPtr driver ATTRIBUTE_UNUSED,
         memset(&tmp, 0, sizeof(tmp));
 
         QEMU_ADD_NAME_PARAM(record, maxparams,
-                            "net", i, dom->def->nets[i]->ifname);
+                            "net", "name", i, dom->def->nets[i]->ifname);
 
         if (virNetInterfaceStats(dom->def->nets[i]->ifname, &tmp) < 0) {
             virResetLastError();
@@ -18517,7 +18517,10 @@ qemuDomainGetStatsBlock(virQEMUDriverPtr driver,
         qemuBlockStats *entry;
         virDomainDiskDefPtr disk = dom->def->disks[i];
 
-        QEMU_ADD_NAME_PARAM(record, maxparams, "block", i, disk->dst);
+        QEMU_ADD_NAME_PARAM(record, maxparams, "block", "name", i, disk->dst);
+        if (virStorageSourceIsLocalStorage(disk->src) && disk->src->path)
+            QEMU_ADD_NAME_PARAM(record, maxparams, "block", "path",
+                                i, disk->src->path);
 
         if (abbreviated || !disk->info.alias ||
             !(entry = virHashLookup(stats, disk->info.alias))) {
index c070261d79417d59020462673ba07234ed44241f..cbd822754d2b005bf58ce9361c3f69b95615a939 100644 (file)
@@ -883,6 +883,8 @@ I<--interface> returns:
 I<--block> returns:
 "block.count" - number of block devices on this domain,
 "block.<num>.name" - name of the target of the block device <num>,
+"block.<num>.path" - file source of block device <num>, if it is a
+local file or block device,
 "block.<num>.rd.reqs" - number of read requests,
 "block.<num>.rd.bytes" - number of read bytes,
 "block.<num>.rd.times" - total time (ns) spent on reads,