mirror of
https://github.com/Buriburizaem0n/nezha_domains.git
synced 2026-02-06 05:30:05 +00:00
🚀 dashboard v0.14.6 with installer v0.11.0
This commit is contained in:
@@ -39,14 +39,14 @@ func (s *NezhaHandler) ReportTask(c context.Context, r *pb.TaskResult) (*pb.Rece
|
||||
&i18n.LocalizeConfig{
|
||||
MessageID: "ScheduledTaskExecutedSuccessfully",
|
||||
},
|
||||
), cr.Name, singleton.ServerList[clientID].Name, r.GetData()), false, &curServer)
|
||||
), cr.Name, singleton.ServerList[clientID].Name, r.GetData()), nil, &curServer)
|
||||
}
|
||||
if !r.GetSuccessful() {
|
||||
singleton.SendNotification(cr.NotificationTag, fmt.Sprintf("[%s] %s, %s\n%s", singleton.Localizer.MustLocalize(
|
||||
&i18n.LocalizeConfig{
|
||||
MessageID: "ScheduledTaskExecutedFailed",
|
||||
},
|
||||
), cr.Name, singleton.ServerList[clientID].Name, r.GetData()), false, &curServer)
|
||||
), cr.Name, singleton.ServerList[clientID].Name, r.GetData()), nil, &curServer)
|
||||
}
|
||||
singleton.DB.Model(cr).Updates(model.Cron{
|
||||
LastExecutedAt: time.Now().Add(time.Second * -1 * time.Duration(r.GetDelay())),
|
||||
@@ -117,12 +117,13 @@ func (s *NezhaHandler) ReportSystemInfo(c context.Context, r *pb.Host) (*pb.Rece
|
||||
singleton.ServerList[clientID].Host.IP != "" &&
|
||||
host.IP != "" &&
|
||||
singleton.ServerList[clientID].Host.IP != host.IP {
|
||||
|
||||
singleton.SendNotification(singleton.Conf.IPChangeNotificationTag, fmt.Sprintf(
|
||||
"[%s] %s, %s => %s",
|
||||
singleton.Localizer.MustLocalize(&i18n.LocalizeConfig{
|
||||
MessageID: "IPChanged",
|
||||
}),
|
||||
singleton.ServerList[clientID].Name, singleton.IPDesensitize(singleton.ServerList[clientID].Host.IP), singleton.IPDesensitize(host.IP)), true)
|
||||
singleton.ServerList[clientID].Name, singleton.IPDesensitize(singleton.ServerList[clientID].Host.IP), singleton.IPDesensitize(host.IP)), singleton.NotificationMuteLabel.IPChanged(clientID), nil)
|
||||
}
|
||||
|
||||
// 判断是否是机器重启,如果是机器重启要录入最后记录的流量里面
|
||||
|
||||
@@ -163,7 +163,7 @@ func checkStatus() {
|
||||
MessageID: "Incident",
|
||||
}), server.Name, IPDesensitize(server.Host.IP), alert.Name)
|
||||
go SendTriggerTasks(alert.FailTriggerTasks, curServer.ID)
|
||||
go SendNotification(alert.NotificationTag, message, true, &curServer)
|
||||
go SendNotification(alert.NotificationTag, message, NotificationMuteLabel.ServerIncident(server.ID, alert.ID), &curServer)
|
||||
}
|
||||
} else {
|
||||
// 本次通过检查但上一次的状态为失败,则发送恢复通知
|
||||
@@ -172,7 +172,7 @@ func checkStatus() {
|
||||
MessageID: "Resolved",
|
||||
}), server.Name, IPDesensitize(server.Host.IP), alert.Name)
|
||||
go SendTriggerTasks(alert.RecoverTriggerTasks, curServer.ID)
|
||||
go SendNotification(alert.NotificationTag, message, true, &curServer)
|
||||
go SendNotification(alert.NotificationTag, message, NotificationMuteLabel.ServerIncidentResolved(server.ID, alert.ID), &curServer)
|
||||
}
|
||||
alertsPrevState[alert.ID][server.ID] = _RuleCheckPass
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ func LoadCronTasks() {
|
||||
// 向注册错误的计划任务所在通知组发送通知
|
||||
for _, tag := range notificationTagList {
|
||||
notificationMsgMap[tag].WriteString("] 这些任务将无法正常执行,请进入后点重新修改保存。")
|
||||
SendNotification(tag, notificationMsgMap[tag].String(), false)
|
||||
SendNotification(tag, notificationMsgMap[tag].String(), nil)
|
||||
}
|
||||
Cron.Start()
|
||||
}
|
||||
@@ -108,7 +108,7 @@ func CronTrigger(cr model.Cron, triggerServer ...uint64) func() {
|
||||
// 保存当前服务器状态信息
|
||||
curServer := model.Server{}
|
||||
copier.Copy(&curServer, s)
|
||||
SendNotification(cr.NotificationTag, fmt.Sprintf("[任务失败] %s,服务器 %s 离线,无法执行。", cr.Name, s.Name), false, &curServer)
|
||||
SendNotification(cr.NotificationTag, fmt.Sprintf("[任务失败] %s,服务器 %s 离线,无法执行。", cr.Name, s.Name), nil, &curServer)
|
||||
}
|
||||
}
|
||||
return
|
||||
@@ -133,7 +133,7 @@ func CronTrigger(cr model.Cron, triggerServer ...uint64) func() {
|
||||
// 保存当前服务器状态信息
|
||||
curServer := model.Server{}
|
||||
copier.Copy(&curServer, s)
|
||||
SendNotification(cr.NotificationTag, fmt.Sprintf("[任务失败] %s,服务器 %s 离线,无法执行。", cr.Name, s.Name), false, &curServer)
|
||||
SendNotification(cr.NotificationTag, fmt.Sprintf("[任务失败] %s,服务器 %s 离线,无法执行。", cr.Name, s.Name), nil, &curServer)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
package singleton
|
||||
|
||||
import (
|
||||
"crypto/md5" // #nosec
|
||||
"encoding/hex"
|
||||
// #nosec
|
||||
|
||||
"fmt"
|
||||
"log"
|
||||
"sync"
|
||||
"time"
|
||||
@@ -48,7 +49,7 @@ func LoadNotifications() {
|
||||
func SetDefaultNotificationTagInDB(n *model.Notification) {
|
||||
n.Tag = "default"
|
||||
if err := DB.Save(n).Error; err != nil {
|
||||
log.Println("[ERROR]", err)
|
||||
log.Println("NEZHA>> SetDefaultNotificationTagInDB 错误: ", err)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -102,12 +103,13 @@ func OnDeleteNotification(id uint64) {
|
||||
}
|
||||
|
||||
// SendNotification 向指定的通知方式组的所有通知方式发送通知
|
||||
func SendNotification(notificationTag string, desc string, mutable bool, ext ...*model.Server) {
|
||||
if mutable {
|
||||
func SendNotification(notificationTag string, desc string, muteLabel *string, ext ...*model.Server) {
|
||||
if muteLabel != nil {
|
||||
// 将通知方式组名称加入静音标志
|
||||
muteLabel := fmt.Sprintf("%s:%s", *muteLabel, notificationTag)
|
||||
// 通知防骚扰策略
|
||||
nID := hex.EncodeToString(md5.New().Sum([]byte(desc))) // #nosec
|
||||
var flag bool
|
||||
if cacheN, has := Cache.Get(nID); has {
|
||||
if cacheN, has := Cache.Get(muteLabel); has {
|
||||
nHistory := cacheN.(NotificationHistory)
|
||||
// 每次提醒都增加一倍等待时间,最后每天最多提醒一次
|
||||
if time.Now().After(nHistory.Until) {
|
||||
@@ -118,12 +120,12 @@ func SendNotification(notificationTag string, desc string, mutable bool, ext ...
|
||||
}
|
||||
nHistory.Until = time.Now().Add(nHistory.Duration)
|
||||
// 缓存有效期加 10 分钟
|
||||
Cache.Set(nID, nHistory, nHistory.Duration+time.Minute*10)
|
||||
Cache.Set(muteLabel, nHistory, nHistory.Duration+time.Minute*10)
|
||||
}
|
||||
} else {
|
||||
// 新提醒直接通知
|
||||
flag = true
|
||||
Cache.Set(nID, NotificationHistory{
|
||||
Cache.Set(muteLabel, NotificationHistory{
|
||||
Duration: firstNotificationDelay,
|
||||
Until: time.Now().Add(firstNotificationDelay),
|
||||
}, firstNotificationDelay+time.Minute*10)
|
||||
@@ -131,7 +133,7 @@ func SendNotification(notificationTag string, desc string, mutable bool, ext ...
|
||||
|
||||
if !flag {
|
||||
if Conf.Debug {
|
||||
log.Println("NEZHA>> 静音的重复通知:", desc, mutable)
|
||||
log.Println("NEZHA>> 静音的重复通知:", desc, muteLabel)
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -140,7 +142,7 @@ func SendNotification(notificationTag string, desc string, mutable bool, ext ...
|
||||
notificationsLock.RLock()
|
||||
defer notificationsLock.RUnlock()
|
||||
for _, n := range NotificationList[notificationTag] {
|
||||
log.Println("尝试通知", n.Name)
|
||||
log.Println("NEZHA>> 尝试通知", n.Name)
|
||||
}
|
||||
for _, n := range NotificationList[notificationTag] {
|
||||
ns := model.NotificationServerBundle{
|
||||
@@ -157,3 +159,42 @@ func SendNotification(notificationTag string, desc string, mutable bool, ext ...
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type _NotificationMuteLabel struct{}
|
||||
|
||||
var NotificationMuteLabel _NotificationMuteLabel
|
||||
|
||||
func (_NotificationMuteLabel) IPChanged(serverId uint64) *string {
|
||||
label := fmt.Sprintf("bf::ic-%d", serverId)
|
||||
return &label
|
||||
}
|
||||
|
||||
func (_NotificationMuteLabel) ServerIncident(alertId uint64, serverId uint64) *string {
|
||||
label := fmt.Sprintf("bf::sei-%d-%d", alertId, serverId)
|
||||
return &label
|
||||
}
|
||||
|
||||
func (_NotificationMuteLabel) ServerIncidentResolved(alertId uint64, serverId uint64) *string {
|
||||
label := fmt.Sprintf("bf::seir-%d-%d", alertId, serverId)
|
||||
return &label
|
||||
}
|
||||
|
||||
func (_NotificationMuteLabel) ServiceLatencyMin(serviceId uint64) *string {
|
||||
label := fmt.Sprintf("bf::sln-%d", serviceId)
|
||||
return &label
|
||||
}
|
||||
|
||||
func (_NotificationMuteLabel) ServiceLatencyMax(serviceId uint64) *string {
|
||||
label := fmt.Sprintf("bf::slm-%d", serviceId)
|
||||
return &label
|
||||
}
|
||||
|
||||
func (_NotificationMuteLabel) ServiceStateChanged(serviceId uint64) *string {
|
||||
label := fmt.Sprintf("bf::ssc-%d", serviceId)
|
||||
return &label
|
||||
}
|
||||
|
||||
func (_NotificationMuteLabel) ServiceSSL(serviceId uint64) *string {
|
||||
label := fmt.Sprintf("bf::sssl-%d", serviceId)
|
||||
return &label
|
||||
}
|
||||
|
||||
@@ -375,12 +375,12 @@ func (ss *ServiceSentinel) worker() {
|
||||
if ss.monitors[mh.GetId()].LatencyNotify {
|
||||
if mh.Delay > ss.monitors[mh.GetId()].MaxLatency {
|
||||
ServerLock.RLock()
|
||||
go SendNotification(ss.monitors[mh.GetId()].NotificationTag, fmt.Sprintf("[Latency] %s %2f > %2f, Reporter: %s", ss.monitors[mh.GetId()].Name, mh.Delay, ss.monitors[mh.GetId()].MaxLatency, ServerList[r.Reporter].Name), true)
|
||||
go SendNotification(ss.monitors[mh.GetId()].NotificationTag, fmt.Sprintf("[Latency] %s %2f > %2f, Reporter: %s", ss.monitors[mh.GetId()].Name, mh.Delay, ss.monitors[mh.GetId()].MaxLatency, ServerList[r.Reporter].Name), NotificationMuteLabel.ServiceLatencyMin(mh.GetId()))
|
||||
ServerLock.RUnlock()
|
||||
}
|
||||
if mh.Delay < ss.monitors[mh.GetId()].MinLatency {
|
||||
ServerLock.RLock()
|
||||
go SendNotification(ss.monitors[mh.GetId()].NotificationTag, fmt.Sprintf("[Latency] %s %2f < %2f, Reporter: %s", ss.monitors[mh.GetId()].Name, mh.Delay, ss.monitors[mh.GetId()].MinLatency, ServerList[r.Reporter].Name), true)
|
||||
go SendNotification(ss.monitors[mh.GetId()].NotificationTag, fmt.Sprintf("[Latency] %s %2f < %2f, Reporter: %s", ss.monitors[mh.GetId()].Name, mh.Delay, ss.monitors[mh.GetId()].MinLatency, ServerList[r.Reporter].Name), NotificationMuteLabel.ServiceLatencyMax(mh.GetId()))
|
||||
ServerLock.RUnlock()
|
||||
}
|
||||
}
|
||||
@@ -393,7 +393,7 @@ func (ss *ServiceSentinel) worker() {
|
||||
ss.lastStatus[mh.GetId()] = stateCode
|
||||
if isNeedSendNotification {
|
||||
ServerLock.RLock()
|
||||
go SendNotification(ss.monitors[mh.GetId()].NotificationTag, fmt.Sprintf("[%s] %s Reporter: %s, Error: %s", StatusCodeToString(stateCode), ss.monitors[mh.GetId()].Name, ServerList[r.Reporter].Name, mh.Data), true)
|
||||
go SendNotification(ss.monitors[mh.GetId()].NotificationTag, fmt.Sprintf("[%s] %s Reporter: %s, Error: %s", StatusCodeToString(stateCode), ss.monitors[mh.GetId()].Name, ServerList[r.Reporter].Name, mh.Data), NotificationMuteLabel.ServiceStateChanged(mh.GetId()))
|
||||
ServerLock.RUnlock()
|
||||
}
|
||||
ss.monitorsLock.RUnlock()
|
||||
@@ -438,7 +438,7 @@ func (ss *ServiceSentinel) worker() {
|
||||
if errMsg != "" {
|
||||
ss.monitorsLock.RLock()
|
||||
if ss.monitors[mh.GetId()].Notify {
|
||||
go SendNotification(ss.monitors[mh.GetId()].NotificationTag, fmt.Sprintf("[SSL] %s %s", ss.monitors[mh.GetId()].Name, errMsg), true)
|
||||
go SendNotification(ss.monitors[mh.GetId()].NotificationTag, fmt.Sprintf("[SSL] %s %s", ss.monitors[mh.GetId()].Name, errMsg), NotificationMuteLabel.ServiceSSL(mh.GetId()))
|
||||
}
|
||||
ss.monitorsLock.RUnlock()
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ import (
|
||||
"github.com/naiba/nezha/pkg/utils"
|
||||
)
|
||||
|
||||
var Version = "v0.14.5" // !!记得修改 README 中的 badge 版本!!
|
||||
var Version = "v0.14.6" // !!记得修改 README 中的 badge 版本!!
|
||||
|
||||
var (
|
||||
Conf *model.Config
|
||||
|
||||
Reference in New Issue
Block a user