allow to work with multiple configs

Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
2024-11-20 00:35:04 +03:00
parent 3398ee60f3
commit c1103c714a
4 changed files with 116 additions and 79 deletions

View File

@@ -3,10 +3,8 @@ package main
import (
"context"
"fmt"
"io/fs"
"os"
"os/signal"
"path/filepath"
"time"
openapi_v3 "github.com/google/gnostic/openapiv3"
@@ -64,67 +62,14 @@ func main() {
l.Fatal(ctx, "failed to init meter", err)
}
meters["default"] = m
l.Info(ctx, "try to parse config.yaml")
f, err := os.Open("config.yaml")
if err != nil {
l.Fatal(ctx, "failed to open config", err)
}
meters[uuid.Nil.String()] = m
cfg := &config.Config{}
if err = config.Parse(f, cfg); err != nil {
f.Close()
l.Info(ctx, "try to load config")
if err := config.Load(config.Filesytem, "config.yaml", cfg); err != nil {
l.Fatal(ctx, "failed to open config", err)
}
f.Close()
if cfg.App.ChecksDir != "" {
var configFiles []string
if !filepath.IsAbs(cfg.App.ChecksDir) {
dir, _ := os.Getwd()
cfg.App.ChecksDir = filepath.Clean(filepath.Join(dir, cfg.App.ChecksDir))
}
err = filepath.WalkDir(cfg.App.ChecksDir, func(path string, info fs.DirEntry, err error) error {
if err != nil {
return err
}
if info.IsDir() || !info.Type().IsRegular() {
return nil
}
if filepath.Ext(info.Name()) != ".yaml" {
return nil
}
configFiles = append(configFiles, path)
return nil
})
if err != nil {
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 {
m.Init(
@@ -214,7 +159,7 @@ func main() {
var mtr meter.Meter
if !cfg.App.MultiUser {
mtr = meters["default"]
mtr = meters[uuid.Nil.String()]
} else {
if v, ok := meters[check.User]; ok && v != nil {
mtr = v