diff options
Diffstat (limited to 'widgets/raid.lua')
-rw-r--r-- | widgets/raid.lua | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/widgets/raid.lua b/widgets/raid.lua new file mode 100644 index 0000000..eaf7825 --- /dev/null +++ b/widgets/raid.lua @@ -0,0 +1,56 @@ +----------------------------------------------------- +-- Licensed under the GNU General Public License v2 +-- * (c) 2010, Hagen Schink <troja84@googlemail.com> +----------------------------------------------------- + +-- {{{ Grab environment +local io = { lines = io.lines } +local setmetatable = setmetatable +local string = { + len = string.len, + sub = string.sub, + match = string.match, + gmatch = string.gmatch +} +-- }}} + + +-- Raid: provides state information for a requested RAID array +module("vicious.widgets.raid") + + +-- {{{ RAID widget type +local function worker(format, warg) + if not warg then return end + + local found = false + local mddev = {} + mddev[warg] = { + ["active"] = 0, + ["assigned"] = 0 + } + + -- Linux manual page: md(4) + for line in io.lines("/proc/mdstat") do + if found then + local updev = string.match(line, "%[[_U]+%]") + + for i in string.gmatch(updev, "U") do + mddev[warg]["active"] = mddev[warg]["active"] + 1 + end + + break + elseif string.sub(line, 1, string.len(warg)) == warg then + found = true + + for i in string.gmatch(line, "%[%d%]") do + mddev[warg]["assigned"] = mddev[warg]["assigned"] + 1 + end + end + end + + return {mddev[warg]["assigned"], mddev[warg]["active"]} +end +-- }}} + +setmetatable(_M, { __call = function(_, ...) return worker(...) end }) |