----------------------------------------------------- -- Licensed under the GNU General Public License v2 -- * (c) 2010, Hagen Schink ----------------------------------------------------- -- {{{ Grab environment local io = { open = io.open } 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 -- vicious.widgets.raid local raid_linux = {} -- Initialize function tables local mddev = {} -- {{{ RAID widget type local function worker(format, warg) if not warg then return end mddev[warg] = { ["found"] = false, ["active"] = 0, ["assigned"] = 0 } -- Linux manual page: md(4) local f = io.open("/proc/mdstat") for line in f:lines() do if mddev[warg]["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 mddev[warg]["found"] = true for i in string.gmatch(line, "%[[%d]%]") do mddev[warg]["assigned"] = mddev[warg]["assigned"] + 1 end end end f:close() return {mddev[warg]["assigned"], mddev[warg]["active"]} end -- }}} return setmetatable(raid_linux, { __call = function(_, ...) return worker(...) end })