master
go 49 lines 1.03 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package powerstore
4
5 import "sync"
6
7 func (c *Collector) collectReplication() {
8 var wg sync.WaitGroup
9 var mu sync.Mutex
10
11 var dataRemaining, dataTransferred int64
12 var transferRate float64
13
14 for id := range c.discovered.appliances {
15 wg.Add(1)
16 go func(id string) {
17 defer wg.Done()
18 c.sem <- struct{}{}
19 defer func() { <-c.sem }()
20
21 cm, err := c.client.CopyMetricsByAppliance(id)
22 if err != nil {
23 c.Warningf("error collecting appliance %s copy metrics: %v", id, err)
24 return
25 }
26 if len(cm) == 0 {
27 return
28 }
29
30 last := cm[len(cm)-1]
31
32 mu.Lock()
33 if last.DataRemaining != nil {
34 dataRemaining += *last.DataRemaining
35 }
36 if last.DataTransferred != nil {
37 dataTransferred += *last.DataTransferred
38 }
39 transferRate += last.TransferRate
40 mu.Unlock()
41 }(id)
42 }
43
44 wg.Wait()
45
46 c.mx.replication.dataRemaining.Observe(float64(dataRemaining))
47 c.mx.replication.dataTransferred.Observe(float64(dataTransferred))
48 c.mx.replication.transferRate.Observe(transferRate)
49 }