aboutsummaryrefslogtreecommitdiff
path: root/qga/commands-posix.c
diff options
context:
space:
mode:
authorDaniel P. Berrangé <berrange@redhat.com>2024-12-02 12:19:27 +0000
committerKonstantin Kostiuk <kkostiuk@redhat.com>2025-01-06 12:48:46 +0200
commit5288d9d0853622668bd293023d2dfe200f3606f1 (patch)
treebe6982277bb59e6d19c32007fd5c1d6838507efa /qga/commands-posix.c
parent9ee90cfc25747ab25c7da31a50f167fc5122e20e (diff)
downloadqemu-5288d9d0853622668bd293023d2dfe200f3606f1.zip
qemu-5288d9d0853622668bd293023d2dfe200f3606f1.tar.gz
qemu-5288d9d0853622668bd293023d2dfe200f3606f1.tar.bz2
qga: implement a 'guest-get-load' command
Provide a way to report the process load average, via a new 'guest-get-load' command. This is only implemented for POSIX platforms providing 'getloadavg'. Example illustrated with qmp-shell: (QEMU) guest-get-load { "return": { "load15m": 1.546875, "load1m": 1.669921875, "load5m": 1.9306640625 } } Windows has no native equivalent API, but it would be possible to simulate it as illustrated here (BSD-3-Clause): https://github.com/giampaolo/psutil/pull/1485 This is left as an exercise for future contributors. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> Reviewed-by: Konstantin Kostiuk <kkostiuk@redhat.com> Message-ID: <20241202121927.864335-1-berrange@redhat.com> Signed-off-by: Konstantin Kostiuk <kkostiuk@redhat.com>
Diffstat (limited to 'qga/commands-posix.c')
-rw-r--r--qga/commands-posix.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/qga/commands-posix.c b/qga/commands-posix.c
index 636307b..6e3c15f 100644
--- a/qga/commands-posix.c
+++ b/qga/commands-posix.c
@@ -1368,3 +1368,23 @@ char *qga_get_host_name(Error **errp)
return g_steal_pointer(&hostname);
}
+
+#ifdef CONFIG_GETLOADAVG
+GuestLoadAverage *qmp_guest_get_load(Error **errp)
+{
+ double loadavg[3];
+ GuestLoadAverage *ret = NULL;
+
+ if (getloadavg(loadavg, G_N_ELEMENTS(loadavg)) < 0) {
+ error_setg_errno(errp, errno,
+ "cannot query load average");
+ return NULL;
+ }
+
+ ret = g_new0(GuestLoadAverage, 1);
+ ret->load1m = loadavg[0];
+ ret->load5m = loadavg[1];
+ ret->load15m = loadavg[2];
+ return ret;
+}
+#endif