luci-app-statistics: add initial support for collect-mod-sensors
authorJo-Philipp Wich <jow@openwrt.org>
Mon, 5 Oct 2015 13:13:44 +0000 (15:13 +0200)
committerJo-Philipp Wich <jow@openwrt.org>
Mon, 5 Oct 2015 13:13:44 +0000 (15:13 +0200)
Due to a lack of a test environment this support only covers thermal graphs
so far. Please send the output of "rrdtool info /tmp/rrd/*/sensors-*/*.rrd"
if your system happens to support voltage, power or fanspeed sensors.

Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua
applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/sensors.lua [new file with mode: 0644]
applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/sensors.lua [new file with mode: 0644]
applications/luci-app-statistics/root/etc/config/luci_statistics
applications/luci-app-statistics/root/usr/bin/stat-genconfig

index d9c52ed..e9e716c 100644 (file)
@@ -45,6 +45,7 @@ function index()
                ping            = _("Ping"),
                processes       = _("Processes"),
                rrdtool         = _("RRDTool"),
+               sensors     = _("Sensors"),
                splash_leases = _("Splash Leases"),
                tcpconns        = _("TCP Connections"),
                unixsock        = _("UnixSock"),
@@ -54,7 +55,7 @@ function index()
        -- our collectd menu
        local collectd_menu = {
                output  = { "csv", "network", "rrdtool", "unixsock" },
-               general = { "cpu", "df", "disk", "email", "entropy", "exec", "irq", "load", "memory", "nut", "processes", "uptime" },
+               general = { "cpu", "df", "disk", "email", "entropy", "exec", "irq", "load", "memory", "nut", "processes", "sensors", "uptime" },
                network = { "conntrack", "dns", "interface", "iptables", "netlink", "olsrd", "ping", "splash_leases", "tcpconns", "iwinfo" }
        }
 
diff --git a/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/sensors.lua b/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/sensors.lua
new file mode 100644 (file)
index 0000000..77e36bf
--- /dev/null
@@ -0,0 +1,125 @@
+-- Copyright 2015 Jo-Philipp Wich <jow@openwrt.org>
+-- Licensed to the public under the Apache License 2.0.
+
+require "luci.sys"
+
+local m, s, o
+local sensor_types = {
+       ["12v"] = "voltage",
+       ["2.0v"] = "voltage",
+       ["2.5v"] = "voltage",
+       ["3.3v"] = "voltage",
+       ["5.0v"] = "voltage",
+       ["5v"] = "voltage",
+       ["ain1"] = "voltage",
+       ["ain2"] = "voltage",
+       ["cpu_temp"] = "temperature",
+       ["fan1"] = "fanspeed",
+       ["fan2"] = "fanspeed",
+       ["fan3"] = "fanspeed",
+       ["fan4"] = "fanspeed",
+       ["fan5"] = "fanspeed",
+       ["fan6"] = "fanspeed",
+       ["fan7"] = "fanspeed",
+       ["in0"] = "voltage",
+       ["in10"] = "voltage",
+       ["in2"] = "voltage",
+       ["in3"] = "voltage",
+       ["in4"] = "voltage",
+       ["in5"] = "voltage",
+       ["in6"] = "voltage",
+       ["in7"] = "voltage",
+       ["in8"] = "voltage",
+       ["in9"] = "voltage",
+       ["power1"] = "power",
+       ["remote_temp"] = "temperature",
+       ["temp1"] = "temperature",
+       ["temp2"] = "temperature",
+       ["temp3"] = "temperature",
+       ["temp4"] = "temperature",
+       ["temp5"] = "temperature",
+       ["temp6"] = "temperature",
+       ["temp7"] = "temperature",
+       ["temp"] = "temperature",
+       ["vccp1"] = "voltage",
+       ["vccp2"] = "voltage",
+       ["vdd"] = "voltage",
+       ["vid1"] = "voltage",
+       ["vid2"] = "voltage",
+       ["vid3"] = "voltage",
+       ["vid4"] = "voltage",
+       ["vid5"] = "voltage",
+       ["vid"] = "voltage",
+       ["vin1"] = "voltage",
+       ["vin2"] = "voltage",
+       ["vin3"] = "voltage",
+       ["vin4"] = "voltage",
+       ["volt12"] = "voltage",
+       ["volt5"] = "voltage",
+       ["voltbatt"] = "voltage",
+       ["vrm"] = "voltage"
+
+}
+
+
+m = Map("luci_statistics",
+       translate("Sensors Plugin Configuration"),
+       translate("The sensors plugin uses the Linux Sensors framework to gather environmental statistics."))
+
+s = m:section( NamedSection, "collectd_sensors", "luci_statistics" )
+
+
+o = s:option( Flag, "enable", translate("Enable this plugin") )
+o.default = 0
+
+
+o = s:option(Flag, "__all", translate("Monitor all sensors"))
+o:depends("enable", 1)
+o.default = 1
+o.write = function() end
+o.cfgvalue = function(self, sid)
+       local v = self.map:get(sid, "Sensor")
+       if v == nil or (type(v) == "table" and #v == 0) or (type(v) == "string" and #v == 0) then
+               return "1"
+       end
+end
+
+
+o = s:option(MultiValue, "Sensor", translate("Sensor list"), translate("Hold Ctrl to select multiple items or to deselect entries."))
+o:depends({enable = 1, __all = "" })
+o.widget = "select"
+o.rmempty = true
+o.size = 0
+
+local sensorcli = io.popen("/usr/sbin/sensors -u -A")
+if sensorcli then
+       local bus, sensor
+
+       while true do
+               local ln = sensorcli:read("*ln")
+               if not ln then
+                       break
+               elseif ln:match("^[%w-]+$") then
+                       bus = ln
+               elseif ln:match("^[%w-]+:$") then
+                       sensor = ln:sub(0, -2):lower()
+                       if bus and sensor_types[sensor] then
+                               o:value("%s/%s-%s" %{ bus, sensor_types[sensor], sensor })
+                               o.size = o.size + 1
+                       end
+               elseif ln == "" then
+                       bus = nil
+                       sensor = nil
+               end
+       end
+
+       sensorcli:close()
+end
+
+
+o = s:option( Flag, "IgnoreSelected", translate("Monitor all except specified") )
+o.default = 0
+o.rmempty = true
+o:depends({ enable = 1, __all = "" })
+
+return m
diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/sensors.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/sensors.lua
new file mode 100644 (file)
index 0000000..f8bddb9
--- /dev/null
@@ -0,0 +1,24 @@
+-- Copyright 2015 Jo-Philipp Wich <jow@openwrt.org>
+-- Licensed to the public under the Apache License 2.0.
+
+module("luci.statistics.rrdtool.definitions.sensors", package.seeall)
+
+function rrdargs( graph, plugin, plugin_instance )
+       return {
+               {
+                       per_instance = true,
+                       title = "%H: %pi - %di",
+                       vlabel = "\176C",
+                       number_format = "%4.1lf\176C",
+                       data = {
+                               types = { "temperature" },
+                               options = {
+                                       temperature__value = {
+                                               color = "ff0000",
+                                               title = "Temperature"
+                                       }
+                               }
+                       }
+               }
+       }
+end
index abcee3e..de16f29 100644 (file)
@@ -140,6 +140,9 @@ config statistics 'collectd_processes'
        option enable '0'
        option Processes 'uhttpd dnsmasq dropbear'
 
+config statistics 'collectd_sensors'
+       option enable '0'
+
 config statistics 'collectd_splash_leases'
        option enable '0'
 
index 8acae46..fed08cb 100755 (executable)
@@ -393,6 +393,12 @@ plugins = {
                { "RRATimespans" }
        },
 
+       sensors = {
+               { },
+               { "IgnoreSelected" },
+               { "Sensor" }
+       },
+
         splash_leases = {
           { },
           { },