From b7e77d49edc4311eb782d6cb0a90cd447e47db79 Mon Sep 17 00:00:00 2001 From: educoder Date: Thu, 21 Jul 2022 09:58:36 +0800 Subject: [PATCH] tj --- .../common/k8s/service/RunPodService.java | 13 ++++ common/src/main/resources/common.properties | 2 +- common/target/classes/common.properties | 2 +- parent/pom.xml | 1 - web/pom.xml | 5 ++ .../game/controller/GameController.java | 2 + .../game/controller/VscodeController.java | 18 +++++ web/src/test/java/com/imitate/Test1.java | 72 +++++++++++++++++++ 8 files changed, 112 insertions(+), 3 deletions(-) create mode 100644 web/src/test/java/com/imitate/Test1.java diff --git a/common/src/main/java/com/imitate/common/k8s/service/RunPodService.java b/common/src/main/java/com/imitate/common/k8s/service/RunPodService.java index 71a8087..e059101 100644 --- a/common/src/main/java/com/imitate/common/k8s/service/RunPodService.java +++ b/common/src/main/java/com/imitate/common/k8s/service/RunPodService.java @@ -29,6 +29,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; +import java.time.ZoneOffset; import java.util.Collections; import java.util.List; import java.util.Map; @@ -508,4 +509,16 @@ public class RunPodService { } return pod; } + + + /** + * 获取实例剩余时间 + * @param + * @return 连接剩余时间 + */ + public long getRemainingTime(RunPod runPod) { + return runPod.getExpireTime().toInstant(ZoneOffset.of("+8")).toEpochMilli() - System.currentTimeMillis(); + } + + } diff --git a/common/src/main/resources/common.properties b/common/src/main/resources/common.properties index 2c55d66..578d8f8 100644 --- a/common/src/main/resources/common.properties +++ b/common/src/main/resources/common.properties @@ -7,7 +7,7 @@ mystarter.config.student.gender=man useMq=true -netNames=eth0 +netNames=en0 #web\u56de\u8c03\u5730\u5740 educoderURL=https://www.educoder.net/api/myshixuns/training_task_status.json simpileEducoderURL=https://www.educoder.net/api/myshixuns/code_runinng_message.json diff --git a/common/target/classes/common.properties b/common/target/classes/common.properties index 2c55d66..578d8f8 100644 --- a/common/target/classes/common.properties +++ b/common/target/classes/common.properties @@ -7,7 +7,7 @@ mystarter.config.student.gender=man useMq=true -netNames=eth0 +netNames=en0 #web\u56de\u8c03\u5730\u5740 educoderURL=https://www.educoder.net/api/myshixuns/training_task_status.json simpileEducoderURL=https://www.educoder.net/api/myshixuns/code_runinng_message.json diff --git a/parent/pom.xml b/parent/pom.xml index 4bb90b9..acc579b 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -237,7 +237,6 @@ 1.1.0 - diff --git a/web/pom.xml b/web/pom.xml index bbb0c5f..17f3fd2 100644 --- a/web/pom.xml +++ b/web/pom.xml @@ -23,6 +23,11 @@ common 0.0.1-SNAPSHOT + + junit + junit + test + diff --git a/web/src/main/java/com/imitate/web/module/game/controller/GameController.java b/web/src/main/java/com/imitate/web/module/game/controller/GameController.java index a1d3870..9bde43b 100644 --- a/web/src/main/java/com/imitate/web/module/game/controller/GameController.java +++ b/web/src/main/java/com/imitate/web/module/game/controller/GameController.java @@ -217,4 +217,6 @@ public class GameController extends BasicController { return buildParams; } + + } diff --git a/web/src/main/java/com/imitate/web/module/game/controller/VscodeController.java b/web/src/main/java/com/imitate/web/module/game/controller/VscodeController.java index f41be12..c07d849 100644 --- a/web/src/main/java/com/imitate/web/module/game/controller/VscodeController.java +++ b/web/src/main/java/com/imitate/web/module/game/controller/VscodeController.java @@ -7,12 +7,15 @@ import com.imitate.common.bean.ApiResult; import com.imitate.common.constant.ApiResultCsts; import com.imitate.common.constant.TpCsts; 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.web.module.game.service.GameService; import com.imitate.web.module.game.service.GitService; import com.imitate.web.module.game.service.VscodeService; @@ -61,6 +64,11 @@ public class VscodeController { @Autowired private DiskService diskService; + @Autowired + private RunPodService runPodService; + + + @Qualifier("gitTaskExecutor") @Autowired private ThreadPoolTaskExecutor gitTaskExecutor; @@ -128,6 +136,12 @@ public class VscodeController { } else { Map respData = new HashMap<>(2); respData.put("url", targetUrl); + + String podName = TpUtils.buildWebPodName(vsCodeParam.getTpiID(), vsCodeParam.getPodType()); + RunPod runPod = runPodService.getRunPodByName(podName); + //存活秒数 + respData.put("remainingTime",runPodService.getRemainingTime(runPod)); + return R.ok(respData); } } @@ -182,4 +196,8 @@ public class VscodeController { } + + + + } diff --git a/web/src/test/java/com/imitate/Test1.java b/web/src/test/java/com/imitate/Test1.java new file mode 100644 index 0000000..005c0ae --- /dev/null +++ b/web/src/test/java/com/imitate/Test1.java @@ -0,0 +1,72 @@ +package com.imitate; + + +import com.imitate.common.bean.ShellResult; +import com.imitate.common.util.ShellUtil; +import com.imitate.web.WebApplication; +import lombok.extern.slf4j.Slf4j; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; +import org.yaml.snakeyaml.Yaml; + +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + + +@Slf4j +//@SpringBootTest(classes = {WebApplication.class}) +//@RunWith(SpringRunner.class) +public class Test1 { + + + + // 获取pod详情 解析 docker容器id列表 + @Test + public void Test22(){ + String command = "kubectl describe pod pod1"; + //(docker://[A-Za-z0-9]+) + ShellResult result = ShellUtil.executeAndGetExitStatus(command); + //docker容器 允许存在 1个Pod 多个容器情况 + List dockerContainerIds = new LinkedList<>(); + String reg = "docker://[A-Za-z0-9]+"; + Matcher m; + Pattern r; + r = Pattern.compile(reg); + m = r.matcher(result.getOut()); + while (m.find()){ + dockerContainerIds.add(m.group().replace("docker://","")); + } + log.info("dockerContainerIds:{}",dockerContainerIds); + } + + + @Test + public void test33(){ + String imageName = "ubuntu-vnc"; + String tag = "v1.0"; + String containerId = "abcdefg"; + String author = "yanchao"; + String comment = "ubuntu is 11"; + + //将容器commit成镜像 + String command = String.format("docker commit -a='%s' -m='%s' %s %s:%s",author,comment,containerId,imageName,tag); + ShellUtil.executeAndGetExitStatus(command); + + //检查镜像是否存在 + String checkVersion = String.format("docker images |grep %s",imageName); + ShellResult r1 = ShellUtil.executeAndGetExitStatus(checkVersion); + if(r1.getOut().contains(tag)){ + log.info("镜像创建成功!"); + } + + } + + + +}