| 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 | ) |