diff options
-rw-r--r-- | cpu-widget/README.md | 34 | ||||
-rw-r--r-- | cpu-widget/cpu-widget.lua | 42 |
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 +) |