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