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  }