dio: preliminary support for multiple devices

Makes arrays for every requested disk to keep stats separated. But the
whole thing with these widgets with arguments clashes with caching,
and problems are to be expected.
This commit is contained in:
Adrian C. (anrxc) 2009-12-15 02:38:20 +01:00
parent b4031d229d
commit 9150063670
1 changed files with 17 additions and 13 deletions

30
dio.lua
View File

@ -6,7 +6,6 @@
-- {{{ Grab environment
local ipairs = ipairs
local setmetatable = setmetatable
local math = { floor = math.floor }
local table = { insert = table.insert }
local helpers = require("vicious.helpers")
local string = {
@ -35,36 +34,41 @@ end
-- {{{ Disk I/O widget type
local function worker(format, disk)
local disk_lines = {}
local disk_lines = { disk = {} }
local disk_stats = helpers.pathtotable("/sys/block/" .. disk)
if disk_stats.stat then
local match = string.gmatch(disk_stats.stat, "[%s]+([%d]+)")
for i = 1, 11 do -- Store disk stats
table.insert(disk_lines, match())
table.insert(disk_lines.disk, match())
end
end
-- Ensure tables are initialized correctly
local diff_total = {}
while #disk_total < #disk_lines do
table.insert(disk_total, 0)
local diff_total = { disk = {} }
if not disk_total.disk then
disk_usage.disk = {}
disk_total.disk = {}
while #disk_total.disk < #disk_lines.disk do
table.insert(disk_total.disk, 0)
end
end
for i, v in ipairs(disk_lines) do
for i, v in ipairs(disk_lines.disk) do
-- Diskstats are absolute, substract our last reading
diff_total[i] = v - disk_total[i]
diff_total.disk[i] = v - disk_total.disk[i]
-- Store totals
disk_total[i] = v
disk_total.disk[i] = v
end
-- Calculate and store I/O
uformat(disk_usage, "read", diff_total[3])
uformat(disk_usage, "write", diff_total[7])
uformat(disk_usage, "total", diff_total[7] + diff_total[3])
uformat(disk_usage.disk, "read", diff_total.disk[3])
uformat(disk_usage.disk, "write", diff_total.disk[7])
uformat(disk_usage.disk, "total", diff_total.disk[7] + diff_total.disk[3])
return disk_usage
return disk_usage.disk
end
-- }}}