[libvirt] [PATCH 14/14] Hook up JSON monitor to emit basic lifecycle events
Daniel Veillard
veillard at redhat.com
Thu Dec 3 15:12:12 UTC 2009
On Thu, Nov 26, 2009 at 06:27:32PM +0000, Daniel P. Berrange wrote:
> * src/qemu/qemu_monitor_json.c: Hook up reset, shutdown,
> poweroff and stop events
> ---
> src/qemu/qemu_monitor_json.c | 69 ++++++++++++++++++++++++++++++++++++++++--
> 1 files changed, 66 insertions(+), 3 deletions(-)
>
> diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
> index 9d71826..050472c 100644
> --- a/src/qemu/qemu_monitor_json.c
> +++ b/src/qemu/qemu_monitor_json.c
> @@ -45,8 +45,51 @@
>
> #define LINE_ENDING "\r\n"
>
> +static void qemuMonitorJSONHandleShutdown(qemuMonitorPtr mon, virJSONValuePtr data);
> +static void qemuMonitorJSONHandleReset(qemuMonitorPtr mon, virJSONValuePtr data);
> +static void qemuMonitorJSONHandlePowerdown(qemuMonitorPtr mon, virJSONValuePtr data);
> +static void qemuMonitorJSONHandleStop(qemuMonitorPtr mon, virJSONValuePtr data);
> +
> +struct {
> + const char *type;
> + void (*handler)(qemuMonitorPtr mon, virJSONValuePtr data);
> +} eventHandlers[] = {
> + { "SHUTDOWN", qemuMonitorJSONHandleShutdown, },
> + { "RESET", qemuMonitorJSONHandleReset, },
> + { "POWERDOWN", qemuMonitorJSONHandlePowerdown, },
> + { "STOP", qemuMonitorJSONHandleStop, },
> +};
> +
> +
> +static int
> +qemuMonitorJSONIOProcessEvent(qemuMonitorPtr mon,
> + virJSONValuePtr obj)
> +{
> + char *type;
> + int i;
> + VIR_DEBUG("mon=%p obj=%p", mon, obj);
> +
> + type = virJSONValueObjectGetString(obj, "event");
> + if (!type) {
> + VIR_INFO0("missing event type in message");
> + errno = EINVAL;
> + return -1;
> + }
> +
> + for (i = 0 ; i < ARRAY_CARDINALITY(eventHandlers) ; i++) {
> + if (STREQ(eventHandlers[i].type, type)) {
> + virJSONValuePtr data = virJSONValueObjectGet(obj, "data");
> + VIR_DEBUG("handle %s handler=%p data=%p", type,
> + eventHandlers[i].handler, data);
> + (eventHandlers[i].handler)(mon, data);
> + break;
> + }
> + }
> + return 0;
> +}
> +
> static int
> -qemuMonitorJSONIOProcessLine(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
> +qemuMonitorJSONIOProcessLine(qemuMonitorPtr mon,
> const char *line,
> qemuMonitorMessagePtr msg)
> {
> @@ -73,8 +116,7 @@ qemuMonitorJSONIOProcessLine(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
> }
>
> if (virJSONValueObjectHasKey(obj, "event") == 1) {
> - VIR_DEBUG0("Got an event");
> - ret = 0;
> + ret = qemuMonitorJSONIOProcessEvent(mon, obj);
> goto cleanup;
> }
>
> @@ -406,6 +448,27 @@ error:
> }
>
>
> +static void qemuMonitorJSONHandleShutdown(qemuMonitorPtr mon, virJSONValuePtr data ATTRIBUTE_UNUSED)
> +{
> + qemuMonitorEmitShutdown(mon);
> +}
> +
> +static void qemuMonitorJSONHandleReset(qemuMonitorPtr mon, virJSONValuePtr data ATTRIBUTE_UNUSED)
> +{
> + qemuMonitorEmitReset(mon);
> +}
> +
> +static void qemuMonitorJSONHandlePowerdown(qemuMonitorPtr mon, virJSONValuePtr data ATTRIBUTE_UNUSED)
> +{
> + qemuMonitorEmitPowerdown(mon);
> +}
> +
> +static void qemuMonitorJSONHandleStop(qemuMonitorPtr mon, virJSONValuePtr data ATTRIBUTE_UNUSED)
> +{
> + qemuMonitorEmitStop(mon);
> +}
> +
> +
> int
> qemuMonitorJSONStartCPUs(qemuMonitorPtr mon,
> virConnectPtr conn ATTRIBUTE_UNUSED)
ACK,
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
daniel at veillard.com | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library http://libvirt.org/
More information about the libvir-list
mailing list