mirror of https://github.com/OpenIPC/firmware.git
48 lines
1.4 KiB
Lua
48 lines
1.4 KiB
Lua
-- stat/cpu collector
|
|
local function scrape()
|
|
local stat = get_contents("/proc/stat")
|
|
|
|
-- system boot time, seconds since epoch
|
|
metric("node_boot_time_seconds", "gauge", nil,
|
|
string.match(stat, "btime ([0-9]+)"))
|
|
|
|
-- context switches since boot (all CPUs)
|
|
metric("node_context_switches_total", "counter", nil,
|
|
string.match(stat, "ctxt ([0-9]+)"))
|
|
|
|
-- cpu times, per CPU, per mode
|
|
local cpu_mode = {"user", "nice", "system", "idle", "iowait", "irq",
|
|
"softirq", "steal", "guest", "guest_nice"}
|
|
local i = 0
|
|
local cpu_metric = metric("node_cpu_seconds_total", "counter")
|
|
while true do
|
|
local cpu = {string.match(stat,
|
|
"cpu"..i.." (%d+) (%d+) (%d+) (%d+) (%d+) (%d+) (%d+) (%d+) (%d+) (%d+)")}
|
|
if #cpu ~= 10 then
|
|
break
|
|
end
|
|
for ii, mode in ipairs(cpu_mode) do
|
|
cpu_metric({cpu="cpu"..i, mode=mode}, cpu[ii] / 100)
|
|
end
|
|
i = i + 1
|
|
end
|
|
|
|
-- interrupts served
|
|
metric("node_intr_total", "counter", nil,
|
|
string.match(stat, "intr ([0-9]+)"))
|
|
|
|
-- processes forked
|
|
metric("node_forks_total", "counter", nil,
|
|
string.match(stat, "processes ([0-9]+)"))
|
|
|
|
-- processes running
|
|
metric("node_procs_running_total", "gauge", nil,
|
|
string.match(stat, "procs_running ([0-9]+)"))
|
|
|
|
-- processes blocked for I/O
|
|
metric("node_procs_blocked_total", "gauge", nil,
|
|
string.match(stat, "procs_blocked ([0-9]+)"))
|
|
end
|
|
|
|
return { scrape = scrape }
|