Skip to content

Commit 05a5b7c

Browse files
committed
Update.
1 parent bdd8327 commit 05a5b7c

File tree

3 files changed

+65
-30
lines changed

3 files changed

+65
-30
lines changed

cmd/dashboard/controller/common_page.go

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ func (cp *commonPage) getServerStat(c *gin.Context, withPublicNote bool) ([]byte
344344

345345
// 计算当月累积流量(模拟月度重置)
346346
var monthlyTransfer uint64
347-
347+
348348
// 如果服务器有最后活跃时间记录,且在当月内,使用累积流量
349349
if !server.LastActive.IsZero() && server.LastActive.After(currentMonthStart) {
350350
monthlyTransfer = server.CumulativeNetInTransfer + server.CumulativeNetOutTransfer
@@ -471,7 +471,7 @@ func (cp *commonPage) home(c *gin.Context) {
471471

472472
// 计算当月累积流量(模拟月度重置)
473473
var monthlyTransfer uint64
474-
474+
475475
// 如果服务器有最后活跃时间记录,且在当月内,使用累积流量
476476
if !actualServer.LastActive.IsZero() && actualServer.LastActive.After(currentMonthStart) {
477477
monthlyTransfer = actualServer.CumulativeNetInTransfer + actualServer.CumulativeNetOutTransfer
@@ -555,18 +555,19 @@ func (cp *commonPage) ws(c *gin.Context) {
555555
// 强制触发GC清理连接相关内存
556556
runtime.GC()
557557
}()
558-
558+
559559
// 设置连接超时和大小限制
560560
conn.SetReadLimit(512 * 1024) // 512KB 限制
561561
conn.SetPongHandler(func(appData string) error {
562-
conn.SetReadDeadline(time.Now().Add(60 * time.Second))
562+
// 延长读取超时时间,增强容错性
563+
conn.SetReadDeadline(time.Now().Add(120 * time.Second))
563564
return nil
564565
})
565-
566+
566567
// 使用context控制连接生命周期,增加超时时间
567-
ctx, cancel := context.WithTimeout(c.Request.Context(), 45*time.Minute)
568+
ctx, cancel := context.WithTimeout(c.Request.Context(), 60*time.Minute)
568569
defer cancel()
569-
570+
570571
count := 0
571572
ticker := time.NewTicker(time.Second)
572573
defer ticker.Stop()
@@ -598,9 +599,9 @@ func (cp *commonPage) ws(c *gin.Context) {
598599

599600
if err := conn.WriteMessage(websocket.TextMessage, stat); err != nil {
600601
// 检查是否为网络连接错误
601-
if strings.Contains(err.Error(), "broken pipe") ||
602-
strings.Contains(err.Error(), "connection reset") ||
603-
strings.Contains(err.Error(), "use of closed network connection") {
602+
if strings.Contains(err.Error(), "broken pipe") ||
603+
strings.Contains(err.Error(), "connection reset") ||
604+
strings.Contains(err.Error(), "use of closed network connection") {
604605
// 静默处理网络连接错误,客户端可能已断开
605606
return
606607
}
@@ -613,9 +614,9 @@ func (cp *commonPage) ws(c *gin.Context) {
613614
err = conn.WriteMessage(websocket.PingMessage, []byte{})
614615
if err != nil {
615616
// 检查是否为网络连接错误
616-
if strings.Contains(err.Error(), "broken pipe") ||
617-
strings.Contains(err.Error(), "connection reset") ||
618-
strings.Contains(err.Error(), "use of closed network connection") {
617+
if strings.Contains(err.Error(), "broken pipe") ||
618+
strings.Contains(err.Error(), "connection reset") ||
619+
strings.Contains(err.Error(), "use of closed network connection") {
619620
// 静默处理网络连接错误
620621
return
621622
}
@@ -804,12 +805,12 @@ func (cp *commonPage) fm(c *gin.Context) {
804805
return
805806
}
806807
defer wsConn.Close()
807-
808+
808809
// 设置连接限制和超时
809810
wsConn.SetReadLimit(1024 * 1024) // 1MB 限制
810811
wsConn.SetReadDeadline(time.Now().Add(60 * time.Second))
811812
wsConn.SetWriteDeadline(time.Now().Add(10 * time.Second))
812-
813+
813814
conn := websocketx.NewConn(wsConn)
814815

815816
// 使用 context 控制 PING 保活 goroutine 的生命周期
@@ -1007,7 +1008,7 @@ func (cp *commonPage) apiTraffic(c *gin.Context) {
10071008

10081009
// 计算当月累积流量(模拟月度重置)
10091010
var monthlyTransfer uint64
1010-
1011+
10111012
// 如果服务器有最后活跃时间记录,且在当月内,使用累积流量
10121013
if !actualServer.LastActive.IsZero() && actualServer.LastActive.After(currentMonthStart) {
10131014
monthlyTransfer = actualServer.CumulativeNetInTransfer + actualServer.CumulativeNetOutTransfer
@@ -1141,7 +1142,7 @@ func (cp *commonPage) apiServerTraffic(c *gin.Context) {
11411142

11421143
// 计算当月累积流量(模拟月度重置)
11431144
var monthlyTransfer uint64
1144-
1145+
11451146
// 如果服务器有最后活跃时间记录,且在当月内,使用累积流量
11461147
if !server.LastActive.IsZero() && server.LastActive.After(currentMonthStart) {
11471148
monthlyTransfer = server.CumulativeNetInTransfer + server.CumulativeNetOutTransfer

script/server-agent.service

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ Type=simple
1515
User=root
1616
Group=root
1717
WorkingDirectory=/opt/server-status/agent/
18-
ExecStart=/opt/server-status/agent/server-agent -s grpc_host:grpc_port -p client_secret
18+
ExecStart=/opt/server-status/agent/server-agent --gpu --temperature -s grpc_host:grpc_port -p client_secret
1919
Restart=always
2020
#Environment=DEBUG=true
2121

service/singleton/singleton.go

Lines changed: 46 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1389,22 +1389,56 @@ func prepareInsertSQL(data map[string]interface{}) (string, string, []interface{
13891389
return strings.Join(fields, ", "), strings.Join(placeholders, ", "), args
13901390
}
13911391

1392-
// AsyncDBUpdate 异步数据库更新,通过队列避免并发冲突
1392+
// AsyncDBUpdate 异步更新数据库记录
13931393
func AsyncDBUpdate(serverID uint64, tableName string, updates map[string]interface{}, callback func(error)) {
1394-
select {
1395-
case dbWriteQueue <- DBWriteRequest{
1396-
ServerID: serverID,
1397-
TableName: tableName,
1398-
Updates: updates,
1399-
Callback: callback,
1400-
}:
1401-
// 成功入队
1402-
default:
1403-
// 队列满,执行回调通知错误
1394+
// 如果系统处于高内存压力状态,使用同步更新以减少排队
1395+
if isSystemBusy() {
1396+
err := executeDBWriteRequest(DBWriteRequest{
1397+
ServerID: serverID,
1398+
TableName: tableName,
1399+
Updates: updates,
1400+
Callback: callback,
1401+
})
1402+
if callback != nil {
1403+
callback(err)
1404+
}
1405+
return
1406+
}
1407+
1408+
// 防止重复的相同更新占用队列
1409+
if len(updates) == 0 {
14041410
if callback != nil {
1405-
callback(fmt.Errorf("数据库写入队列已满"))
1411+
callback(nil)
14061412
}
1413+
return
14071414
}
1415+
1416+
// 添加随机延迟,避免多个更新同时进入队列
1417+
delay := time.Duration(serverID%20) * 50 * time.Millisecond
1418+
go func() {
1419+
time.Sleep(delay)
1420+
1421+
select {
1422+
case dbWriteQueue <- DBWriteRequest{
1423+
ServerID: serverID,
1424+
TableName: tableName,
1425+
Updates: updates,
1426+
Callback: callback,
1427+
}:
1428+
// 成功添加到队列
1429+
case <-time.After(2 * time.Second):
1430+
// 队列满或阻塞超时,直接执行
1431+
err := executeDBWriteRequest(DBWriteRequest{
1432+
ServerID: serverID,
1433+
TableName: tableName,
1434+
Updates: updates,
1435+
Callback: callback,
1436+
})
1437+
if callback != nil {
1438+
callback(err)
1439+
}
1440+
}
1441+
}()
14081442
}
14091443

14101444
// AsyncDBInsert 异步数据库插入,通过队列避免并发冲突

0 commit comments

Comments
 (0)