config: Add alert-mode
This commit is contained in:
parent
78801c98e4
commit
46f4590d11
3 changed files with 35 additions and 1 deletions
|
@ -29,6 +29,9 @@ Example:
|
||||||
http-address :8080
|
http-address :8080
|
||||||
# Log level (either debug, info, warning, error)
|
# Log level (either debug, info, warning, error)
|
||||||
log-level info
|
log-level info
|
||||||
|
# When multiple alerts are grouped together by Alertmanager, they can either be sent
|
||||||
|
# each on their own (single mode) or be kept together (multi mode) (either single or multi; default is single)
|
||||||
|
alert-mode single
|
||||||
# Optionally protect with HTTP basic authentication
|
# Optionally protect with HTTP basic authentication
|
||||||
user webhookUser
|
user webhookUser
|
||||||
password webhookPass
|
password webhookPass
|
||||||
|
|
28
config.go
28
config.go
|
@ -7,9 +7,17 @@ import (
|
||||||
"git.sr.ht/~emersion/go-scfg"
|
"git.sr.ht/~emersion/go-scfg"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type alertMode int
|
||||||
|
|
||||||
|
const (
|
||||||
|
single alertMode = iota
|
||||||
|
multi
|
||||||
|
)
|
||||||
|
|
||||||
type config struct {
|
type config struct {
|
||||||
HTTPAddress string
|
HTTPAddress string
|
||||||
LogLevel string
|
LogLevel string
|
||||||
|
alertMode alertMode
|
||||||
User string
|
User string
|
||||||
Password string
|
Password string
|
||||||
ntfy ntfyConfig
|
ntfy ntfyConfig
|
||||||
|
@ -42,6 +50,7 @@ func readConfig(path string) (*config, error) {
|
||||||
// Set default values
|
// Set default values
|
||||||
config.HTTPAddress = "127.0.0.1:8080"
|
config.HTTPAddress = "127.0.0.1:8080"
|
||||||
config.LogLevel = "info"
|
config.LogLevel = "info"
|
||||||
|
config.alertMode = single
|
||||||
|
|
||||||
d := cfg.Get("log-level")
|
d := cfg.Get("log-level")
|
||||||
if d != nil {
|
if d != nil {
|
||||||
|
@ -57,6 +66,25 @@ func readConfig(path string) (*config, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
d = cfg.Get("alert-mode")
|
||||||
|
if d != nil {
|
||||||
|
var mode string
|
||||||
|
if err := d.ParseParams(&mode); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
switch strings.ToLower(mode) {
|
||||||
|
case "single":
|
||||||
|
config.alertMode = single
|
||||||
|
|
||||||
|
case "multi":
|
||||||
|
config.alertMode = multi
|
||||||
|
|
||||||
|
default:
|
||||||
|
return nil, fmt.Errorf("%q directive: illegal mode %q", d.Name, mode)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
d = cfg.Get("user")
|
d = cfg.Get("user")
|
||||||
if d != nil {
|
if d != nil {
|
||||||
if err := d.ParseParams(&config.User); err != nil {
|
if err := d.ParseParams(&config.User); err != nil {
|
||||||
|
|
|
@ -13,6 +13,9 @@ func TestReadConfig(t *testing.T) {
|
||||||
http-address :8080
|
http-address :8080
|
||||||
# Log level (either debug, info, warning, error)
|
# Log level (either debug, info, warning, error)
|
||||||
log-level info
|
log-level info
|
||||||
|
# When multiple alerts are grouped together by Alertmanager, they can either be sent
|
||||||
|
# each on their own (single mode) or be kept together (multi mode) (either single or multi; default is single)
|
||||||
|
alert-mode multi
|
||||||
# Optionally protect with HTTP basic authentication
|
# Optionally protect with HTTP basic authentication
|
||||||
user webhookUser
|
user webhookUser
|
||||||
password webhookPass
|
password webhookPass
|
||||||
|
@ -44,7 +47,7 @@ ntfy {
|
||||||
`
|
`
|
||||||
|
|
||||||
expectedCfg := &config{
|
expectedCfg := &config{
|
||||||
HTTPAddress: ":8080", LogLevel: "info", User: "webhookUser", Password: "webhookPass",
|
HTTPAddress: ":8080", LogLevel: "info", alertMode: multi, User: "webhookUser", Password: "webhookPass",
|
||||||
ntfy: ntfyConfig{Topic: "https://ntfy.sh/alertmanager-alerts", User: "user", Password: "pass"},
|
ntfy: ntfyConfig{Topic: "https://ntfy.sh/alertmanager-alerts", User: "user", Password: "pass"},
|
||||||
labels: labels{Order: []string{"severity", "instance"},
|
labels: labels{Order: []string{"severity", "instance"},
|
||||||
Label: map[string]labelConfig{
|
Label: map[string]labelConfig{
|
||||||
|
|
Loading…
Reference in a new issue