telegram-notifier/notifier/config/config.go

66 lines
1.2 KiB
Go

package config
import (
"encoding/json"
"fmt"
"os"
"github.com/sirupsen/logrus"
)
type TelegramConfig struct {
ChannelID int64 `json:"channel_id"`
Token string `json:"token"`
}
type LogConfig struct {
Level logrus.Level
}
type jsonLogConfig struct {
Level string `json:"level"`
}
type ListenerConfig struct {
SockPath string `json:"sock_path"`
}
type Config struct {
Telegram TelegramConfig
Log LogConfig
Listener ListenerConfig
}
type jsonConfig struct {
Telegram TelegramConfig `json:"telegram"`
Log jsonLogConfig `json:"log"`
Listener ListenerConfig `json:"listener"`
}
func parseLevel(lvlStr string) logrus.Level {
for _, lvl := range logrus.AllLevels {
if lvl.String() == lvlStr {
return lvl
}
}
return logrus.InfoLevel
}
func New(filepath string) (*Config, error) {
content, err := os.ReadFile(filepath)
if err != nil {
return nil, fmt.Errorf("failed to read config file %q: %w", filepath, err)
}
var jsonConf jsonConfig
if err := json.Unmarshal(content, &jsonConf); err != nil {
return nil, fmt.Errorf("failed to parse config file: %w", err)
}
return &Config{
Telegram: jsonConf.Telegram,
Log: LogConfig{
Level: parseLevel(jsonConf.Log.Level),
},
Listener: jsonConf.Listener,
}, nil
}