On 05/02/2017 12:35 AM, Julio Faracco wrote: > The virsh command 'domblkinfo' returns the capacity, allocation and phisycal > size of the devices attached in a domain. Usually, this sizes are very big > and hard to understand and calculate. This commits introduce a human readable > support to check the size of each field easilly. > > For example, the command today: > > virsh # domblkinfo my_domain hda > Capacity: 21474836480 > Allocation: 14875545600 > Physical: 21474836480 > > After this patch: > > virsh # domblkinfo my_domain hda --human > Capacity: 20.0G > Allocation: 13.9G > Physical: 20.0G > > This commit supports Bytes, KiB and MiB too. > > Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1330940 > > Signed-off-by: Julio Faracco <jcfaracco@xxxxxxxxx> > --- > tools/virsh-domain-monitor.c | 41 ++++++++++++++++++++++++++++++++++++++--- > tools/virsh.pod | 5 +++-- > 2 files changed, 41 insertions(+), 5 deletions(-) > > diff --git a/tools/virsh-domain-monitor.c b/tools/virsh-domain-monitor.c > index 3db4795..755d740 100644 > --- a/tools/virsh-domain-monitor.c > +++ b/tools/virsh-domain-monitor.c > @@ -396,6 +396,10 @@ static const vshCmdOptDef opts_domblkinfo[] = { > .flags = VSH_OFLAG_REQ, > .help = N_("block device") > }, > + {.name = "human", > + .type = VSH_OT_BOOL, > + .help = N_("Human readable output") > + }, > {.name = NULL} > }; > > @@ -405,6 +409,7 @@ cmdDomblkinfo(vshControl *ctl, const vshCmd *cmd) > virDomainBlockInfo info; > virDomainPtr dom; > bool ret = false; > + bool human = false; > const char *device = NULL; > > if (!(dom = virshCommandOptDomain(ctl, cmd, NULL))) > @@ -416,9 +421,39 @@ cmdDomblkinfo(vshControl *ctl, const vshCmd *cmd) > if (virDomainGetBlockInfo(dom, device, &info, 0) < 0) > goto cleanup; > > - vshPrint(ctl, "%-15s %llu\n", _("Capacity:"), info.capacity); > - vshPrint(ctl, "%-15s %llu\n", _("Allocation:"), info.allocation); > - vshPrint(ctl, "%-15s %llu\n", _("Physical:"), info.physical); > + human = vshCommandOptBool(cmd, "human"); > + > + if (!human) { > + vshPrint(ctl, "%-15s %llu\n", _("Capacity:"), info.capacity); > + vshPrint(ctl, "%-15s %llu\n", _("Allocation:"), info.allocation); > + vshPrint(ctl, "%-15s %llu\n", _("Physical:"), info.physical); > + } else { > + double sizeCapacity = 1; > + const char *sizeStr = "B"; > + > + /* Check if capacity can be in K. */ > + if (info.capacity >= 1024) { > + sizeCapacity = 1024.0; > + sizeStr = "K"; > + } > + /* Check if capacity can be in M. */ > + if (info.capacity >= 1048576) { > + sizeCapacity = 1048576.0; > + sizeStr = "M"; > + } > + /* Check if capacity can be in G. */ > + if (info.capacity >= 1073741824) { > + sizeCapacity = 1073741824.0; > + sizeStr = "G"; > + } There's no need for this complexity. We have vshPrettyCapacity() just for that. You can look at cmdDomjobinfo() for example of its usage. > + > + vshPrint(ctl, "%-15s %.1f%s\n", _("Capacity:"), Here we prefer slightly different format: "%-.3lf": - double is long float - .3 for more digits after decimal point - `-` for left alignment > + info.capacity/sizeCapacity, sizeStr); > + vshPrint(ctl, "%-15s %.1f%s\n", _("Allocation:"), > + info.allocation/sizeCapacity, sizeStr); > + vshPrint(ctl, "%-15s %.1f%s\n", _("Physical:"), > + info.physical/sizeCapacity, sizeStr); > + } > > ret = true; > > diff --git a/tools/virsh.pod b/tools/virsh.pod > index e16f62f..9f67de2 100644 > --- a/tools/virsh.pod > +++ b/tools/virsh.pod > @@ -841,12 +841,13 @@ B<domstate> command says that a domain was paused due to I/O error. > The B<domblkerror> command lists all block devices in error state and > the error seen on each of them. > > -=item B<domblkinfo> I<domain> I<block-device> > +=item B<domblkinfo> I<domain> I<block-device> [I<--human>] > > Get block device size info for a domain. A I<block-device> corresponds > to a unique target name (<target dev='name'/>) or source file (<source > file='name'/>) for one of the disk devices attached to I<domain> (see > -also B<domblklist> for listing these names). > +also B<domblklist> for listing these names). If I<--human> is set, the > +output will have a human readable design. I personally prefer "human readable output". So, I'm fixing all the nits I've pointed out, ACKing and pushing. Michal -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list