aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README7
-rw-r--r--widgets/init.lua1
-rw-r--r--widgets/raid.lua56
3 files changed, 64 insertions, 0 deletions
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 <glaweh debian.org>
- Rémy C. <shikamaru mandriva.org>
- Hiltjo Posthuma <hiltjo codemadness.org>
+ - Hagen Schink <troja84 googlemail.com>
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 <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 })