mirror of
https://github.com/Buriburizaem0n/nezha_domains.git
synced 2026-02-05 05:00:05 +00:00
🔊 v0.3.0 计划任务(定期备份等场景)
This commit is contained in:
@@ -3,8 +3,10 @@ package dao
|
||||
import (
|
||||
"sort"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/patrickmn/go-cache"
|
||||
"github.com/robfig/cron/v3"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"github.com/naiba/nezha/model"
|
||||
@@ -21,13 +23,29 @@ var Cache *cache.Cache
|
||||
|
||||
var DB *gorm.DB
|
||||
|
||||
// 服务器监控、状态相关
|
||||
var ServerList map[uint64]*model.Server
|
||||
var ServerLock sync.RWMutex
|
||||
|
||||
var SortedServerList []*model.Server
|
||||
var SortedServerLock sync.RWMutex
|
||||
|
||||
var Version = "v0.2.6"
|
||||
// 计划任务相关
|
||||
var CronLock sync.RWMutex
|
||||
var Crons map[uint64]*model.Cron
|
||||
var Cron *cron.Cron
|
||||
|
||||
var Version = "v0.3.0"
|
||||
|
||||
func init() {
|
||||
shanghai, err := time.LoadLocation("Asia/Shanghai")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
Cron = cron.New(cron.WithLocation(shanghai))
|
||||
Crons = make(map[uint64]*model.Cron)
|
||||
ServerList = make(map[uint64]*model.Server)
|
||||
}
|
||||
|
||||
func ReSortServer() {
|
||||
ServerLock.RLock()
|
||||
|
||||
@@ -18,10 +18,11 @@ type NezhaHandler struct {
|
||||
|
||||
func (s *NezhaHandler) ReportTask(c context.Context, r *pb.TaskResult) (*pb.Receipt, error) {
|
||||
var err error
|
||||
if _, err = s.Auth.Check(c); err != nil {
|
||||
var clientID uint64
|
||||
if clientID, err = s.Auth.Check(c); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if r.GetType() == model.MonitorTypeHTTPGET {
|
||||
if r.GetType() == model.TaskTypeHTTPGET {
|
||||
// SSL 证书报警
|
||||
var errMsg string
|
||||
if strings.HasPrefix(r.GetData(), "SSL证书错误:") {
|
||||
@@ -54,10 +55,27 @@ func (s *NezhaHandler) ReportTask(c context.Context, r *pb.TaskResult) (*pb.Rece
|
||||
alertmanager.SendNotification(fmt.Sprintf("服务监控:%s %s", monitor.Name, errMsg))
|
||||
}
|
||||
}
|
||||
// 存入历史记录
|
||||
mh := model.PB2MonitorHistory(r)
|
||||
if err := dao.DB.Create(&mh).Error; err != nil {
|
||||
return nil, err
|
||||
if r.GetType() == model.TaskTypeCommand {
|
||||
// 处理上报的计划任务
|
||||
dao.CronLock.RLock()
|
||||
cr := dao.Crons[r.GetId()]
|
||||
dao.CronLock.RUnlock()
|
||||
if cr.PushSuccessful && r.GetSuccessful() {
|
||||
alertmanager.SendNotification(fmt.Sprintf("成功计划任务:%s ,服务器:%d,日志:\n%s", cr.Name, clientID, r.GetData()))
|
||||
}
|
||||
if !r.GetSuccessful() {
|
||||
alertmanager.SendNotification(fmt.Sprintf("失败计划任务:%s ,服务器:%d,日志:\n%s", cr.Name, clientID, r.GetData()))
|
||||
}
|
||||
dao.DB.Model(cr).Updates(model.Cron{
|
||||
LastExecutedAt: time.Now().Add(time.Second * -1 * time.Duration(r.GetDelay())),
|
||||
LastResult: r.GetSuccessful(),
|
||||
})
|
||||
} else {
|
||||
// 存入历史记录
|
||||
mh := model.PB2MonitorHistory(r)
|
||||
if err := dao.DB.Create(&mh).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
return &pb.Receipt{Proced: true}, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user