diff --git a/README.md b/README.md index ba4d0ec..224f158 100644 --- a/README.md +++ b/README.md @@ -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: diff --git a/main.go b/main.go index 38b1269..962ab33 100644 --- a/main.go +++ b/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 { diff --git a/notifications/email.go b/notifications/email.go index 54a2f9f..5f84ca5 100644 --- a/notifications/email.go +++ b/notifications/email.go @@ -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 { diff --git a/notifications/notifier.go b/notifications/notifier.go index ab635bb..274811b 100644 --- a/notifications/notifier.go +++ b/notifications/notifier.go @@ -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) } diff --git a/notifications/slack.go b/notifications/slack.go index 3b17354..dd44f29 100644 --- a/notifications/slack.go +++ b/notifications/slack.go @@ -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, }, }