A simple monitoring solution written in Go (work in progress)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

52 lines
1.0 KiB

package config
import (
yaml "gopkg.in/yaml.v2"
"io"
"os"
"time"
)
type Config struct {
Interval time.Duration `yaml:"interval"`
Listen string `yaml:"listen"`
DebugLevel int `yaml:"debug_level"`
APIKey string `yaml:"api_key"`
APIKeyFile string `yaml:"api_key_file"`
WebRoot string `yaml:"web_root"`
Hosts []Host `yaml:"hosts"`
Alarms []Alarm `yaml:"alarms"`
Groups map[string][]Host `yaml:"groups"`
}
func New() *Config {
return &Config{
Interval: 30 * time.Second,
Listen: "127.0.0.1:8282",
DebugLevel: 0,
WebRoot: "/",
}
}
func ReadConfig(fn string, debuglvl int) (*Config, error) {
f, err := os.Open(fn)
if err != nil {
return nil, err
}
h, err := io.ReadAll(f)
if err != nil {
return nil, err
}
cfg := New()
err = yaml.UnmarshalStrict(h, &cfg)
if err != nil {
return nil, err
}
err = cfg.Validate()
if err != nil {
return nil, err
}
return cfg, nil
}