From: Waldemar Kozaczuk <jwkozac...@gmail.com>
Committer: Waldemar Kozaczuk <jwkozac...@gmail.com>
Branch: master

modules: add simple sysinfo utility

This adds simple tiny sysinfo utility which once added
to an image will periodically report system memory utilization
every 1 second by default which can be changed by parameter.

Eventually sysinfo can be enhanced to report CPU utilization as
well.

Signed-off-by: Waldemar Kozaczuk <jwkozac...@gmail.com>

---
diff --git a/modules/sysinfo/.gitignore b/modules/sysinfo/.gitignore
--- a/modules/sysinfo/.gitignore
+++ b/modules/sysinfo/.gitignore
@@ -0,0 +1 @@
+sysinfo*.so
diff --git a/modules/sysinfo/Makefile b/modules/sysinfo/Makefile
--- a/modules/sysinfo/Makefile
+++ b/modules/sysinfo/Makefile
@@ -0,0 +1,14 @@
+INCLUDES = -I../../include
+COMMON_FLAGS = -g -Wall -fPIC $(INCLUDES) -O2
+CXXFLAGS = -std=c++11 $(COMMON_FLAGS)
+
+.PHONY: module
+module: sysinfo.so
+
+quiet = $(if $V, $1, @echo " $2"; $1)
+
+sysinfo.so: sysinfo.cc
+       $(call quiet, $(CXX) $(CXXFLAGS) -shared -o $@ sysinfo.cc, LINK $@)
+
+clean:
+       rm -f sysinfo.so sysinfo.d
diff --git a/modules/sysinfo/module.py b/modules/sysinfo/module.py
--- a/modules/sysinfo/module.py
+++ b/modules/sysinfo/module.py
@@ -0,0 +1,4 @@
+from osv.modules import api
+
+daemon = api.run_on_init('/sysinfo.so --interval 1000000 &!')
+default = daemon
diff --git a/modules/sysinfo/sysinfo.cc b/modules/sysinfo/sysinfo.cc
--- a/modules/sysinfo/sysinfo.cc
+++ b/modules/sysinfo/sysinfo.cc
@@ -0,0 +1,36 @@
+#include <iostream>
+#include <sys/sysinfo.h>
+#include <unistd.h>
+#include <functional>
+#include <osv/options.hh>
+
+static void usage()
+{
+    std::cout << "Allowed options:\n";
+    std::cout << "  --interval arg (=1000000)   repeat every N microseconds\n";
+}
+
+static void handle_parse_error(const std::string &message)
+{
+    std::cout << message << std::endl;
+    usage();
+    exit(1);
+}
+
+int main(int ac, char** av)
+{
+    int interval_in_usecs = 1000000;
+
+    auto options_values = options::parse_options_values(ac - 1, av + 1, 
handle_parse_error);
+    if (options::option_value_exists(options_values, "interval")) {
+        interval_in_usecs = options::extract_option_int_value(options_values, 
"interval", handle_parse_error);
+    }
+
+    while (1) {
+        struct sysinfo info;
+        sysinfo(&info);
+       std::cout << "--> memory, total: " << info.totalram / 0x100000 << " 
MiB, used: " << 
+             (info.totalram - info.freeram) / 0x100000 << " MiB" << std::endl;
+        usleep(interval_in_usecs);
+    }
+}
diff --git a/modules/sysinfo/usr.manifest b/modules/sysinfo/usr.manifest
--- a/modules/sysinfo/usr.manifest
+++ b/modules/sysinfo/usr.manifest
@@ -0,0 +1 @@
+/sysinfo.so: ${MODULE_DIR}/sysinfo.so

-- 
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to osv-dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/osv-dev/0000000000005ca264059d127005%40google.com.

Reply via email to