From ad4044fbc9624d1887d3120fbaa8c0cf56a39ba1 Mon Sep 17 00:00:00 2001 From: Dave Pedu Date: Sat, 5 Dec 2015 02:41:14 -0800 Subject: [PATCH] add memory module --- examples/config.test.json | 5 +++ pymonitor/monitors/meminfo.py | 63 +++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 pymonitor/monitors/meminfo.py diff --git a/examples/config.test.json b/examples/config.test.json index e9c0a04..0f42216 100644 --- a/examples/config.test.json +++ b/examples/config.test.json @@ -12,6 +12,11 @@ "type":"load", "freq":"30", "args":{} + }, + { + "type":"meminfo", + "freq":"30", + "args":{} } ] } \ No newline at end of file diff --git a/pymonitor/monitors/meminfo.py b/pymonitor/monitors/meminfo.py new file mode 100644 index 0000000..b2acced --- /dev/null +++ b/pymonitor/monitors/meminfo.py @@ -0,0 +1,63 @@ +import re + +memline_pattern = re.compile(r'^(?P[^\\:]+)\:\s+(?P[0-9]+)(\s(?P[a-zA-Z]+))?') + +computed_fields = { + "mempctused": lambda items: round((items["memtotal"]-items["memfree"])/items["memtotal"], 2), + "mempctfree": lambda items: 1-round((items["memtotal"]-items["memfree"])/items["memtotal"], 2), + "swappctused": lambda items: round((items["swaptotal"]-items["swapfree"])/items["swaptotal"], 2), + "swappctfree": lambda items: 1-round((items["swaptotal"]-items["swapfree"])/items["swaptotal"], 2) +} + +def meminfo(whitelist=[]): + if not whitelist: + whitelist = ["swaptotal", "swapfree", "swapcached", + "memtotal", "memfree", "memavailable", "cached", + "active", "inactive", ] + + result = {} + with open("/proc/meminfo", "r") as f: + for line in f.read().strip().split("\n"): + matches = memline_pattern.match(line) + + value = int(matches.group("value")) + unit = matches.group("unit") + + if unit: + if unit == "kB": + value*=1024 + else: + raise Exception("Unknown unit") + + name = ''.join(c for c in matches.group("key").lower() if 96