diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/RuoYiManagementPlatformApplication.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/RuoYiManagementPlatformApplication.java index 9689cda6..b3b22ac9 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/RuoYiManagementPlatformApplication.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/RuoYiManagementPlatformApplication.java @@ -17,9 +17,7 @@ import org.springframework.scheduling.annotation.EnableScheduling; @EnableRyFeignClients @SpringBootApplication @EnableScheduling -public class - -RuoYiManagementPlatformApplication { +public class RuoYiManagementPlatformApplication { public static void main(String[] args) { SpringApplication.run(RuoYiManagementPlatformApplication.class, args); System.out.println("(♥◠‿◠)ノ゙ 复杂智能软件管理平台启动成功 ლ(´ڡ`ლ)゙ \n" + diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ExperimentInsDao.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ExperimentInsDao.java index a24475a7..b03b21ca 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ExperimentInsDao.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ExperimentInsDao.java @@ -92,5 +92,7 @@ public interface ExperimentInsDao { List queryByExperiment(@Param("experimentIns") ExperimentIns experimentIns); List queryByExperimentId(Integer id); + + List queryByExperimentIsNotTerminated(); } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/scheduling/ExperimentInstanceStatusTask.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/scheduling/ExperimentInstanceStatusTask.java new file mode 100644 index 00000000..898ba4ce --- /dev/null +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/scheduling/ExperimentInstanceStatusTask.java @@ -0,0 +1,88 @@ +package com.ruoyi.platform.scheduling; + +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.platform.domain.Experiment; +import com.ruoyi.platform.domain.ExperimentIns; +import com.ruoyi.platform.mapper.ExperimentDao; +import com.ruoyi.platform.mapper.ExperimentInsDao; +import com.ruoyi.platform.service.ExperimentInsService; +import com.ruoyi.platform.service.ExperimentService; +import com.ruoyi.platform.utils.JsonUtils; +import com.ruoyi.system.api.model.LoginUser; +import io.swagger.models.auth.In; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.*; +import java.util.stream.Collectors; + +@Component() +public class ExperimentInstanceStatusTask { + @Autowired + private ExperimentInsService experimentInsService; + @Resource + private ExperimentDao experimentDao; + @Resource + private ExperimentInsDao experimentInsDao; + + private List experimentIds = new ArrayList<>(); + @Scheduled(cron = "0/30 * * * * ?") // 每30S执行一次 + public void executeExperimentInsStatus() throws IOException { + // 查到所有非终止态的实例 + List experimentInsList = experimentInsService.queryByExperimentIsNotTerminated(); + // 去argo查询状态 + List updateList = new ArrayList<>(); + if (experimentInsList != null && experimentInsList.size() > 0) { + for (ExperimentIns experimentIns : experimentInsList) { + //当原本状态为null或非终止态时才调用argo接口 + String oldStatus = experimentIns.getStatus(); + try { + experimentIns = experimentInsService.queryStatusFromArgo(experimentIns); + }catch (Exception e){ + experimentIns.setStatus("Failed"); + } + if (!StringUtils.equals(oldStatus,experimentIns.getStatus())){ + experimentIns.setUpdateTime(new Date()); + if (!experimentIds.contains(experimentIns.getExperimentId())){ + experimentIds.add(experimentIns.getExperimentId()); + } + updateList.add(experimentIns); + } + experimentInsDao.update(experimentIns); + } + } + if (updateList.size() > 0){ + experimentInsDao.insertOrUpdateBatch(updateList); + } + + } + @Scheduled(cron = "0/30 * * * * ?") // / 每30S执行一次 + public void executeExperimentStatus() throws IOException { + if (experimentIds.size()==0){ + return; + } + List updateexperiments = new ArrayList<>(); + for (Integer experimentId : experimentIds){ + List insList = experimentInsService.getByExperimentId(experimentId); + List statusList = new ArrayList(); + // 更新实验状态列表 + for (int i=0;i 0){ + experimentDao.insertOrUpdateBatch(updateexperiments); + } + experimentIds.clear(); + System.out.println(experimentIds); + } +} diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ExperimentInsService.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ExperimentInsService.java index 56f5303d..1940fd2d 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ExperimentInsService.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ExperimentInsService.java @@ -98,4 +98,9 @@ public interface ExperimentInsService { String getRealtimePodLogFromPod(PodLogVo podLogVo); + /** + * 查询非终止态的实例 + * @return + */ + List queryByExperimentIsNotTerminated(); } 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 4f8bd042..14c2997d 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 @@ -71,14 +71,16 @@ public class ExperimentInsServiceImpl implements ExperimentInsService { @Override public ExperimentIns queryById(Integer id) throws IOException { ExperimentIns experimentIns = this.experimentInsDao.queryById(id); - if (experimentIns != null && (StringUtils.isEmpty(experimentIns.getStatus())) || !isTerminatedState(experimentIns)) { - experimentIns = this.queryStatusFromArgo(experimentIns); - //只有当新状态是终止态时才更新数据库 - if (isTerminatedState(experimentIns)) { - //同时更新各个节点 - this.update(experimentIns); - } - } + + //已经迁移至定时任务进行更新操作 +// if (experimentIns != null && (StringUtils.isEmpty(experimentIns.getStatus())) || !isTerminatedState(experimentIns)) { +// experimentIns = this.queryStatusFromArgo(experimentIns); +// //只有当新状态是终止态时才更新数据库 +// if (isTerminatedState(experimentIns)) { +// //同时更新各个节点 +// this.update(experimentIns); +// } +// } return experimentIns; } @@ -93,40 +95,42 @@ public class ExperimentInsServiceImpl implements ExperimentInsService { @Override public List getByExperimentId(Integer experimentId) throws IOException { List experimentInsList = experimentInsDao.getByExperimentId(experimentId); - //搞个标记,当状态改变才去改表 - boolean flag = false; - List result = new ArrayList(); - if (experimentInsList!=null && experimentInsList.size()>0) { - for (ExperimentIns experimentIns : experimentInsList) { - //当原本状态为null或非终止态时才调用argo接口 - if (experimentIns != null && (StringUtils.isEmpty(experimentIns.getStatus())) || !isTerminatedState(experimentIns)) { - experimentIns = this.queryStatusFromArgo(experimentIns); - if (!flag){ - flag = true; - } - //只有当新状态是终止态时才更新数据库 - if (isTerminatedState(experimentIns)) { - //同时更新各个节点 - this.update(experimentIns); - } - } - //新增查询tensorBoard容器状态 - result.add(experimentIns); - } - } - if (flag) { - List statusList = new ArrayList(); - // 更新实验状态列表 - for (int i=0;i result = new ArrayList(); +// if (experimentInsList!=null && experimentInsList.size()>0) { +// for (ExperimentIns experimentIns : experimentInsList) { +// //当原本状态为null或非终止态时才调用argo接口 +// if (experimentIns != null && (StringUtils.isEmpty(experimentIns.getStatus())) || !isTerminatedState(experimentIns)) { +// experimentIns = this.queryStatusFromArgo(experimentIns); +// if (!flag){ +// flag = true; +// } +// //只有当新状态是终止态时才更新数据库 +// if (isTerminatedState(experimentIns)) { +// //同时更新各个节点 +// this.update(experimentIns); +// } +// } +// +// //新增查询tensorBoard容器状态 +// result.add(experimentIns); +// } +// } +// if (flag) { +// List statusList = new ArrayList(); +// // 更新实验状态列表 +// for (int i=0;i queryByPage(ExperimentIns experimentIns, PageRequest pageRequest) throws IOException { long total = this.experimentInsDao.count(experimentIns); List experimentInsList = this.experimentInsDao.queryAllByLimit(experimentIns, pageRequest); - if (experimentInsList!=null && experimentInsList.size()>0) { - for (ExperimentIns ins : experimentInsList) { - //如果实验实例不为空或者 - if (ins != null && StringUtils.isEmpty(ins.getStatus())) { - ins = this.queryStatusFromArgo(ins); - this.update(ins); - } - } - } +// if (experimentInsList!=null && experimentInsList.size()>0) { +// for (ExperimentIns ins : experimentInsList) { +// //如果实验实例不为空或者 +// if (ins != null && StringUtils.isEmpty(ins.getStatus())) { +// ins = this.queryStatusFromArgo(ins); +// this.update(ins); +// } +// } +// } return new PageImpl<>(experimentInsList, pageRequest, total); } @@ -524,6 +528,11 @@ public class ExperimentInsServiceImpl implements ExperimentInsService { return k8sClientUtil.getPodLogs(podLogVo.getPodName(), podLogVo.getNamespace(),podLogVo.getContainerName(), logsLines); } + @Override + public List queryByExperimentIsNotTerminated() { + return experimentInsDao.queryByExperimentIsNotTerminated(); + } + private boolean isTerminatedState(ExperimentIns ins) throws IOException { // 定义终止态的列表,例如 "Succeeded", "Failed" 等 String status = ins.getStatus(); diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentServiceImpl.java index 9ba773c2..3cef14d1 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentServiceImpl.java @@ -256,8 +256,9 @@ public class ExperimentServiceImpl implements ExperimentService { experimentIns.setExperimentId(experiment.getId()); experimentIns.setArgoInsNs((String) metadata.get("namespace")); experimentIns.setArgoInsName((String) metadata.get("name")); - //传入实验全局参数 + experimentIns.setStatus("Pending"); + //传入实验全局参数 experimentIns.setGlobalParam(experiment.getGlobalParam()); diff --git a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ExperimentInsDaoMapper.xml b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ExperimentInsDaoMapper.xml index 1fc195d3..0b5d0203 100644 --- a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ExperimentInsDaoMapper.xml +++ b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ExperimentInsDaoMapper.xml @@ -21,7 +21,13 @@ - + +