ntfy-alertmanager/config.go

149 lines
2.8 KiB
Go
Raw Normal View History

package main
2022-10-10 01:30:39 +02:00
import (
"fmt"
"strings"
2022-10-10 01:30:39 +02:00
"git.sr.ht/~emersion/go-scfg"
)
type config struct {
HTTPAddress string
LogLevel string
User string
Password string
2022-10-10 02:42:13 +02:00
ntfy ntfyConfig
labels labels
2022-10-10 02:42:13 +02:00
}
type ntfyConfig struct {
Topic string
User string
Password string
}
type labels struct {
Order []string
Label map[string]labelConfig
}
type labelConfig struct {
Priority string
2022-10-12 17:04:44 +02:00
Tags []string
}
func readConfig(path string) (*config, error) {
cfg, err := scfg.Load(path)
if err != nil {
return nil, err
}
config := new(config)
// Set default values
config.HTTPAddress = "127.0.0.1:8080"
config.LogLevel = "info"
d := cfg.Get("log-level")
if d != nil {
if err := d.ParseParams(&config.LogLevel); err != nil {
return nil, err
}
}
d = cfg.Get("http-address")
if d != nil {
if err := d.ParseParams(&config.HTTPAddress); err != nil {
return nil, err
}
}
d = cfg.Get("user")
if d != nil {
if err := d.ParseParams(&config.User); err != nil {
return nil, err
}
}
d = cfg.Get("password")
if d != nil {
if err := d.ParseParams(&config.Password); err != nil {
return nil, err
}
}
labelsDir := cfg.Get("labels")
if labelsDir != nil {
d = labelsDir.Children.Get("order")
if d != nil {
var order string
if err := d.ParseParams(&order); err != nil {
return nil, err
}
config.labels.Order = strings.Split(order, ",")
}
labels := make(map[string]labelConfig)
for _, labelName := range config.labels.Order {
for _, labelDir := range labelsDir.Children.GetAll(labelName) {
labelConfig := new(labelConfig)
var name string
if err := labelDir.ParseParams(&name); err != nil {
return nil, err
}
d = labelDir.Children.Get("priority")
if d != nil {
if err := d.ParseParams(&labelConfig.Priority); err != nil {
return nil, err
}
}
2022-10-12 17:04:44 +02:00
d = labelDir.Children.Get("tags")
if d != nil {
var tags string
if err := d.ParseParams(&tags); err != nil {
return nil, err
}
labelConfig.Tags = strings.Split(tags, ",")
}
labels[fmt.Sprintf("%s:%s", labelName, name)] = *labelConfig
}
}
config.labels.Label = labels
}
2022-10-10 02:42:13 +02:00
ntfyDir := cfg.Get("ntfy")
if ntfyDir == nil {
return nil, fmt.Errorf("%q directive missing", "ntfy")
}
d = ntfyDir.Children.Get("topic")
2022-10-10 01:30:39 +02:00
if d == nil {
2022-10-10 02:42:13 +02:00
return nil, fmt.Errorf("%q missing from %q directive", "topic", "ntfy")
2022-10-10 01:30:39 +02:00
}
2022-10-10 02:42:13 +02:00
if err := d.ParseParams(&config.ntfy.Topic); err != nil {
2022-10-10 01:30:39 +02:00
return nil, err
}
2022-10-10 02:42:13 +02:00
d = ntfyDir.Children.Get("user")
if d != nil {
if err := d.ParseParams(&config.ntfy.User); err != nil {
return nil, err
}
}
d = ntfyDir.Children.Get("password")
if d != nil {
if err := d.ParseParams(&config.ntfy.Password); err != nil {
return nil, err
}
}
return config, nil
}