github.com/netdata/go.d.plugin@v0.58.1/agent/discovery/dyncfg/ext.go (about)

     1  package dyncfg
     2  
     3  import (
     4  	"errors"
     5  	"os"
     6  	"strings"
     7  
     8  	"github.com/netdata/go.d.plugin/agent/confgroup"
     9  
    10  	"gopkg.in/yaml.v2"
    11  )
    12  
    13  func (d *Discovery) Register(cfg confgroup.Config) {
    14  	name := cfgJobName(cfg)
    15  	if cfg.Provider() != dynCfg {
    16  		// jobType handling in ND is not documented
    17  		_ = d.API.DynCfgRegisterJob(cfg.Module(), name, "stock")
    18  	}
    19  
    20  	key := cfg.Module() + "_" + name
    21  	d.addConfig(key, cfg)
    22  }
    23  
    24  func (d *Discovery) Unregister(cfg confgroup.Config) {
    25  	key := cfg.Module() + "_" + cfgJobName(cfg)
    26  	d.removeConfig(key)
    27  }
    28  
    29  func (d *Discovery) UpdateStatus(cfg confgroup.Config, status, payload string) {
    30  	_ = d.API.DynCfgReportJobStatus(cfg.Module(), cfgJobName(cfg), status, payload)
    31  }
    32  
    33  func (d *Discovery) addConfig(name string, cfg confgroup.Config) {
    34  	d.mux.Lock()
    35  	defer d.mux.Unlock()
    36  
    37  	d.configs[name] = cfg
    38  }
    39  
    40  func (d *Discovery) removeConfig(key string) {
    41  	d.mux.Lock()
    42  	defer d.mux.Unlock()
    43  
    44  	delete(d.configs, key)
    45  }
    46  
    47  func (d *Discovery) getConfig(key string) (confgroup.Config, bool) {
    48  	d.mux.Lock()
    49  	defer d.mux.Unlock()
    50  
    51  	v, ok := d.configs[key]
    52  	return v, ok
    53  }
    54  
    55  func (d *Discovery) getConfigBytes(key string) ([]byte, error) {
    56  	d.mux.Lock()
    57  	defer d.mux.Unlock()
    58  
    59  	cfg, ok := d.configs[key]
    60  	if !ok {
    61  		return nil, errors.New("config not found")
    62  	}
    63  
    64  	bs, err := yaml.Marshal(cfg)
    65  	if err != nil {
    66  		return nil, err
    67  	}
    68  
    69  	return bs, nil
    70  }
    71  
    72  var envNDStockConfigDir = os.Getenv("NETDATA_STOCK_CONFIG_DIR")
    73  
    74  func isStock(cfg confgroup.Config) bool {
    75  	if envNDStockConfigDir == "" {
    76  		return false
    77  	}
    78  	return strings.HasPrefix(cfg.Source(), envNDStockConfigDir)
    79  }