luci-app-statistics: add support for apcups plugin
authorguidosarducci <guidosarducci@users.noreply.github.com>
Tue, 14 Mar 2017 02:36:52 +0000 (19:36 -0700)
committerguidosarducci <guidosarducci@users.noreply.github.com>
Fri, 30 Mar 2018 03:44:22 +0000 (20:44 -0700)
OpenWRT/LEDE support for APC UPSes is only partial: although the collectd
apcups plugin is included, related lua/luci code is missing. These changes
add the lua side and have been used for ~2 years, both on OpenWRT and LEDE.

Reworked from patches submitted by James Klaas to the luci development list
in 2015.

Signed-off-by: Tony Ambardar <itugrok@yahoo.com>
(cherry picked from commit 808f2617931dcd6f84637e1bff3a737b9368917c)

applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua
applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/apcups.lua [new file with mode: 0644]
applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/apcups.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 443f20b0f4bbaf6de1a7d765a2823fe3d8b5eb66..ec26f02d0db9e46bfe882cb37e2ed8d7292fff63 100644 (file)
@@ -23,6 +23,7 @@ function index()
                s_general       = _("General plugins"),
                s_network       = _("Network plugins"),
 
+               apcups          = _("APC UPS"),
                conntrack       = _("Conntrack"),
                contextswitch   = _("Context Switches"),
                cpu                     = _("Processor"),
@@ -59,8 +60,8 @@ function index()
        -- our collectd menu
        local collectd_menu = {
                output  = { "csv", "network", "rrdtool", "unixsock" },
-               general = { "contextswitch", "cpu", "cpufreq", "df", "disk", "email",
-                       "entropy", "exec", "irq", "load", "memory",
+               general = { "apcups", "contextswitch", "cpu", "cpufreq", "df",
+                       "disk", "email", "entropy", "exec", "irq", "load", "memory",
                        "nut", "processes", "sensors", "thermal", "uptime" },
                network = { "conntrack", "dns", "interface", "iptables",
                        "netlink", "olsrd", "openvpn", "ping",
diff --git a/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/apcups.lua b/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/apcups.lua
new file mode 100644 (file)
index 0000000..49e28c7
--- /dev/null
@@ -0,0 +1,28 @@
+-- Copyright 2015 Jo-Philipp Wich <jow@openwrt.org>
+-- Licensed to the public under the Apache License 2.0.
+
+m = Map("luci_statistics",
+       translate("APCUPS Plugin Configuration"),
+       translate(
+               "The APCUPS plugin collects statistics about the APC UPS."
+       ))
+
+-- collectd_apcups config section
+s = m:section( NamedSection, "collectd_apcups", "luci_statistics" )
+
+-- collectd_apcups.enable
+enable = s:option( Flag, "enable", translate("Enable this plugin") )
+enable.default = 0
+
+-- collectd_apcups.host (Host)
+host = s:option( Value, "Host", translate("Monitor host"), translate ("Add multiple hosts separated by space."))
+host.default = "localhost"
+host:depends( "enable", 1 )
+
+-- collectd_apcups.port (Port)
+port = s:option( Value, "Port", translate("Port for apcupsd communication") )
+port.isinteger = true
+port.default   = 3551
+port:depends( "enable", 1 )
+
+return m
diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/apcups.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/apcups.lua
new file mode 100644 (file)
index 0000000..04eee93
--- /dev/null
@@ -0,0 +1,101 @@
+-- Copyright 2015 Jo-Philipp Wich <jow@openwrt.org>
+-- Licensed to the public under the Apache License 2.0.
+
+module("luci.statistics.rrdtool.definitions.apcups",package.seeall)
+
+function rrdargs( graph, plugin, plugin_instance, dtype )
+
+       local voltages = {
+               title = "%H: Voltages on APC UPS ",
+               vlabel = "V",
+               number_format = "%5.1lfV",
+               data = {
+                       instances = {
+                               voltage = { "battery", "input", "output" }
+                       },
+
+                       options = {
+                               voltage_output  = { color = "00e000", title = "Output voltage", noarea=true, overlay=true },
+                               voltage_battery = { color = "0000ff", title = "Battery voltage", noarea=true, overlay=true },
+                               voltage_input   = { color = "ffb000", title = "Input voltage", noarea=true, overlay=true }
+                       }
+               }
+       }
+
+       local percentload = {
+               title = "%H: Load on APC UPS ",
+               vlabel = "Percent",
+               y_min = "0",
+               y_max = "100",
+               number_format = "%5.1lf%%",
+               data = {
+                       sources = {
+                               percent_load = { "value" }
+                       },
+                       instances = {
+                               percent = "load"
+                       },
+                       options = {
+                               percent_load = { color = "00ff00", title = "Load level"  }
+                       }
+               }
+       }
+
+       local charge_percent = {
+               title = "%H: Battery charge on APC UPS ",
+               vlabel = "Percent",
+               y_min = "0",
+               y_max = "100",
+               number_format = "%5.1lf%%",
+               data = {
+                       types = { "charge" },
+                       options = {
+                               charge = { color = "00ff0b", title = "Charge level"  }
+                       }
+               }
+       }
+
+       local temperature = {
+               title = "%H: Battery temperature on APC UPS ",
+               vlabel = "\176C",
+               number_format = "%5.1lf\176C",
+               data = {
+                       types = { "temperature" },
+                       options = {
+                               temperature = { color = "ffb000", title = "Battery temperature" } }
+               }
+       }
+
+       local timeleft = {
+               title = "%H: Time left on APC UPS ",
+               vlabel = "Minutes",
+               number_format = "%.1lfm",
+               data = {
+                       sources = {
+                               timeleft = { "value" }
+                       },
+                       options = {
+                               timeleft = { color = "0000ff", title = "Time left" }
+                       }
+               }
+       }
+
+       local frequency = {
+               title = "%H: Incoming line frequency on APC UPS ",
+               vlabel = "Hz",
+               number_format = "%5.0lfhz",
+               data = {
+                       sources = {
+                               frequency_input = { "value" }
+                       },
+                       instances = {
+                               frequency = "frequency"
+                       },
+                       options = {
+                               frequency_frequency = { color = "000fff", title = "Line frequency" }
+                       }
+               }
+       }
+
+       return { voltages, percentload, charge_percent, temperature, timeleft, frequency }
+end
index c081a8e724c5db4f5a3c3caab2deb292ff2d6e02..8cc918e3db8409a638dfcd99528e98a347c7a26c 100644 (file)
@@ -49,6 +49,11 @@ config statistics 'collectd_unixsock'
 
 # input plugins
 
+config statistics 'collectd_apcups'
+       option enable '0'
+       option Host 'localhost'
+       option Port '3551'
+
 config statistics 'collectd_conntrack'
        option enable '0'
 
index 41482ea46340fd2aeaa8c0adeb1f98d9977c1850..d33b1a823ba8a3b076d2accffbd9e4a18ea4a785 100755 (executable)
@@ -255,6 +255,12 @@ end
 
 
 plugins = {
+       apcups = {
+               { "Host", "Port" },
+               { },
+               { }
+       },
+
        collectd = {
                { "BaseDir", "Include", "PIDFile", "PluginDir", "TypesDB", "Interval", "ReadThreads", "Hostname" },
                { },