[notifier] 切换依赖为gomail,支持自定义端口及SSL
This commit is contained in:
parent
18e1672114
commit
2167db4918
|
|
@ -23,3 +23,4 @@ go.work
|
||||||
|
|
||||||
sysmonitord.code-workspace
|
sysmonitord.code-workspace
|
||||||
data/
|
data/
|
||||||
|
config.yaml
|
||||||
|
|
|
||||||
2
go.mod
2
go.mod
|
|
@ -23,5 +23,7 @@ require (
|
||||||
go.uber.org/zap v1.27.1 // indirect
|
go.uber.org/zap v1.27.1 // indirect
|
||||||
golang.org/x/sys v0.29.0 // indirect
|
golang.org/x/sys v0.29.0 // indirect
|
||||||
golang.org/x/term v0.28.0 // indirect
|
golang.org/x/term v0.28.0 // indirect
|
||||||
|
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
|
||||||
|
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
)
|
)
|
||||||
|
|
|
||||||
4
go.sum
4
go.sum
|
|
@ -50,6 +50,10 @@ golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg=
|
golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg=
|
||||||
golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek=
|
golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
|
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk=
|
||||||
|
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AWRXxgwEyPp2z+p0+hgMuE=
|
||||||
|
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw=
|
||||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ func NewAlerter(cfg config.NotificationConfig) *Alerter {
|
||||||
mailer: mail.NewMailer(cfg.Email),
|
mailer: mail.NewMailer(cfg.Email),
|
||||||
eventChan: make(chan AlertEvent, 100),
|
eventChan: make(chan AlertEvent, 100),
|
||||||
buffer: make([]AlertEvent, 0),
|
buffer: make([]AlertEvent, 0),
|
||||||
interval: 1 * time.Minute, // Todo: 可配置化
|
interval: 30 * time.Second, // Todo: 可配置化
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -63,6 +63,7 @@ func (a *Alerter) loop() {
|
||||||
logger.Log.Debug("[notifier] 收到告警,加入待发送序列", zap.String("path", event.Path))
|
logger.Log.Debug("[notifier] 收到告警,加入待发送序列", zap.String("path", event.Path))
|
||||||
|
|
||||||
case <-a.timer.C:
|
case <-a.timer.C:
|
||||||
|
logger.Log.Debug("[notifier] 定时检查告警事件,准备发送", zap.Int("count", len(a.buffer)))
|
||||||
a.mu.Lock()
|
a.mu.Lock()
|
||||||
if len(a.buffer) > 0 {
|
if len(a.buffer) > 0 {
|
||||||
a.sendAlert()
|
a.sendAlert()
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,11 @@ package mail
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/smtp"
|
|
||||||
"sysmonitord/internal/config"
|
"sysmonitord/internal/config"
|
||||||
"sysmonitord/pkg/logger"
|
"sysmonitord/pkg/logger"
|
||||||
|
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
|
"gopkg.in/gomail.v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Mailer struct {
|
type Mailer struct {
|
||||||
|
|
@ -23,28 +23,35 @@ func (m *Mailer) Send(subject, body string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
headers := make(map[string]string)
|
if m.cfg.SMTP.Server == "" || m.cfg.SMTP.Port == 0 {
|
||||||
headers["From"] = m.cfg.SMTP.Username
|
logger.Log.Error("[notifier] SMTP配置缺失",
|
||||||
headers["To"] = m.cfg.Recipients[0]
|
zap.String("server", m.cfg.SMTP.Server),
|
||||||
headers["Subject"] = subject
|
zap.Int("port", m.cfg.SMTP.Port),
|
||||||
|
)
|
||||||
message := ""
|
return fmt.Errorf("SMTP配置缺失")
|
||||||
for k, v := range headers {
|
|
||||||
message += fmt.Sprintf("%s: %s\r\n", k, v)
|
|
||||||
}
|
}
|
||||||
message += "\r\n" + body
|
|
||||||
|
|
||||||
auth := smtp.PlainAuth("", m.cfg.SMTP.Username, m.cfg.SMTP.Password, m.cfg.SMTP.Server)
|
msg := gomail.NewMessage()
|
||||||
addr := fmt.Sprintf("%s:%d", m.cfg.SMTP.Server, m.cfg.SMTP.Port)
|
msg.SetHeader("From", m.cfg.SMTP.Username)
|
||||||
|
msg.SetHeader("To", m.cfg.Recipients...)
|
||||||
|
msg.SetHeader("Subject", subject)
|
||||||
|
msg.SetBody("text/plain", body)
|
||||||
|
|
||||||
logger.Log.Info("[notifier] 发送邮件通知", zap.String("subject", subject), zap.String("to", m.cfg.Recipients[0]))
|
d := gomail.NewDialer(
|
||||||
|
m.cfg.SMTP.Server,
|
||||||
|
m.cfg.SMTP.Port,
|
||||||
|
m.cfg.SMTP.Username,
|
||||||
|
m.cfg.SMTP.Password,
|
||||||
|
)
|
||||||
|
|
||||||
err := smtp.SendMail(addr, auth, m.cfg.SMTP.Username, m.cfg.Recipients, []byte(message))
|
if m.cfg.SMTP.Port == 465 {
|
||||||
if err != nil {
|
d.SSL = true
|
||||||
logger.Log.Error("[notifier] 发送邮件失败", zap.Error(err))
|
}
|
||||||
|
|
||||||
|
if err := d.DialAndSend(msg); err != nil {
|
||||||
|
logger.Log.Error("[notifier] 邮件发送失败", zap.Error(err))
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
logger.Log.Info("[notifier] 邮件发送成功", zap.Strings("recipients", m.cfg.Recipients))
|
||||||
logger.Log.Info("[notifier] 邮件发送成功")
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user