REF modify state in place
This commit is contained in:
parent
8b3244c727
commit
73fd89a6f5
|
@ -10,13 +10,71 @@ return function(update_freq, config, common, width, point)
|
|||
local __string_match = string.match
|
||||
local __tonumber = tonumber
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
-- nvidia state
|
||||
|
||||
-- vars to process the nv settings glob
|
||||
--
|
||||
-- glob will be of the form:
|
||||
-- <used_mem>
|
||||
-- <total_mem>
|
||||
-- <temp>
|
||||
-- <gpu_freq>,<mem_freq>
|
||||
-- graphics=<gpu_util>, memory=<mem_util>, video=<vid_util>, PCIe=<pci_util>
|
||||
local NV_QUERY = 'nvidia-settings -t'..
|
||||
' -q UsedDedicatedGPUmemory'..
|
||||
' -q TotalDedicatedGPUmemory'..
|
||||
' -q ThermalSensorReading'..
|
||||
' -q [gpu:0]/GPUCurrentClockFreqs'..
|
||||
' -q [gpu:0]/GPUutilization'
|
||||
|
||||
local NV_REGEX = '(%d+)\n'..
|
||||
'(%d+)\n'..
|
||||
'(%d+)\n'..
|
||||
'(%d+),(%d+)\n'..
|
||||
'graphics=(%d+), memory=%d+, video=(%d+), PCIe=%d+\n'
|
||||
|
||||
local GPU_BUS_CTRL = '/sys/bus/pci/devices/0000:01:00.0/power/control'
|
||||
|
||||
local mod_state = {
|
||||
error = false,
|
||||
used_memory = 0,
|
||||
total_memory = 0,
|
||||
temp_reading = 0,
|
||||
gpu_frequency = 0,
|
||||
memory_frequency = 0,
|
||||
gpu_utilization = 0,
|
||||
vid_utilization = 0
|
||||
}
|
||||
|
||||
local update_state = function()
|
||||
if i_o.read_file(GPU_BUS_CTRL, nil, '*l') == 'on' then
|
||||
local nvidia_settings_glob = i_o.execute_cmd(NV_QUERY)
|
||||
if nvidia_settings_glob == '' then
|
||||
mod_state.error = 'Error'
|
||||
else
|
||||
mod_state.used_memory,
|
||||
mod_state.total_memory,
|
||||
mod_state.temp_reading,
|
||||
mod_state.gpu_frequency,
|
||||
mod_state.memory_frequency,
|
||||
mod_state.gpu_utilization,
|
||||
mod_state.vid_utilization
|
||||
= __string_match(nvidia_settings_glob, NV_REGEX)
|
||||
mod_state.error = false
|
||||
end
|
||||
else
|
||||
mod_state.error = 'Off'
|
||||
end
|
||||
end
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
-- helper functions
|
||||
|
||||
local _from_state = function(def, f, set)
|
||||
return function(s)
|
||||
if s.error == false then
|
||||
set(f(s))
|
||||
local _from_state = function(def, get, set)
|
||||
return function()
|
||||
if mod_state.error == false then
|
||||
set(get(mod_state))
|
||||
else
|
||||
set(def)
|
||||
end
|
||||
|
@ -59,11 +117,11 @@ return function(update_freq, config, common, width, point)
|
|||
width,
|
||||
'Status'
|
||||
)
|
||||
local update = function(s)
|
||||
if s.error == false then
|
||||
local update = function()
|
||||
if mod_state.error == false then
|
||||
common.text_row_set(obj, 'On')
|
||||
else
|
||||
common.text_row_set(obj, s.error)
|
||||
common.text_row_set(obj, mod_state.error)
|
||||
end
|
||||
end
|
||||
local static = pure.partial(common.text_row_draw_static, obj)
|
||||
|
@ -106,10 +164,10 @@ return function(update_freq, config, common, width, point)
|
|||
TEXT_SPACING,
|
||||
{'GPU Clock Speed', 'memory Clock Speed'}
|
||||
)
|
||||
local update = function(s)
|
||||
if s.error == false then
|
||||
common.text_rows_set(obj, 1, s.gpu_frequency..' Mhz')
|
||||
common.text_rows_set(obj, 2, s.memory_frequency..' Mhz')
|
||||
local update = function()
|
||||
if mod_state.error == false then
|
||||
common.text_rows_set(obj, 1, mod_state.gpu_frequency..' Mhz')
|
||||
common.text_rows_set(obj, 2, mod_state.memory_frequency..' Mhz')
|
||||
else
|
||||
common.text_rows_set(obj, 1, NA)
|
||||
common.text_rows_set(obj, 2, NA)
|
||||
|
@ -147,65 +205,6 @@ return function(update_freq, config, common, width, point)
|
|||
function(s) return s.vid_utilization end
|
||||
)
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
-- nvidia state
|
||||
|
||||
-- vars to process the nv settings glob
|
||||
--
|
||||
-- glob will be of the form:
|
||||
-- <used_mem>
|
||||
-- <total_mem>
|
||||
-- <temp>
|
||||
-- <gpu_freq>,<mem_freq>
|
||||
-- graphics=<gpu_util>, memory=<mem_util>, video=<vid_util>, PCIe=<pci_util>
|
||||
local NV_QUERY = 'nvidia-settings -t'..
|
||||
' -q UsedDedicatedGPUmemory'..
|
||||
' -q TotalDedicatedGPUmemory'..
|
||||
' -q ThermalSensorReading'..
|
||||
' -q [gpu:0]/GPUCurrentClockFreqs'..
|
||||
' -q [gpu:0]/GPUutilization'
|
||||
|
||||
local NV_REGEX = '(%d+)\n'..
|
||||
'(%d+)\n'..
|
||||
'(%d+)\n'..
|
||||
'(%d+),(%d+)\n'..
|
||||
'graphics=(%d+), memory=%d+, video=(%d+), PCIe=%d+\n'
|
||||
|
||||
local GPU_BUS_CTRL = '/sys/bus/pci/devices/0000:01:00.0/power/control'
|
||||
|
||||
local state = {
|
||||
error = false,
|
||||
used_memory = 0,
|
||||
total_memory = 0,
|
||||
temp_reading = 0,
|
||||
gpu_frequency = 0,
|
||||
memory_frequency = 0,
|
||||
gpu_utilization = 0,
|
||||
vid_utilization = 0
|
||||
}
|
||||
|
||||
local update_state = function()
|
||||
if i_o.read_file(GPU_BUS_CTRL, nil, '*l') == 'on' then
|
||||
local nvidia_settings_glob = i_o.execute_cmd(NV_QUERY)
|
||||
if nvidia_settings_glob == '' then
|
||||
state.error = 'Error'
|
||||
else
|
||||
state.used_memory,
|
||||
state.total_memory,
|
||||
state.temp_reading,
|
||||
state.gpu_frequency,
|
||||
state.memory_frequency,
|
||||
state.gpu_utilization,
|
||||
state.vid_utilization
|
||||
= __string_match(nvidia_settings_glob, NV_REGEX)
|
||||
state.error = false
|
||||
end
|
||||
else
|
||||
state.error = 'Off'
|
||||
end
|
||||
return state
|
||||
end
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
-- main drawing functions
|
||||
|
||||
|
@ -213,7 +212,7 @@ return function(update_freq, config, common, width, point)
|
|||
header = 'NVIDIA GRAPHICS',
|
||||
point = point,
|
||||
width = width,
|
||||
update_wrapper = function(f) return function(_) f(update_state()) end end,
|
||||
update_wrapper = function(f) return function(_) update_state() f() end end,
|
||||
top = {{mk_status, true, SEPARATOR_SPACING}},
|
||||
common.mk_section(
|
||||
SEPARATOR_SPACING,
|
||||
|
|
|
@ -18,6 +18,43 @@ return function(update_freq, config, common, width, point)
|
|||
local __string_match = string.match
|
||||
local __math_floor = math.floor
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
-- state
|
||||
|
||||
local MEMINFO_REGEX = '\nMemFree:%s+(%d+).+'..
|
||||
'\nBuffers:%s+(%d+).+'..
|
||||
'\nCached:%s+(%d+).+'..
|
||||
'\nSwapFree:%s+(%d+).+'..
|
||||
'\nShmem:%s+(%d+).+'..
|
||||
'\nSReclaimable:%s+(%d+)'
|
||||
|
||||
local get_meminfo_field = function(field)
|
||||
return tonumber(i_o.read_file('/proc/meminfo', field..':%s+(%d+)'))
|
||||
end
|
||||
|
||||
local mod_state = {
|
||||
mem = {total = get_meminfo_field('MemTotal')},
|
||||
swap = {total = get_meminfo_field('SwapTotal')}
|
||||
}
|
||||
local read_state = function()
|
||||
local m = mod_state.mem
|
||||
-- see manpage for free command for formulas
|
||||
m.memfree,
|
||||
m.buffers,
|
||||
m.cached,
|
||||
mod_state.swap.free,
|
||||
m.shmem,
|
||||
m.sreclaimable
|
||||
= __string_match(i_o.read_file('/proc/meminfo'), MEMINFO_REGEX)
|
||||
m.used_percent =
|
||||
(m.total -
|
||||
m.memfree -
|
||||
m.cached -
|
||||
m.buffers -
|
||||
m.sreclaimable) / m.total
|
||||
end
|
||||
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
-- mem stats (dial + text)
|
||||
|
||||
|
@ -56,9 +93,9 @@ return function(update_freq, config, common, width, point)
|
|||
{'Page Cache', 'Buffers', 'Shared', 'Kernel Slab'},
|
||||
'%.1f%%'
|
||||
)
|
||||
local update = function(s)
|
||||
local m = s.mem
|
||||
local w = s.swap
|
||||
local update = function()
|
||||
local m = mod_state.mem
|
||||
local w = mod_state.swap
|
||||
common.dial_set(mem, m.used_percent * 100)
|
||||
common.dial_set(swap, (w.total - w.free) / w.total * 100)
|
||||
|
||||
|
@ -94,7 +131,7 @@ return function(update_freq, config, common, width, point)
|
|||
return common.mk_acc(
|
||||
width,
|
||||
PLOT_HEIGHT,
|
||||
function(s) timeseries.update(obj, s.mem.used_percent) end,
|
||||
function() timeseries.update(obj, mod_state.mem.used_percent) end,
|
||||
pure.partial(timeseries.draw_static, obj),
|
||||
pure.partial(timeseries.draw_dynamic, obj)
|
||||
)
|
||||
|
@ -122,7 +159,7 @@ return function(update_freq, config, common, width, point)
|
|||
NUM_ROWS,
|
||||
'Mem (%)'
|
||||
)
|
||||
local update = function(_)
|
||||
local update = function()
|
||||
for r = 1, NUM_ROWS do
|
||||
text_table.set(obj, 1, r, i_o.conky(TABLE_CONKY[r].comm, '(%S+)'))
|
||||
text_table.set(obj, 2, r, i_o.conky(TABLE_CONKY[r].pid))
|
||||
|
@ -138,43 +175,6 @@ return function(update_freq, config, common, width, point)
|
|||
)
|
||||
end
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
-- state
|
||||
|
||||
local MEMINFO_REGEX = '\nMemFree:%s+(%d+).+'..
|
||||
'\nBuffers:%s+(%d+).+'..
|
||||
'\nCached:%s+(%d+).+'..
|
||||
'\nSwapFree:%s+(%d+).+'..
|
||||
'\nShmem:%s+(%d+).+'..
|
||||
'\nSReclaimable:%s+(%d+)'
|
||||
|
||||
local get_meminfo_field = function(field)
|
||||
return tonumber(i_o.read_file('/proc/meminfo', field..':%s+(%d+)'))
|
||||
end
|
||||
|
||||
local state = {
|
||||
mem = {total = get_meminfo_field('MemTotal')},
|
||||
swap = {total = get_meminfo_field('SwapTotal')}
|
||||
}
|
||||
local read_state = function()
|
||||
local m = state.mem
|
||||
-- see manpage for free command for formulas
|
||||
m.memfree,
|
||||
m.buffers,
|
||||
m.cached,
|
||||
state.swap.free,
|
||||
m.shmem,
|
||||
m.sreclaimable
|
||||
= __string_match(i_o.read_file('/proc/meminfo'), MEMINFO_REGEX)
|
||||
m.used_percent =
|
||||
(m.total -
|
||||
m.memfree -
|
||||
m.cached -
|
||||
m.buffers -
|
||||
m.sreclaimable) / m.total
|
||||
return state
|
||||
end
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
-- main functions
|
||||
|
||||
|
@ -182,7 +182,7 @@ return function(update_freq, config, common, width, point)
|
|||
header = 'MEMORY',
|
||||
point = point,
|
||||
width = width,
|
||||
update_wrapper = function(f) return function(_) f(read_state()) end end,
|
||||
update_wrapper = function(f) return function(_) read_state() f() end end,
|
||||
top = {
|
||||
{mk_stats, config.show_stats, PLOT_SECTION_BREAK},
|
||||
{mk_plot, config.show_plot, TABLE_SECTION_BREAK},
|
||||
|
|
|
@ -12,17 +12,16 @@ return function(update_freq, common, width, point)
|
|||
return i_o.read_file(path, nil, '*n') * 8
|
||||
end
|
||||
|
||||
local state = {rx_bits = 0, tx_bits = 0}
|
||||
local mod_state = {rx_bits = 0, tx_bits = 0}
|
||||
|
||||
local read_interfaces = function()
|
||||
state.rx_bits = 0
|
||||
state.tx_bits = 0
|
||||
mod_state.rx_bits = 0
|
||||
mod_state.tx_bits = 0
|
||||
for i = 1, #INTERFACE_PATHS do
|
||||
local p = INTERFACE_PATHS[i]
|
||||
state.rx_bits = state.rx_bits + get_bits(p.rx)
|
||||
state.tx_bits = state.tx_bits + get_bits(p.tx)
|
||||
mod_state.rx_bits = mod_state.rx_bits + get_bits(p.rx)
|
||||
mod_state.tx_bits = mod_state.tx_bits + get_bits(p.tx)
|
||||
end
|
||||
return state
|
||||
end
|
||||
|
||||
-- prime initial state
|
||||
|
@ -48,12 +47,12 @@ return function(update_freq, common, width, point)
|
|||
label,
|
||||
2,
|
||||
update_freq,
|
||||
state[key]
|
||||
mod_state[key]
|
||||
)
|
||||
return common.mk_acc(
|
||||
width,
|
||||
PLOT_HEIGHT + PLOT_SEC_BREAK,
|
||||
function(s) common.update_rate_timeseries(obj, s[key]) end,
|
||||
function() common.update_rate_timeseries(obj, mod_state[key]) end,
|
||||
pure.partial(common.tagged_scaled_timeseries_draw_static, obj),
|
||||
pure.partial(common.tagged_scaled_timeseries_draw_dynamic, obj)
|
||||
)
|
||||
|
@ -69,7 +68,7 @@ return function(update_freq, common, width, point)
|
|||
header = 'NETWORK',
|
||||
point = point,
|
||||
width = width,
|
||||
update_wrapper = function(f) return function(_) f(read_interfaces()) end end,
|
||||
update_wrapper = function(f) return function(_) read_interfaces() f() end end,
|
||||
top = {
|
||||
{mk_rx, true, PLOT_SEC_BREAK},
|
||||
{mk_tx, true, 0},
|
||||
|
|
Loading…
Reference in New Issue