mirror of
https://github.com/crazy-max/diun.git
synced 2025-12-21 13:23:09 +01:00
63 lines
1.9 KiB
Go
63 lines
1.9 KiB
Go
package notif
|
|
|
|
import (
|
|
"github.com/crazy-max/diun/internal/model"
|
|
"github.com/crazy-max/diun/internal/notif/gotify"
|
|
"github.com/crazy-max/diun/internal/notif/mail"
|
|
"github.com/crazy-max/diun/internal/notif/notifier"
|
|
"github.com/crazy-max/diun/internal/notif/rocketchat"
|
|
"github.com/crazy-max/diun/internal/notif/slack"
|
|
"github.com/crazy-max/diun/internal/notif/telegram"
|
|
"github.com/crazy-max/diun/internal/notif/webhook"
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
// Client represents an active webhook notification object
|
|
type Client struct {
|
|
cfg model.Notif
|
|
app model.App
|
|
notifiers []notifier.Notifier
|
|
}
|
|
|
|
// New creates a new notification instance
|
|
func New(config model.Notif, app model.App, userAgent string) (*Client, error) {
|
|
var c = &Client{
|
|
cfg: config,
|
|
app: app,
|
|
notifiers: []notifier.Notifier{},
|
|
}
|
|
|
|
// Add notifiers
|
|
if config.Gotify.Enable {
|
|
c.notifiers = append(c.notifiers, gotify.New(config.Gotify, app, userAgent))
|
|
}
|
|
if config.Mail.Enable {
|
|
c.notifiers = append(c.notifiers, mail.New(config.Mail, app))
|
|
}
|
|
if config.RocketChat.Enable {
|
|
c.notifiers = append(c.notifiers, rocketchat.New(config.RocketChat, app, userAgent))
|
|
}
|
|
if config.Slack.Enable {
|
|
c.notifiers = append(c.notifiers, slack.New(config.Slack, app))
|
|
}
|
|
if config.Telegram.Enable {
|
|
c.notifiers = append(c.notifiers, telegram.New(config.Telegram, app))
|
|
}
|
|
if config.Webhook.Enable {
|
|
c.notifiers = append(c.notifiers, webhook.New(config.Webhook, app, userAgent))
|
|
}
|
|
|
|
log.Debug().Msgf("%d notifier(s) created", len(c.notifiers))
|
|
return c, nil
|
|
}
|
|
|
|
// Send creates and sends notifications to notifiers
|
|
func (c *Client) Send(entry model.NotifEntry) {
|
|
for _, n := range c.notifiers {
|
|
log.Debug().Str("image", entry.Image.String()).Msgf("Sending %s notification...", n.Name())
|
|
if err := n.Send(entry); err != nil {
|
|
log.Error().Err(err).Str("image", entry.Image.String()).Msgf("%s notification failed", n.Name())
|
|
}
|
|
}
|
|
}
|