From ccfc169cd89d7d31f4a6c3138ce8810013493592 Mon Sep 17 00:00:00 2001 From: Lukasz Stanislawski Date: Mon, 14 May 2018 08:51:06 +0200 Subject: [PATCH] procfs: Implement reading load averages Change-Id: I138e545c1adca80ad34bffd41dcde78e077503c8 --- src/CMakeLists.txt | 1 + src/procfs.c | 29 +++++++++++++++++++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ecbf1cf..738674f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -13,6 +13,7 @@ SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -pie") SET(SRCS task-worker.c + procfs.c ) ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS}) diff --git a/src/procfs.c b/src/procfs.c index 3a285e4..4c906db 100644 --- a/src/procfs.c +++ b/src/procfs.c @@ -14,11 +14,36 @@ * limitations under the License. */ +#include + #include "procfs.h" +#include "log.h" + +#define LOADAVG_FILEPATH "/proc/loadavg" -int procfs_read_system_load_average(struct procfs_load_average_info *avg) +int procfs_read_system_load_average(struct procfs_load_average_info *info) { - return -1; + float a1, a5, a15; + + FILE *loadavg_fp = fopen(LOADAVG_FILEPATH, "r"); + if (!loadavg_fp) { + ERR("failed to open " LOADAVG_FILEPATH); + return -1; + } + + if (fscanf(loadavg_fp, "%f %f %f", &a1, &a5, &a15) != 3) { + ERR("failed to read " LOADAVG_FILEPATH); + fclose(loadavg_fp); + return -1; + } + + info->one_min_avg = a1; + info->five_min_avg = a5; + info->fifteen_min_avg = a15; + + fclose(loadavg_fp); + + return 0; } int profcs_read_system_cpu_usage(struct procfs_system_cpu_usage_info *usage) -- 2.7.4