config: Add required settings for silencing alerts
This commit is contained in:
parent
7a6b7c9cdb
commit
34c0574163
3 changed files with 62 additions and 2 deletions
11
README.md
11
README.md
|
@ -25,6 +25,9 @@ decreasing order of labels in the config file and map those labels to tags or pr
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
```
|
```
|
||||||
|
# Public facing base URL of the service (e.g. https://ntfy-alertmanager.xenrox.net)
|
||||||
|
# This setting is required for the "Silence" feature.
|
||||||
|
base-url https://ntfy-alertmanager.xenrox.net
|
||||||
# http listen address
|
# http listen address
|
||||||
http-address :8080
|
http-address :8080
|
||||||
# Log level (either debug, info, warning, error)
|
# Log level (either debug, info, warning, error)
|
||||||
|
@ -61,6 +64,14 @@ ntfy {
|
||||||
password pass
|
password pass
|
||||||
}
|
}
|
||||||
|
|
||||||
|
alertmanager {
|
||||||
|
# If set, the ntfy message will contain a "Silence" button, which can be used
|
||||||
|
# to create a silence via the Alertmanager API. Because of limitations in ntfy,
|
||||||
|
# the request will be proxied through ntfy-alertmanager. Therefore ntfy-alertmanager
|
||||||
|
# needs to be exposed to external network requests and base-url has to be set.
|
||||||
|
silence-duration 24h
|
||||||
|
}
|
||||||
|
|
||||||
# When the alert-mode is set to single, ntfy-alertmanager will cache each single alert
|
# When the alert-mode is set to single, ntfy-alertmanager will cache each single alert
|
||||||
# to avoid sending recurrences.
|
# to avoid sending recurrences.
|
||||||
cache {
|
cache {
|
||||||
|
|
32
config.go
32
config.go
|
@ -16,6 +16,7 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
type config struct {
|
type config struct {
|
||||||
|
BaseURL string
|
||||||
HTTPAddress string
|
HTTPAddress string
|
||||||
LogLevel string
|
LogLevel string
|
||||||
alertMode alertMode
|
alertMode alertMode
|
||||||
|
@ -24,6 +25,7 @@ type config struct {
|
||||||
ntfy ntfyConfig
|
ntfy ntfyConfig
|
||||||
labels labels
|
labels labels
|
||||||
cache cacheConfig
|
cache cacheConfig
|
||||||
|
am alertmanagerConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
type ntfyConfig struct {
|
type ntfyConfig struct {
|
||||||
|
@ -47,6 +49,10 @@ type cacheConfig struct {
|
||||||
Duration time.Duration
|
Duration time.Duration
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type alertmanagerConfig struct {
|
||||||
|
SilenceDuration time.Duration
|
||||||
|
}
|
||||||
|
|
||||||
func readConfig(path string) (*config, error) {
|
func readConfig(path string) (*config, error) {
|
||||||
cfg, err := scfg.Load(path)
|
cfg, err := scfg.Load(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -76,6 +82,13 @@ func readConfig(path string) (*config, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
d = cfg.Get("base-url")
|
||||||
|
if d != nil {
|
||||||
|
if err := d.ParseParams(&config.BaseURL); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
d = cfg.Get("alert-mode")
|
d = cfg.Get("alert-mode")
|
||||||
if d != nil {
|
if d != nil {
|
||||||
var mode string
|
var mode string
|
||||||
|
@ -216,5 +229,24 @@ func readConfig(path string) (*config, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
amDir := cfg.Get("alertmanager")
|
||||||
|
|
||||||
|
if amDir != nil {
|
||||||
|
var durationString string
|
||||||
|
d = amDir.Children.Get("silence-duration")
|
||||||
|
if d != nil {
|
||||||
|
if err := d.ParseParams(&durationString); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
duration, err := time.ParseDuration(durationString)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
config.am.SilenceDuration = duration
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return config, nil
|
return config, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,9 @@ import (
|
||||||
|
|
||||||
func TestReadConfig(t *testing.T) {
|
func TestReadConfig(t *testing.T) {
|
||||||
configContent := `
|
configContent := `
|
||||||
|
# Public facing base URL of the service (e.g. https://ntfy-alertmanager.xenrox.net)
|
||||||
|
# This setting is required for the "Silence" feature.
|
||||||
|
base-url https://ntfy-alertmanager.xenrox.net
|
||||||
# http listen address
|
# http listen address
|
||||||
http-address :8080
|
http-address :8080
|
||||||
# Log level (either debug, info, warning, error)
|
# Log level (either debug, info, warning, error)
|
||||||
|
@ -46,6 +49,14 @@ ntfy {
|
||||||
password pass
|
password pass
|
||||||
}
|
}
|
||||||
|
|
||||||
|
alertmanager {
|
||||||
|
# If set, the ntfy message will contain a "Silence" button, which can be used
|
||||||
|
# to create a silence via the Alertmanager API. Because of limitations in ntfy,
|
||||||
|
# the request will be proxied through ntfy-alertmanager. Therefore ntfy-alertmanager
|
||||||
|
# needs to be exposed to external network requests and base-url has to be set.
|
||||||
|
silence-duration 24h
|
||||||
|
}
|
||||||
|
|
||||||
# When the alert-mode is set to single, ntfy-alertmanager will cache each single alert
|
# When the alert-mode is set to single, ntfy-alertmanager will cache each single alert
|
||||||
# to avoid sending recurrences.
|
# to avoid sending recurrences.
|
||||||
cache {
|
cache {
|
||||||
|
@ -57,7 +68,12 @@ cache {
|
||||||
`
|
`
|
||||||
|
|
||||||
expectedCfg := &config{
|
expectedCfg := &config{
|
||||||
HTTPAddress: ":8080", LogLevel: "info", alertMode: multi, User: "webhookUser", Password: "webhookPass",
|
BaseURL: "https://ntfy-alertmanager.xenrox.net",
|
||||||
|
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{
|
||||||
|
@ -67,6 +83,7 @@ cache {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
cache: cacheConfig{CleanupInterval: time.Hour, Duration: 48 * time.Hour},
|
cache: cacheConfig{CleanupInterval: time.Hour, Duration: 48 * time.Hour},
|
||||||
|
am: alertmanagerConfig{SilenceDuration: time.Hour * 24},
|
||||||
}
|
}
|
||||||
|
|
||||||
configPath := filepath.Join(t.TempDir(), "config")
|
configPath := filepath.Join(t.TempDir(), "config")
|
||||||
|
|
Loading…
Reference in a new issue