🔥 移除后台登录类型设置,增加调度失败计划任务提醒
This commit is contained in:
		
							parent
							
								
									8af9b1ab18
								
							
						
					
					
						commit
						092f40b47f
					
				@ -4,7 +4,7 @@
 | 
				
			|||||||
  <br>
 | 
					  <br>
 | 
				
			||||||
  <small><i>LOGO designed by <a href="https://xio.ng" target="_blank">熊大</a> .</i></small>
 | 
					  <small><i>LOGO designed by <a href="https://xio.ng" target="_blank">熊大</a> .</i></small>
 | 
				
			||||||
  <br><br>
 | 
					  <br><br>
 | 
				
			||||||
<img src="https://img.shields.io/github/workflow/status/naiba/nezha/Dashboard%20image?label=Dash%20v0.10.2&logo=github&style=for-the-badge"> <img src="https://img.shields.io/github/v/release/naiba/nezha?color=brightgreen&label=Agent&style=for-the-badge&logo=github"> <img src="https://img.shields.io/github/workflow/status/naiba/nezha/Agent%20release?label=Agent%20CI&logo=github&style=for-the-badge"> <img src="https://img.shields.io/badge/Installer-v0.7.0-brightgreen?style=for-the-badge&logo=linux">
 | 
					<img src="https://img.shields.io/github/workflow/status/naiba/nezha/Dashboard%20image?label=Dash%20v0.10.3&logo=github&style=for-the-badge"> <img src="https://img.shields.io/github/v/release/naiba/nezha?color=brightgreen&label=Agent&style=for-the-badge&logo=github"> <img src="https://img.shields.io/github/workflow/status/naiba/nezha/Agent%20release?label=Agent%20CI&logo=github&style=for-the-badge"> <img src="https://img.shields.io/badge/Installer-v0.7.0-brightgreen?style=for-the-badge&logo=linux">
 | 
				
			||||||
  <br>
 | 
					  <br>
 | 
				
			||||||
  <br>
 | 
					  <br>
 | 
				
			||||||
  <p>:trollface: <b>哪吒监控</b> 一站式轻监控轻运维系统。支持系统状态、HTTP(SSL 证书变更、即将到期、到期)、TCP、Ping 监控报警,命令批量执行和计划任务。</p>
 | 
					  <p>:trollface: <b>哪吒监控</b> 一站式轻监控轻运维系统。支持系统状态、HTTP(SSL 证书变更、即将到期、到期)、TCP、Ping 监控报警,命令批量执行和计划任务。</p>
 | 
				
			||||||
 | 
				
			|||||||
@ -457,7 +457,6 @@ type settingForm struct {
 | 
				
			|||||||
	ViewPassword               string
 | 
						ViewPassword               string
 | 
				
			||||||
	EnableIPChangeNotification string
 | 
						EnableIPChangeNotification string
 | 
				
			||||||
	IgnoredIPNotification      string
 | 
						IgnoredIPNotification      string
 | 
				
			||||||
	Oauth2Type                 string
 | 
					 | 
				
			||||||
	GRPCHost                   string
 | 
						GRPCHost                   string
 | 
				
			||||||
	Cover                      uint8
 | 
						Cover                      uint8
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -479,7 +478,6 @@ func (ma *memberAPI) updateSetting(c *gin.Context) {
 | 
				
			|||||||
	dao.Conf.Site.Theme = sf.Theme
 | 
						dao.Conf.Site.Theme = sf.Theme
 | 
				
			||||||
	dao.Conf.Site.CustomCode = sf.CustomCode
 | 
						dao.Conf.Site.CustomCode = sf.CustomCode
 | 
				
			||||||
	dao.Conf.Site.ViewPassword = sf.ViewPassword
 | 
						dao.Conf.Site.ViewPassword = sf.ViewPassword
 | 
				
			||||||
	dao.Conf.Oauth2.Type = sf.Oauth2Type
 | 
					 | 
				
			||||||
	dao.Conf.Oauth2.Admin = sf.Admin
 | 
						dao.Conf.Oauth2.Admin = sf.Admin
 | 
				
			||||||
	if err := dao.Conf.Save(); err != nil {
 | 
						if err := dao.Conf.Save(); err != nil {
 | 
				
			||||||
		c.JSON(http.StatusOK, model.Response{
 | 
							c.JSON(http.StatusOK, model.Response{
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,9 @@
 | 
				
			|||||||
package main
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"bytes"
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
	"log"
 | 
						"log"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -56,6 +58,7 @@ func initSystem() {
 | 
				
			|||||||
		model.Notification{}, model.AlertRule{}, model.Monitor{},
 | 
							model.Notification{}, model.AlertRule{}, model.Monitor{},
 | 
				
			||||||
		model.MonitorHistory{}, model.Cron{}, model.Transfer{})
 | 
							model.MonitorHistory{}, model.Cron{}, model.Transfer{})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						dao.LoadNotifications()
 | 
				
			||||||
	loadServers() //加载服务器列表
 | 
						loadServers() //加载服务器列表
 | 
				
			||||||
	loadCrons()   //加载计划任务
 | 
						loadCrons()   //加载计划任务
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -153,6 +156,7 @@ func loadCrons() {
 | 
				
			|||||||
	var crons []model.Cron
 | 
						var crons []model.Cron
 | 
				
			||||||
	dao.DB.Find(&crons)
 | 
						dao.DB.Find(&crons)
 | 
				
			||||||
	var err error
 | 
						var err error
 | 
				
			||||||
 | 
						errMsg := new(bytes.Buffer)
 | 
				
			||||||
	for i := 0; i < len(crons); i++ {
 | 
						for i := 0; i < len(crons); i++ {
 | 
				
			||||||
		cr := crons[i]
 | 
							cr := crons[i]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -165,9 +169,16 @@ func loadCrons() {
 | 
				
			|||||||
		if err == nil {
 | 
							if err == nil {
 | 
				
			||||||
			dao.Crons[cr.ID] = &cr
 | 
								dao.Crons[cr.ID] = &cr
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			log.Println("NEZHA>> 计划任务调度失败", cr, err)
 | 
								if errMsg.Len() == 0 {
 | 
				
			||||||
 | 
									errMsg.WriteString("调度失败的计划任务:[")
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								errMsg.WriteString(fmt.Sprintf("%d,", cr.ID))
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						if errMsg.Len() > 0 {
 | 
				
			||||||
 | 
							msg := errMsg.String()
 | 
				
			||||||
 | 
							dao.SendNotification(msg[:len(msg)-1]+"] 这些任务将无法正常执行,请进入后点重新修改保存。", false)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	dao.Cron.Start()
 | 
						dao.Cron.Start()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -8,15 +8,6 @@
 | 
				
			|||||||
                <label>站点标题</label>
 | 
					                <label>站点标题</label>
 | 
				
			||||||
                <input type="text" name="Title" placeholder="哪吒监控" value="{{.Conf.Site.Brand}}">
 | 
					                <input type="text" name="Title" placeholder="哪吒监控" value="{{.Conf.Site.Brand}}">
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
            <div class="field">
 | 
					 | 
				
			||||||
                <label>登录类型</label>
 | 
					 | 
				
			||||||
                <select name="Oauth2Type">
 | 
					 | 
				
			||||||
                    <option value="github" {{if eq .Conf.Oauth2.Type "github" }} selected="selected" {{end}}>GitHub
 | 
					 | 
				
			||||||
                    </option>
 | 
					 | 
				
			||||||
                    <option value="gitee" {{if eq .Conf.Oauth2.Type "gitee" }} selected="selected" {{end}}>Gitee
 | 
					 | 
				
			||||||
                    </option>
 | 
					 | 
				
			||||||
                </select>
 | 
					 | 
				
			||||||
            </div>
 | 
					 | 
				
			||||||
            <div class="field">
 | 
					            <div class="field">
 | 
				
			||||||
                <label>管理员列表</label>
 | 
					                <label>管理员列表</label>
 | 
				
			||||||
                <input type="text" name="Admin" placeholder="1010,2020" value="{{.Conf.Oauth2.Admin}}">
 | 
					                <input type="text" name="Admin" placeholder="1010,2020" value="{{.Conf.Oauth2.Admin}}">
 | 
				
			||||||
 | 
				
			|||||||
@ -30,11 +30,6 @@ type NotificationHistory struct {
 | 
				
			|||||||
func AlertSentinelStart() {
 | 
					func AlertSentinelStart() {
 | 
				
			||||||
	alertsStore = make(map[uint64]map[uint64][][]interface{})
 | 
						alertsStore = make(map[uint64]map[uint64][][]interface{})
 | 
				
			||||||
	alertsPrevState = make(map[uint64]map[uint64]uint)
 | 
						alertsPrevState = make(map[uint64]map[uint64]uint)
 | 
				
			||||||
	notificationsLock.Lock()
 | 
					 | 
				
			||||||
	if err := DB.Find(¬ifications).Error; err != nil {
 | 
					 | 
				
			||||||
		panic(err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	notificationsLock.Unlock()
 | 
					 | 
				
			||||||
	alertsLock.Lock()
 | 
						alertsLock.Lock()
 | 
				
			||||||
	if err := DB.Find(&alerts).Error; err != nil {
 | 
						if err := DB.Find(&alerts).Error; err != nil {
 | 
				
			||||||
		panic(err)
 | 
							panic(err)
 | 
				
			||||||
 | 
				
			|||||||
@ -13,7 +13,7 @@ import (
 | 
				
			|||||||
	pb "github.com/naiba/nezha/proto"
 | 
						pb "github.com/naiba/nezha/proto"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var Version = "v0.10.2" // !!记得修改 README 中的 badge 版本!!
 | 
					var Version = "v0.10.3" // !!记得修改 README 中的 badge 版本!!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var (
 | 
					var (
 | 
				
			||||||
	Conf  *model.Config
 | 
						Conf  *model.Config
 | 
				
			||||||
 | 
				
			|||||||
@ -16,6 +16,14 @@ const firstNotificationDelay = time.Minute * 15
 | 
				
			|||||||
var notifications []model.Notification
 | 
					var notifications []model.Notification
 | 
				
			||||||
var notificationsLock sync.RWMutex
 | 
					var notificationsLock sync.RWMutex
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func LoadNotifications() {
 | 
				
			||||||
 | 
						notificationsLock.Lock()
 | 
				
			||||||
 | 
						if err := DB.Find(¬ifications).Error; err != nil {
 | 
				
			||||||
 | 
							panic(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						notificationsLock.Unlock()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func OnRefreshOrAddNotification(n model.Notification) {
 | 
					func OnRefreshOrAddNotification(n model.Notification) {
 | 
				
			||||||
	notificationsLock.Lock()
 | 
						notificationsLock.Lock()
 | 
				
			||||||
	defer notificationsLock.Unlock()
 | 
						defer notificationsLock.Unlock()
 | 
				
			||||||
 | 
				
			|||||||
@ -146,7 +146,6 @@ func (ss *ServiceSentinel) loadMonitorHistory() {
 | 
				
			|||||||
		monitors[i].CronJobID, err = Cron.AddFunc(task.CronSpec(), func() {
 | 
							monitors[i].CronJobID, err = Cron.AddFunc(task.CronSpec(), func() {
 | 
				
			||||||
			ss.dispatchBus <- task
 | 
								ss.dispatchBus <- task
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
		log.Println("NEZHA>> 服务监控任务", monitors[i].ID, monitors[i].Name, monitors[i].CronJobID)
 | 
					 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			panic(err)
 | 
								panic(err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user