File: cpu_openbsd.lua

package info (click to toggle)
awesome-extra 2020122801
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 1,328 kB
  • sloc: cpp: 112; sh: 84; makefile: 25; python: 11
file content (60 lines) | stat: -rw-r--r-- 2,111 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
-- CPU usage widget type for OpenBSD
-- Copyright (C) 2019  Enric Morales
--
-- This file is part of Vicious.
--
-- Vicious is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as
-- published by the Free Software Foundation, either version 2 of the
-- License, or (at your option) any later version.
--
-- Vicious is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with Vicious.  If not, see <https://www.gnu.org/licenses/>.

local math = { ceil = math.ceil }
local string = { gmatch = string.gmatch }
local table = { insert = table.insert }
local tonumber = tonumber

local helpers = require("vicious.helpers")


-- cpu_openbsd: provides both a helper function that allows reading
-- the CPU usage on OpenBSD systems.
local cpu_openbsd = {}

-- Initialize the table that will contain the ticks spent in each subsystem
-- values: user, nice, system, spin, interrupts, idle
local ticks = { 0, 0, 0, 0, 0, 0 }

function cpu_openbsd.async(format, warg, callback)
    helpers.sysctl_async({ "kern.cp_time" },
        function (ret)
            local current_ticks = {}
            for match in string.gmatch(ret["kern.cp_time"], "(%d+)") do
                table.insert(current_ticks, tonumber(match))
            end

            local period_ticks = {}
            for i = 1, 6 do
                table.insert(period_ticks,
                             current_ticks[i] - ticks[i])
            end

            local cpu_total, cpu_busy = 0, 0
            for i = 1, 6 do cpu_total = cpu_total + period_ticks[i] end
            for i = 1, 5 do cpu_busy = cpu_busy + period_ticks[i] end

            local cpu_usage = math.ceil((cpu_busy / cpu_total) * 100)

            ticks = current_ticks
            return callback({ cpu_usage })
        end)
end

return helpers.setasyncall(cpu_openbsd)