alert.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package alert
  2. import (
  3. "github.com/xinliangnote/go-gin-api/configs"
  4. "github.com/xinliangnote/go-gin-api/internal/proposal"
  5. "github.com/xinliangnote/go-gin-api/pkg/errors"
  6. "github.com/xinliangnote/go-gin-api/pkg/mail"
  7. "go.uber.org/zap"
  8. )
  9. // NotifyHandler 告警通知
  10. func NotifyHandler(logger *zap.Logger) func(msg *proposal.AlertMessage) {
  11. if logger == nil {
  12. panic("logger required")
  13. }
  14. return func(msg *proposal.AlertMessage) {
  15. cfg := configs.Get().Mail
  16. if cfg.Host == "" || cfg.Port == 0 || cfg.User == "" || cfg.Pass == "" || cfg.To == "" {
  17. logger.Error("Mail config error")
  18. return
  19. }
  20. subject, body, err := newHTMLEmail(
  21. msg.Method,
  22. msg.HOST,
  23. msg.URI,
  24. msg.TraceID,
  25. msg.ErrorMessage,
  26. msg.ErrorStack,
  27. )
  28. if err != nil {
  29. logger.Error("email template error", zap.Error(err))
  30. return
  31. }
  32. options := &mail.Options{
  33. MailHost: cfg.Host,
  34. MailPort: cfg.Port,
  35. MailUser: cfg.User,
  36. MailPass: cfg.Pass,
  37. MailTo: cfg.To,
  38. Subject: subject,
  39. Body: body,
  40. }
  41. if err := mail.Send(options); err != nil {
  42. logger.Error("发送告警通知邮件失败", zap.Error(errors.WithStack(err)))
  43. }
  44. return
  45. }
  46. }