master
go 37 lines 1.2 KB
Raw
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 }