theme-mdui by @MikoyChinese

This commit is contained in:
naiba
2022-01-09 11:54:14 +08:00
parent d1e81a2cde
commit 1e641d1249
21 changed files with 246 additions and 245 deletions

View File

@@ -16,7 +16,7 @@ import (
"github.com/naiba/nezha/pkg/mygin"
"github.com/naiba/nezha/pkg/utils"
"github.com/naiba/nezha/proto"
"github.com/naiba/nezha/service/dao"
"github.com/naiba/nezha/service/singleton"
)
type memberAPI struct {
@@ -59,53 +59,53 @@ func (ma *memberAPI) delete(c *gin.Context) {
var err error
switch c.Param("model") {
case "server":
err = dao.DB.Unscoped().Delete(&model.Server{}, "id = ?", id).Error
err = singleton.DB.Unscoped().Delete(&model.Server{}, "id = ?", id).Error
if err == nil {
// 删除服务器
dao.ServerLock.Lock()
delete(dao.SecretToID, dao.ServerList[id].Secret)
delete(dao.ServerList, id)
dao.ServerLock.Unlock()
dao.ReSortServer()
singleton.ServerLock.Lock()
delete(singleton.SecretToID, singleton.ServerList[id].Secret)
delete(singleton.ServerList, id)
singleton.ServerLock.Unlock()
singleton.ReSortServer()
// 删除循环流量状态中的此服务器相关的记录
dao.AlertsLock.Lock()
for i := 0; i < len(dao.Alerts); i++ {
if dao.AlertsCycleTransferStatsStore[dao.Alerts[i].ID] != nil {
delete(dao.AlertsCycleTransferStatsStore[dao.Alerts[i].ID].ServerName, id)
delete(dao.AlertsCycleTransferStatsStore[dao.Alerts[i].ID].Transfer, id)
delete(dao.AlertsCycleTransferStatsStore[dao.Alerts[i].ID].NextUpdate, id)
singleton.AlertsLock.Lock()
for i := 0; i < len(singleton.Alerts); i++ {
if singleton.AlertsCycleTransferStatsStore[singleton.Alerts[i].ID] != nil {
delete(singleton.AlertsCycleTransferStatsStore[singleton.Alerts[i].ID].ServerName, id)
delete(singleton.AlertsCycleTransferStatsStore[singleton.Alerts[i].ID].Transfer, id)
delete(singleton.AlertsCycleTransferStatsStore[singleton.Alerts[i].ID].NextUpdate, id)
}
}
dao.AlertsLock.Unlock()
singleton.AlertsLock.Unlock()
// 删除服务器相关循环流量记录
dao.DB.Unscoped().Delete(&model.Transfer{}, "server_id = ?", id)
singleton.DB.Unscoped().Delete(&model.Transfer{}, "server_id = ?", id)
}
case "notification":
err = dao.DB.Unscoped().Delete(&model.Notification{}, "id = ?", id).Error
err = singleton.DB.Unscoped().Delete(&model.Notification{}, "id = ?", id).Error
if err == nil {
dao.OnDeleteNotification(id)
singleton.OnDeleteNotification(id)
}
case "monitor":
err = dao.DB.Unscoped().Delete(&model.Monitor{}, "id = ?", id).Error
err = singleton.DB.Unscoped().Delete(&model.Monitor{}, "id = ?", id).Error
if err == nil {
dao.ServiceSentinelShared.OnMonitorDelete(id)
err = dao.DB.Unscoped().Delete(&model.MonitorHistory{}, "monitor_id = ?", id).Error
singleton.ServiceSentinelShared.OnMonitorDelete(id)
err = singleton.DB.Unscoped().Delete(&model.MonitorHistory{}, "monitor_id = ?", id).Error
}
case "cron":
err = dao.DB.Unscoped().Delete(&model.Cron{}, "id = ?", id).Error
err = singleton.DB.Unscoped().Delete(&model.Cron{}, "id = ?", id).Error
if err == nil {
dao.CronLock.RLock()
defer dao.CronLock.RUnlock()
cr := dao.Crons[id]
singleton.CronLock.RLock()
defer singleton.CronLock.RUnlock()
cr := singleton.Crons[id]
if cr != nil && cr.CronJobID != 0 {
dao.Cron.Remove(cr.CronJobID)
singleton.Cron.Remove(cr.CronJobID)
}
delete(dao.Crons, id)
delete(singleton.Crons, id)
}
case "alert-rule":
err = dao.DB.Unscoped().Delete(&model.AlertRule{}, "id = ?", id).Error
err = singleton.DB.Unscoped().Delete(&model.AlertRule{}, "id = ?", id).Error
if err == nil {
dao.OnDeleteAlert(id)
singleton.OnDeleteAlert(id)
}
}
if err != nil {
@@ -129,7 +129,7 @@ type searchResult struct {
func (ma *memberAPI) searchServer(c *gin.Context) {
var servers []model.Server
likeWord := "%" + c.Query("word") + "%"
dao.DB.Select("id,name").Where("id = ? OR name LIKE ? OR tag LIKE ? OR note LIKE ?",
singleton.DB.Select("id,name").Where("id = ? OR name LIKE ? OR tag LIKE ? OR note LIKE ?",
c.Query("word"), likeWord, likeWord, likeWord).Find(&servers)
var resp []searchResult
@@ -172,10 +172,10 @@ func (ma *memberAPI) addOrEditServer(c *gin.Context) {
if s.ID == 0 {
s.Secret = utils.MD5(fmt.Sprintf("%s%s%d", time.Now(), sf.Name, admin.ID))
s.Secret = s.Secret[:18]
err = dao.DB.Create(&s).Error
err = singleton.DB.Create(&s).Error
} else {
isEdit = true
err = dao.DB.Save(&s).Error
err = singleton.DB.Save(&s).Error
}
}
if err != nil {
@@ -186,26 +186,26 @@ func (ma *memberAPI) addOrEditServer(c *gin.Context) {
return
}
if isEdit {
dao.ServerLock.Lock()
s.CopyFromRunningServer(dao.ServerList[s.ID])
singleton.ServerLock.Lock()
s.CopyFromRunningServer(singleton.ServerList[s.ID])
// 如果修改了 Secret
if s.Secret != dao.ServerList[s.ID].Secret {
if s.Secret != singleton.ServerList[s.ID].Secret {
// 删除旧 Secret-ID 绑定关系
dao.SecretToID[s.Secret] = s.ID
singleton.SecretToID[s.Secret] = s.ID
// 设置新的 Secret-ID 绑定关系
delete(dao.SecretToID, dao.ServerList[s.ID].Secret)
delete(singleton.SecretToID, singleton.ServerList[s.ID].Secret)
}
dao.ServerList[s.ID] = &s
dao.ServerLock.Unlock()
singleton.ServerList[s.ID] = &s
singleton.ServerLock.Unlock()
} else {
s.Host = &model.Host{}
s.State = &model.HostState{}
dao.ServerLock.Lock()
dao.SecretToID[s.Secret] = s.ID
dao.ServerList[s.ID] = &s
dao.ServerLock.Unlock()
singleton.ServerLock.Lock()
singleton.SecretToID[s.Secret] = s.ID
singleton.ServerList[s.ID] = &s
singleton.ServerLock.Unlock()
}
dao.ReSortServer()
singleton.ReSortServer()
c.JSON(http.StatusOK, model.Response{
Code: http.StatusOK,
})
@@ -238,13 +238,13 @@ func (ma *memberAPI) addOrEditMonitor(c *gin.Context) {
}
if err == nil {
if m.ID == 0 {
err = dao.DB.Create(&m).Error
err = singleton.DB.Create(&m).Error
} else {
err = dao.DB.Save(&m).Error
err = singleton.DB.Save(&m).Error
}
}
if err == nil {
err = dao.ServiceSentinelShared.OnMonitorUpdate(m)
err = singleton.ServiceSentinelShared.OnMonitorUpdate(m)
}
if err != nil {
c.JSON(http.StatusOK, model.Response{
@@ -282,7 +282,7 @@ func (ma *memberAPI) addOrEditCron(c *gin.Context) {
cr.Cover = cf.Cover
err = json.Unmarshal([]byte(cf.ServersRaw), &cr.Servers)
}
tx := dao.DB.Begin()
tx := singleton.DB.Begin()
if err == nil {
if cf.ID == 0 {
err = tx.Create(&cr).Error
@@ -291,7 +291,7 @@ func (ma *memberAPI) addOrEditCron(c *gin.Context) {
}
}
if err == nil {
cr.CronJobID, err = dao.Cron.AddFunc(cr.Scheduler, dao.CronTrigger(cr))
cr.CronJobID, err = singleton.Cron.AddFunc(cr.Scheduler, singleton.CronTrigger(cr))
}
if err == nil {
err = tx.Commit().Error
@@ -306,15 +306,15 @@ func (ma *memberAPI) addOrEditCron(c *gin.Context) {
return
}
dao.CronLock.Lock()
defer dao.CronLock.Unlock()
crOld := dao.Crons[cr.ID]
singleton.CronLock.Lock()
defer singleton.CronLock.Unlock()
crOld := singleton.Crons[cr.ID]
if crOld != nil && crOld.CronJobID != 0 {
dao.Cron.Remove(crOld.CronJobID)
singleton.Cron.Remove(crOld.CronJobID)
}
delete(dao.Crons, cr.ID)
dao.Crons[cr.ID] = &cr
delete(singleton.Crons, cr.ID)
singleton.Crons[cr.ID] = &cr
c.JSON(http.StatusOK, model.Response{
Code: http.StatusOK,
@@ -323,7 +323,7 @@ func (ma *memberAPI) addOrEditCron(c *gin.Context) {
func (ma *memberAPI) manualTrigger(c *gin.Context) {
var cr model.Cron
if err := dao.DB.First(&cr, "id = ?", c.Param("id")).Error; err != nil {
if err := singleton.DB.First(&cr, "id = ?", c.Param("id")).Error; err != nil {
c.JSON(http.StatusOK, model.Response{
Code: http.StatusBadRequest,
Message: err.Error(),
@@ -331,7 +331,7 @@ func (ma *memberAPI) manualTrigger(c *gin.Context) {
return
}
dao.ManualTrigger(cr)
singleton.ManualTrigger(cr)
c.JSON(http.StatusOK, model.Response{
Code: http.StatusOK,
@@ -351,9 +351,9 @@ func (ma *memberAPI) forceUpdate(c *gin.Context) {
var executeResult bytes.Buffer
for i := 0; i < len(forceUpdateServers); i++ {
dao.ServerLock.RLock()
server := dao.ServerList[forceUpdateServers[i]]
dao.ServerLock.RUnlock()
singleton.ServerLock.RLock()
server := singleton.ServerList[forceUpdateServers[i]]
singleton.ServerLock.RUnlock()
if server != nil && server.TaskStream != nil {
if err := server.TaskStream.Send(&proto.Task{
Type: model.TaskTypeUpgrade,
@@ -402,9 +402,9 @@ func (ma *memberAPI) addOrEditNotification(c *gin.Context) {
}
if err == nil {
if n.ID == 0 {
err = dao.DB.Create(&n).Error
err = singleton.DB.Create(&n).Error
} else {
err = dao.DB.Save(&n).Error
err = singleton.DB.Save(&n).Error
}
}
if err != nil {
@@ -414,7 +414,7 @@ func (ma *memberAPI) addOrEditNotification(c *gin.Context) {
})
return
}
dao.OnRefreshOrAddNotification(n)
singleton.OnRefreshOrAddNotification(n)
c.JSON(http.StatusOK, model.Response{
Code: http.StatusOK,
})
@@ -453,9 +453,9 @@ func (ma *memberAPI) addOrEditAlertRule(c *gin.Context) {
r.Enable = &enable
r.ID = arf.ID
if r.ID == 0 {
err = dao.DB.Create(&r).Error
err = singleton.DB.Create(&r).Error
} else {
err = dao.DB.Save(&r).Error
err = singleton.DB.Save(&r).Error
}
}
if err != nil {
@@ -465,7 +465,7 @@ func (ma *memberAPI) addOrEditAlertRule(c *gin.Context) {
})
return
}
dao.OnRefreshOrAddAlert(r)
singleton.OnRefreshOrAddAlert(r)
c.JSON(http.StatusOK, model.Response{
Code: http.StatusOK,
})
@@ -492,7 +492,7 @@ func (ma *memberAPI) logout(c *gin.Context) {
})
return
}
dao.DB.Model(admin).UpdateColumns(model.User{
singleton.DB.Model(admin).UpdateColumns(model.User{
Token: "",
TokenExpired: time.Now(),
})
@@ -522,16 +522,16 @@ func (ma *memberAPI) updateSetting(c *gin.Context) {
})
return
}
dao.Conf.EnableIPChangeNotification = sf.EnableIPChangeNotification == "on"
dao.Conf.Cover = sf.Cover
dao.Conf.GRPCHost = sf.GRPCHost
dao.Conf.IgnoredIPNotification = sf.IgnoredIPNotification
dao.Conf.Site.Brand = sf.Title
dao.Conf.Site.Theme = sf.Theme
dao.Conf.Site.CustomCode = sf.CustomCode
dao.Conf.Site.ViewPassword = sf.ViewPassword
dao.Conf.Oauth2.Admin = sf.Admin
if err := dao.Conf.Save(); err != nil {
singleton.Conf.EnableIPChangeNotification = sf.EnableIPChangeNotification == "on"
singleton.Conf.Cover = sf.Cover
singleton.Conf.GRPCHost = sf.GRPCHost
singleton.Conf.IgnoredIPNotification = sf.IgnoredIPNotification
singleton.Conf.Site.Brand = sf.Title
singleton.Conf.Site.Theme = sf.Theme
singleton.Conf.Site.CustomCode = sf.CustomCode
singleton.Conf.Site.ViewPassword = sf.ViewPassword
singleton.Conf.Oauth2.Admin = sf.Admin
if err := singleton.Conf.Save(); err != nil {
c.JSON(http.StatusOK, model.Response{
Code: http.StatusBadRequest,
Message: fmt.Sprintf("请求错误:%s", err),