about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--Makefile1
-rw-r--r--loadavg.c35
-rw-r--r--main.c1
3 files changed, 37 insertions, 0 deletions
diff --git a/Makefile b/Makefile
index 1e90a68..e307148 100644
--- a/Makefile
+++ b/Makefile
@@ -21,6 +21,7 @@ COLLECTORS += filesystem
 COLLECTORS += hwmon
 COLLECTORS += meminfo
 COLLECTORS += netdev
+COLLECTORS += loadavg
 COLLECTORS += stat
 COLLECTORS += textfile
 COLLECTORS += uname
diff --git a/loadavg.c b/loadavg.c
new file mode 100644
index 0000000..9fa9146
--- /dev/null
+++ b/loadavg.c
@@ -0,0 +1,35 @@
+#define _GNU_SOURCE
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+#include "scrape.h"
+#include "util.h"
+
+// size of input buffer for paths and lines
+#define BUF_SIZE 256
+
+static void loadavg_collect(scrape_req *req, void *ctx);
+
+const struct collector loadavg_collector = {
+  .name = "loadavg",
+  .collect = loadavg_collect,
+};
+
+static void loadavg_collect(scrape_req *req, void *ctx) {
+  (void) ctx;
+
+  double loadavg[3];
+  if (getloadavg(loadavg, 3) == 3) {
+    scrape_write(req, "node_load1", 0, loadavg[0]);
+    scrape_write(req, "node_load5", 0, loadavg[1]);
+    scrape_write(req, "node_load15", 0, loadavg[2]);
+  }
+
+  struct timespec ts;
+  if (clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts) < 0)
+    return;
+  double d = ts.tv_sec + ts.tv_nsec / 1e9;
+  scrape_write(req, "process_cpu_seconds_total", 0, d);
+}
diff --git a/main.c b/main.c
index e0cf132..f8515af 100644
--- a/main.c
+++ b/main.c
@@ -34,6 +34,7 @@
   X(diskstats) \
   X(filesystem) \
   X(hwmon) \
+  X(loadavg) \
   X(meminfo) \
   X(netdev) \
   X(stat) \