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:
Jo-Philipp Wich 2023-04-03 12:45:50 +02:00
parent 6b9a985fa7
commit dd1111407d

View file

@ -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;
} }
}); });