diff options
| author | streetturtle <streetturtle@gmail.com> | 2020-02-02 22:28:13 -0500 | 
|---|---|---|
| committer | streetturtle <streetturtle@gmail.com> | 2020-02-02 22:28:13 -0500 | 
| commit | 9af937bd34e5db52968728f3ead3c5daece70ca2 (patch) | |
| tree | fe20ed141eb0a234ec7f3574ea6190bc3e949f74 /cpu-widget | |
| parent | cc124d636ca887323a628595e7dea3336c211539 (diff) | |
add popup to cpu widget with cpu load bars
Diffstat (limited to 'cpu-widget')
| -rw-r--r-- | cpu-widget/cpu-widget.lua | 117 | 
1 files changed, 99 insertions, 18 deletions
diff --git a/cpu-widget/cpu-widget.lua b/cpu-widget/cpu-widget.lua index 0e027dd..e5762f9 100644 --- a/cpu-widget/cpu-widget.lua +++ b/cpu-widget/cpu-widget.lua @@ -5,12 +5,14 @@  -- https://github.com/streetturtle/awesome-wm-widgets/tree/master/cpu-widget  -- @author Pavel Makhov --- @copyright 2019 Pavel Makhov +-- @copyright 2020 Pavel Makhov  ------------------------------------------------- +local awful = require("awful")  local watch = require("awful.widget.watch")  local wibox = require("wibox")  local beautiful = require("beautiful") +local gears = require("gears")  local widget = {} @@ -33,33 +35,112 @@ local function worker(args)          color = "linear:0,0:0,20:0,#FF0000:0.3,#FFFF00:0.6," .. color      } -    --- By default graph widget goes from left to right, so we mirror it and push up a bit -    local cpu_widget = wibox.container.margin(wibox.container.mirror(cpugraph_widget, { horizontal = true }), 0, 0, 0, 2) - -    local total_prev = 0 -    local idle_prev = 0 +    local rows = { +        { widget = wibox.widget.textbox }, +        spacing = 4, +        layout = wibox.layout.fixed.vertical, -    watch([[bash -c "cat /proc/stat | grep '^cpu '"]], 1, -            function(widget, stdout) -                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 popup = awful.popup{ +        ontop = true, +        visible = false, +        shape = gears.shape.rounded_rect, +        border_width = 1, +        border_color = beautiful.bg_normal, +        maximum_width = 300, +        offset = { y = 5 }, +        widget = {} +    } -                local diff_idle = idle - idle_prev -                local diff_total = total - total_prev -                local diff_usage = (1000 * (diff_total - diff_idle) / diff_total + 5) / 10 +    cpugraph_widget:buttons( +            awful.util.table.join( +                    awful.button({}, 1, function() +                        if popup.visible then +                            --rows = nil +                            popup.visible = not popup.visible +                        else +                            --init_popup() +                            popup:move_next_to(mouse.current_widget_geometry) +                        end +                    end) +            ) +    ) -                widget:add_value(diff_usage) +    --- By default graph widget goes from left to right, so we mirror it and push up a bit +    local cpu_widget = wibox.container.margin(wibox.container.mirror(cpugraph_widget, { horizontal = true }), 0, 0, 0, 2) -                total_prev = total -                idle_prev = idle +    local cpus = {} +    watch([[bash -c "cat /proc/stat | grep '^cpu.'"]], 1, +            function(widget, stdout) +                local i = 1 +                for cur in stdout:gmatch("[^\r\n]+") do +                    if cpus[i] == nil then cpus[i] = {} end + +                    local name, user, nice, system, idle, iowait, irq, softirq, steal, guest, guest_nice = +                        cur:match('(%w+)%s+(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)') + +                    local total = user + nice + system + idle + iowait + irq + softirq + steal + +                    local diff_idle = idle - tonumber(cpus[i]['idle_prev'] == nil and 0 or cpus[i]['idle_prev']) +                    local diff_total = total - tonumber(cpus[i]['total_prev'] == nil and 0 or cpus[i]['total_prev']) +                    local diff_usage = (1000 * (diff_total - diff_idle) / diff_total + 5) / 10 + +                    cpus[i]['total_prev'] = total +                    cpus[i]['idle_prev'] = idle + +                    if i == 1 then +                        widget:add_value(diff_usage) +                    end + +                    local row = wibox.widget +                    { +                        { +                            text = name, +                            forced_width = 40, +                            widget = wibox.widget.textbox +                        }, +                        { +                            text = string.format('%i%%', diff_usage), +                            forced_width = 40, +                            widget = wibox.widget.textbox +                        }, +                        { +                            max_value = 100, +                            value = diff_usage, +                            forced_height = 20, +                            forced_width = 150, +                            paddings = 1, +                            margins = 4, +                            border_width = 1, +                            border_color = beautiful.bg_focus, +                            background_color = beautiful.bg_normal, +                            bar_border_width = 1, +                            bar_border_color = beautiful.bg_focus, +                            color = beautiful.bg_focus, +                            widget = wibox.widget.progressbar, + +                        }, +                        layout = wibox.layout.align.horizontal +                    } + +                    rows[i] = row + +                    i = i + 1 +                end +                popup:setup { +                    { +                        rows, +                        layout = wibox.layout.align.vertical, +                    }, +                    margins = 8, +                    widget = wibox.container.margin +                }              end,              cpugraph_widget      )      return cpu_widget -  end  return setmetatable(widget, { __call = function(_, ...)  | 
