upgrade.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package api
  2. import (
  3. "github.com/0xJacky/Nginx-UI/server/service"
  4. "github.com/gin-gonic/gin"
  5. "github.com/gorilla/websocket"
  6. "log"
  7. "net/http"
  8. "os"
  9. )
  10. func GetRelease(c *gin.Context) {
  11. data, err := service.GetRelease()
  12. if err != nil {
  13. ErrHandler(c, err)
  14. return
  15. }
  16. c.JSON(http.StatusOK, data)
  17. }
  18. func GetCurrentVersion(c *gin.Context) {
  19. curVer, err := service.GetCurrentVersion()
  20. if err != nil {
  21. ErrHandler(c, err)
  22. return
  23. }
  24. c.JSON(http.StatusOK, curVer)
  25. }
  26. func PerformCoreUpgrade(c *gin.Context) {
  27. var upGrader = websocket.Upgrader{
  28. CheckOrigin: func(r *http.Request) bool {
  29. return true
  30. },
  31. }
  32. // upgrade http to websocket
  33. ws, err := upGrader.Upgrade(c.Writer, c.Request, nil)
  34. if err != nil {
  35. log.Println("[Error] PerformCoreUpgrade Upgrade", err)
  36. return
  37. }
  38. defer ws.Close()
  39. _ = ws.WriteJSON(gin.H{
  40. "status": "info",
  41. "message": "Initialing core upgrader",
  42. })
  43. u, err := service.NewUpgrader()
  44. if err != nil {
  45. _ = ws.WriteJSON(gin.H{
  46. "status": "error",
  47. "message": "Initial core upgrader error",
  48. })
  49. _ = ws.WriteJSON(gin.H{
  50. "status": "error",
  51. "message": err.Error(),
  52. })
  53. log.Println("[Error] PerformCoreUpgrade service.NewUpgrader()", err)
  54. return
  55. }
  56. _ = ws.WriteJSON(gin.H{
  57. "status": "info",
  58. "message": "Downloading latest release",
  59. })
  60. progressChan := make(chan float64)
  61. go func() {
  62. for progress := range progressChan {
  63. _ = ws.WriteJSON(gin.H{
  64. "status": "progress",
  65. "progress": progress,
  66. })
  67. }
  68. }()
  69. tarName, err := u.DownloadLatestRelease(progressChan)
  70. if err != nil {
  71. _ = ws.WriteJSON(gin.H{
  72. "status": "error",
  73. "message": "Download latest release error",
  74. })
  75. _ = ws.WriteJSON(gin.H{
  76. "status": "error",
  77. "message": err.Error(),
  78. })
  79. log.Println("[Error] PerformCoreUpgrade DownloadLatestRelease", err)
  80. return
  81. }
  82. _ = ws.WriteJSON(gin.H{
  83. "status": "info",
  84. "message": "Performing core upgrade",
  85. })
  86. _ = os.Remove(u.Release.ExPath)
  87. // bye, overseer will restart nginx-ui
  88. err = u.PerformCoreUpgrade(u.Release.ExPath, tarName)
  89. if err != nil {
  90. _ = ws.WriteJSON(gin.H{
  91. "status": "error",
  92. "message": "Perform core upgrade error",
  93. })
  94. _ = ws.WriteJSON(gin.H{
  95. "status": "error",
  96. "message": err.Error(),
  97. })
  98. log.Println("[Error] PerformCoreUpgrade", err)
  99. return
  100. }
  101. }