~xenrox/ntfy-alertmanager

ddd41a63413019dd750f21d24850a530f22e6713 — Thorben Günther 8 months ago 6d64c21
Add option for setting the logging format
4 files changed, 17 insertions(+), 9 deletions(-)

M config.scfg
M config/config.go
M config/config_test.go
M main.go
M config.scfg => config.scfg +2 -0
@@ 5,6 5,8 @@ base-url https://ntfy-alertmanager.xenrox.net
http-address :8080
# Log level (either debug, info, warning, error)
log-level info
# Log format (either text or json)
log-format text
# 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 multi)
alert-mode single

M config/config.go => config/config.go +9 -0
@@ 24,6 24,7 @@ type Config struct {
	BaseURL     string
	HTTPAddress string
	LogLevel    string
	LogFormat   string
	AlertMode   AlertMode
	User        string
	Password    string


@@ 90,6 91,7 @@ func ReadConfig(path string) (*Config, error) {
	// Set default values
	config.HTTPAddress = "127.0.0.1:8080"
	config.LogLevel = "info"
	config.LogFormat = "text"
	config.AlertMode = Multi

	config.Cache.Type = "disabled"


@@ 106,6 108,13 @@ func ReadConfig(path string) (*Config, error) {
		}
	}

	d = cfg.Get("log-format")
	if d != nil {
		if err := d.ParseParams(&config.LogFormat); err != nil {
			return nil, err
		}
	}

	d = cfg.Get("http-address")
	if d != nil {
		if err := d.ParseParams(&config.HTTPAddress); err != nil {

M config/config_test.go => config/config_test.go +2 -0
@@ 13,6 13,7 @@ func TestReadConfig(t *testing.T) {
base-url https://ntfy-alertmanager.xenrox.net
http-address :8080
log-level info
log-format json
alert-mode multi
user webhookUser
password webhookPass


@@ 66,6 67,7 @@ cache {
		BaseURL:     "https://ntfy-alertmanager.xenrox.net",
		HTTPAddress: ":8080",
		LogLevel:    "info",
		LogFormat:   "json",
		AlertMode:   Multi,
		User:        "webhookUser",
		Password:    "webhookPass",

M main.go => main.go +4 -9
@@ 453,24 453,19 @@ func main() {
		os.Exit(0)
	}

	logLevel := new(slog.LevelVar)
	logger := slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{
		Level: logLevel,
	}))

	cfg, err := config.ReadConfig(configPath)
	if err != nil {
		logger.Error("Failed to read config",
		slog.Error("Failed to read config",
			slog.String("error", err.Error()))
		os.Exit(1)
	}

	level, err := logging.ParseLevelFromString(cfg.LogLevel)
	logger, err := logging.New(cfg.LogLevel, cfg.LogFormat, os.Stderr)
	if err != nil {
		logger.Error("Failed to parse logging level",
		slog.Error("Failed to create logger",
			slog.String("error", err.Error()))
		os.Exit(1)
	}
	logLevel.Set(level)

	ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
	defer stop()