mirror of
https://github.com/crazy-max/diun.git
synced 2026-01-03 19:45:05 +01:00
Remove "enable" setting for notifiers
This commit is contained in:
@@ -4,13 +4,11 @@ import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/mail"
|
||||
"os"
|
||||
"path"
|
||||
|
||||
"github.com/crazy-max/diun/internal/model"
|
||||
"github.com/crazy-max/diun/pkg/utl"
|
||||
"github.com/imdario/mergo"
|
||||
"github.com/pkg/errors"
|
||||
"gopkg.in/yaml.v2"
|
||||
)
|
||||
@@ -21,7 +19,7 @@ type Config struct {
|
||||
App model.App
|
||||
Db model.Db `yaml:"db,omitempty"`
|
||||
Watch model.Watch `yaml:"watch,omitempty"`
|
||||
Notif model.Notif `yaml:"notif,omitempty"`
|
||||
Notif *model.Notif `yaml:"notif,omitempty"`
|
||||
RegOpts map[string]model.RegOpts `yaml:"regopts,omitempty"`
|
||||
Providers *model.Providers `yaml:"providers,omitempty"`
|
||||
}
|
||||
@@ -45,41 +43,7 @@ func Load(cli model.Cli, version string) (*Config, error) {
|
||||
Watch: model.Watch{
|
||||
Workers: 10,
|
||||
Schedule: "0 * * * *",
|
||||
FirstCheckNotif: false,
|
||||
},
|
||||
Notif: model.Notif{
|
||||
Amqp: model.NotifAmqp{
|
||||
Enable: false,
|
||||
Host: "localhost",
|
||||
Port: 5672,
|
||||
Exchange: "",
|
||||
},
|
||||
Gotify: model.NotifGotify{
|
||||
Enable: false,
|
||||
Timeout: 10,
|
||||
},
|
||||
Mail: model.NotifMail{
|
||||
Enable: false,
|
||||
Host: "localhost",
|
||||
Port: 25,
|
||||
SSL: false,
|
||||
InsecureSkipVerify: false,
|
||||
},
|
||||
RocketChat: model.NotifRocketChat{
|
||||
Enable: false,
|
||||
Timeout: 10,
|
||||
},
|
||||
Slack: model.NotifSlack{
|
||||
Enable: false,
|
||||
},
|
||||
Telegram: model.NotifTelegram{
|
||||
Enable: false,
|
||||
},
|
||||
Webhook: model.NotifWebhook{
|
||||
Enable: false,
|
||||
Method: "GET",
|
||||
Timeout: 10,
|
||||
},
|
||||
FirstCheckNotif: utl.NewFalse(),
|
||||
},
|
||||
}
|
||||
|
||||
@@ -110,102 +74,16 @@ func (cfg *Config) validate() error {
|
||||
}
|
||||
cfg.Db.Path = path.Clean(cfg.Db.Path)
|
||||
|
||||
for id, regopts := range cfg.RegOpts {
|
||||
if err := cfg.validateRegOpts(id, regopts); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if err := cfg.validateDockerProvider(); err != nil {
|
||||
if err := cfg.validateNotif(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := cfg.validateSwarmProvider(); err != nil {
|
||||
if err := cfg.validateRegopts(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := cfg.validateFileProvider(); err != nil {
|
||||
if err := cfg.validateProviders(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if cfg.Notif.Mail.Enable {
|
||||
if _, err := mail.ParseAddress(cfg.Notif.Mail.From); err != nil {
|
||||
return fmt.Errorf("cannot parse sender mail address, %v", err)
|
||||
}
|
||||
if _, err := mail.ParseAddress(cfg.Notif.Mail.To); err != nil {
|
||||
return fmt.Errorf("cannot parse recipient mail address, %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (cfg *Config) validateRegOpts(id string, regopts model.RegOpts) error {
|
||||
defTimeout := 10
|
||||
if regopts.Timeout <= 0 {
|
||||
defTimeout = 0
|
||||
}
|
||||
|
||||
if err := mergo.Merge(®opts, model.RegOpts{
|
||||
InsecureTLS: false,
|
||||
Timeout: defTimeout,
|
||||
}); err != nil {
|
||||
return fmt.Errorf("cannot set default values for registry options %s: %v", id, err)
|
||||
}
|
||||
|
||||
cfg.RegOpts[id] = regopts
|
||||
return nil
|
||||
}
|
||||
|
||||
func (cfg *Config) validateDockerProvider() error {
|
||||
if cfg.Providers.Docker == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
if err := mergo.Merge(cfg.Providers.Docker, model.PrdDocker{
|
||||
TLSVerify: utl.NewTrue(),
|
||||
WatchByDefault: utl.NewFalse(),
|
||||
WatchStopped: utl.NewFalse(),
|
||||
}); err != nil {
|
||||
return errors.Wrap(err, "cannot set default values for docker provider")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (cfg *Config) validateSwarmProvider() error {
|
||||
if cfg.Providers.Swarm == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
if err := mergo.Merge(cfg.Providers.Swarm, model.PrdSwarm{
|
||||
TLSVerify: utl.NewTrue(),
|
||||
WatchByDefault: utl.NewFalse(),
|
||||
}); err != nil {
|
||||
return errors.Wrap(err, "cannot set default values for docker provider")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (cfg *Config) validateFileProvider() error {
|
||||
if cfg.Providers.File == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
switch {
|
||||
case len(cfg.Providers.File.Directory) > 0:
|
||||
if _, err := os.Stat(cfg.Providers.File.Directory); os.IsNotExist(err) {
|
||||
return errors.Wrap(err, "directory not found for file provider")
|
||||
}
|
||||
case len(cfg.Providers.File.Filename) > 0:
|
||||
if _, err := os.Stat(cfg.Providers.File.Filename); os.IsNotExist(err) {
|
||||
return errors.Wrap(err, "filename not found for file provider")
|
||||
}
|
||||
default:
|
||||
return errors.New("error using file provider, neither filename or directory defined")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user