github.com/netdata/go.d.plugin@v0.58.1/agent/discovery/file/read.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package file 4 5 import ( 6 "context" 7 "os" 8 "path/filepath" 9 10 "github.com/netdata/go.d.plugin/agent/confgroup" 11 "github.com/netdata/go.d.plugin/logger" 12 ) 13 14 type ( 15 staticConfig struct { 16 confgroup.Default `yaml:",inline"` 17 Jobs []confgroup.Config `yaml:"jobs"` 18 } 19 sdConfig []confgroup.Config 20 ) 21 22 func NewReader(reg confgroup.Registry, paths []string) *Reader { 23 return &Reader{ 24 Logger: log, 25 reg: reg, 26 paths: paths, 27 } 28 } 29 30 type Reader struct { 31 *logger.Logger 32 33 reg confgroup.Registry 34 paths []string 35 } 36 37 func (r *Reader) String() string { 38 return r.Name() 39 } 40 41 func (r *Reader) Name() string { 42 return "file reader" 43 } 44 45 func (r *Reader) Run(ctx context.Context, in chan<- []*confgroup.Group) { 46 r.Info("instance is started") 47 defer func() { r.Info("instance is stopped") }() 48 49 select { 50 case <-ctx.Done(): 51 case in <- r.groups(): 52 } 53 54 close(in) 55 } 56 57 func (r *Reader) groups() (groups []*confgroup.Group) { 58 for _, pattern := range r.paths { 59 matches, err := filepath.Glob(pattern) 60 if err != nil { 61 continue 62 } 63 64 for _, path := range matches { 65 if fi, err := os.Stat(path); err != nil || !fi.Mode().IsRegular() { 66 continue 67 } 68 69 group, err := parse(r.reg, path) 70 if err != nil { 71 r.Warningf("parse '%s': %v", path, err) 72 continue 73 } 74 if group == nil { 75 group = &confgroup.Group{Source: path} 76 } 77 groups = append(groups, group) 78 } 79 } 80 81 for _, group := range groups { 82 for _, cfg := range group.Configs { 83 cfg.SetSource(group.Source) 84 cfg.SetProvider(r.Name()) 85 } 86 } 87 88 return groups 89 }