go.d megacli: return error if no adapters found (parsing failed) (#18090)
Ilya Mashchenko committed
Jul 9, 2024 at 00:07 UTC
cd3797c2625b293ee12f9bb8c35b4e7ba978d571
5 files changed
+177
-169
src/go/plugin/go.d/modules/chrony/charts.go
+103
-105
@@ -3,8 +3,6 @@
3
package chrony
4
5
import (
6
- "errors"
7
-
6
"github.com/netdata/netdata/go/plugins/plugin/go.d/agent/module"
7
)
8
@@ -22,10 +20,10 @@ const (
20
prioRefMeasurementTime
21
prioLeapStatus
22
prioActivity
25
- prioNTPPackets
26
- prioCommandPackets
27
- prioNKEConnections
28
- prioClientLogRecords
23
+ //prioNTPPackets
24
+ //prioCommandPackets
25
+ //prioNKEConnections
26
+ //prioClientLogRecords
27
)
28
29
var charts = module.Charts{
@@ -218,105 +216,105 @@ var (
216
}
217
)
218
221
-var serverStatsVer1Charts = module.Charts{
222
- ntpPacketsChart.Copy(),
223
- commandPacketsChart.Copy(),
224
- clientLogRecordsChart.Copy(),
225
-}
226
-
227
-var serverStatsVer2Charts = module.Charts{
228
- ntpPacketsChart.Copy(),
229
- commandPacketsChart.Copy(),
230
- clientLogRecordsChart.Copy(),
231
- nkeConnectionChart.Copy(),
232
-}
233
-
234
-var serverStatsVer3Charts = module.Charts{
235
- ntpPacketsChart.Copy(),
236
- commandPacketsChart.Copy(),
237
- clientLogRecordsChart.Copy(),
238
- nkeConnectionChart.Copy(),
239
-}
240
-
241
-var serverStatsVer4Charts = module.Charts{
242
- ntpPacketsChart.Copy(),
243
- commandPacketsChart.Copy(),
244
- clientLogRecordsChart.Copy(),
245
- nkeConnectionChart.Copy(),
246
-}
219
+//var serverStatsVer1Charts = module.Charts{
220
+// ntpPacketsChart.Copy(),
221
+// commandPacketsChart.Copy(),
222
+// clientLogRecordsChart.Copy(),
223
+//}
224
+//
225
+//var serverStatsVer2Charts = module.Charts{
226
+// ntpPacketsChart.Copy(),
227
+// commandPacketsChart.Copy(),
228
+// clientLogRecordsChart.Copy(),
229
+// nkeConnectionChart.Copy(),
230
+//}
231
+//
232
+//var serverStatsVer3Charts = module.Charts{
233
+// ntpPacketsChart.Copy(),
234
+// commandPacketsChart.Copy(),
235
+// clientLogRecordsChart.Copy(),
236
+// nkeConnectionChart.Copy(),
237
+//}
238
+//
239
+//var serverStatsVer4Charts = module.Charts{
240
+// ntpPacketsChart.Copy(),
241
+// commandPacketsChart.Copy(),
242
+// clientLogRecordsChart.Copy(),
243
+// nkeConnectionChart.Copy(),
244
+//}
245
246
// ServerStats charts
249
-var (
250
- ntpPacketsChart = module.Chart{
251
- ID: "ntp_packets",
252
- Title: "NTP packets",
253
- Units: "packets/s",
254
- Fam: "client requests",
255
- Ctx: "chrony.ntp_packets",
256
- Type: module.Stacked,
257
- Priority: prioNTPPackets,
258
- Dims: module.Dims{
259
- {ID: "ntp_packets_received", Name: "received", Algo: module.Incremental},
260
- {ID: "ntp_packets_dropped", Name: "dropped", Algo: module.Incremental},
261
- },
262
- }
263
- commandPacketsChart = module.Chart{
264
- ID: "command_packets",
265
- Title: "Command packets",
266
- Units: "packets/s",
267
- Fam: "client requests",
268
- Ctx: "chrony.command_packets",
269
- Type: module.Stacked,
270
- Priority: prioCommandPackets,
271
- Dims: module.Dims{
272
- {ID: "command_packets_received", Name: "received", Algo: module.Incremental},
273
- {ID: "command_packets_dropped", Name: "dropped", Algo: module.Incremental},
274
- },
275
- }
276
- nkeConnectionChart = module.Chart{
277
- ID: "nke_connections",
278
- Title: "NTS-KE connections",
279
- Units: "connections/s",
280
- Fam: "client requests",
281
- Ctx: "chrony.nke_connections",
282
- Type: module.Stacked,
283
- Priority: prioNKEConnections,
284
- Dims: module.Dims{
285
- {ID: "nke_connections_accepted", Name: "accepted", Algo: module.Incremental},
286
- {ID: "nke_connections_dropped", Name: "dropped", Algo: module.Incremental},
287
- },
288
- }
289
- clientLogRecordsChart = module.Chart{
290
- ID: "client_log_records",
291
- Title: "Client log records",
292
- Units: "records/s",
293
- Fam: "client requests",
294
- Ctx: "chrony.client_log_records",
295
- Type: module.Stacked,
296
- Priority: prioClientLogRecords,
297
- Dims: module.Dims{
298
- {ID: "client_log_records_dropped", Name: "dropped", Algo: module.Incremental},
299
- },
300
- }
301
-)
247
+//var (
248
+// ntpPacketsChart = module.Chart{
249
+// ID: "ntp_packets",
250
+// Title: "NTP packets",
251
+// Units: "packets/s",
252
+// Fam: "client requests",
253
+// Ctx: "chrony.ntp_packets",
254
+// Type: module.Stacked,
255
+// Priority: prioNTPPackets,
256
+// Dims: module.Dims{
257
+// {ID: "ntp_packets_received", Name: "received", Algo: module.Incremental},
258
+// {ID: "ntp_packets_dropped", Name: "dropped", Algo: module.Incremental},
259
+// },
260
+// }
261
+// commandPacketsChart = module.Chart{
262
+// ID: "command_packets",
263
+// Title: "Command packets",
264
+// Units: "packets/s",
265
+// Fam: "client requests",
266
+// Ctx: "chrony.command_packets",
267
+// Type: module.Stacked,
268
+// Priority: prioCommandPackets,
269
+// Dims: module.Dims{
270
+// {ID: "command_packets_received", Name: "received", Algo: module.Incremental},
271
+// {ID: "command_packets_dropped", Name: "dropped", Algo: module.Incremental},
272
+// },
273
+// }
274
+// nkeConnectionChart = module.Chart{
275
+// ID: "nke_connections",
276
+// Title: "NTS-KE connections",
277
+// Units: "connections/s",
278
+// Fam: "client requests",
279
+// Ctx: "chrony.nke_connections",
280
+// Type: module.Stacked,
281
+// Priority: prioNKEConnections,
282
+// Dims: module.Dims{
283
+// {ID: "nke_connections_accepted", Name: "accepted", Algo: module.Incremental},
284
+// {ID: "nke_connections_dropped", Name: "dropped", Algo: module.Incremental},
285
+// },
286
+// }
287
+// clientLogRecordsChart = module.Chart{
288
+// ID: "client_log_records",
289
+// Title: "Client log records",
290
+// Units: "records/s",
291
+// Fam: "client requests",
292
+// Ctx: "chrony.client_log_records",
293
+// Type: module.Stacked,
294
+// Priority: prioClientLogRecords,
295
+// Dims: module.Dims{
296
+// {ID: "client_log_records_dropped", Name: "dropped", Algo: module.Incremental},
297
+// },
298
+// }
299
+//)
300
303
-func (c *Chrony) addServerStatsCharts(stats *serverStats) {
304
- var err error
305
-
306
- switch {
307
- case stats.v1 != nil:
308
- err = c.Charts().Add(*serverStatsVer1Charts.Copy()...)
309
- case stats.v2 != nil:
310
- err = c.Charts().Add(*serverStatsVer2Charts.Copy()...)
311
- case stats.v3 != nil:
312
- err = c.Charts().Add(*serverStatsVer3Charts.Copy()...)
313
- case stats.v4 != nil:
314
- err = c.Charts().Add(*serverStatsVer4Charts.Copy()...)
315
- default:
316
- err = errors.New("unknown stats chart")
317
- }
318
-
319
- if err != nil {
320
- c.Warning(err)
321
- }
322
-}
301
+//func (c *Chrony) addServerStatsCharts(stats *serverStats) {
302
+// var err error
303
+//
304
+// switch {
305
+// case stats.v1 != nil:
306
+// err = c.Charts().Add(*serverStatsVer1Charts.Copy()...)
307
+// case stats.v2 != nil:
308
+// err = c.Charts().Add(*serverStatsVer2Charts.Copy()...)
309
+// case stats.v3 != nil:
310
+// err = c.Charts().Add(*serverStatsVer3Charts.Copy()...)
311
+// case stats.v4 != nil:
312
+// err = c.Charts().Add(*serverStatsVer4Charts.Copy()...)
313
+// default:
314
+// err = errors.New("unknown stats chart")
315
+// }
316
+//
317
+// if err != nil {
318
+// c.Warning(err)
319
+// }
320
+//}
src/go/plugin/go.d/modules/chrony/collect.go
+58
-60
@@ -3,9 +3,7 @@
3
package chrony
4
5
import (
6
- "errors"
6
"fmt"
8
- "strings"
7
"time"
8
)
9
@@ -28,14 +26,14 @@ func (c *Chrony) collect() (map[string]int64, error) {
26
if err := c.collectActivity(mx); err != nil {
27
return mx, err
28
}
31
- if strings.HasPrefix(c.Address, "/") {
32
- // TODO: Allowed only through the Unix domain socket (requires "_chrony" group membership).
33
- // See https://github.com/facebook/time/blob/18207c5d8ddc7242e8d4192985898b6dbe66932c/cmd/ntpcheck/checker/chrony.go#L38
34
- // ^^ For some reason doesn't work, Chrony doesn't respond. Additional configuration needed?
35
- //if err := c.collectServerStats(mx); err != nil {
36
- // return mx, err
37
- //}
38
- }
29
+ //if strings.HasPrefix(c.Address, "/") {
30
+ // TODO: Allowed only through the Unix domain socket (requires "_chrony" group membership).
31
+ // See https://github.com/facebook/time/blob/18207c5d8ddc7242e8d4192985898b6dbe66932c/cmd/ntpcheck/checker/chrony.go#L38
32
+ // ^^ For some reason doesn't work, Chrony doesn't respond. Additional configuration needed?
33
+ //if err := c.collectServerStats(mx); err != nil {
34
+ // return mx, err
35
+ //}
36
+ //}
37
38
return mx, nil
39
}
@@ -92,56 +90,56 @@ func (c *Chrony) collectActivity(mx map[string]int64) error {
90
return nil
91
}
92
95
-func (c *Chrony) collectServerStats(mx map[string]int64) error {
96
- stats, err := c.client.ServerStats()
97
- if err != nil {
98
- return fmt.Errorf("error on collecting server stats: %v", err)
99
- }
100
-
101
- switch {
102
- case stats.v4 != nil:
103
- mx["ntp_packets_received"] = int64(stats.v4.NTPHits)
104
- mx["ntp_packets_dropped"] = int64(stats.v4.NTPDrops)
105
- mx["command_packets_received"] = int64(stats.v4.CMDHits)
106
- mx["command_packets_dropped"] = int64(stats.v4.CMDDrops)
107
- mx["client_log_records_dropped"] = int64(stats.v4.LogDrops)
108
- mx["nke_connections_accepted"] = int64(stats.v4.NKEHits)
109
- mx["nke_connections_dropped"] = int64(stats.v4.NKEDrops)
110
- mx["authenticated_ntp_packets"] = int64(stats.v4.NTPAuthHits)
111
- mx["interleaved_ntp_packets"] = int64(stats.v4.NTPInterleavedHits)
112
- case stats.v3 != nil:
113
- mx["ntp_packets_received"] = int64(stats.v3.NTPHits)
114
- mx["ntp_packets_dropped"] = int64(stats.v3.NTPDrops)
115
- mx["command_packets_received"] = int64(stats.v3.CMDHits)
116
- mx["command_packets_dropped"] = int64(stats.v3.CMDDrops)
117
- mx["client_log_records_dropped"] = int64(stats.v3.LogDrops)
118
- mx["nke_connections_accepted"] = int64(stats.v3.NKEHits)
119
- mx["nke_connections_dropped"] = int64(stats.v3.NKEDrops)
120
- mx["authenticated_ntp_packets"] = int64(stats.v3.NTPAuthHits)
121
- mx["interleaved_ntp_packets"] = int64(stats.v3.NTPInterleavedHits)
122
- case stats.v2 != nil:
123
- mx["ntp_packets_received"] = int64(stats.v2.NTPHits)
124
- mx["ntp_packets_dropped"] = int64(stats.v2.NTPDrops)
125
- mx["command_packets_received"] = int64(stats.v2.CMDHits)
126
- mx["command_packets_dropped"] = int64(stats.v2.CMDDrops)
127
- mx["client_log_records_dropped"] = int64(stats.v2.LogDrops)
128
- mx["nke_connections_accepted"] = int64(stats.v2.NKEHits)
129
- mx["nke_connections_dropped"] = int64(stats.v2.NKEDrops)
130
- mx["authenticated_ntp_packets"] = int64(stats.v2.NTPAuthHits)
131
- case stats.v1 != nil:
132
- mx["ntp_packets_received"] = int64(stats.v1.NTPHits)
133
- mx["ntp_packets_dropped"] = int64(stats.v1.NTPDrops)
134
- mx["command_packets_received"] = int64(stats.v1.CMDHits)
135
- mx["command_packets_dropped"] = int64(stats.v1.CMDDrops)
136
- mx["client_log_records_dropped"] = int64(stats.v1.LogDrops)
137
- default:
138
- return errors.New("invalid server stats reply")
139
- }
140
-
141
- c.addStatsChartsOnce.Do(func() { c.addServerStatsCharts(stats) })
142
-
143
- return nil
144
-}
93
+//func (c *Chrony) collectServerStats(mx map[string]int64) error {
94
+// stats, err := c.client.ServerStats()
95
+// if err != nil {
96
+// return fmt.Errorf("error on collecting server stats: %v", err)
97
+// }
98
+//
99
+// switch {
100
+// case stats.v4 != nil:
101
+// mx["ntp_packets_received"] = int64(stats.v4.NTPHits)
102
+// mx["ntp_packets_dropped"] = int64(stats.v4.NTPDrops)
103
+// mx["command_packets_received"] = int64(stats.v4.CMDHits)
104
+// mx["command_packets_dropped"] = int64(stats.v4.CMDDrops)
105
+// mx["client_log_records_dropped"] = int64(stats.v4.LogDrops)
106
+// mx["nke_connections_accepted"] = int64(stats.v4.NKEHits)
107
+// mx["nke_connections_dropped"] = int64(stats.v4.NKEDrops)
108
+// mx["authenticated_ntp_packets"] = int64(stats.v4.NTPAuthHits)
109
+// mx["interleaved_ntp_packets"] = int64(stats.v4.NTPInterleavedHits)
110
+// case stats.v3 != nil:
111
+// mx["ntp_packets_received"] = int64(stats.v3.NTPHits)
112
+// mx["ntp_packets_dropped"] = int64(stats.v3.NTPDrops)
113
+// mx["command_packets_received"] = int64(stats.v3.CMDHits)
114
+// mx["command_packets_dropped"] = int64(stats.v3.CMDDrops)
115
+// mx["client_log_records_dropped"] = int64(stats.v3.LogDrops)
116
+// mx["nke_connections_accepted"] = int64(stats.v3.NKEHits)
117
+// mx["nke_connections_dropped"] = int64(stats.v3.NKEDrops)
118
+// mx["authenticated_ntp_packets"] = int64(stats.v3.NTPAuthHits)
119
+// mx["interleaved_ntp_packets"] = int64(stats.v3.NTPInterleavedHits)
120
+// case stats.v2 != nil:
121
+// mx["ntp_packets_received"] = int64(stats.v2.NTPHits)
122
+// mx["ntp_packets_dropped"] = int64(stats.v2.NTPDrops)
123
+// mx["command_packets_received"] = int64(stats.v2.CMDHits)
124
+// mx["command_packets_dropped"] = int64(stats.v2.CMDDrops)
125
+// mx["client_log_records_dropped"] = int64(stats.v2.LogDrops)
126
+// mx["nke_connections_accepted"] = int64(stats.v2.NKEHits)
127
+// mx["nke_connections_dropped"] = int64(stats.v2.NKEDrops)
128
+// mx["authenticated_ntp_packets"] = int64(stats.v2.NTPAuthHits)
129
+// case stats.v1 != nil:
130
+// mx["ntp_packets_received"] = int64(stats.v1.NTPHits)
131
+// mx["ntp_packets_dropped"] = int64(stats.v1.NTPDrops)
132
+// mx["command_packets_received"] = int64(stats.v1.CMDHits)
133
+// mx["command_packets_dropped"] = int64(stats.v1.CMDDrops)
134
+// mx["client_log_records_dropped"] = int64(stats.v1.LogDrops)
135
+// default:
136
+// return errors.New("invalid server stats reply")
137
+// }
138
+//
139
+// //c.addStatsChartsOnce.Do(func() { c.addServerStatsCharts(stats) })
140
+//
141
+// return nil
142
+//}
143
144
func boolToInt(v bool) int64 {
145
if v {
src/go/plugin/go.d/modules/megacli/collect_bbu.go
+7
@@ -29,6 +29,11 @@ func (m *MegaCli) collectBBU(mx map[string]int64) error {
29
return err
30
}
31
32
+ if len(bbus) == 0 {
33
+ m.Debugf("no BBUs found")
34
+ return nil
35
+ }
36
+
37
for _, bbu := range bbus {
38
if !m.bbu[bbu.adapterNumber] {
39
m.bbu[bbu.adapterNumber] = true
@@ -43,6 +48,8 @@ func (m *MegaCli) collectBBU(mx map[string]int64) error {
48
writeInt(mx, px+"cycle_count", bbu.cycleCount)
49
}
50
51
+ m.Debugf("found %d BBUs", len(m.bbu))
52
+
53
return nil
54
}
55
src/go/plugin/go.d/modules/megacli/collect_phys_drives.go
+9
@@ -5,6 +5,7 @@ package megacli
5
import (
6
"bufio"
7
"bytes"
8
+ "errors"
9
"fmt"
10
"strings"
11
)
@@ -45,6 +46,11 @@ func (m *MegaCli) collectPhysDrives(mx map[string]int64) error {
46
if err != nil {
47
return err
48
}
49
+ if len(adapters) == 0 {
50
+ return errors.New("no adapters found")
51
+ }
52
+
53
+ var drives int
54
55
for _, ad := range adapters {
56
if !m.adapters[ad.number] {
@@ -64,6 +70,7 @@ func (m *MegaCli) collectPhysDrives(mx map[string]int64) error {
70
m.adapters[pd.wwn] = true
71
m.addPhysDriveCharts(pd)
72
}
73
+ drives++
74
75
px := fmt.Sprintf("phys_drive_%s_", pd.wwn)
76
@@ -72,6 +79,8 @@ func (m *MegaCli) collectPhysDrives(mx map[string]int64) error {
79
}
80
}
81
82
+ m.Debugf("found %d adapters, %d physical drives", len(m.adapters), drives)
83
+
84
return nil
85
}
86
src/go/plugin/go.d/modules/smartctl/smart_device.go
-4
@@ -27,10 +27,6 @@ func (d *smartDevice) deviceType() string {
27
return d.data.Get("device.type").String()
28
}
29
30
-func (d *smartDevice) deviceProtocol() string {
31
- return d.data.Get("device.protocol").String()
32
-}
33
-
30
func (d *smartDevice) serialNumber() string {
31
return d.data.Get("serial_number").String()
32
}