You've already forked watchtower
							
							
				mirror of
				https://github.com/containrrr/watchtower.git
				synced 2025-10-31 00:17:44 +02:00 
			
		
		
		
	Made the notification level flag global for all notification types.
This commit is contained in:
		| @@ -191,6 +191,10 @@ The types of notifications to send are passed via the comma-separated option `-- | ||||
| * `email` to send notifications via e-mail | ||||
| * `slack` to send notifications through a Slack webhook | ||||
|  | ||||
| ### Settings | ||||
|  | ||||
| * `--notifications-level` (env. `WATCHTOWER_NOTIFICATIONS_LEVEL`): Controls the log level which is used for the notifications. If omitted, the default log level is `info`. Possible values are: `panic`, `fatal`, `error`, `warn`, `info` or `debug`. | ||||
|  | ||||
| ### Notifications via E-Mail | ||||
|  | ||||
| To receive notifications by email, the following command-line options, or their corresponding environment variables, can be set: | ||||
|   | ||||
							
								
								
									
										12
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								main.go
									
									
									
									
									
								
							| @@ -96,6 +96,12 @@ func main() { | ||||
| 			Usage:  "notification types to send (valid: email, slack)", | ||||
| 			EnvVar: "WATCHTOWER_NOTIFICATIONS", | ||||
| 		}, | ||||
| 		cli.StringFlag{ | ||||
| 			Name:   "notifications-level", | ||||
| 			Usage:  "The log level used for sending notifications. Possible values: \"panic\", \"fatal\", \"error\", \"warn\", \"info\" or \"debug\"", | ||||
| 			EnvVar: "WATCHTOWER_NOTIFICATIONS_LEVEL", | ||||
| 			Value:  "info", | ||||
| 		}, | ||||
| 		cli.StringFlag{ | ||||
| 			Name:   "notification-email-from", | ||||
| 			Usage:  "Address to send notification e-mails from", | ||||
| @@ -147,12 +153,6 @@ func main() { | ||||
| 			EnvVar: "WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER", | ||||
| 			Value:  "watchtower", | ||||
| 		}, | ||||
| 		cli.StringFlag{ | ||||
| 			Name:   "notification-slack-level", | ||||
| 			Usage:  "The log level used for sending notifications through Slack. Default if omitted is \"info\". Possible values: \"panic\",\"fatal\",\"error\",\"warn\",\"info\" or \"debug\"", | ||||
| 			EnvVar: "WATCHTOWER_NOTIFICATION_SLACK_LEVEL", | ||||
| 			Value:  "info", | ||||
| 		}, | ||||
| 	} | ||||
|  | ||||
| 	if err := app.Run(os.Args); err != nil { | ||||
|   | ||||
| @@ -28,9 +28,10 @@ type emailTypeNotifier struct { | ||||
| 	Port                   int | ||||
| 	tlsSkipVerify          bool | ||||
| 	entries                []*log.Entry | ||||
| 	logLevels              []log.Level | ||||
| } | ||||
|  | ||||
| func newEmailNotifier(c *cli.Context) typeNotifier { | ||||
| func newEmailNotifier(c *cli.Context, acceptedLogLevels []log.Level) typeNotifier { | ||||
| 	n := &emailTypeNotifier{ | ||||
| 		From:          c.GlobalString("notification-email-from"), | ||||
| 		To:            c.GlobalString("notification-email-to"), | ||||
| @@ -39,6 +40,7 @@ func newEmailNotifier(c *cli.Context) typeNotifier { | ||||
| 		Password:      c.GlobalString("notification-email-server-password"), | ||||
| 		Port:          c.GlobalInt("notification-email-server-port"), | ||||
| 		tlsSkipVerify: c.GlobalBool("notification-email-server-tls-skip-verify"), | ||||
| 		logLevels:     acceptedLogLevels, | ||||
| 	} | ||||
|  | ||||
| 	log.AddHook(n) | ||||
| @@ -112,14 +114,7 @@ func (e *emailTypeNotifier) SendNotification() { | ||||
| } | ||||
|  | ||||
| func (e *emailTypeNotifier) Levels() []log.Level { | ||||
| 	// TODO: Make this configurable. | ||||
| 	return []log.Level{ | ||||
| 		log.PanicLevel, | ||||
| 		log.FatalLevel, | ||||
| 		log.ErrorLevel, | ||||
| 		log.WarnLevel, | ||||
| 		log.InfoLevel, | ||||
| 	} | ||||
| 	return e.logLevels | ||||
| } | ||||
|  | ||||
| func (e *emailTypeNotifier) Fire(entry *log.Entry) error { | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| package notifications | ||||
|  | ||||
| import ( | ||||
| 	"github.com/johntdyer/slackrus" | ||||
| 	log "github.com/sirupsen/logrus" | ||||
| 	"github.com/urfave/cli" | ||||
| ) | ||||
| @@ -19,15 +20,22 @@ type Notifier struct { | ||||
| func NewNotifier(c *cli.Context) *Notifier { | ||||
| 	n := &Notifier{} | ||||
|  | ||||
| 	logLevel, err := log.ParseLevel(c.GlobalString("notifications-level")) | ||||
| 	if err != nil { | ||||
| 		log.Fatalf("Notifications invalid log level: %s", err.Error()) | ||||
| 	} | ||||
|  | ||||
| 	acceptedLogLevels := slackrus.LevelThreshold(logLevel) | ||||
|  | ||||
| 	// Parse types and create notifiers. | ||||
| 	types := c.GlobalStringSlice("notifications") | ||||
| 	for _, t := range types { | ||||
| 		var tn typeNotifier | ||||
| 		switch t { | ||||
| 		case emailType: | ||||
| 			tn = newEmailNotifier(c) | ||||
| 			tn = newEmailNotifier(c, acceptedLogLevels) | ||||
| 		case slackType: | ||||
| 			tn = newSlackNotifier(c) | ||||
| 			tn = newSlackNotifier(c, acceptedLogLevels) | ||||
| 		default: | ||||
| 			log.Fatalf("Unknown notification type %q", t) | ||||
| 		} | ||||
|   | ||||
| @@ -14,17 +14,12 @@ type slackTypeNotifier struct { | ||||
| 	slackrus.SlackrusHook | ||||
| } | ||||
|  | ||||
| func newSlackNotifier(c *cli.Context) typeNotifier { | ||||
| 	logLevel, err := log.ParseLevel(c.GlobalString("notification-slack-level")) | ||||
| 	if err != nil { | ||||
| 		log.Fatalf("Slack notifications: %s", err.Error()) | ||||
| 	} | ||||
|  | ||||
| func newSlackNotifier(c *cli.Context, acceptedLogLevels []log.Level) typeNotifier { | ||||
| 	n := &slackTypeNotifier{ | ||||
| 		SlackrusHook: slackrus.SlackrusHook{ | ||||
| 			HookURL:        c.GlobalString("notification-slack-hook-url"), | ||||
| 			Username:       c.GlobalString("notification-slack-identifier"), | ||||
| 			AcceptedLevels: slackrus.LevelThreshold(logLevel), | ||||
| 			AcceptedLevels: acceptedLogLevels, | ||||
| 		}, | ||||
| 	} | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user