8
"go.avito.ru/DO/moira/senders/mail"
9
"go.avito.ru/DO/moira/senders/pushover"
10
"go.avito.ru/DO/moira/senders/script"
11
"go.avito.ru/DO/moira/senders/slack"
12
"go.avito.ru/DO/moira/senders/telegram"
13
"go.avito.ru/DO/moira/senders/twilio"
14
"go.avito.ru/DO/moira/senders/webhook"
18
func (notifier *StandardNotifier) RegisterSenders(connector moira.Database) error {
19
for _, senderSettings := range notifier.config.Senders {
20
senderSettings["front_uri"] = notifier.config.FrontURL
21
switch senderSettings["type"] {
23
if err := notifier.RegisterSender(senderSettings, &pushover.Sender{}); err != nil {
24
notifier.logger.Fatal(fmt.Sprintf("Can not register sender %s: %s", senderSettings["type"], err))
27
if err := notifier.RegisterSender(senderSettings, &slack.Sender{DataBase: connector}); err != nil {
28
notifier.logger.Fatal(fmt.Sprintf("Can not register sender %s: %s", senderSettings["type"], err))
31
if err := notifier.RegisterSender(senderSettings, &mail.Sender{}); err != nil {
32
notifier.logger.Fatal(fmt.Sprintf("Can not register sender %s: %s", senderSettings["type"], err))
35
if err := notifier.RegisterSender(senderSettings, &script.Sender{}); err != nil {
36
notifier.logger.Fatal(fmt.Sprintf("Can not register sender %s: %s", senderSettings["type"], err))
39
if err := notifier.RegisterSender(senderSettings, &telegram.Sender{DataBase: connector}); err != nil {
40
notifier.logger.Fatal(fmt.Sprintf("Can not register sender %s: %s", senderSettings["type"], err))
43
if err := notifier.RegisterSender(senderSettings, &twilio.Sender{}); err != nil {
44
notifier.logger.Fatal(fmt.Sprintf("Can not register sender %s: %s", senderSettings["type"], err))
47
if err := notifier.RegisterSender(senderSettings, &twilio.Sender{}); err != nil {
48
notifier.logger.Fatal(fmt.Sprintf("Can not register sender %s: %s", senderSettings["type"], err))
51
if err := notifier.RegisterSender(senderSettings, &webhook.Sender{}); err != nil {
52
notifier.logger.Fatal(fmt.Sprintf("Can not register sender %s: %s", senderSettings["type"], err))
55
return fmt.Errorf("Unknown sender type [%s]", senderSettings["type"])
60
notifier.addSenderMetrics(slack.DelayedActionWorkerId)
66
func (notifier *StandardNotifier) RegisterSender(senderSettings map[string]string, sender moira.Sender) error {
67
var senderIdent string
68
if senderSettings["type"] == "script" {
69
senderIdent = senderSettings["name"]
71
senderIdent = senderSettings["type"]
74
err := sender.Init(senderSettings, notifier.config.Location)
76
return fmt.Errorf("Don't initialize sender [%s], err [%s]", senderIdent, err.Error())
79
ch := make(chan NotificationPackage)
80
notifier.senders[senderIdent] = ch
81
notifier.addSenderMetrics(senderIdent)
82
notifier.waitGroup.Add(1)
84
go notifier.run(sender, ch)
86
notifier.logger.Info(fmt.Sprintf("Sender %s registered", senderIdent))
91
func (notifier *StandardNotifier) StopSenders() {
92
for _, ch := range notifier.senders {
96
notifier.senders = make(map[string]chan NotificationPackage)
97
notifier.logger.Info("Waiting senders finish...")
98
notifier.waitGroup.Wait()
99
notifier.logger.Info("Moira Notifier Senders stopped")
102
func (notifier *StandardNotifier) addSenderMetrics(id string) {
103
notifier.metrics.SendersOkMetrics.AddMetric(id, fmt.Sprintf("notifier.%s.sends_ok", getGraphiteSenderIdent(id)))
104
notifier.metrics.SendersFailedMetrics.AddMetric(id, fmt.Sprintf("notifier.%s.sends_failed", getGraphiteSenderIdent(id)))
107
func getGraphiteSenderIdent(ident string) string {
108
return strings.Replace(ident, " ", "_", -1)