diff --git a/README b/README index 743f83f..5fc65f4 100644 --- a/README +++ b/README @@ -172,6 +172,12 @@ vicious.widgets.dio {read_s}, {read_kb}, {read_mb}, {write_s}, {write_kb}, {write_mb} and {sched} +vicious.widgets.raid + - provides state information for a requested RAID array + - takes the RAID array ID as an argument + - returns 1st value as the number of assigned, and 2nd as active, + devices in the array + vicious.widgets.hddtemp - provides hard drive temperatures using the hddtemp daemon - takes the hddtemp listening port as an argument, or defaults to @@ -501,3 +507,4 @@ Vicious contributors: - Henning Glawe - Rémy C. - Hiltjo Posthuma + - Hagen Schink diff --git a/widgets/init.lua b/widgets/init.lua index 8420880..c8af255 100644 --- a/widgets/init.lua +++ b/widgets/init.lua @@ -16,6 +16,7 @@ require("vicious.widgets.mem") require("vicious.widgets.os") require("vicious.widgets.fs") require("vicious.widgets.dio") +require("vicious.widgets.raid") require("vicious.widgets.hddtemp") require("vicious.widgets.net") require("vicious.widgets.wifi") 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 +----------------------------------------------------- + +-- {{{ 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 })