mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2025-10-13 00:46:39 +08:00
69 lines
2.4 KiB
Go
69 lines
2.4 KiB
Go
package alert_push
|
|
|
|
import (
|
|
"github.com/1Panel-dev/1Panel/agent/app/dto"
|
|
"github.com/1Panel-dev/1Panel/agent/app/repo"
|
|
"github.com/1Panel-dev/1Panel/agent/constant"
|
|
"github.com/1Panel-dev/1Panel/agent/global"
|
|
alertUtil "github.com/1Panel-dev/1Panel/agent/utils/alert"
|
|
"github.com/1Panel-dev/1Panel/agent/utils/xpack"
|
|
"github.com/jinzhu/copier"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
func PushAlert(pushAlert dto.PushAlert) error {
|
|
if !alertUtil.CheckSendTimeRange(alertUtil.GetCronJobType(pushAlert.AlertType)) {
|
|
return nil
|
|
}
|
|
|
|
alertRepo := repo.NewIAlertRepo()
|
|
alertInfo, err := alertRepo.Get(alertRepo.WithByType(pushAlert.AlertType), alertRepo.WithByProject(strconv.Itoa(int(pushAlert.EntryID))), repo.WithByStatus(constant.AlertEnable))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
var alert dto.AlertDTO
|
|
_ = copier.Copy(&alert, &alertInfo)
|
|
|
|
// 根据发送方式推送不同的日志记录
|
|
methods := strings.Split(alert.Method, ",")
|
|
for _, m := range methods {
|
|
m = strings.TrimSpace(m)
|
|
switch m {
|
|
case constant.SMS:
|
|
if !alertUtil.CheckTaskFrequency(constant.SMS) {
|
|
continue
|
|
}
|
|
todayCount, _, err := alertRepo.LoadTaskCount(alertUtil.GetCronJobType(alert.Type), strconv.Itoa(int(pushAlert.EntryID)), constant.SMS)
|
|
if err != nil || alert.SendCount <= todayCount {
|
|
continue
|
|
}
|
|
var create = dto.AlertLogCreate{
|
|
Type: alertUtil.GetCronJobType(alert.Type),
|
|
AlertId: alert.ID,
|
|
Count: todayCount + 1,
|
|
}
|
|
_ = xpack.CreateTaskScanSMSAlertLog(alert, create, pushAlert, constant.SMS)
|
|
alertUtil.CreateNewAlertTask(strconv.Itoa(int(pushAlert.EntryID)), alertUtil.GetCronJobType(alert.Type), strconv.Itoa(int(pushAlert.EntryID)), constant.SMS)
|
|
case constant.Email:
|
|
todayCount, _, err := alertRepo.LoadTaskCount(alertUtil.GetCronJobType(alert.Type), strconv.Itoa(int(pushAlert.EntryID)), constant.Email)
|
|
if err != nil || alert.SendCount <= todayCount {
|
|
continue
|
|
}
|
|
var create = dto.AlertLogCreate{
|
|
Type: alertUtil.GetCronJobType(alert.Type),
|
|
AlertId: alert.ID,
|
|
Count: todayCount + 1,
|
|
}
|
|
transport := xpack.LoadRequestTransport()
|
|
err = alertUtil.CreateTaskScanEmailAlertLog(alert, create, pushAlert, constant.Email, transport)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
alertUtil.CreateNewAlertTask(strconv.Itoa(int(pushAlert.EntryID)), alertUtil.GetCronJobType(alert.Type), strconv.Itoa(int(pushAlert.EntryID)), constant.Email)
|
|
default:
|
|
}
|
|
}
|
|
global.LOG.Infof("%s alert push successful", alert.Type)
|
|
return nil
|
|
}
|