luci-app-statistics: add watt-ups for nut and skip unsupported values
Only render NUT charts for actually available data and add a chart definition for `watt-ups` values while we're at it. Ref: https://forum.openwrt.org/t/x/156246 Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
parent
6b9a985fa7
commit
dd1111407d
1 changed files with 132 additions and 107 deletions
|
@ -7,125 +7,150 @@ return baseclass.extend({
|
||||||
title: _('UPS'),
|
title: _('UPS'),
|
||||||
|
|
||||||
rrdargs: function(graph, host, plugin, plugin_instance, dtype) {
|
rrdargs: function(graph, host, plugin, plugin_instance, dtype) {
|
||||||
var voltages_ac = {
|
var definitions = [];
|
||||||
title: "%H: AC voltages on UPS \"%pi\"",
|
var instances;
|
||||||
vlabel: "V",
|
|
||||||
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 }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
var voltages_dc = {
|
function find_instances(dtype, wanted) {
|
||||||
title: "%H: Battery voltage on UPS \"%pi\"",
|
var matching = graph.dataInstances(host, plugin, plugin_instance, dtype).filter(function(instance) {
|
||||||
vlabel: "V",
|
return wanted.indexOf(instance) > -1;
|
||||||
number_format: "%5.1lfV",
|
});
|
||||||
data: {
|
|
||||||
instances: {
|
|
||||||
voltage: [ "battery" ]
|
|
||||||
},
|
|
||||||
options: {
|
|
||||||
voltage: { color: "0000ff", title: "Battery voltage", noarea: true, overlay: true }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
var currents = {
|
return matching.length ? { [dtype]: matching } : null;
|
||||||
title: "%H: Current on UPS \"%pi\"",
|
}
|
||||||
vlabel: "A",
|
|
||||||
number_format: "%5.3lfA",
|
|
||||||
data: {
|
|
||||||
instances: {
|
|
||||||
current: [ "battery", "output" ]
|
|
||||||
},
|
|
||||||
options: {
|
|
||||||
current_output : { color: "00e000", title: "Output current", noarea: true, overlay: true },
|
|
||||||
current_battery: { color: "0000ff", title: "Battery current", noarea: true, overlay: true }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
var percentage = {
|
if ((instances = find_instances('voltage', [ 'input', 'output' ])) != null) {
|
||||||
title: "%H: Battery charge/load on UPS \"%pi\"",
|
definitions.push({
|
||||||
vlabel: "Percent",
|
title: "%H: AC voltages on UPS \"%pi\"",
|
||||||
y_min: "0",
|
vlabel: "V",
|
||||||
y_max: "100",
|
number_format: "%5.1lfV",
|
||||||
number_format: "%5.1lf%%",
|
data: {
|
||||||
data: {
|
instances: instances,
|
||||||
instances: {
|
options: {
|
||||||
percent: [ "charge", "load" ]
|
voltage_output : { color: "00e000", title: "Output voltage", noarea: true, overlay: true },
|
||||||
},
|
voltage_input : { color: "ffb000", title: "Input voltage", noarea: true, overlay: true }
|
||||||
options: {
|
}
|
||||||
percent_charge: { color: "00ff00", title: "Charge level", noarea: true, overlay: true },
|
|
||||||
percent_load: { color: "ff0000", title: "Load", noarea: true, overlay: true }
|
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
};
|
}
|
||||||
|
|
||||||
/* Note: This is in ISO8859-1 for rrdtool. Welcome to the 20th century. */
|
if ((instances = find_instances('voltage', [ 'battery' ])) != null) {
|
||||||
var temperature = {
|
definitions.push({
|
||||||
title: "%H: Battery temperature on UPS \"%pi\"",
|
title: "%H: Battery voltage on UPS \"%pi\"",
|
||||||
vlabel: "\u00b0C",
|
vlabel: "V",
|
||||||
number_format: "%5.1lf\u00b0C",
|
number_format: "%5.1lfV",
|
||||||
data: {
|
data: {
|
||||||
instances: {
|
instances: instances,
|
||||||
temperature: "battery"
|
options: {
|
||||||
},
|
voltage: { color: "0000ff", title: "Battery voltage", noarea: true, overlay: true }
|
||||||
options: {
|
}
|
||||||
temperature_battery: { color: "ffb000", title: "Battery temperature", noarea: true }
|
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
};
|
}
|
||||||
|
|
||||||
var timeleft = {
|
if ((instances = find_instances('current', [ 'battery', 'output' ])) != null) {
|
||||||
title: "%H: Time left on UPS \"%pi\"",
|
definitions.push({
|
||||||
vlabel: "Minutes",
|
title: "%H: Current on UPS \"%pi\"",
|
||||||
number_format: "%.1lfm",
|
vlabel: "A",
|
||||||
data: {
|
number_format: "%5.3lfA",
|
||||||
instances: {
|
data: {
|
||||||
timeleft: [ "battery" ]
|
instances: instances,
|
||||||
},
|
options: {
|
||||||
options: {
|
current_output : { color: "00e000", title: "Output current", noarea: true, overlay: true },
|
||||||
timeleft_battery: { color: "0000ff", title: "Time left", transform_rpn: "60,/", noarea: true }
|
current_battery: { color: "0000ff", title: "Battery current", noarea: true, overlay: true }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
};
|
}
|
||||||
|
|
||||||
var power = {
|
if ((instances = find_instances('percent', [ 'charge', 'load' ])) != null) {
|
||||||
title: "%H: Power on UPS \"%pi\"",
|
definitions.push({
|
||||||
vlabel: "Power",
|
title: "%H: Battery charge/load on UPS \"%pi\"",
|
||||||
number_format: "%5.1lf%%",
|
vlabel: "Percent",
|
||||||
data: {
|
y_min: "0",
|
||||||
instances: {
|
y_max: "100",
|
||||||
power: [ "ups" ]
|
number_format: "%5.1lf%%",
|
||||||
},
|
data: {
|
||||||
options: {
|
instances: instances,
|
||||||
power_ups: { color: "00ff00", title: "Power level" }
|
options: {
|
||||||
|
percent_charge: { color: "00ff00", title: "Charge level", noarea: true, overlay: true },
|
||||||
|
percent_load: { color: "ff0000", title: "Load", noarea: true, overlay: true }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
};
|
}
|
||||||
|
|
||||||
var frequencies = {
|
if ((instances = find_instances('temperature', [ 'battery' ])) != null) {
|
||||||
title: "%H: Frequencies on UPS \"%pi\"",
|
/* Note: This is in ISO8859-1 for rrdtool. Welcome to the 20th century. */
|
||||||
vlabel: "Hz",
|
definitions.push({
|
||||||
number_format: "%5.1lfHz",
|
title: "%H: Battery temperature on UPS \"%pi\"",
|
||||||
data: {
|
vlabel: "\u00b0C",
|
||||||
instances: {
|
number_format: "%5.1lf\u00b0C",
|
||||||
frequency: [ "input", "output" ]
|
data: {
|
||||||
},
|
instances: instances,
|
||||||
options: {
|
options: {
|
||||||
frequency_output : { color: "00e000", title: "Output frequency", noarea: true, overlay: true },
|
temperature_battery: { color: "ffb000", title: "Battery temperature", noarea: true }
|
||||||
frequency_input : { color: "ffb000", title: "Input frequency", noarea: true, overlay: true }
|
}
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
};
|
}
|
||||||
|
|
||||||
return [ voltages_ac, voltages_dc, currents, percentage, temperature, timeleft, power, frequencies ];
|
if ((instances = find_instances('timeleft', [ 'battery' ])) != null) {
|
||||||
|
definitions.push({
|
||||||
|
title: "%H: Time left on UPS \"%pi\"",
|
||||||
|
vlabel: "Minutes",
|
||||||
|
number_format: "%.1lfm",
|
||||||
|
data: {
|
||||||
|
instances: instances,
|
||||||
|
options: {
|
||||||
|
timeleft_battery: { color: "0000ff", title: "Time left", transform_rpn: "60,/", noarea: true }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((instances = find_instances('power', [ 'watt-ups' ])) != null) {
|
||||||
|
definitions.push({
|
||||||
|
title: "%H: Power on UPS \"%pi\"",
|
||||||
|
vlabel: "Watt",
|
||||||
|
number_format: "%5.1lf%%",
|
||||||
|
data: {
|
||||||
|
instances: instances,
|
||||||
|
options: {
|
||||||
|
['power_watt-ups']: { color: "00ff00", title: "Power level (Watt)" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((instances = find_instances('power', [ 'ups' ])) != null) {
|
||||||
|
definitions.push({
|
||||||
|
title: "%H: Power on UPS \"%pi\"",
|
||||||
|
vlabel: "VA",
|
||||||
|
number_format: "%5.1lf%%",
|
||||||
|
data: {
|
||||||
|
instances: instances,
|
||||||
|
options: {
|
||||||
|
power_ups: { color: "00ff00", title: "Power level (VA)" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((instances = find_instances('frequency', [ 'input', 'output' ])) != null) {
|
||||||
|
definitions.push({
|
||||||
|
title: "%H: Frequencies on UPS \"%pi\"",
|
||||||
|
vlabel: "Hz",
|
||||||
|
number_format: "%5.1lfHz",
|
||||||
|
data: {
|
||||||
|
instances: instances,
|
||||||
|
options: {
|
||||||
|
frequency_output : { color: "00e000", title: "Output frequency", noarea: true, overlay: true },
|
||||||
|
frequency_input : { color: "ffb000", title: "Input frequency", noarea: true, overlay: true }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return definitions;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue