mirror of
https://github.com/0xJacky/nginx-ui.git
synced 2026-06-08 23:43:10 +08:00
- Introduced SafeWebSocketWriter to ensure thread-safe writes to WebSocket connections. - Updated WebSocket handling in certificate issuance, revocation, Nginx log tailing, and system upgrades to use the new writer. - Enhanced WebSocket client management in the site navigation module for improved message handling and connection stability.
48 lines
1.1 KiB
Go
48 lines
1.1 KiB
Go
package upgrader
|
|
|
|
import (
|
|
"github.com/0xJacky/Nginx-UI/internal/docker"
|
|
"github.com/0xJacky/Nginx-UI/internal/helper"
|
|
"github.com/uozi-tech/cosy/logger"
|
|
)
|
|
|
|
// DockerUpgrade Upgrade the Docker container
|
|
func DockerUpgrade(ws *helper.SafeWebSocketWriter, control *Control) {
|
|
progressChan := make(chan float64)
|
|
|
|
// Start a goroutine to listen for progress updates and send them via WebSocket
|
|
go func() {
|
|
for progress := range progressChan {
|
|
err := ws.WriteJSON(CoreUpgradeResp{
|
|
Status: UpgradeStatusProgress,
|
|
Progress: progress,
|
|
Message: "Pulling Docker image...",
|
|
})
|
|
if err != nil {
|
|
logger.Error("Failed to send progress update:", err)
|
|
return
|
|
}
|
|
}
|
|
}()
|
|
defer close(progressChan)
|
|
|
|
if !control.DryRun {
|
|
err := docker.UpgradeStepOne(control.Channel, progressChan)
|
|
if err != nil {
|
|
_ = ws.WriteJSON(CoreUpgradeResp{
|
|
Status: UpgradeStatusError,
|
|
Message: err.Error(),
|
|
})
|
|
logger.Error(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
// Send completion message
|
|
_ = ws.WriteJSON(CoreUpgradeResp{
|
|
Status: UpgradeStatusInfo,
|
|
Progress: 100,
|
|
Message: "Docker image pull completed, upgrading...",
|
|
})
|
|
}
|