On Fri, Jun 12, 2015 at 13:29:26 -0600, Eric Blake wrote:
Add a new 'virsh domblkthreshold' command to use the new
API.
* tools/virsh.pod (domblkthreshold): Document it.
* tools/virsh-domain-monitor.c (cmdDomblkthreshold): New function.
(domMonitoringCmds): Register it.
Signed-off-by: Eric Blake <eblake(a)redhat.com>
---
tools/virsh-domain-monitor.c | 81 ++++++++++++++++++++++++++++++++++++++++++++
tools/virsh.pod | 24 +++++++++++++
2 files changed, 105 insertions(+)
diff --git a/tools/virsh-domain-monitor.c b/tools/virsh-domain-monitor.c
index 1d4dc25..66f7571 100644
--- a/tools/virsh-domain-monitor.c
+++ b/tools/virsh-domain-monitor.c
@@ -571,6 +571,81 @@ cmdDomblklist(vshControl *ctl, const vshCmd *cmd)
}
/*
+ * "domblkthreshold" command
+ */
+static const vshCmdInfo info_domblkthreshold[] = {
+ {.name = "help",
+ .data = N_("set domain block device write thresholds")
+ },
+ {.name = "desc",
+ .data = N_("Set a threshold to get a one-shot event if block "
+ "allocation exceeds that size")
+ },
+ {.name = NULL}
+};
+
+static const vshCmdOptDef opts_domblkthreshold[] = {
+ {.name = "domain",
+ .type = VSH_OT_DATA,
+ .flags = VSH_OFLAG_REQ,
+ .help = N_("domain name, id or uuid"),
+ },
+ {.name = "device",
+ .type = VSH_OT_DATA,
+ .flags = VSH_OFLAG_REQ,
+ .help = N_("block device"),
+ },
+ {.name = "threshold",
+ .type = VSH_OT_INT,
+ .flags = VSH_OFLAG_REQ,
+ .help = N_("new threshold, or 0 to disable"),
+ },
+ {.name = "percentage",
I'd rather use "proportional" or something else that does not hint to
parts per hundred.
+ .type = VSH_OT_BOOL,
+ .help = N_("threshold is in units of .001% instead of bytes"),
+ },
+ {.name = NULL}
+};
+
+static bool
+cmdDomblkthreshold(vshControl *ctl, const vshCmd *cmd)
+{
+ virDomainPtr dom;
+ bool ret = false;
+ const char *device = NULL;
+ unsigned long long threshold;
+ bool percentage = vshCommandOptBool(cmd, "percentage");
+ unsigned int flags = 0;
+
+ if (percentage)
+ flags |= VIR_DOMAIN_BLOCK_SET_WRITE_THRESHOLD_PERCENTAGE;
As well as here.
+
+ if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
+ return false;
+
+ if (vshCommandOptStringReq(ctl, cmd, "device", &device) < 0)
+ goto cleanup;
+ if (vshCommandOptULongLong(ctl, cmd, "threshold", &threshold) < 0)
+ goto cleanup;
+
Peter