mirror of
https://github.com/Buriburizaem0n/nezha_domains.git
synced 2026-02-04 04:30:05 +00:00
feat: edit server config online (#980)
* feat: edit server config online * clean * refactor * generate template * fix deadlocks * fix
This commit is contained in:
@@ -67,9 +67,7 @@ func (a *authHandler) Check(ctx context.Context) (uint64, error) {
|
||||
if err := singleton.DB.Create(&s).Error; err != nil {
|
||||
return 0, status.Error(codes.Unauthenticated, err.Error())
|
||||
}
|
||||
s.Host = &model.Host{}
|
||||
s.State = &model.HostState{}
|
||||
s.GeoIP = &model.GeoIP{}
|
||||
model.InitServer(&s)
|
||||
|
||||
singleton.ServerLock.Lock()
|
||||
singleton.ServerList[s.ID] = &s
|
||||
|
||||
@@ -2,6 +2,7 @@ package rpc
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"log"
|
||||
"net"
|
||||
@@ -54,7 +55,8 @@ func (s *NezhaHandler) RequestTask(stream pb.NezhaService_RequestTaskServer) err
|
||||
log.Printf("NEZHA>> RequestTask error: %v, clientID: %d\n", err, clientID)
|
||||
return nil
|
||||
}
|
||||
if result.GetType() == model.TaskTypeCommand {
|
||||
switch result.GetType() {
|
||||
case model.TaskTypeCommand:
|
||||
// 处理上报的计划任务
|
||||
singleton.CronLock.RLock()
|
||||
cr := singleton.Crons[result.GetId()]
|
||||
@@ -78,11 +80,24 @@ func (s *NezhaHandler) RequestTask(stream pb.NezhaService_RequestTaskServer) err
|
||||
LastResult: result.GetSuccessful(),
|
||||
})
|
||||
}
|
||||
} else if model.IsServiceSentinelNeeded(result.GetType()) {
|
||||
singleton.ServiceSentinelShared.Dispatch(singleton.ReportData{
|
||||
Data: result,
|
||||
Reporter: clientID,
|
||||
})
|
||||
case model.TaskTypeReportConfig:
|
||||
singleton.ServerLock.RLock()
|
||||
if len(singleton.ServerList[clientID].ConfigCache) < 1 {
|
||||
if !result.GetSuccessful() {
|
||||
singleton.ServerList[clientID].ConfigCache <- errors.New(result.Data)
|
||||
singleton.ServerLock.RUnlock()
|
||||
continue
|
||||
}
|
||||
singleton.ServerList[clientID].ConfigCache <- result.Data
|
||||
}
|
||||
singleton.ServerLock.RUnlock()
|
||||
default:
|
||||
if model.IsServiceSentinelNeeded(result.GetType()) {
|
||||
singleton.ServiceSentinelShared.Dispatch(singleton.ReportData{
|
||||
Data: result,
|
||||
Reporter: clientID,
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,9 +31,7 @@ func loadServers() {
|
||||
DB.Find(&servers)
|
||||
for _, s := range servers {
|
||||
innerS := s
|
||||
innerS.Host = &model.Host{}
|
||||
innerS.State = &model.HostState{}
|
||||
innerS.GeoIP = new(model.GeoIP)
|
||||
model.InitServer(&innerS)
|
||||
ServerList[innerS.ID] = &innerS
|
||||
ServerUUIDToID[innerS.UUID] = innerS.ID
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user