]> arthur.barton.de Git - netdata.git/commitdiff
create apcupsd plugin
authorKyle Lucy <kmlucy@gmail.com>
Mon, 12 Sep 2016 17:43:35 +0000 (13:43 -0400)
committerKyle Lucy <kmlucy@gmail.com>
Mon, 12 Sep 2016 17:43:35 +0000 (13:43 -0400)
charts.d/Makefile.am
charts.d/apcupsd.chart.sh [new file with mode: 0755]
web/index.html

index e131d508f5232f790b550376e6659713503ca5b7..ec0e101f311ba6cf3734d9712dd959509e60f05d 100644 (file)
@@ -5,6 +5,7 @@ MAINTAINERCLEANFILES= $(srcdir)/Makefile.in
 
 dist_charts_SCRIPTS = \
        ap.chart.sh \
+       apcupsd.chart.sh \
        apache.chart.sh \
        cpu_apps.chart.sh \
        cpufreq.chart.sh \
diff --git a/charts.d/apcupsd.chart.sh b/charts.d/apcupsd.chart.sh
new file mode 100755 (executable)
index 0000000..df18aaa
--- /dev/null
@@ -0,0 +1,152 @@
+# no need for shebang - this file is loaded from charts.d.plugin
+
+apcupsd_ip=127.0.0.1
+apcupsd_port=3551
+
+# how frequently to collect UPS data
+apcupsd_update_every=10
+
+apcupsd_timeout=3
+
+# the priority of apcupsd related to other charts
+apcupsd_priority=90000
+
+apcupsd_get() {
+       timeout $apcupsd_timeout apcaccess status "$1:$2"
+}
+
+apcupsd_check() {
+
+       # this should return:
+       #  - 0 to enable the chart
+       #  - 1 to disable the chart
+
+       require_cmd apcaccess || return 1
+
+       apcupsd_get $apcupsd_ip $apcupsd_port >/dev/null
+       if [ $? -ne 0 ]
+               then
+               echo >&2 "apcupsd: ERROR: Cannot get information for apcupsd server."
+               return 1
+       elif [ $(apcupsd_get $apcupsd_ip $apcupsd_port | awk '/^STATUS.*/{ print $3 }') != "ONLINE" ]
+               then
+               echo >&2 "apcupsd: ERROR: UPS not online."
+               return 1
+       fi
+
+       return 0
+}
+
+apcupsd_create() {
+       # create the charts
+       cat <<EOF
+CHART apcupsd.charge '' "UPS Charge" "percentage" ups apcupsd.charge area $((apcupsd_priority + 1)) $apcupsd_update_every
+DIMENSION battery_charge charge absolute 1 100
+
+CHART apcupsd.battery_voltage '' "UPS Battery Voltage" "Volts" ups apcupsd.battery.voltage line $((apcupsd_priority + 3)) $apcupsd_update_every
+DIMENSION battery_voltage voltage absolute 1 100
+DIMENSION battery_voltage_nominal nominal absolute 1 100
+
+CHART apcupsd.input_voltage '' "UPS Input Voltage" "Volts" input apcupsd.input.voltage line $((apcupsd_priority + 4)) $apcupsd_update_every
+DIMENSION input_voltage voltage absolute 1 100
+DIMENSION input_voltage_min min absolute 1 100
+DIMENSION input_voltage_max max absolute 1 100
+
+CHART apcupsd.input_frequency '' "UPS Input Frequency" "Hz" input apcupsd.input.frequency line $((apcupsd_priority + 5)) $apcupsd_update_every
+DIMENSION input_frequency frequency absolute 1 100
+
+CHART apcupsd.output_voltage '' "UPS Output Voltage" "Volts" output apcupsd.output.voltage line $((apcupsd_priority + 6)) $apcupsd_update_every
+DIMENSION output_voltage voltage absolute 1 100
+DIMENSION output_voltage_nominal nominal absolute 1 100
+
+CHART apcupsd.load '' "UPS Load" "percentage" ups apcupsd.load area $((apcupsd_priority)) $apcupsd_update_every
+DIMENSION load load absolute 1 100
+
+CHART apcupsd.temp '' "UPS Temperature" "Celcius" ups apcupsd.temperature line $((apcupsd_priority + 7)) $apcupsd_update_every
+DIMENSION temp temp absolute 1 100
+
+CHART apcupsd.time '' "UPS Time Remaining" "Minutes" ups apcupsd.time area $((apcupsd_priority + 2)) $apcupsd_update_every
+DIMENSION time time absolute 1 100
+
+EOF
+       return 0
+}
+
+
+apcupsd_update() {
+       # the first argument to this function is the microseconds since last update
+       # pass this parameter to the BEGIN statement (see bellow).
+
+       # do all the work to collect / calculate the values
+       # for each dimension
+       # remember: KEEP IT SIMPLE AND SHORT
+
+       apcupsd_get $apcupsd_ip $apcupsd_port | awk "
+
+BEGIN {
+       battery_charge = 0;
+       battery_voltage = 0;
+       battery_voltage_nominal = 0;
+       input_voltage = 0;
+       input_voltage_min = 0;
+       input_voltage_max = 0;
+       input_frequency = 0;
+        output_voltage = 0;
+       output_voltage_nominal = 0;
+       load = 0;
+       temp = 0;
+       time = 0;
+}
+/^BCHARGE.*/           { battery_charge = \$3 * 100 };
+/^BATTV.*/             { battery_voltage = \$3 * 100 };
+/^NOMBATTV.*/          { battery_voltage_nominal = \$3 * 100 };
+/^LINEV.*/             { input_voltage = \$3 * 100 };
+/^MINLINEV.*/          { input_voltage_min = \$3 * 100 };
+/^MAXLINEV.*/          { input_voltage_max = \$3 * 100 };
+/^LINEFREQ.*/          { input_frequency = \$3 * 100 };
+/^OUTPUTV.*/           { output_voltage = \$3 * 100 };
+/^NOMOUTV.*/           { output_voltage_nominal = \$3 * 100 };
+/^LOADPCT.*/           { load = \$3 * 100 };
+/^ITEMP.*/             { temp = \$3 * 100 };
+/^TIMELEFT.*/          { time = \$3 * 100 };
+END {
+       print \"BEGIN apcupsd.charge $1\";
+       print \"SET battery_charge = \" battery_charge;
+       print \"END\"
+
+       print \"BEGIN apcupsd.battery_voltage $1\";
+       print \"SET battery_voltage = \" battery_voltage;
+       print \"SET battery_voltage_nominal = \" battery_voltage_nominal;
+       print \"END\"
+
+       print \"BEGIN apcupsd.input_voltage $1\";
+       print \"SET input_voltage = \" input_voltage;
+       print \"SET input_voltage_min = \" input_voltage_min;
+       print \"SET input_voltage_max = \" input_voltage_max;
+       print \"END\"
+
+       print \"BEGIN apcupsd.input_frequency $1\";
+       print \"SET input_frequency = \" input_frequency;
+       print \"END\"
+
+       print \"BEGIN apcupsd.output_voltage $1\";
+       print \"SET output_voltage = \" output_voltage;
+        print \"SET output_voltage_nominal = \" output_voltage_nominal;
+       print \"END\"
+
+       print \"BEGIN apcupsd.load $1\";
+       print \"SET load = \" load;
+       print \"END\"
+
+       print \"BEGIN apcupsd.temp $1\";
+       print \"SET temp = \" temp;
+       print \"END\"
+
+       print \"BEGIN apcupsd.time $1\";
+       print \"SET time = \" time;
+       print \"END\"
+}"
+       [ $? -ne 0 ] && echo >&2 "apcupsd: failed to get values" && return 1
+
+       return 0
+}
index 8b1b3a8c1af587c5eae09387f3e4e4a22bcfe29c..4d01825a5c84796375071d5564ba0f4bb4ec93f5 100644 (file)
@@ -1714,6 +1714,12 @@ var menuData = {
         info: undefined
     },
 
+    'apcupsd': {
+        title: 'UPS',
+        icon: '<i class="fa fa-battery-half" aria-hidden="true"></i>',
+        info: undefined
+    },
+
     'smawebbox': {
         title: 'Solar Power',
         icon: '<i class="fa fa-sun-o" aria-hidden="true"></i>',