Skip to content

Commit c854db9

Browse files
committed
Update.
1 parent 6eee816 commit c854db9

File tree

3 files changed

+58
-38
lines changed

3 files changed

+58
-38
lines changed

cmd/dashboard/controller/common_page.go

Lines changed: 15 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1038,20 +1038,22 @@ func (cp *commonPage) home(c *gin.Context) {
10381038
var upgrader = websocket.Upgrader{
10391039
ReadBufferSize: 32768,
10401040
WriteBufferSize: 32768,
1041+
CheckOrigin: func(r *http.Request) bool {
1042+
// 允许所有来源的WebSocket连接,避免跨域问题
1043+
return true
1044+
},
1045+
Error: func(w http.ResponseWriter, r *http.Request, status int, reason error) {
1046+
// 自定义错误处理,避免写入响应头冲突
1047+
log.Printf("WebSocket升级错误 [%d]: %v", status, reason)
1048+
},
10411049
}
10421050

10431051
func (cp *commonPage) ws(c *gin.Context) {
10441052
conn, err := upgrader.Upgrade(c.Writer, c.Request, nil)
10451053
if err != nil {
1046-
mygin.ShowErrorPage(c, mygin.ErrInfo{
1047-
Code: http.StatusInternalServerError,
1048-
Title: singleton.Localizer.MustLocalize(&i18n.LocalizeConfig{
1049-
MessageID: "NetworkError",
1050-
}),
1051-
Msg: "Websocket协议切换失败",
1052-
Link: "/",
1053-
Btn: "返回首页",
1054-
}, true)
1054+
// WebSocket升级失败时,不能再写入HTTP响应,因为头部已经被写入
1055+
// 只记录错误日志,让客户端处理重连
1056+
log.Printf("WebSocket升级失败: %v", err)
10551057
return
10561058
}
10571059
defer func() {
@@ -1153,15 +1155,8 @@ func (cp *commonPage) terminal(c *gin.Context) {
11531155

11541156
wsConn, err := upgrader.Upgrade(c.Writer, c.Request, nil)
11551157
if err != nil {
1156-
mygin.ShowErrorPage(c, mygin.ErrInfo{
1157-
Code: http.StatusInternalServerError,
1158-
Title: singleton.Localizer.MustLocalize(&i18n.LocalizeConfig{
1159-
MessageID: "NetworkError",
1160-
}),
1161-
Msg: "Websocket协议切换失败",
1162-
Link: "/",
1163-
Btn: "返回首页",
1164-
}, true)
1158+
// WebSocket升级失败时,不能再写入HTTP响应
1159+
log.Printf("Terminal WebSocket升级失败: %v", err)
11651160
return
11661161
}
11671162
defer wsConn.Close()
@@ -1307,15 +1302,8 @@ func (cp *commonPage) fm(c *gin.Context) {
13071302

13081303
wsConn, err := upgrader.Upgrade(c.Writer, c.Request, nil)
13091304
if err != nil {
1310-
mygin.ShowErrorPage(c, mygin.ErrInfo{
1311-
Code: http.StatusInternalServerError,
1312-
Title: singleton.Localizer.MustLocalize(&i18n.LocalizeConfig{
1313-
MessageID: "NetworkError",
1314-
}),
1315-
Msg: "Websocket协议切换失败",
1316-
Link: "/",
1317-
Btn: "返回首页",
1318-
}, true)
1305+
// WebSocket升级失败时,不能再写入HTTP响应
1306+
log.Printf("FM WebSocket升级失败: %v", err)
13191307
return
13201308
}
13211309
defer wsConn.Close()

cmd/dashboard/rpc/rpc.go

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55
"log"
66
"net"
7+
"strings"
78
"time"
89

910
"google.golang.org/grpc"
@@ -15,6 +16,17 @@ import (
1516
"github.com/xos/serverstatus/service/singleton"
1617
)
1718

19+
// isContextCanceledError 检查是否为context canceled错误
20+
func isContextCanceledError(err error) bool {
21+
if err == nil {
22+
return false
23+
}
24+
errStr := err.Error()
25+
return strings.Contains(errStr, "context canceled") ||
26+
strings.Contains(errStr, "context deadline exceeded") ||
27+
strings.Contains(errStr, "Canceled desc = context canceled")
28+
}
29+
1830
func ServeRPC(port uint) {
1931
// 配置 gRPC 服务器选项,防止 goroutine 泄漏和连接问题
2032
opts := []grpc.ServerOption{
@@ -105,21 +117,30 @@ func DispatchTask(serviceSentinelDispatchBus <-chan model.Monitor) {
105117
}
106118
if task.Cover == model.MonitorCoverIgnoreAll && skipServers[currentServer.ID] {
107119
if err := currentServer.TaskStream.Send(task.PB()); err != nil {
108-
log.Printf("DispatchTask: 发送任务到服务器 %d 失败: %v", currentServer.ID, err)
120+
// 只在非context canceled错误时记录日志
121+
if !isContextCanceledError(err) {
122+
log.Printf("DispatchTask: 发送任务到服务器 %d 失败: %v", currentServer.ID, err)
123+
}
109124
}
110125
workedServerIndex++
111126
continue
112127
}
113128
if task.Cover == model.MonitorCoverAll && !skipServers[currentServer.ID] {
114129
if err := currentServer.TaskStream.Send(task.PB()); err != nil {
115-
log.Printf("DispatchTask: 发送任务到服务器 %d 失败: %v", currentServer.ID, err)
130+
// 只在非context canceled错误时记录日志
131+
if !isContextCanceledError(err) {
132+
log.Printf("DispatchTask: 发送任务到服务器 %d 失败: %v", currentServer.ID, err)
133+
}
116134
}
117135
workedServerIndex++
118136
continue
119137
}
120138
// 找到合适机器执行任务,跳出循环
121139
if err := currentServer.TaskStream.Send(task.PB()); err != nil {
122-
log.Printf("DispatchTask: 发送任务到服务器 %d 失败: %v", currentServer.ID, err)
140+
// 只在非context canceled错误时记录日志
141+
if !isContextCanceledError(err) {
142+
log.Printf("DispatchTask: 发送任务到服务器 %d 失败: %v", currentServer.ID, err)
143+
}
123144
}
124145
workedServerIndex++
125146
break

service/singleton/singleton.go

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2155,16 +2155,27 @@ func StartDBInsertWorker() {
21552155
// executeDBWriteRequest 执行单个数据库写入请求
21562156
func executeDBWriteRequest(req DBWriteRequest) error {
21572157
return ExecuteWithRetry(func() error {
2158-
// 紧急修复:检查DB是否为nil,防止panic
2159-
if DB == nil {
2160-
return fmt.Errorf("数据库连接未初始化")
2161-
}
2158+
// 根据数据库类型选择不同的处理方式
2159+
if Conf.DatabaseType == "badger" {
2160+
// BadgerDB模式:使用BadgerDB操作
2161+
if db.DB == nil {
2162+
return fmt.Errorf("BadgerDB连接未初始化")
2163+
}
21622164

2163-
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
2164-
defer cancel()
2165+
// 使用BadgerDB的SafeUpdateServerStatus
2166+
return SafeUpdateServerStatus(req.ServerID, req.Updates)
2167+
} else {
2168+
// SQLite模式:使用GORM操作
2169+
if DB == nil {
2170+
return fmt.Errorf("SQLite数据库连接未初始化")
2171+
}
21652172

2166-
// 直接更新,避免不必要的事务开销
2167-
return DB.WithContext(ctx).Table(req.TableName).Where("id = ?", req.ServerID).Updates(req.Updates).Error
2173+
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
2174+
defer cancel()
2175+
2176+
// 直接更新,避免不必要的事务开销
2177+
return DB.WithContext(ctx).Table(req.TableName).Where("id = ?", req.ServerID).Updates(req.Updates).Error
2178+
}
21682179
})
21692180
}
21702181

0 commit comments

Comments
 (0)