complete nested config files
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
parent
ee4c343dee
commit
3398ee60f3
@ -65,17 +65,24 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
meters["default"] = m
|
meters["default"] = m
|
||||||
|
|
||||||
|
l.Info(ctx, "try to parse config.yaml")
|
||||||
f, err := os.Open("config.yaml")
|
f, err := os.Open("config.yaml")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
l.Fatal(ctx, "failed to open config", err)
|
l.Fatal(ctx, "failed to open config", err)
|
||||||
}
|
}
|
||||||
defer f.Close()
|
|
||||||
cfg := &config.Config{}
|
cfg := &config.Config{}
|
||||||
if err = cfg.Parse(f); err != nil {
|
|
||||||
|
if err = config.Parse(f, cfg); err != nil {
|
||||||
|
f.Close()
|
||||||
l.Fatal(ctx, "failed to open config", err)
|
l.Fatal(ctx, "failed to open config", err)
|
||||||
}
|
}
|
||||||
|
f.Close()
|
||||||
|
|
||||||
if cfg.App.ChecksDir != "" {
|
if cfg.App.ChecksDir != "" {
|
||||||
|
var configFiles []string
|
||||||
|
|
||||||
if !filepath.IsAbs(cfg.App.ChecksDir) {
|
if !filepath.IsAbs(cfg.App.ChecksDir) {
|
||||||
dir, _ := os.Getwd()
|
dir, _ := os.Getwd()
|
||||||
cfg.App.ChecksDir = filepath.Clean(filepath.Join(dir, cfg.App.ChecksDir))
|
cfg.App.ChecksDir = filepath.Clean(filepath.Join(dir, cfg.App.ChecksDir))
|
||||||
@ -83,17 +90,40 @@ func main() {
|
|||||||
|
|
||||||
err = filepath.WalkDir(cfg.App.ChecksDir, func(path string, info fs.DirEntry, err error) error {
|
err = filepath.WalkDir(cfg.App.ChecksDir, func(path string, info fs.DirEntry, err error) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// fmt.Printf("prevent panic by handling failure accessing a path %q: %v\n", path, err)
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if info.IsDir() {
|
|
||||||
|
if info.IsDir() || !info.Type().IsRegular() {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if filepath.Ext(info.Name()) != ".yaml" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
configFiles = append(configFiles, path)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
l.Fatal(ctx, fmt.Sprintf("error loading config: %s", cfg.App.ChecksDir), err)
|
l.Fatal(ctx, fmt.Sprintf("error loading config: %s", cfg.App.ChecksDir), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, configFile := range configFiles {
|
||||||
|
l.Info(ctx, "try to parse "+configFile)
|
||||||
|
f, err := os.Open(configFile)
|
||||||
|
if err != nil {
|
||||||
|
l.Fatal(ctx, "failed to open config", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
checks := []*config.CheckConfig{}
|
||||||
|
if err = config.Parse(f, &checks); err != nil {
|
||||||
|
f.Close()
|
||||||
|
l.Fatal(ctx, "failed to open config", err)
|
||||||
|
}
|
||||||
|
f.Close()
|
||||||
|
cfg.App.Checks = append(cfg.App.Checks, checks...)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !cfg.App.MultiUser {
|
if !cfg.App.MultiUser {
|
||||||
|
@ -66,7 +66,7 @@ type TaskConfig struct {
|
|||||||
Active bool `json:"active,omitempty" yaml:"active,omitempty"`
|
Active bool `json:"active,omitempty" yaml:"active,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cfg *Config) Parse(r io.Reader) error {
|
func Parse(r io.Reader, cfg interface{}) error {
|
||||||
buf, err := io.ReadAll(r)
|
buf, err := io.ReadAll(r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
Loading…
Reference in New Issue
Block a user