Browse Source

优化serviceVersionSwitchHandler()函数,切换版本失败时, 返回给前端更多错误细节

niujiuru 21 hours ago
parent
commit
cbfac61a09
1 changed files with 21 additions and 14 deletions
  1. 21 14
      web-ui.service/page1_handler.go

+ 21 - 14
web-ui.service/page1_handler.go

@@ -577,10 +577,8 @@ func serviceVersionSwitchHandler(w http.ResponseWriter, r *http.Request) {
 			}
 		}
 		if target == "" {
-			json.NewEncoder(w).Encode(VersionResp{
-				Status:  "error",
-				Message: "当前没有可回退的上一版本",
-			})
+			json.NewEncoder(w).Encode(VersionResp{Status: "error",
+				Message: "当前没有可回退的上一版本"})
 			return
 		}
 	default:
@@ -618,21 +616,30 @@ func serviceVersionSwitchHandler(w http.ResponseWriter, r *http.Request) {
 	}
 
 	if out, err := exec.Command("systemctl", "start", req.Service).CombinedOutput(); err != nil {
-		tmp := filepath.Join(cfg.dir, cfg.bin+".tmp")
+		startErr := fmt.Errorf("目标版本启动失败: %s", out)
 		os.Remove(tmp)
 
-		if e := os.Symlink(oldLink, tmp); e == nil {
-			if e = os.Rename(tmp, link); e != nil {
-				os.Remove(tmp)
-			}
+		if e := os.Symlink(oldLink, tmp); e != nil {
+			json.NewEncoder(w).Encode(VersionResp{Status: "error",
+				Message: fmt.Sprintf("%v: 创建回滚链接失败: %v", startErr, e)})
+			return
 		}
 
-		exec.Command("systemctl", "start", req.Service).Run()
+		if e := os.Rename(tmp, link); e != nil {
+			os.Remove(tmp)
+			json.NewEncoder(w).Encode(VersionResp{Status: "error",
+				Message: fmt.Sprintf("%v: 切换回滚链接失败: %v", startErr, e)})
+			return
+		}
+
+		if e := exec.Command("systemctl", "start", req.Service).Run(); e != nil {
+			json.NewEncoder(w).Encode(VersionResp{Status: "error",
+				Message: fmt.Sprintf("%v: 启动回滚版本失败: %v", startErr, e)})
+			return
+		}
 
-		json.NewEncoder(w).Encode(VersionResp{
-			Status:  "error",
-			Message: fmt.Sprintf("目标版本启动失败,已恢复旧版本: %s", out),
-		})
+		json.NewEncoder(w).Encode(VersionResp{Status: "error",
+			Message: "目标版本启动失败,已恢复到旧有版本"})
 		return
 	}