From 26b0395ba988948a7cc8b79d08faf6a57058886a Mon Sep 17 00:00:00 2001 From: "Adrian C. (anrxc)" Date: Sun, 29 Aug 2010 00:49:57 +0200 Subject: contrib: imported contrib widgets --- contrib/sensors.lua | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 contrib/sensors.lua (limited to 'contrib/sensors.lua') diff --git a/contrib/sensors.lua b/contrib/sensors.lua new file mode 100644 index 0000000..45c7d9a --- /dev/null +++ b/contrib/sensors.lua @@ -0,0 +1,68 @@ +--------------------------------------------------- +-- Licensed under the GNU General Public License v2 +-- * (c) 2010, Greg D. +--------------------------------------------------- + +-- {{{ Grab environment +local tonumber = tonumber +local io = { popen = io.popen } +local setmetatable = setmetatable +local table = { insert = table.insert } +local string = { + gsub = string.gsub, + match = string.match +} +-- }}} + + +-- Sensors: provides access to lm_sensors data +module("vicious.contrib.sensors") + + +-- {{{ Split helper function +local function datasplit(str) + -- Splitting strings into associative array + -- with some magic to get the values right. + str = string.gsub(str, "\n", ":") + + local tbl = {} + string.gsub(str, "([^:]*)", function (v) + if string.match(v, ".") then + table.insert(tbl, v) + end + end) + + local assoc = {} + for c = 1, #tbl, 2 do + local k = string.gsub(tbl[c], ".*_", "") + local v = tonumber(string.match(tbl[c+1], "[%d]+")) + assoc[k] = v + end + + return assoc +end +-- }}} + +-- {{{ Sensors widget type +local function worker(format, warg) + -- Get data from all sensors + local f = io.popen("LANG=C sensors -uA") + local lm_sensors = f:read("*all") + f:close() + + local sensor_data = string.gsub( + string.match(lm_sensors, warg..":\n(%s%s.-)\n[^ ]"), " ", "") + + -- One of: crit, max + local divisor = "crit" + local s_data = datasplit(sensor_data) + + if s_data[divisor] and s_data[divisor] > 0 then + s_data.percent = s_data.input / s_data[divisor] * 100 + end + + return {s_data.input, tonumber(s_data.percent)} +end +-- }}} + +setmetatable(_M, { __call = function(_, ...) return worker(...) end }) -- cgit v1.2.3