@cryptotaxi247 / netdata-1 / commits / c0bbc42b0

create apcupsd plugin

Kyle Lucy committed Sep 12, 2016 at 13:43 UTC c0bbc42b0260f6f8103b52227fa302ca46396373
3 files changed +159
charts.d/Makefile.am
+1
@@ -5,6 +5,7 @@ MAINTAINERCLEANFILES= $(srcdir)/Makefile.in
5
6 dist_charts_SCRIPTS = \
7 ap.chart.sh \
8 + apcupsd.chart.sh \
9 apache.chart.sh \
10 cpu_apps.chart.sh \
11 cpufreq.chart.sh \
charts.d/apcupsd.chart.sh new
+152
@@ -0,0 +1,152 @@
1 +# no need for shebang - this file is loaded from charts.d.plugin
2 +
3 +apcupsd_ip=127.0.0.1
4 +apcupsd_port=3551
5 +
6 +# how frequently to collect UPS data
7 +apcupsd_update_every=10
8 +
9 +apcupsd_timeout=3
10 +
11 +# the priority of apcupsd related to other charts
12 +apcupsd_priority=90000
13 +
14 +apcupsd_get() {
15 + timeout $apcupsd_timeout apcaccess status "$1:$2"
16 +}
17 +
18 +apcupsd_check() {
19 +
20 + # this should return:
21 + # - 0 to enable the chart
22 + # - 1 to disable the chart
23 +
24 + require_cmd apcaccess || return 1
25 +
26 + apcupsd_get $apcupsd_ip $apcupsd_port >/dev/null
27 + if [ $? -ne 0 ]
28 + then
29 + echo >&2 "apcupsd: ERROR: Cannot get information for apcupsd server."
30 + return 1
31 + elif [ $(apcupsd_get $apcupsd_ip $apcupsd_port | awk '/^STATUS.*/{ print $3 }') != "ONLINE" ]
32 + then
33 + echo >&2 "apcupsd: ERROR: UPS not online."
34 + return 1
35 + fi
36 +
37 + return 0
38 +}
39 +
40 +apcupsd_create() {
41 + # create the charts
42 + cat <<EOF
43 +CHART apcupsd.charge '' "UPS Charge" "percentage" ups apcupsd.charge area $((apcupsd_priority + 1)) $apcupsd_update_every
44 +DIMENSION battery_charge charge absolute 1 100
45 +
46 +CHART apcupsd.battery_voltage '' "UPS Battery Voltage" "Volts" ups apcupsd.battery.voltage line $((apcupsd_priority + 3)) $apcupsd_update_every
47 +DIMENSION battery_voltage voltage absolute 1 100
48 +DIMENSION battery_voltage_nominal nominal absolute 1 100
49 +
50 +CHART apcupsd.input_voltage '' "UPS Input Voltage" "Volts" input apcupsd.input.voltage line $((apcupsd_priority + 4)) $apcupsd_update_every
51 +DIMENSION input_voltage voltage absolute 1 100
52 +DIMENSION input_voltage_min min absolute 1 100
53 +DIMENSION input_voltage_max max absolute 1 100
54 +
55 +CHART apcupsd.input_frequency '' "UPS Input Frequency" "Hz" input apcupsd.input.frequency line $((apcupsd_priority + 5)) $apcupsd_update_every
56 +DIMENSION input_frequency frequency absolute 1 100
57 +
58 +CHART apcupsd.output_voltage '' "UPS Output Voltage" "Volts" output apcupsd.output.voltage line $((apcupsd_priority + 6)) $apcupsd_update_every
59 +DIMENSION output_voltage voltage absolute 1 100
60 +DIMENSION output_voltage_nominal nominal absolute 1 100
61 +
62 +CHART apcupsd.load '' "UPS Load" "percentage" ups apcupsd.load area $((apcupsd_priority)) $apcupsd_update_every
63 +DIMENSION load load absolute 1 100
64 +
65 +CHART apcupsd.temp '' "UPS Temperature" "Celcius" ups apcupsd.temperature line $((apcupsd_priority + 7)) $apcupsd_update_every
66 +DIMENSION temp temp absolute 1 100
67 +
68 +CHART apcupsd.time '' "UPS Time Remaining" "Minutes" ups apcupsd.time area $((apcupsd_priority + 2)) $apcupsd_update_every
69 +DIMENSION time time absolute 1 100
70 +
71 +EOF
72 + return 0
73 +}
74 +
75 +
76 +apcupsd_update() {
77 + # the first argument to this function is the microseconds since last update
78 + # pass this parameter to the BEGIN statement (see bellow).
79 +
80 + # do all the work to collect / calculate the values
81 + # for each dimension
82 + # remember: KEEP IT SIMPLE AND SHORT
83 +
84 + apcupsd_get $apcupsd_ip $apcupsd_port | awk "
85 +
86 +BEGIN {
87 + battery_charge = 0;
88 + battery_voltage = 0;
89 + battery_voltage_nominal = 0;
90 + input_voltage = 0;
91 + input_voltage_min = 0;
92 + input_voltage_max = 0;
93 + input_frequency = 0;
94 + output_voltage = 0;
95 + output_voltage_nominal = 0;
96 + load = 0;
97 + temp = 0;
98 + time = 0;
99 +}
100 +/^BCHARGE.*/ { battery_charge = \$3 * 100 };
101 +/^BATTV.*/ { battery_voltage = \$3 * 100 };
102 +/^NOMBATTV.*/ { battery_voltage_nominal = \$3 * 100 };
103 +/^LINEV.*/ { input_voltage = \$3 * 100 };
104 +/^MINLINEV.*/ { input_voltage_min = \$3 * 100 };
105 +/^MAXLINEV.*/ { input_voltage_max = \$3 * 100 };
106 +/^LINEFREQ.*/ { input_frequency = \$3 * 100 };
107 +/^OUTPUTV.*/ { output_voltage = \$3 * 100 };
108 +/^NOMOUTV.*/ { output_voltage_nominal = \$3 * 100 };
109 +/^LOADPCT.*/ { load = \$3 * 100 };
110 +/^ITEMP.*/ { temp = \$3 * 100 };
111 +/^TIMELEFT.*/ { time = \$3 * 100 };
112 +END {
113 + print \"BEGIN apcupsd.charge $1\";
114 + print \"SET battery_charge = \" battery_charge;
115 + print \"END\"
116 +
117 + print \"BEGIN apcupsd.battery_voltage $1\";
118 + print \"SET battery_voltage = \" battery_voltage;
119 + print \"SET battery_voltage_nominal = \" battery_voltage_nominal;
120 + print \"END\"
121 +
122 + print \"BEGIN apcupsd.input_voltage $1\";
123 + print \"SET input_voltage = \" input_voltage;
124 + print \"SET input_voltage_min = \" input_voltage_min;
125 + print \"SET input_voltage_max = \" input_voltage_max;
126 + print \"END\"
127 +
128 + print \"BEGIN apcupsd.input_frequency $1\";
129 + print \"SET input_frequency = \" input_frequency;
130 + print \"END\"
131 +
132 + print \"BEGIN apcupsd.output_voltage $1\";
133 + print \"SET output_voltage = \" output_voltage;
134 + print \"SET output_voltage_nominal = \" output_voltage_nominal;
135 + print \"END\"
136 +
137 + print \"BEGIN apcupsd.load $1\";
138 + print \"SET load = \" load;
139 + print \"END\"
140 +
141 + print \"BEGIN apcupsd.temp $1\";
142 + print \"SET temp = \" temp;
143 + print \"END\"
144 +
145 + print \"BEGIN apcupsd.time $1\";
146 + print \"SET time = \" time;
147 + print \"END\"
148 +}"
149 + [ $? -ne 0 ] && echo >&2 "apcupsd: failed to get values" && return 1
150 +
151 + return 0
152 +}
web/index.html
+6
@@ -1714,6 +1714,12 @@ var menuData = {
1714 info: undefined
1715 },
1716
1717 + 'apcupsd': {
1718 + title: 'UPS',
1719 + icon: '<i class="fa fa-battery-half" aria-hidden="true"></i>',
1720 + info: undefined
1721 + },
1722 +
1723 'smawebbox': {
1724 title: 'Solar Power',
1725 icon: '<i class="fa fa-sun-o" aria-hidden="true"></i>',