[libvirt] [PATCH 14/14] Hook up JSON monitor to emit basic lifecycle events
Matthias Bolte
matthias.bolte at googlemail.com
Wed Dec 2 23:52:16 UTC 2009
2009/11/26 Daniel P. Berrange <berrange at redhat.com>:
> * 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");
I thing this should be a warning, not just info.
> + 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)
> {
ACK.
Matthias
More information about the libvir-list
mailing list