mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-09-29 22:06:38 +08:00
[优化] 添加服务器升级日志的WebSocket流
This commit is contained in:
@@ -6,8 +6,10 @@ import (
|
||||
"io"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"golang.org/x/net/websocket"
|
||||
)
|
||||
|
||||
type confirmManualUpgradeRequest struct {
|
||||
@@ -74,6 +76,42 @@ func UpgradeServer(c *gin.Context) {
|
||||
})
|
||||
}
|
||||
|
||||
// StreamServerUpgradeLogs godoc
|
||||
// @Summary Stream server upgrade logs over websocket
|
||||
// @Tags Update
|
||||
// @Router /api/update/logs/ws [get]
|
||||
func StreamServerUpgradeLogs(c *gin.Context) {
|
||||
websocket.Handler(func(conn *websocket.Conn) {
|
||||
defer func() {
|
||||
_ = conn.Close()
|
||||
}()
|
||||
|
||||
updates, unsubscribe := service.SubscribeServerUpgradeStream()
|
||||
defer unsubscribe()
|
||||
|
||||
heartbeatTicker := time.NewTicker(15 * time.Second)
|
||||
defer heartbeatTicker.Stop()
|
||||
|
||||
for {
|
||||
select {
|
||||
case snapshot, ok := <-updates:
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
if err := websocket.JSON.Send(conn, snapshot); err != nil {
|
||||
return
|
||||
}
|
||||
case <-heartbeatTicker.C:
|
||||
if err := websocket.JSON.Send(conn, service.ServerUpgradeStreamSnapshot{}); err != nil {
|
||||
return
|
||||
}
|
||||
case <-c.Request.Context().Done():
|
||||
return
|
||||
}
|
||||
}
|
||||
}).ServeHTTP(c.Writer, c.Request)
|
||||
}
|
||||
|
||||
// UploadManualServerBinary godoc
|
||||
// @Summary Upload server binary and inspect version before upgrade
|
||||
// @Tags Update
|
||||
|
||||
Reference in New Issue
Block a user