From: Michael Tremer Date: Mon, 30 Oct 2023 11:08:17 +0000 (+0000) Subject: os: Add function to read loadavg X-Git-Tag: 0.9.30~1380 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0a393fb738fa5b832eae4f13c741580bc68970be;p=pakfire.git os: Add function to read loadavg Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/include/pakfire/os.h b/src/libpakfire/include/pakfire/os.h index 70e608bee..a8a28cac7 100644 --- a/src/libpakfire/include/pakfire/os.h +++ b/src/libpakfire/include/pakfire/os.h @@ -54,6 +54,16 @@ struct pakfire_cpustat { int pakfire_cpustat(struct pakfire_cpustat* cpustat); +// Load Average + +struct pakfire_loadavg { + double load1; + double load5; + double load15; +}; + +int pakfire_loadavg(struct pakfire_loadavg* loadavg); + // Meminfo struct pakfire_meminfo { diff --git a/src/libpakfire/os.c b/src/libpakfire/os.c index bfb03a7df..7c19018b4 100644 --- a/src/libpakfire/os.c +++ b/src/libpakfire/os.c @@ -191,6 +191,24 @@ int pakfire_cpustat(struct pakfire_cpustat* cpustat) { return pakfire_parse_file("/proc/stat", pakfire_parse_cpustat, cpustat); } +// Load Average + +static int pakfire_parse_loadavg(char* line, size_t length, void* data) { + struct pakfire_loadavg* loadavg = data; + int r; + + // Parse the first three values + r = sscanf(line, "%lf %lf %lf", &loadavg->load1, &loadavg->load5, &loadavg->load15); + if (r < 3) + return -EINVAL; + + return 0; +} + +int pakfire_loadavg(struct pakfire_loadavg* loadavg) { + return pakfire_parse_file("/proc/loadavg", pakfire_parse_loadavg, loadavg); +} + // Meminfo static int pakfire_parse_meminfo_value(uint64_t* mem, const char* s) { diff --git a/tests/libpakfire/os.c b/tests/libpakfire/os.c index 9cc6a27da..2c1d90a60 100644 --- a/tests/libpakfire/os.c +++ b/tests/libpakfire/os.c @@ -61,6 +61,22 @@ FAIL: return EXIT_FAILURE; } +// This test parses /proc/loadavg +static int test_loadavg(const struct test* t) { + struct pakfire_loadavg loadavg = {}; + + ASSERT_SUCCESS(pakfire_loadavg(&loadavg)); + + ASSERT(loadavg.load1 >= 0); + ASSERT(loadavg.load5 >= 0); + ASSERT(loadavg.load15 >= 0); + + return EXIT_SUCCESS; + +FAIL: + return EXIT_FAILURE; +} + // This test parses /proc/meminfo static int test_meminfo(const struct test* t) { struct pakfire_meminfo meminfo = {}; @@ -89,6 +105,7 @@ FAIL: int main(int argc, const char* argv[]) { testsuite_add_test(test_cpuinfo); testsuite_add_test(test_cpustat); + testsuite_add_test(test_loadavg); testsuite_add_test(test_meminfo); return testsuite_run(argc, argv);