Add 'query-events' command to QMP to query async events

Sometimes it is neccessary for an application to determine
whether a particular QMP event is available, so they can
decide whether to use compatibility code instead. This
introduces a new 'query-events' command to QMP to do just
that

 { "execute": "query-events" }
 {"return": [{"name": "WAKEUP"},
             {"name": "SUSPEND"},
             {"name": "DEVICE_TRAY_MOVED"},
             {"name": "BLOCK_JOB_CANCELLED"},
             {"name": "BLOCK_JOB_COMPLETED"},
             ...snip...
             {"name": "SHUTDOWN"}]}

* monitor.c: Turn MonitorEvent -> string conversion
  into a lookup from a static table of constant strings.
  Add impl of qmp_query_events monitor command handler
* qapi-schema.json, qmp-commands.hx: Define contract of
  query-events command

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
This commit is contained in:
Daniel P. Berrange 2012-05-21 17:59:51 +01:00 committed by Luiz Capitulino
parent 5f96415527
commit 4860853d60
4 changed files with 108 additions and 62 deletions

View file

@ -1208,6 +1208,43 @@ EQMP
.mhandler.cmd_new = qmp_marshal_input_query_commands,
},
SQMP
query-events
--------------
List QMP available events.
Each event is represented by a json-object, the returned value is a json-array
of all events.
Each json-object contains:
- "name": event's name (json-string)
Example:
-> { "execute": "query-events" }
<- {
"return":[
{
"name":"SHUTDOWN"
},
{
"name":"RESET"
}
]
}
Note: This example has been shortened as the real response is too long.
EQMP
{
.name = "query-events",
.args_type = "",
.mhandler.cmd_new = qmp_marshal_input_query_events,
},
SQMP
query-chardev
-------------