🐛 dashboard: 修复服务监控任务调度
This commit is contained in:
parent
b54d055c37
commit
20ea31140b
@ -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.9.33&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.9.34&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>
|
||||||
|
@ -17,11 +17,7 @@ import (
|
|||||||
"github.com/naiba/nezha/service/dao"
|
"github.com/naiba/nezha/service/dao"
|
||||||
)
|
)
|
||||||
|
|
||||||
var serviceSentinelDispatchBus chan model.Monitor
|
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
serviceSentinelDispatchBus = make(chan model.Monitor)
|
|
||||||
|
|
||||||
shanghai, err := time.LoadLocation("Asia/Shanghai")
|
shanghai, err := time.LoadLocation("Asia/Shanghai")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
@ -59,7 +55,6 @@ func initSystem() {
|
|||||||
dao.DB.AutoMigrate(model.Server{}, model.User{},
|
dao.DB.AutoMigrate(model.Server{}, model.User{},
|
||||||
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.NewServiceSentinel(serviceSentinelDispatchBus)
|
|
||||||
|
|
||||||
loadServers() //加载服务器列表
|
loadServers() //加载服务器列表
|
||||||
loadCrons() //加载计划任务
|
loadCrons() //加载计划任务
|
||||||
@ -178,8 +173,10 @@ func loadCrons() {
|
|||||||
func main() {
|
func main() {
|
||||||
cleanMonitorHistory()
|
cleanMonitorHistory()
|
||||||
go rpc.ServeRPC(dao.Conf.GRPCPort)
|
go rpc.ServeRPC(dao.Conf.GRPCPort)
|
||||||
|
serviceSentinelDispatchBus := make(chan model.Monitor)
|
||||||
go rpc.DispatchTask(serviceSentinelDispatchBus)
|
go rpc.DispatchTask(serviceSentinelDispatchBus)
|
||||||
go dao.AlertSentinelStart()
|
go dao.AlertSentinelStart()
|
||||||
|
dao.NewServiceSentinel(serviceSentinelDispatchBus)
|
||||||
srv := controller.ServeWeb(dao.Conf.HTTPPort)
|
srv := controller.ServeWeb(dao.Conf.HTTPPort)
|
||||||
graceful.Graceful(func() error {
|
graceful.Graceful(func() error {
|
||||||
return srv.ListenAndServe()
|
return srv.ListenAndServe()
|
||||||
|
@ -28,10 +28,10 @@ func DispatchTask(serviceSentinelDispatchBus <-chan model.Monitor) {
|
|||||||
workedServerIndex := 0
|
workedServerIndex := 0
|
||||||
for task := range serviceSentinelDispatchBus {
|
for task := range serviceSentinelDispatchBus {
|
||||||
round := 0
|
round := 0
|
||||||
prevIndex := workedServerIndex
|
endIndex := workedServerIndex
|
||||||
dao.SortedServerLock.RLock()
|
dao.SortedServerLock.RLock()
|
||||||
// 如果已经轮了一整圈没有合适机器去请求,跳出循环
|
// 如果已经轮了一整圈又轮到自己,没有合适机器去请求,跳出循环
|
||||||
for round == 0 && prevIndex != workedServerIndex {
|
for round < 1 || workedServerIndex < endIndex {
|
||||||
// 如果到了圈尾,再回到圈头,圈数加一,游标重置
|
// 如果到了圈尾,再回到圈头,圈数加一,游标重置
|
||||||
if workedServerIndex == len(dao.SortedServerList) {
|
if workedServerIndex == len(dao.SortedServerList) {
|
||||||
workedServerIndex = 0
|
workedServerIndex = 0
|
||||||
|
@ -13,7 +13,7 @@ import (
|
|||||||
pb "github.com/naiba/nezha/proto"
|
pb "github.com/naiba/nezha/proto"
|
||||||
)
|
)
|
||||||
|
|
||||||
var Version = "v0.9.33" // !!记得修改 README 中的 badge 版本!!
|
var Version = "v0.9.34" // !!记得修改 README 中的 badge 版本!!
|
||||||
|
|
||||||
var (
|
var (
|
||||||
Conf *model.Config
|
Conf *model.Config
|
||||||
|
@ -154,12 +154,8 @@ func (ss *ServiceSentinel) loadMonitorHistory() {
|
|||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
ss.monitors[monitors[i].ID] = monitors[i]
|
ss.monitors[monitors[i].ID] = monitors[i]
|
||||||
if len(ss.serviceCurrentStatusData[monitors[i].ID]) == 0 {
|
ss.serviceCurrentStatusData[monitors[i].ID] = make([]model.MonitorHistory, _CurrentStatusSize)
|
||||||
ss.serviceCurrentStatusData[monitors[i].ID] = make([]model.MonitorHistory, _CurrentStatusSize)
|
ss.serviceStatusToday[monitors[i].ID] = &_TodayStatsOfMonitor{}
|
||||||
}
|
|
||||||
if ss.serviceStatusToday[monitors[i].ID] == nil {
|
|
||||||
ss.serviceStatusToday[monitors[i].ID] = &_TodayStatsOfMonitor{}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
year, month, day := time.Now().Date()
|
year, month, day := time.Now().Date()
|
||||||
@ -216,6 +212,10 @@ func (ss *ServiceSentinel) OnMonitorUpdate(m model.Monitor) error {
|
|||||||
Up: &[30]int{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
Up: &[30]int{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
Down: &[30]int{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
Down: &[30]int{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
}
|
}
|
||||||
|
ss.serviceResponseDataStoreLock.Lock()
|
||||||
|
defer ss.serviceResponseDataStoreLock.Unlock()
|
||||||
|
ss.serviceCurrentStatusData[m.ID] = make([]model.MonitorHistory, _CurrentStatusSize)
|
||||||
|
ss.serviceStatusToday[m.ID] = &_TodayStatsOfMonitor{}
|
||||||
}
|
}
|
||||||
// 更新这个任务
|
// 更新这个任务
|
||||||
ss.monitors[m.ID] = &m
|
ss.monitors[m.ID] = &m
|
||||||
|
Loading…
x
Reference in New Issue
Block a user