github.com/vseinstrumentiru/lego@v1.0.2/internal/lego/monitor/errorhandler/config.go (about) 1 package errorhandler 2 3 import ( 4 "emperror.dev/errors" 5 "github.com/spf13/pflag" 6 "github.com/spf13/viper" 7 ) 8 9 type Config struct { 10 Providers []string 11 Sentry struct { 12 DSN string 13 } 14 } 15 16 const ( 17 LogProvider = "log" 18 SentryProvider = "sentry" 19 ) 20 21 func (c Config) SetDefaults(env *viper.Viper, flag *pflag.FlagSet) { 22 env.SetDefault("srv.monitor.errorhandler.providers", []string{LogProvider}) 23 } 24 25 func (c Config) Validate() (err error) { 26 providers := map[string]bool{ 27 LogProvider: false, 28 SentryProvider: false, 29 } 30 31 for _, p := range c.Providers { 32 if used, ok := providers[p]; !ok { 33 err = errors.Append(err, errors.Errorf("errorHandler provider %s not defined", p)) 34 } else if used { 35 err = errors.Append(err, errors.Errorf("errorHandler provider %s must be defined only once", p)) 36 } 37 38 providers[p] = true 39 } 40 41 if providers[SentryProvider] && c.Sentry.DSN == "" { 42 err = errors.Append(err, errors.New("sentry errorHandler provider requires uri")) 43 } 44 45 return err 46 }