master
go 224 lines 5.59 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package apcupsd
4
5 import (
6 "github.com/netdata/netdata/go/plugins/plugin/framework/collectorapi"
7 )
8
9 const (
10 prioUpsStatus = collectorapi.Priority + iota
11 prioUpsSelftest
12
13 prioUpsBatteryCharge
14 prioUpsBatteryTimeRemaining
15 prioUpsBatteryTimeSinceReplacement
16 prioUpsBatteryVoltage
17
18 prioUpsLoadCapacityUtilization
19 prioUpsLoad
20
21 prioUpsTemperature
22
23 prioUpsInputVoltage
24 prioUpsInputFrequency
25
26 prioUpsOutputVoltage
27 )
28
29 var charts = collectorapi.Charts{
30 statusChart.Copy(),
31 selftestChart.Copy(),
32
33 batteryChargeChart.Copy(),
34 batteryTimeRemainingChart.Copy(),
35 batteryTimeSinceReplacementChart.Copy(),
36 batteryVoltageChart.Copy(),
37
38 loadCapacityUtilizationChart.Copy(),
39 loadChart.Copy(),
40
41 internalTemperatureChart.Copy(),
42
43 inputVoltageChart.Copy(),
44 inputFrequencyChart.Copy(),
45
46 outputVoltageChart.Copy(),
47 }
48
49 // Status
50 var (
51 statusChart = func() collectorapi.Chart {
52 chart := collectorapi.Chart{
53 ID: "ups_status",
54 Title: "UPS Status",
55 Units: "status",
56 Fam: "status",
57 Ctx: "apcupsd.ups_status",
58 Priority: prioUpsStatus,
59 Type: collectorapi.Line,
60 }
61 for _, v := range upsStatuses {
62 chart.Dims = append(chart.Dims, &collectorapi.Dim{ID: "status_" + v, Name: v})
63 }
64 return chart
65 }()
66 selftestChart = func() collectorapi.Chart {
67 chart := collectorapi.Chart{
68 ID: "ups_selftest",
69 Title: "UPS Self-Test Status",
70 Units: "status",
71 Fam: "status",
72 Ctx: "apcupsd.ups_selftest",
73 Priority: prioUpsSelftest,
74 Type: collectorapi.Line,
75 }
76 for _, v := range upsSelftestStatuses {
77 chart.Dims = append(chart.Dims, &collectorapi.Dim{ID: "selftest_" + v, Name: v})
78 }
79 return chart
80 }()
81 )
82
83 // Battery
84 var (
85 batteryChargeChart = collectorapi.Chart{
86 ID: "ups_battery_charge",
87 Title: "UPS Battery Charge",
88 Units: "percent",
89 Fam: "battery",
90 Ctx: "apcupsd.ups_battery_charge",
91 Priority: prioUpsBatteryCharge,
92 Type: collectorapi.Area,
93 Dims: collectorapi.Dims{
94 {ID: "battery_charge", Name: "charge", Div: precision},
95 },
96 }
97 batteryTimeRemainingChart = collectorapi.Chart{
98 ID: "ups_battery_time_remaining",
99 Title: "UPS Estimated Runtime on Battery",
100 Units: "seconds",
101 Fam: "battery",
102 Ctx: "apcupsd.ups_battery_time_remaining",
103 Priority: prioUpsBatteryTimeRemaining,
104 Type: collectorapi.Line,
105 Dims: collectorapi.Dims{
106 {ID: "timeleft", Name: "timeleft", Div: precision},
107 },
108 }
109 batteryTimeSinceReplacementChart = collectorapi.Chart{
110 ID: "ups_battery_time_since_replacement",
111 Title: "UPS Time Since Battery Replacement",
112 Units: "seconds",
113 Fam: "battery",
114 Ctx: "apcupsd.ups_battery_time_since_replacement",
115 Priority: prioUpsBatteryTimeSinceReplacement,
116 Type: collectorapi.Line,
117 Dims: collectorapi.Dims{
118 {ID: "battery_seconds_since_replacement", Name: "since_replacement"},
119 },
120 }
121 batteryVoltageChart = collectorapi.Chart{
122 ID: "ups_battery_voltage",
123 Title: "UPS Battery Voltage",
124 Units: "Volts",
125 Fam: "battery",
126 Ctx: "apcupsd.ups_battery_voltage",
127 Priority: prioUpsBatteryVoltage,
128 Type: collectorapi.Line,
129 Dims: collectorapi.Dims{
130 {ID: "battery_voltage", Name: "voltage", Div: precision},
131 {ID: "battery_voltage_nominal", Name: "nominal_voltage", Div: precision},
132 },
133 }
134 )
135
136 // Load
137 var (
138 loadCapacityUtilizationChart = collectorapi.Chart{
139 ID: "ups_load_capacity_utilization",
140 Title: "UPS Load Capacity Utilization",
141 Units: "percent",
142 Fam: "load",
143 Ctx: "apcupsd.ups_load_capacity_utilization",
144 Priority: prioUpsLoadCapacityUtilization,
145 Type: collectorapi.Line,
146 Dims: collectorapi.Dims{
147 {ID: "load_percent", Name: "load", Div: precision},
148 },
149 }
150 loadChart = collectorapi.Chart{
151 ID: "ups_load",
152 Title: "UPS Load",
153 Units: "Watts",
154 Fam: "load",
155 Ctx: "apcupsd.ups_load",
156 Priority: prioUpsLoad,
157 Type: collectorapi.Line,
158 Dims: collectorapi.Dims{
159 {ID: "load", Name: "load", Div: precision},
160 },
161 }
162 )
163
164 // Temperature
165 var (
166 internalTemperatureChart = collectorapi.Chart{
167 ID: "ups_temperature",
168 Title: "UPS Internal Temperature",
169 Units: "Celsius",
170 Fam: "temperature",
171 Ctx: "apcupsd.ups_temperature",
172 Priority: prioUpsTemperature,
173 Type: collectorapi.Line,
174 Dims: collectorapi.Dims{
175 {ID: "itemp", Name: "temperature", Div: precision},
176 },
177 }
178 )
179
180 // Input
181 var (
182 inputVoltageChart = collectorapi.Chart{
183 ID: "ups_input_voltage",
184 Title: "UPS Input Voltage",
185 Units: "Volts",
186 Fam: "input",
187 Ctx: "apcupsd.ups_input_voltage",
188 Priority: prioUpsInputVoltage,
189 Type: collectorapi.Line,
190 Dims: collectorapi.Dims{
191 {ID: "input_voltage", Name: "voltage", Div: precision},
192 {ID: "input_voltage_min", Name: "min_voltage", Div: precision},
193 {ID: "input_voltage_max", Name: "max_voltage", Div: precision},
194 },
195 }
196 inputFrequencyChart = collectorapi.Chart{
197 ID: "ups_input_frequency",
198 Title: "UPS Input Frequency",
199 Units: "Hz",
200 Fam: "input",
201 Ctx: "apcupsd.ups_input_frequency",
202 Priority: prioUpsInputFrequency,
203 Type: collectorapi.Line,
204 Dims: collectorapi.Dims{
205 {ID: "input_frequency", Name: "frequency", Div: precision},
206 },
207 }
208 )
209
210 // Output
211 var (
212 outputVoltageChart = collectorapi.Chart{
213 ID: "ups_output_voltage",
214 Title: "UPS Output Voltage",
215 Units: "Volts",
216 Fam: "output",
217 Ctx: "apcupsd.ups_output_voltage",
218 Priority: prioUpsOutputVoltage,
219 Type: collectorapi.Line,
220 Dims: collectorapi.Dims{
221 {ID: "output_voltage", Name: "voltage", Div: precision},
222 },
223 }
224 )