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 }