|
|
@@ -7,16 +7,14 @@ import com.imitate.common.annotation.PublicUrl; |
|
|
|
import com.imitate.common.bean.ApiResult; |
|
|
|
import com.imitate.common.constant.ApiResultCsts; |
|
|
|
import com.imitate.common.constant.TpCsts; |
|
|
|
import com.imitate.common.enums.ErrorCodeEnum; |
|
|
|
import com.imitate.common.k8s.mgr.ClusterManager; |
|
|
|
import com.imitate.common.k8s.pojo.RunPod; |
|
|
|
import com.imitate.common.k8s.service.DiskService; |
|
|
|
import com.imitate.common.k8s.service.RunPodService; |
|
|
|
import com.imitate.common.k8s.util.ContainerUtil; |
|
|
|
import com.imitate.common.sys.settings.AppConfig; |
|
|
|
import com.imitate.common.util.Base64Util; |
|
|
|
import com.imitate.common.util.R; |
|
|
|
import com.imitate.common.util.ThreadUtils; |
|
|
|
import com.imitate.common.util.TpUtils; |
|
|
|
import com.imitate.common.util.*; |
|
|
|
import com.imitate.web.module.game.service.GameService; |
|
|
|
import com.imitate.web.module.game.service.GitService; |
|
|
|
import com.imitate.web.module.game.service.ProxyService; |
|
|
@@ -32,6 +30,7 @@ import org.slf4j.LoggerFactory; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.beans.factory.annotation.Qualifier; |
|
|
|
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; |
|
|
|
import org.springframework.validation.BindingResult; |
|
|
|
import org.springframework.web.bind.annotation.*; |
|
|
|
|
|
|
|
import javax.validation.Valid; |
|
|
@@ -45,11 +44,9 @@ import java.util.Map; |
|
|
|
*/ |
|
|
|
@RestController |
|
|
|
@RequestMapping("/vscode") |
|
|
|
public class VscodeController { |
|
|
|
public class VscodeController extends BasicController { |
|
|
|
private final Logger logger = LoggerFactory.getLogger(getClass()); |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private AppConfig appConfig; |
|
|
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
private VscodeService vscodeService; |
|
|
@@ -80,8 +77,11 @@ public class VscodeController { |
|
|
|
|
|
|
|
@PublicUrl(signValidate = true) |
|
|
|
@RequestMapping(path = "/getVscode",method = RequestMethod.POST) |
|
|
|
public R getVscode(@Valid @RequestBody GetVsCodeParam vsCodeParam) throws Exception { |
|
|
|
|
|
|
|
public R getVscode(@Valid @RequestBody GetVsCodeParam vsCodeParam, BindingResult bindingResult) throws Exception { |
|
|
|
if(bindingResult.hasErrors()){ |
|
|
|
return actionResultWithBindingResult(ErrorCodeEnum.BIND_EXCEPTION,bindingResult); |
|
|
|
} |
|
|
|
vsCodeParam.setTpiID(vsCodeParam.getProjectId() + "_" + vsCodeParam.getUserId()); |
|
|
|
logger.info("[start]获取vscode连接信息 {}", JSONObject.toJSONString(vsCodeParam)); |
|
|
|
JSONObject resp = new JSONObject(); |
|
|
|
|
|
|
@@ -153,48 +153,42 @@ public class VscodeController { |
|
|
|
|
|
|
|
@PublicUrl(signValidate = true) |
|
|
|
@PostMapping(path = "/delete") |
|
|
|
public R delete(@Valid @RequestBody VsCodeDeleteParam vsCodeDeleteParam) { |
|
|
|
|
|
|
|
String tpiID = vsCodeDeleteParam.getTpiID(); |
|
|
|
public R delete(@Valid @RequestBody VsCodeDeleteParam vsCodeDeleteParam,BindingResult bindingResult) { |
|
|
|
if(bindingResult.hasErrors()){ |
|
|
|
return actionResultWithBindingResult(ErrorCodeEnum.BIND_EXCEPTION,bindingResult); |
|
|
|
} |
|
|
|
String tpiID = vsCodeDeleteParam.getProjectId() + "_" + vsCodeDeleteParam.getUserID(); |
|
|
|
logger.info("[start]前端主动调用vscode删除命令,tpiID: {}", tpiID); |
|
|
|
|
|
|
|
String tpiRepoName = TpCsts.TP_UNIFY_REPO_NAME; |
|
|
|
String tpiWorkspace = diskService.getTpiWorkspaceHostPath(tpiID); |
|
|
|
String tpiRepoPath = diskService.buildTpiRepoPath(tpiWorkspace, tpiRepoName); |
|
|
|
|
|
|
|
// 用identifier与私钥拼接与digestKey比较,相等响应,不想等拒绝 |
|
|
|
String serverDigestKey = DigestUtils.sha1Hex(vsCodeDeleteParam.getIdentifier() + appConfig.getSecretKey()); |
|
|
|
if (vsCodeDeleteParam.getDigestKey().equals(serverDigestKey)) { |
|
|
|
try { |
|
|
|
vscodeService.deleteNow(tpiID); |
|
|
|
|
|
|
|
// 删除本地版本库 |
|
|
|
FileUtils.deleteDirectory(new File(tpiWorkspace)); |
|
|
|
ThreadUtils.sleep(2000); |
|
|
|
try { |
|
|
|
vscodeService.deleteNow(tpiID); |
|
|
|
|
|
|
|
// 删除本地版本库 |
|
|
|
FileUtils.deleteDirectory(new File(tpiWorkspace)); |
|
|
|
ThreadUtils.sleep(2000); |
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("主动删除vscode pod {} 失败 {}", tpiID, e); |
|
|
|
return R.error("-1", "删除pod失败"); |
|
|
|
} |
|
|
|
|
|
|
|
} else { |
|
|
|
logger.error("主动删除vscode pod{}失败,认证不通过", tpiID); |
|
|
|
return R.error("-1", "认证不通过"); |
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("主动删除vscode pod {} 失败 {}", tpiID, e); |
|
|
|
return R.error("-1", "删除pod失败"); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
logger.info("[end]前端主动调用vscode删除命令,tpiID: {}", tpiID); |
|
|
|
return R.ok(); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@PublicUrl(signValidate = true) |
|
|
|
@RequestMapping(path = "/active/{tpiID}", method = RequestMethod.POST) |
|
|
|
public R active(@PathVariable("tpiID") String tpiID) { |
|
|
|
logger.info("[start]激活vscode pod {},延长到期时间", tpiID); |
|
|
|
|
|
|
|
@RequestMapping(path = "/active", method = RequestMethod.POST) |
|
|
|
public R active(@RequestParam String projectId, @RequestParam String userId) { |
|
|
|
logger.info("[start]激活vscode pod projectId:{},延长到期时间 userId:{}", projectId,userId); |
|
|
|
String tpiID = projectId + "_" + userId; |
|
|
|
vscodeService.active(tpiID); |
|
|
|
|
|
|
|
logger.info("[end]激活vscode pod {},延长到期时间", tpiID); |
|
|
|
return R.ok(); |
|
|
|
} |
|
|
@@ -202,7 +196,8 @@ public class VscodeController { |
|
|
|
|
|
|
|
|
|
|
|
@RequestMapping(path = "/getPort",method = RequestMethod.POST) |
|
|
|
public R getPort(@RequestParam String tpiID, @RequestParam Integer type, @RequestParam Integer port) { |
|
|
|
public R getPort(@RequestParam String projectId, @RequestParam String userId, @RequestParam Integer type, @RequestParam Integer port) { |
|
|
|
String tpiID = projectId + "_" + userId; |
|
|
|
int proxyPort = proxyService.getContainerExternalMappingPort(tpiID, type, port); |
|
|
|
return R.ok().setData(MapUtil.builder("port", proxyPort).build()); |
|
|
|
} |
|
|
|