diff options
author | Daniel P. Berrangé <berrange@redhat.com> | 2024-12-02 12:19:27 +0000 |
---|---|---|
committer | Konstantin Kostiuk <kkostiuk@redhat.com> | 2025-01-06 12:48:46 +0200 |
commit | 5288d9d0853622668bd293023d2dfe200f3606f1 (patch) | |
tree | be6982277bb59e6d19c32007fd5c1d6838507efa /qga/commands-posix.c | |
parent | 9ee90cfc25747ab25c7da31a50f167fc5122e20e (diff) | |
download | qemu-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.c | 20 |
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 |