master
go 58 lines 1.37 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package scaleio
4
5 import (
6 "time"
7
8 "github.com/netdata/netdata/go/plugins/pkg/stm"
9 "github.com/netdata/netdata/go/plugins/plugin/go.d/collector/scaleio/client"
10 )
11
12 const discoveryEvery = 5
13
14 func (c *Collector) collect() (map[string]int64, error) {
15 c.runs += 1
16 if !c.lastDiscoveryOK || c.runs%discoveryEvery == 0 {
17 if err := c.discovery(); err != nil {
18 return nil, err
19 }
20 }
21
22 stats, err := c.client.SelectedStatistics(query)
23 if err != nil {
24 return nil, err
25 }
26
27 mx := metrics{
28 System: c.collectSystem(stats.System),
29 StoragePool: c.collectStoragePool(stats.StoragePool),
30 Sdc: c.collectSdc(stats.Sdc),
31 }
32
33 c.updateCharts()
34 return stm.ToMap(mx), nil
35 }
36
37 func (c *Collector) discovery() error {
38 start := time.Now()
39 c.Debugf("starting discovery")
40 ins, err := c.client.Instances()
41 if err != nil {
42 c.lastDiscoveryOK = false
43 return err
44 }
45 c.Debugf("discovering: discovered %d storage pools, %d sdcs, it took %s",
46 len(ins.StoragePoolList), len(ins.SdcList), time.Since(start))
47
48 c.discovered.pool = make(map[string]client.StoragePool, len(ins.StoragePoolList))
49 for _, pool := range ins.StoragePoolList {
50 c.discovered.pool[pool.ID] = pool
51 }
52 c.discovered.sdc = make(map[string]client.Sdc, len(ins.SdcList))
53 for _, sdc := range ins.SdcList {
54 c.discovered.sdc[sdc.ID] = sdc
55 }
56 c.lastDiscoveryOK = true
57 return nil
58 }