summaryrefslogtreecommitdiff
path: root/cpu-widget
diff options
context:
space:
mode:
authorpmakhov <pavel.makhov@savoirfairelinux.com>2017-09-27 19:45:25 -0400
committerpmakhov <pavel.makhov@savoirfairelinux.com>2017-09-27 19:45:25 -0400
commit5facbc5e2b02c0b46b5a090bb76d382d009bb404 (patch)
tree3d55e77e26f474052da4a2d1b1c42c9ac20cd726 /cpu-widget
parente7fe0a2dbd3e7ec59e2ace511ef26bf0ec04b877 (diff)
cpu widget
Diffstat (limited to 'cpu-widget')
-rw-r--r--cpu-widget/README.md34
-rw-r--r--cpu-widget/cpu-widget.lua42
2 files changed, 76 insertions, 0 deletions
diff --git a/cpu-widget/README.md b/cpu-widget/README.md
new file mode 100644
index 0000000..77e0f93
--- /dev/null
+++ b/cpu-widget/README.md
@@ -0,0 +1,34 @@
+# CPU widget
+
+This widget shows the average CPU load among all cores of the machine:
+
+![screenshot](out.git)
+
+When the load is more than 80% the graph becomes red. You can easily customize the widget by changing colors, step width, step spacing, width and interval.
+
+## How it works
+
+To measure the load I took Paul Colby's bash [script](http://colby.id.au/calculating-cpu-usage-from-proc-stat/)and rewrote it in Lua, which was quite simple.
+So awesome simply reads the first line of /proc/stat:
+
+```bash
+$ cat /proc/stat | grep '^cpu '
+cpu 197294 718 50102 2002182 3844 0 2724 0 0 0
+```
+
+and calculates the percentage.
+
+## Installation
+
+Clone/download repo and use widget in **rc.lua**:
+
+```lua
+require("awesome-wm-widgets.cpu-widget.cpu-widget")
+...
+s.mytasklist, -- Middle widget
+ { -- Right widgets
+ layout = wibox.layout.fixed.horizontal,
+ ...
+ cpu_widget,
+ ...
+``` \ No newline at end of file
diff --git a/cpu-widget/cpu-widget.lua b/cpu-widget/cpu-widget.lua
new file mode 100644
index 0000000..e9d1264
--- /dev/null
+++ b/cpu-widget/cpu-widget.lua
@@ -0,0 +1,42 @@
+local watch = require("awful.widget.watch")
+local wibox = require("wibox")
+
+cpugraph_widget = wibox.widget {
+ max_value = 100,
+ color = '#74aeab',
+ background_color = "#1e252c",
+ forced_width = 50,
+ step_width = 2,
+ step_spacing = 1,
+ widget = wibox.widget.graph
+}
+
+cpu_widget = wibox.container.mirror(cpugraph_widget, { horizontal = true })
+
+local total_prev = 0
+local idle_prev = 0
+
+watch("cat /proc/stat | grep '^cpu '", 1,
+ function(widget, stdout, stderr, exitreason, exitcode)
+ local user, nice, system, idle, iowait, irq, softirq, steal, guest, guest_nice =
+ stdout:match('(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s')
+
+ local total = user + nice + system + idle + iowait + irq + softirq + steal
+
+ local diff_idle = idle - idle_prev
+ local diff_total = total - total_prev
+ local diff_usage = (1000 * (diff_total - diff_idle) / diff_total + 5) / 10
+
+ if diff_usage > 80 then
+ widget:set_color('#ff4136')
+ else
+ widget:set_color('#74aeab')
+ end
+
+ widget:add_value(diff_usage)
+
+ total_prev = total
+ idle_prev = idle
+ end,
+ cpugraph_widget
+)