docker.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package upgrader
  2. import (
  3. "github.com/0xJacky/Nginx-UI/internal/docker"
  4. "github.com/gorilla/websocket"
  5. "github.com/uozi-tech/cosy/logger"
  6. )
  7. // DockerUpgrade Upgrade the Docker container
  8. func DockerUpgrade(ws *websocket.Conn, control *Control) {
  9. progressChan := make(chan float64)
  10. // Start a goroutine to listen for progress updates and send them via WebSocket
  11. go func() {
  12. for progress := range progressChan {
  13. err := ws.WriteJSON(CoreUpgradeResp{
  14. Status: UpgradeStatusProgress,
  15. Progress: progress,
  16. Message: "Pulling Docker image...",
  17. })
  18. if err != nil {
  19. logger.Error("Failed to send progress update:", err)
  20. return
  21. }
  22. }
  23. }()
  24. defer close(progressChan)
  25. if !control.DryRun {
  26. err := docker.UpgradeStepOne(control.Channel, progressChan)
  27. if err != nil {
  28. _ = ws.WriteJSON(CoreUpgradeResp{
  29. Status: UpgradeStatusError,
  30. Message: err.Error(),
  31. })
  32. logger.Error(err)
  33. return
  34. }
  35. }
  36. // Send completion message
  37. _ = ws.WriteJSON(CoreUpgradeResp{
  38. Status: UpgradeStatusInfo,
  39. Progress: 100,
  40. Message: "Docker image pull completed, upgrading...",
  41. })
  42. }