[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC 3/3] qemu-ga: add support for periodic command runner
From: |
Tomáš Golembiovský |
Subject: |
[Qemu-devel] [RFC 3/3] qemu-ga: add support for periodic command runner |
Date: |
Fri, 23 Jun 2017 15:02:37 +0200 |
This adds a support for periodicaly triggering arbitrary command
reporting its output.
Signed-off-by: Tomáš Golembiovský <address@hidden>
---
qga/main.c | 26 ++++++++++++++++++++++++++
qga/qapi-event.json | 17 +++++++++++++++++
2 files changed, 43 insertions(+)
diff --git a/qga/main.c b/qga/main.c
index a9586e7513..612a6646e4 100644
--- a/qga/main.c
+++ b/qga/main.c
@@ -715,6 +715,32 @@ static gboolean monitoring_cb(gpointer data)
g_warning("error sending event: %s", strerror(-ret));
}
}
+
+ /* Run arbitrary command */
+ const char *command = "guest-get-users";
+ QDict *args = qdict_new();
+
+ QmpCommand *cmd = qmp_find_command(&ga_commands, command);
+ g_assert(cmd);
+ g_assert(cmd->fn);
+ QObject *ret;
+ qmp_marshal_guest_get_users(args, &ret, &err);
+ QDECREF(args);
+ if (err) {
+ goto fail;
+ }
+ qapi_event_send_guest_monitor_command(command, ret, &err);
+
+ if (queued_event) {
+ int ret;
+ ret = send_response(s, QOBJECT(queued_event));
+ QDECREF(queued_event);
+ queued_event = NULL;
+ if (ret < 0) {
+ g_warning("error sending event: %s", strerror(-ret));
+ }
+ }
+
goto ok;
fail:
diff --git a/qga/qapi-event.json b/qga/qapi-event.json
index 3d48ddb214..e31ea0f0e9 100644
--- a/qga/qapi-event.json
+++ b/qga/qapi-event.json
@@ -16,3 +16,20 @@
#
##
{ 'event': 'GUEST_HEARTBEAT', 'data': { 'free-ram': 'size' } }
+
+##
+# @GUEST_MONITOR_COMMAND:
+#
+# Run periodicaly arbitrary command and return it's result.
+#
+# @command: The executed command.
+# @return: Returned value.
+#
+# Since: 2.10
+#
+# Example:
+#
+# TODO
+#
+##
+{ 'event': 'GUEST_MONITOR_COMMAND', 'data': { 'command': 'str', 'return':
'any' } }
--
2.13.1