]> arthur.barton.de Git - netdata.git/blobdiff - charts.d/apcupsd.chart.sh
Merge pull request #939 from kmlucy/master
[netdata.git] / charts.d / apcupsd.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
+}