| 1 | // SPDX-License-Identifier: GPL-3.0-or-later |
| 2 | |
| 3 | package powerstore |
| 4 | |
| 5 | import "sync" |
| 6 | |
| 7 | func (c *Collector) collectNodes() { |
| 8 | var wg sync.WaitGroup |
| 9 | |
| 10 | for id, node := range c.discovered.nodes { |
| 11 | wg.Add(1) |
| 12 | go func(id, name string) { |
| 13 | defer wg.Done() |
| 14 | c.sem <- struct{}{} |
| 15 | defer func() { <-c.sem }() |
| 16 | |
| 17 | pm, err := c.client.PerformanceMetricsByNode(id) |
| 18 | if err != nil { |
| 19 | c.Warningf("error collecting node %s perf metrics: %v", id, err) |
| 20 | } else if len(pm) > 0 { |
| 21 | last := pm[len(pm)-1] |
| 22 | c.mx.node.perf.readIops.WithLabelValues(name).Observe(last.ReadIops) |
| 23 | c.mx.node.perf.writeIops.WithLabelValues(name).Observe(last.WriteIops) |
| 24 | c.mx.node.perf.readBandwidth.WithLabelValues(name).Observe(last.ReadBandwidth) |
| 25 | c.mx.node.perf.writeBandwidth.WithLabelValues(name).Observe(last.WriteBandwidth) |
| 26 | c.mx.node.perf.avgReadLatency.WithLabelValues(name).Observe(last.AvgReadLatency) |
| 27 | c.mx.node.perf.avgWriteLatency.WithLabelValues(name).Observe(last.AvgWriteLatency) |
| 28 | c.mx.node.perf.avgLatency.WithLabelValues(name).Observe(last.AvgLatency) |
| 29 | if last.CurrentLogins != nil { |
| 30 | c.mx.node.currentLogins.WithLabelValues(name).Observe(float64(*last.CurrentLogins)) |
| 31 | } |
| 32 | } |
| 33 | }(id, node.Name) |
| 34 | } |
| 35 | |
| 36 | wg.Wait() |
| 37 | } |