From 7f8219d369224eb93f2d14455cbbde778d0bd818 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A5=BF=E5=A4=A7=E9=94=90?= <1070211640@qq.com> Date: Wed, 26 Jun 2024 14:17:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:jupyter=E8=BF=94=E5=9B=9E=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/jupyter/JupyterController.java | 5 ++-- .../platform/service/JupyterService.java | 4 +-- .../impl/DevEnvironmentServiceImpl.java | 28 +++++++++++++++++-- .../impl/ExperimentInsServiceImpl.java | 3 +- .../service/impl/JupyterServiceImpl.java | 23 +++++++-------- 5 files changed, 42 insertions(+), 21 deletions(-) diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/jupyter/JupyterController.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/jupyter/JupyterController.java index 0abcae7..3167e2e 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/jupyter/JupyterController.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/jupyter/JupyterController.java @@ -3,6 +3,7 @@ package com.ruoyi.platform.controller.jupyter; import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.domain.GenericsAjaxResult; +import com.ruoyi.platform.domain.DevEnvironment; import com.ruoyi.platform.service.JupyterService; import com.ruoyi.platform.vo.FrameLogPathVo; import com.ruoyi.platform.vo.PodStatusVo; @@ -60,8 +61,8 @@ public class JupyterController extends BaseController { @PostMapping("/getStatus") @ApiOperation("查询jupyter pod状态") @ApiResponse - public GenericsAjaxResult getStatus(@RequestBody FrameLogPathVo frameLogPathVo) throws Exception { - return genericsSuccess(this.jupyterService.getJupyterStatus(frameLogPathVo)); + public GenericsAjaxResult getStatus(DevEnvironment devEnvironment) throws Exception { + return genericsSuccess(this.jupyterService.getJupyterStatus(devEnvironment)); } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/JupyterService.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/JupyterService.java index 09a7fc6..b2af9cc 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/JupyterService.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/JupyterService.java @@ -1,6 +1,6 @@ package com.ruoyi.platform.service; -import com.ruoyi.platform.vo.FrameLogPathVo; +import com.ruoyi.platform.domain.DevEnvironment; import com.ruoyi.platform.vo.PodStatusVo; import java.io.InputStream; @@ -16,5 +16,5 @@ public interface JupyterService { String stopJupyterService(Integer id) throws Exception; - PodStatusVo getJupyterStatus(FrameLogPathVo frameLogPathVo); + PodStatusVo getJupyterStatus(DevEnvironment devEnvironment) throws Exception; } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DevEnvironmentServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DevEnvironmentServiceImpl.java index 4b8973b..7992f08 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DevEnvironmentServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DevEnvironmentServiceImpl.java @@ -2,14 +2,17 @@ package com.ruoyi.platform.service.impl; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.platform.domain.DevEnvironment; +import com.ruoyi.platform.domain.PodStatus; import com.ruoyi.platform.mapper.DevEnvironmentDao; import com.ruoyi.platform.service.DevEnvironmentService; import com.ruoyi.platform.service.JupyterService; import com.ruoyi.platform.utils.JacksonUtil; import com.ruoyi.platform.vo.DevEnvironmentVo; +import com.ruoyi.platform.vo.PodStatusVo; import com.ruoyi.system.api.model.LoginUser; import io.kubernetes.client.openapi.models.V1PersistentVolumeClaim; import org.apache.commons.lang3.StringUtils; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; @@ -17,6 +20,7 @@ import org.springframework.data.domain.PageRequest; import javax.annotation.Resource; import java.util.Date; +import java.util.List; import java.util.Map; /** @@ -30,6 +34,10 @@ public class DevEnvironmentServiceImpl implements DevEnvironmentService { @Resource private DevEnvironmentDao devEnvironmentDao; + @Resource + @Lazy + private JupyterService jupyterService; + /** * 通过ID查询单条数据 @@ -52,13 +60,29 @@ public class DevEnvironmentServiceImpl implements DevEnvironmentService { @Override public Page queryByPage(DevEnvironment devEnvironment, PageRequest pageRequest) { long total = this.devEnvironmentDao.count(devEnvironment); - return new PageImpl<>(this.devEnvironmentDao.queryAllByLimit(devEnvironment, pageRequest), pageRequest, total); + List devEnvironmentList = this.devEnvironmentDao.queryAllByLimit(devEnvironment, pageRequest); + + //查询每个开发环境的pod状态,注意:只有pod为非终止态时才去调状态接口 + devEnvironmentList.forEach(devEnv -> { + try{ + if (!devEnv.getStatus().equals(PodStatus.Terminated.getName()) && + !devEnv.getStatus().equals(PodStatus.Failed.getName())) { + PodStatusVo podStatusVo = this.jupyterService.getJupyterStatus(devEnv); + devEnv.setStatus(podStatusVo.getStatus()); + devEnv.setUrl(podStatusVo.getUrl()); + } + } catch (Exception e) { + devEnv.setStatus(PodStatus.Unknown.getName()); + } + }); + + return new PageImpl<>(devEnvironmentList, pageRequest, total); } /** * 新增数据 * - * @param devEnvironment 实例对象 + * @param devEnvironmentVo 实例对象 * @return 实例对象 */ @Override diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentInsServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentInsServiceImpl.java index 5a71ac6..ece171a 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentInsServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentInsServiceImpl.java @@ -102,7 +102,6 @@ public class ExperimentInsServiceImpl implements ExperimentInsService { */ @Override public List getByExperimentId(Integer experimentId) throws IOException { - List experimentInsList = experimentInsDao.getByExperimentId(experimentId); //代码全部迁移至定时任务 //搞个标记,当状态改变才去改表 @@ -138,7 +137,7 @@ public class ExperimentInsServiceImpl implements ExperimentInsService { // experimentDao.update(experiment); // } - return experimentInsList; + return experimentInsDao.getByExperimentId(experimentId); } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/JupyterServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/JupyterServiceImpl.java index bdbad6f..038e6d9 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/JupyterServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/JupyterServiceImpl.java @@ -1,6 +1,5 @@ package com.ruoyi.platform.service.impl; -import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.platform.domain.DevEnvironment; @@ -12,7 +11,6 @@ import com.ruoyi.platform.utils.JacksonUtil; import com.ruoyi.platform.utils.K8sClientUtil; import com.ruoyi.platform.utils.MinioUtil; import com.ruoyi.platform.utils.MlflowUtil; -import com.ruoyi.platform.vo.FrameLogPathVo; import com.ruoyi.platform.vo.PodStatusVo; import com.ruoyi.system.api.model.LoginUser; import io.kubernetes.client.openapi.models.V1PersistentVolumeClaim; @@ -101,12 +99,13 @@ public class JupyterServiceImpl implements JupyterService { // 调用修改后的 createPod 方法,传入额外的参数 Integer podPort = k8sClientUtil.createConfiguredPod(podName, namespace, port, mountPath, pvc, image, minioPvcName, datasetPath, modelPath); - // 简单的延迟,以便 Pod 有时间启动 - Thread.sleep(2500); - //查询pod状态,更新到数据库 - String podStatus = k8sClientUtil.getPodStatus(podName, namespace); +// // 简单的延迟,以便 Pod 有时间启动 +// Thread.sleep(2500); +// //查询pod状态,更新到数据库 +// String podStatus = k8sClientUtil.getPodStatus(podName, namespace); String url = masterIp + ":" + podPort; - devEnvironment.setStatus(podStatus); + redisService.setCacheObject(podName,masterIp + ":" + podPort); + devEnvironment.setStatus("Pending"); devEnvironment.setUrl(url); this.devEnvironmentService.update(devEnvironment); return url ; @@ -137,19 +136,19 @@ public class JupyterServiceImpl implements JupyterService { } @Override - public PodStatusVo getJupyterStatus(FrameLogPathVo frameLogPathVo) { + public PodStatusVo getJupyterStatus(DevEnvironment devEnvironment) throws Exception { String status = PodStatus.Terminated.getName(); PodStatusVo JupyterStatusVo = new PodStatusVo(); JupyterStatusVo.setStatus(status); - if(StringUtils.isEmpty(frameLogPathVo.getPath())){ + if (devEnvironment==null){ return JupyterStatusVo; } LoginUser loginUser = SecurityUtils.getLoginUser(); - String podName = loginUser.getUsername().toLowerCase() + "-editor-pod"; + String podName = loginUser.getUsername().toLowerCase() +"-editor-pod" + "-" + devEnvironment.getId(); try { // 查询相应pod状态 - String podStatus = k8sClientUtil.getPodStatus(podName, StringUtils.isEmpty(frameLogPathVo.getNamespace()) ? "default" : frameLogPathVo.getNamespace()); + String podStatus = k8sClientUtil.getPodStatus(podName, namespace); for (PodStatus s : PodStatus.values()) { if (s.getName().equals(podStatus)) { status = s.getName(); @@ -159,8 +158,6 @@ public class JupyterServiceImpl implements JupyterService { } catch (Exception e) { return JupyterStatusVo; - - } String url = redisService.getCacheObject(podName); JupyterStatusVo.setStatus(status);