diff options
Diffstat (limited to 'widgets/cpu.lua')
-rw-r--r-- | widgets/cpu.lua | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/widgets/cpu.lua b/widgets/cpu.lua new file mode 100644 index 0000000..d92bce8 --- /dev/null +++ b/widgets/cpu.lua @@ -0,0 +1,38 @@ +local wibox = require("wibox") +local widgets = require("util.widgets") + +-- this is directly adapted from slstatus's cpu.c module +local cpu_time = { 0,0,0,0,0,0,0 } -- user, nice, system, idle, iowait, irq, softirq + +function linux_cpu_usage(widget) + -- read stat + local statf = io.open("/proc/stat") + local stat_iter = statf:read():gmatch("%d+") + statf:close() + + -- calc + local sum = 0 + local a, b = cpu_time, {} -- set cpu_time as a for smaller code + table.move(a, 1, 7, 1, b) -- copy first 7 to b + + for i = 1, 7 do + a[i] = stat_iter() + sum = sum + b[i] - a[i] + end + + if sum == 0 then + return + end + + local usage = ((b[1] + b[2] + b[3] + b[6] + b[7]) - + (a[1] + a[2] + a[3] + a[6] + a[7])) * 100 / sum + + widget:set_text(math.floor(usage)) +end + +-- return correct widget for os +if osname == "Linux" then + return widgets.watchfn(linux_cpu_usage, 5) +end + +return wibox.widget.textbox("unsupported os") |