Files
opus-apps/milo/MiloMonitor.lua
kepler155c 6dde2245a6 milo wip
2018-10-26 06:19:34 -04:00

63 lines
1.4 KiB
Lua

_G.requireInjector(_ENV)
local Util = require('util')
local colors = _G.colors
local device = _G.device
local args = { ... }
local mon = device[args[1] or 'monitor'] or error('Syntax: MiloMonitor <monitor>')
local config = Util.readTable('/usr/config/milo') or error('Milo is not configured')
local row
local monWidth, monHeight = mon.getSize()
local machines = { }
local function write(x, y, s, bg, fg)
mon.setCursorPos(x, y)
mon.setBackgroundColor(bg)
if fg then
mon.setTextColor(fg)
end
mon.write(s)
end
local function progress(y, percent)
local width = math.ceil(percent / 100 * monWidth)
write(2, y, string.rep(' ', monWidth - 2), colors.gray)
write(2, y, string.rep(' ', width), colors.lime)
end
local function draw(machine, percent)
write(2, row, machine.displayName or machine.name, colors.black, colors.yellow)
progress(row + 1, percent)
row = row + 3
end
local function redraw()
row = 1
mon.setBackgroundColor(colors.black)
mon.clear()
for _,machine in ipairs(machines) do
local dev = device[machine.name]
if dev then
local percent = 50
if machine.mtype == 'storage' then
percent = Util.size(dev.list()) / dev.size() * 100
end
draw(machine, percent)
end
end
end
for _, v in pairs(config.remoteDefaults) do
table.insert(machines, v)
end
table.sort(machines, function(a, b)
return (a.displayName or a.name) < (b.displayName or b.name)
end)
mon.setTextScale(.5)
redraw()