luci-app-statistics: add watt-ups for nut and skip unsupported values
authorJo-Philipp Wich <jo@mein.io>
Mon, 3 Apr 2023 10:45:50 +0000 (12:45 +0200)
committerJo-Philipp Wich <jo@mein.io>
Mon, 3 Apr 2023 10:47:47 +0000 (12:47 +0200)
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>
applications/luci-app-statistics/htdocs/luci-static/resources/statistics/rrdtool/definitions/nut.js

index 5d7a92f7fb3e4887230720e146581579a8981aea..dbd25f6c0767c256ea4d2c36e1008fd4650e33d1 100644 (file)
@@ -7,125 +7,150 @@ return baseclass.extend({
        title: _('UPS'),
 
        rrdargs: function(graph, host, plugin, plugin_instance, dtype) {
-               var voltages_ac = {
-                       title: "%H: AC voltages on UPS \"%pi\"",
-                       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 definitions = [];
+               var instances;
+
+               function find_instances(dtype, wanted) {
+                       var matching = graph.dataInstances(host, plugin, plugin_instance, dtype).filter(function(instance) {
+                               return wanted.indexOf(instance) > -1;
+                       });
+
+                       return matching.length ? { [dtype]: matching } : null;
+               }
+
+               if ((instances = find_instances('voltage', [ 'input', 'output' ])) != null) {
+                       definitions.push({
+                               title: "%H: AC voltages on UPS \"%pi\"",
+                               vlabel: "V",
+                               number_format: "%5.1lfV",
+                               data: {
+                                       instances: instances,
+                                       options: {
+                                               voltage_output : { color: "00e000", title: "Output voltage", noarea: true, overlay: true },
+                                               voltage_input  : { color: "ffb000", title: "Input voltage", noarea: true, overlay: true }
+                                       }
+                               }
+                       });
+               }
+
+               if ((instances = find_instances('voltage', [ 'battery' ])) != null) {
+                       definitions.push({
+                               title: "%H: Battery voltage on UPS \"%pi\"",
+                               vlabel: "V",
+                               number_format: "%5.1lfV",
+                               data: {
+                                       instances: instances,
+                                       options: {
+                                               voltage: { color: "0000ff", title: "Battery voltage", noarea: true, overlay: true }
+                                       }
                                }
-                       }
-               };
+                       });
+               }
 
-               var voltages_dc = {
-                       title: "%H: Battery voltage on UPS \"%pi\"",
-                       vlabel: "V",
-                       number_format: "%5.1lfV",
-                       data: {
-                               instances: {
-                                       voltage: [ "battery" ]
-                               },
-                               options: {
-                                       voltage: { color: "0000ff", title: "Battery voltage", noarea: true, overlay: true }
+               if ((instances = find_instances('current', [ 'battery', 'output' ])) != null) {
+                       definitions.push({
+                               title: "%H: Current on UPS \"%pi\"",
+                               vlabel: "A",
+                               number_format: "%5.3lfA",
+                               data: {
+                                       instances: instances,
+                                       options: {
+                                               current_output : { color: "00e000", title: "Output current", noarea: true, overlay: true },
+                                               current_battery: { color: "0000ff", title: "Battery current", noarea: true, overlay: true }
+                                       }
                                }
-                       }
-               };
+                       });
+               }
 
-               var currents = {
-                       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 }
+               if ((instances = find_instances('percent', [ 'charge', 'load' ])) != null) {
+                       definitions.push({
+                               title: "%H: Battery charge/load on UPS \"%pi\"",
+                               vlabel: "Percent",
+                               y_min: "0",
+                               y_max: "100",
+                               number_format: "%5.1lf%%",
+                               data: {
+                                       instances: instances,
+                                       options: {
+                                               percent_charge: { color: "00ff00", title: "Charge level", noarea: true, overlay: true },
+                                               percent_load: { color: "ff0000", title: "Load", noarea: true, overlay: true }
+                                       }
                                }
-                       }
-               };
+                       });
+               }
 
-               var percentage = {
-                       title: "%H: Battery charge/load on UPS \"%pi\"",
-                       vlabel: "Percent",
-                       y_min: "0",
-                       y_max: "100",
-                       number_format: "%5.1lf%%",
-                       data: {
-                               instances: {
-                                       percent: [ "charge", "load" ]
-                               },
-                               options: {
-                                       percent_charge: { color: "00ff00", title: "Charge level", noarea: true, overlay: true },
-                                       percent_load: { color: "ff0000", title: "Load", noarea: true, overlay: true }
+               if ((instances = find_instances('temperature', [ 'battery' ])) != null) {
+                       /* Note: This is in ISO8859-1 for rrdtool. Welcome to the 20th century. */
+                       definitions.push({
+                               title: "%H: Battery temperature on UPS \"%pi\"",
+                               vlabel: "\u00b0C",
+                               number_format: "%5.1lf\u00b0C",
+                               data: {
+                                       instances: instances,
+                                       options: {
+                                               temperature_battery: { color: "ffb000", title: "Battery temperature", noarea: true }
+                                       }
                                }
-                       }
-               };
+                       });
+               }
 
-               /* Note: This is in ISO8859-1 for rrdtool. Welcome to the 20th century. */
-               var temperature = {
-                       title: "%H: Battery temperature on UPS \"%pi\"",
-                       vlabel: "\u00b0C",
-                       number_format: "%5.1lf\u00b0C",
-                       data: {
-                               instances: {
-                                       temperature: "battery"
-                               },
-                               options: {
-                                       temperature_battery: { color: "ffb000", title: "Battery temperature", noarea: true }
+               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 }
+                                       }
                                }
-                       }
-               };
+                       });
+               }
 
-               var timeleft = {
-                       title: "%H: Time left on UPS \"%pi\"",
-                       vlabel: "Minutes",
-                       number_format: "%.1lfm",
-                       data: {
-                               instances: {
-                                       timeleft: [ "battery" ]
-                               },
-                               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)"  }
+                                       }
                                }
-                       }
-               };
+                       });
+               }
 
-               var power = {
-                       title: "%H: Power on UPS \"%pi\"",
-                       vlabel: "Power",
-                       number_format: "%5.1lf%%",
-                       data: {
-                               instances: {
-                                       power: [ "ups" ]
-                               },
-                               options: {
-                                       power_ups: { color: "00ff00", title: "Power level"  }
+               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)"  }
+                                       }
                                }
-                       }
-               };
+                       });
+               }
 
-               var frequencies = {
-                       title: "%H: Frequencies on UPS \"%pi\"",
-                       vlabel: "Hz",
-                       number_format: "%5.1lfHz",
-                       data: {
-                               instances: {
-                                       frequency: [ "input", "output" ]
-                               },
-                               options: {
-                                       frequency_output : { color: "00e000", title: "Output frequency", noarea: true, overlay: true },
-                                       frequency_input  : { color: "ffb000", title: "Input frequency", noarea: true, overlay: true }
+               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 [ voltages_ac, voltages_dc, currents, percentage, temperature, timeleft, power, frequencies ];
+               return definitions;
        }
 });