Merge pull request #1707 from guidosarducci/lede-17.01-fix-apcups-statistics
luci-app-statistics: backport completed support for apcups plugin
This commit is contained in:
commit
38e36f2d82
5 changed files with 217 additions and 2 deletions
|
@ -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",
|
||||
|
|
|
@ -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
|
|
@ -0,0 +1,175 @@
|
|||
-- 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 )
|
||||
|
||||
local lu = require("luci.util")
|
||||
local rv = { }
|
||||
|
||||
-- Types and instances supported by APC UPS
|
||||
-- e.g. ups_types -> { 'timeleft', 'charge', 'percent', 'voltage' }
|
||||
-- e.g. ups_inst['voltage'] -> { 'input', 'battery' }
|
||||
|
||||
local ups_types = graph.tree:data_types( plugin, plugin_instance )
|
||||
|
||||
local ups_inst = {}
|
||||
for _, t in ipairs(ups_types) do
|
||||
ups_inst[t] = graph.tree:data_instances( plugin, plugin_instance, t )
|
||||
end
|
||||
|
||||
|
||||
-- Check if hash table or array is empty or nil-filled
|
||||
|
||||
local function empty( t )
|
||||
for _, v in pairs(t) do
|
||||
if type(v) then return false end
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
-- Append graph definition but only types/instances which are
|
||||
-- supported and available to the plugin and UPS.
|
||||
|
||||
local function add_supported( t, defs )
|
||||
local def_inst = defs['data']['instances']
|
||||
|
||||
if type(def_inst) == "table" then
|
||||
for k, v in pairs( def_inst ) do
|
||||
if lu.contains( ups_types, k) then
|
||||
for j = #v, 1, -1 do
|
||||
if not lu.contains( ups_inst[k], v[j] ) then
|
||||
table.remove( v, j )
|
||||
end
|
||||
end
|
||||
if #v == 0 then
|
||||
def_inst[k] = nil -- can't assign v: immutable
|
||||
end
|
||||
else
|
||||
def_inst[k] = nil -- can't assign v: immutable
|
||||
end
|
||||
end
|
||||
if empty(def_inst) then return end
|
||||
end
|
||||
table.insert( t, defs )
|
||||
end
|
||||
|
||||
|
||||
-- Graph definitions for APC UPS measurements MUST use only 'instances':
|
||||
-- e.g. instances = { voltage = { "input", "output" } }
|
||||
|
||||
local voltagesdc = {
|
||||
title = "%H: Voltages on APC UPS - Battery",
|
||||
vlabel = "Volts DC",
|
||||
alt_autoscale = true,
|
||||
number_format = "%5.1lfV",
|
||||
data = {
|
||||
instances = {
|
||||
voltage = { "battery" }
|
||||
},
|
||||
options = {
|
||||
voltage = { title = "Battery voltage", noarea=true }
|
||||
}
|
||||
}
|
||||
}
|
||||
add_supported( rv, voltagesdc )
|
||||
|
||||
local voltagesac = {
|
||||
title = "%H: Voltages on APC UPS - AC",
|
||||
vlabel = "Volts AC",
|
||||
alt_autoscale = true,
|
||||
number_format = "%5.1lfV",
|
||||
data = {
|
||||
instances = {
|
||||
voltage = { "input", "output" }
|
||||
},
|
||||
options = {
|
||||
voltage_output = { color = "00e000", title = "Output voltage", noarea=true, overlay=true },
|
||||
voltage_input = { color = "ffb000", title = "Input voltage", noarea=true, overlay=true }
|
||||
}
|
||||
}
|
||||
}
|
||||
add_supported( rv, voltagesac )
|
||||
|
||||
local percentload = {
|
||||
title = "%H: Load on APC UPS ",
|
||||
vlabel = "Percent",
|
||||
y_min = "0",
|
||||
y_max = "100",
|
||||
number_format = "%5.1lf%%",
|
||||
data = {
|
||||
instances = {
|
||||
percent = { "load" }
|
||||
},
|
||||
options = {
|
||||
percent_load = { color = "00ff00", title = "Load level" }
|
||||
}
|
||||
}
|
||||
}
|
||||
add_supported( rv, percentload )
|
||||
|
||||
local charge_percent = {
|
||||
title = "%H: Battery charge on APC UPS ",
|
||||
vlabel = "Percent",
|
||||
y_min = "0",
|
||||
y_max = "100",
|
||||
number_format = "%5.1lf%%",
|
||||
data = {
|
||||
instances = {
|
||||
charge = { "" }
|
||||
},
|
||||
options = {
|
||||
charge = { color = "00ff0b", title = "Charge level" }
|
||||
}
|
||||
}
|
||||
}
|
||||
add_supported( rv, charge_percent )
|
||||
|
||||
local temperature = {
|
||||
title = "%H: Battery temperature on APC UPS ",
|
||||
vlabel = "\176C",
|
||||
number_format = "%5.1lf\176C",
|
||||
data = {
|
||||
instances = {
|
||||
temperature = { "" }
|
||||
},
|
||||
options = {
|
||||
temperature = { color = "ffb000", title = "Battery temperature" } }
|
||||
}
|
||||
}
|
||||
add_supported( rv, temperature )
|
||||
|
||||
local timeleft = {
|
||||
title = "%H: Time left on APC UPS ",
|
||||
vlabel = "Minutes",
|
||||
number_format = "%.1lfm",
|
||||
data = {
|
||||
instances = {
|
||||
timeleft = { "" }
|
||||
},
|
||||
options = {
|
||||
timeleft = { color = "0000ff", title = "Time left" }
|
||||
}
|
||||
}
|
||||
}
|
||||
add_supported( rv, timeleft )
|
||||
|
||||
local frequency = {
|
||||
title = "%H: Incoming line frequency on APC UPS ",
|
||||
vlabel = "Hz",
|
||||
number_format = "%5.0lfhz",
|
||||
data = {
|
||||
instances = {
|
||||
frequency = { "input" }
|
||||
},
|
||||
options = {
|
||||
frequency_input = { color = "000fff", title = "Line frequency" }
|
||||
}
|
||||
}
|
||||
}
|
||||
add_supported( rv, frequency )
|
||||
|
||||
return rv
|
||||
end
|
|
@ -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'
|
||||
|
||||
|
|
|
@ -255,6 +255,12 @@ end
|
|||
|
||||
|
||||
plugins = {
|
||||
apcups = {
|
||||
{ "Host", "Port" },
|
||||
{ },
|
||||
{ }
|
||||
},
|
||||
|
||||
collectd = {
|
||||
{ "BaseDir", "Include", "PIDFile", "PluginDir", "TypesDB", "Interval", "ReadThreads", "Hostname" },
|
||||
{ },
|
||||
|
|
Loading…
Reference in a new issue