From nobody Wed Nov 5 13:43:33 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1498223153918841.6664837351133; Fri, 23 Jun 2017 06:05:53 -0700 (PDT) Received: from localhost ([::1]:35459 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dOOHV-0005PL-FG for importer@patchew.org; Fri, 23 Jun 2017 09:05:49 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36428) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dOOEa-0003Tw-HW for qemu-devel@nongnu.org; Fri, 23 Jun 2017 09:02:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dOOEW-0001m2-Di for qemu-devel@nongnu.org; Fri, 23 Jun 2017 09:02:48 -0400 Received: from mail-wr0-f170.google.com ([209.85.128.170]:33650) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dOOEW-0001lo-7r for qemu-devel@nongnu.org; Fri, 23 Jun 2017 09:02:44 -0400 Received: by mail-wr0-f170.google.com with SMTP id r103so65098022wrb.0 for ; Fri, 23 Jun 2017 06:02:44 -0700 (PDT) Received: from fiorina.brq.redhat.com (nat-pool-brq-t.redhat.com. [213.175.37.10]) by smtp.gmail.com with ESMTPSA id 5sm3081897wrq.60.2017.06.23.06.02.41 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 23 Jun 2017 06:02:42 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=HDQ3pXAJgHE6N43sdiIlXyx0V0Afa7w2sdQ91Vy9s3Y=; b=PraBOmdHCRJWj7YhX9gyuQLCRdLFR3eVLRwxa6QkeVSFXqaExDwdOlGcw4yASATwMv AqHtKDEzJ86E1KPRp09nH2Z49qelKYe1Gg0A3orn854MYidCrEx872sZoiLe9f+NFEyX hG2KBgksE+Kw8Wgzoz7IceP9cw8EmLwUv98axzBcXYcsDHtEA8DpIHIWOtkpLBkZF6n0 6G4j46gBZn71ZFQpxAzE9DkYaynJmYkeVPjB12oqg/rAj+p/VrBHcmPOxSNAnp9Cwl3J 72Uig7AW/nxJT/DBtrLNV5ZAKAS/gSXq4g1Ll5aJ+heHgQ1KHIKkLRrTOc7/c9X4HsuQ qbfg== X-Gm-Message-State: AKS2vOzgYW/R18RmypPHdjDumzBM8svi3320/q7LJck0RfWblVdBuw9v yI1KxgCRUZ+AZmOL X-Received: by 10.223.160.40 with SMTP id k37mr5404518wrk.91.1498222963128; Fri, 23 Jun 2017 06:02:43 -0700 (PDT) From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Golembiovsk=C3=BD?= To: Michael Roth Date: Fri, 23 Jun 2017 15:02:37 +0200 Message-Id: <56b491683542b03a5d4b6c1bf805eda8e06404ec.1498222907.git.tgolembi@redhat.com> X-Mailer: git-send-email 2.13.1 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.85.128.170 Subject: [Qemu-devel] [RFC 3/3] qemu-ga: add support for periodic command runner X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Tom=C3=A1=C5=A1=20Golembiovsk=C3=BD?= , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 This adds a support for periodicaly triggering arbitrary command reporting its output. Signed-off-by: Tom=C3=A1=C5=A1 Golembiovsk=C3=BD --- 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 =3D "guest-get-users"; + QDict *args =3D qdict_new(); + + QmpCommand *cmd =3D 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 =3D send_response(s, QOBJECT(queued_event)); + QDECREF(queued_event); + queued_event =3D NULL; + if (ret < 0) { + g_warning("error sending event: %s", strerror(-ret)); + } + } + goto ok; =20 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' } } --=20 2.13.1