system cpu usage sensor added
diff --git a/sensors/syscpu_sensors.py b/sensors/syscpu_sensors.py
new file mode 100644
index 0000000..e2f53b7
--- /dev/null
+++ b/sensors/syscpu_sensors.py
@@ -0,0 +1,67 @@
+import time
+
+from discover import provides
+from utils import SensorInfo, is_dev_accepted
+
+# 0 - cpu name
+# 1 - user: normal processes executing in user mode
+# 2 - nice: niced processes executing in user mode
+# 3 - system: processes executing in kernel mode
+# 4 - idle: twiddling thumbs
+# 5 - iowait: waiting for I/O to complete
+# 6 - irq: servicing interrupts
+# 7 - softirq: servicing softirqs
+
+io_values_pos = [
+ (1, 'user_processes', False),
+ (2, 'nice_processes', False),
+ (3, 'system_processes', False),
+ (4, 'idle_time', True),
+]
+
+
+@provides("system-cpu")
+def syscpu_stat(disallowed_prefixes=('intr', 'ctxt', 'btime', 'processes',
+ 'procs_running', 'procs_blocked', 'softirq'),
+ allowed_prefixes=None):
+ results = {}
+ usage_sum = {}
+ usage_with_idle = {}
+ for line in open('/proc/stat'):
+ vals = line.split()
+ dev_name = vals[0]
+
+ dev_ok = is_dev_accepted(dev_name,
+ disallowed_prefixes,
+ allowed_prefixes)
+
+ if dev_ok:
+ usage_sum[dev_name] = float(int(vals[1]) + int(vals[2]) + int(vals[3]))
+ usage_with_idle[dev_name] = usage_sum[dev_name] + int(vals[4])
+ # wait for average CPU utilization calc
+ time.sleep(1)
+
+ for line in open('/proc/stat'):
+ vals = line.split()
+ dev_name = vals[0]
+
+ dev_ok = is_dev_accepted(dev_name,
+ disallowed_prefixes,
+ allowed_prefixes)
+
+ if dev_ok:
+ for pos, name, accum_val in io_values_pos:
+ sensor_name = "{0}.{1}".format(dev_name, name)
+ results[sensor_name] = SensorInfo(int(vals[pos]), accum_val)
+ # utilization calc
+ sensor_name = "{0}.{1}".format(dev_name, "usage_percent")
+
+ usage_sum_last = float(int(vals[1]) + int(vals[2]) + int(vals[3]))
+ usage_with_idle_last = usage_sum_last + int(vals[4])
+ proc = usage_sum_last - usage_sum[dev_name]
+ idle = usage_with_idle_last - usage_with_idle[dev_name]
+ usage = proc / idle
+
+ results[sensor_name] = SensorInfo(usage*100, False)
+ return results
+