Browse Source

Merge branch 'dev' of https://gitlink.org.cn/ci4s/ci4sManagement-cloud into dev

tags/v20240126
fans 2 years ago
parent
commit
1797d474a3
10 changed files with 115 additions and 28 deletions
  1. +1
    -1
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/experiment/ExperimentController.java
  2. +27
    -0
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ExperimentIns.java
  3. +4
    -0
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/DatasetVersionDao.java
  4. +4
    -4
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ExperimentInsDao.java
  5. +1
    -0
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ExperimentInsService.java
  6. +1
    -1
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ExperimentService.java
  7. +16
    -4
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentInsServiceImpl.java
  8. +22
    -4
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentServiceImpl.java
  9. +36
    -12
      ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ExperimentInsDaoMapper.xml
  10. +3
    -2
      ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/WorkflowDaoMapper.xml

+ 1
- 1
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/experiment/ExperimentController.java View File

@@ -113,7 +113,7 @@ public class ExperimentController {
*/
@PutMapping("/experiments/{id}")
@ApiOperation("运行实验")
public AjaxResult runExperiment(@PathVariable("id") Integer id) {
public AjaxResult runExperiment(@PathVariable("id") Integer id) throws Exception {
return AjaxResult.success(this.experimentService.runExperiment(id));
}



+ 27
- 0
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ExperimentIns.java View File

@@ -42,6 +42,20 @@ public class ExperimentIns implements Serializable {
private String nodesStatus;
@ApiModelProperty(name = "nodes_logs")
private String nodesLogs;

/**
* 开始时间
*/
@ApiModelProperty(name = "start_time")
private Date startTime;

/**
* 结束时间
*/
@ApiModelProperty(name = "finish_time")
private Date finishTime;


/**
* 创建者
*/
@@ -129,6 +143,19 @@ public class ExperimentIns implements Serializable {
this.nodesLogs = nodesLogs;
}

public void setStartTime(Date startTime) {
this.startTime = startTime;
}

public Date getStartTime() {return startTime;}

public void setFinishTime(Date finishTime) {
this.finishTime = finishTime;
}

public Date getFinishTime() {return finishTime;}


public String getCreateBy() {
return createBy;
}


+ 4
- 0
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/DatasetVersionDao.java View File

@@ -55,6 +55,8 @@ public interface DatasetVersionDao {
*/
int insertBatch(@Param("entities") List<DatasetVersion> entities);



/**
* 批量新增或按主键更新数据(MyBatis原生foreach方法)
*
@@ -83,5 +85,7 @@ public interface DatasetVersionDao {
List<DatasetVersion> queryByDatasetId(Integer datasetId);

DatasetVersion queryByDatasetVersion(DatasetVersion datasetVersion);


}


+ 4
- 4
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ExperimentInsDao.java View File

@@ -29,7 +29,7 @@ public interface ExperimentInsDao {
* @param pageable 分页对象
* @return 对象列表
*/
List<ExperimentIns> queryAllByLimit(@Param("experimentIns")ExperimentIns experimentIns, @Param("pageable") Pageable pageable);
List<ExperimentIns> queryAllByLimit(@Param("experimentIns") ExperimentIns experimentIns, @Param("pageable") Pageable pageable);

/**
* 统计总行数
@@ -37,7 +37,7 @@ public interface ExperimentInsDao {
* @param experimentIns 查询条件
* @return 总行数
*/
long count(@Param("experimentIns")ExperimentIns experimentIns);
long count(@Param("experimentIns") ExperimentIns experimentIns);

/**
* 新增数据
@@ -45,7 +45,7 @@ public interface ExperimentInsDao {
* @param experimentIns 实例对象
* @return 影响行数
*/
int insert(ExperimentIns experimentIns);
int insert(@Param("experimentIns") ExperimentIns experimentIns);

/**
* 批量新增数据(MyBatis原生foreach方法)
@@ -70,7 +70,7 @@ public interface ExperimentInsDao {
* @param experimentIns 实例对象
* @return 影响行数
*/
int update(ExperimentIns experimentIns);
int update(@Param("experimentIns") ExperimentIns experimentIns);

/**
* 通过主键删除数据


+ 1
- 0
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ExperimentInsService.java View File

@@ -68,6 +68,7 @@ public interface ExperimentInsService {
*/
boolean deleteById(Integer id);


List<ExperimentIns> queryByExperimentId(Integer id);




+ 1
- 1
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ExperimentService.java View File

@@ -56,7 +56,7 @@ public interface ExperimentService {
*/
boolean deleteById(Integer id);
String removeById(Integer id);
Experiment runExperiment(Integer id);
Experiment runExperiment(Integer id) throws Exception;

Experiment addAndRunExperiment(Experiment experiment);



+ 16
- 4
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentInsServiceImpl.java View File

@@ -17,6 +17,7 @@ import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@@ -63,6 +64,7 @@ public class ExperimentInsServiceImpl implements ExperimentInsService {
@Override
public ExperimentIns queryById(Integer id) {
ExperimentIns experimentIns = this.experimentInsDao.queryById(id);
//获取实例当前状态
String currentStatus = experimentIns.getStatus();

// 检查是否需要调用接口查询状态:当原本状态为null或running或Pending时调用argo接口
@@ -76,7 +78,6 @@ public class ExperimentInsServiceImpl implements ExperimentInsService {
}

}

return experimentIns;
}

@@ -241,6 +242,19 @@ public class ExperimentInsServiceImpl implements ExperimentInsService {
if (status == null || status.isEmpty()) {
throw new RuntimeException("工作流状态为空。");
}
//解析流水线开始时间,开始时间一定存在,所以不需要判断
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");

String startedAtString = (String) status.get("startedAt");
Date startTime = dateFormat.parse(startedAtString);
experimentIns.setStartTime(startTime);

//解析流水线结束时间
String finishedAtString = (String) status.get("finishedAt");
if (finishedAtString != null && !finishedAtString.isEmpty()) {
Date finishTime = dateFormat.parse(finishedAtString);
experimentIns.setFinishTime(finishTime);
}

// 解析nodes字段,提取节点状态并转换为JSON字符串
Map<String, Object> nodes = (Map<String, Object>) status.get("nodes");
@@ -261,7 +275,6 @@ public class ExperimentInsServiceImpl implements ExperimentInsService {

}


/**
* 终止已经创建的实验实例
*
@@ -303,9 +316,8 @@ public class ExperimentInsServiceImpl implements ExperimentInsService {
// 检查响应是否为空或无内容
if (StringUtils.isEmpty(req)) {
throw new RuntimeException("终止响应内容为空。");
}


}
// 将响应的JSON字符串转换为Map对象
Map<String, Object> runResMap = JsonUtils.jsonToMap(req);
// 从响应Map中直接获取"errCode"的值


+ 22
- 4
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentServiceImpl.java View File

@@ -5,6 +5,7 @@ import com.ruoyi.platform.domain.Experiment;
import com.ruoyi.platform.domain.ExperimentIns;
import com.ruoyi.platform.domain.Workflow;
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.service.WorkflowService;
@@ -35,6 +36,11 @@ public class ExperimentServiceImpl implements ExperimentService {
@Resource
private ExperimentDao experimentDao;

@Resource
private ExperimentInsDao experimentInsDao;



@Resource
@Lazy
private WorkflowService workflowService;
@@ -192,7 +198,7 @@ public class ExperimentServiceImpl implements ExperimentService {
* @return 是否成功
*/
@Override
public Experiment runExperiment(Integer id) {
public Experiment runExperiment(Integer id) throws Exception {
//先查出实验记录
Experiment experiment = this.queryById(id);

@@ -200,13 +206,18 @@ public class ExperimentServiceImpl implements ExperimentService {
System.out.println("No experiment");
}


Workflow workflow = workflowService.queryById(experiment.getWorkflowId());
if(workflow == null) {
throw new RuntimeException("流水线不存在,请先创建流水线");
}

String dag = workflow.getDag();
// 调argo转换接口
try {
String convertRes = HttpUtils.sendPost(argoUrl + argoConvert, dag);
if (convertRes == null || StringUtils.isEmpty(convertRes)) {
throw new RuntimeException("Failed to convert workflow.");
throw new RuntimeException("转换流水线失败");
}
Map<String, Object> converMap = JsonUtils.jsonToMap(convertRes);
// 组装运行接口json
@@ -234,13 +245,16 @@ public class ExperimentServiceImpl implements ExperimentService {
experimentIns.setArgoInsNs((String) metadata.get("namespace"));
experimentIns.setArgoInsName((String) metadata.get("name"));
//插入ExperimentIns表中
experimentInsService.insert(experimentIns);
experimentInsDao.insert(experimentIns);

}catch (Exception e){
throw new RuntimeException(e);
}
List<ExperimentIns> experimentIns = experimentInsService.queryByExperimentId(id);


experiment.setExperimentInsList(experimentIns);

return experiment;
}

@@ -253,7 +267,11 @@ public class ExperimentServiceImpl implements ExperimentService {
throw new RuntimeException("Failed to add experiment.");
}
// 调用runExperiment方法运行实验
newExperiment = this.runExperiment(newExperiment.getId());
try {
newExperiment = this.runExperiment(newExperiment.getId());
} catch (Exception e) {
throw new RuntimeException(e);
}

return newExperiment;
}


+ 36
- 12
ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ExperimentInsDaoMapper.xml View File

@@ -10,6 +10,8 @@
<result property="status" column="status" jdbcType="VARCHAR"/>
<result property="nodesStatus" column="nodes_status" jdbcType="VARCHAR"/>
<result property="nodesLogs" column="nodes_logs" jdbcType="VARCHAR"/>
<result property="startTime" column="start_time" jdbcType="TIMESTAMP"/>
<result property="finishTime" column="finish_time" jdbcType="TIMESTAMP"/>
<result property="createBy" column="create_by" jdbcType="VARCHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
@@ -19,25 +21,23 @@





<!--查询单个-->
<select id="queryById" resultMap="ExperimentInsMap">
select id, experiment_id, argo_ins_name, argo_ins_ns, status, nodes_status, nodes_logs, create_by, create_time, update_by, update_time, state
select id, experiment_id, argo_ins_name, argo_ins_ns, status, nodes_status, nodes_logs, start_time, finish_time, create_by, create_time, update_by, update_time, state
from experiment_ins
where id = #{id} and state = 1
</select>

<!--查询列表-->
<select id="getByExperimentId" resultMap="ExperimentInsMap">
select id, experiment_id, argo_ins_name, argo_ins_ns, status, nodes_status, nodes_logs, create_by, create_time, update_by, update_time, state
select id, experiment_id, argo_ins_name, argo_ins_ns, status, nodes_status, nodes_logs, start_time, finish_time, create_by, create_time, update_by, update_time, state
from experiment_ins
where experiment_id = #{experiment_id} and state = 1 order by create_time limit 5
</select>

<select id="queryByExperiment" resultMap="ExperimentInsMap">
select
id, experiment_id, argo_ins_name, argo_ins_ns, status, nodes_status, nodes_logs, create_by, create_time, update_by, update_time, state
id, experiment_id, argo_ins_name, argo_ins_ns, status, nodes_status, nodes_logs, start_time, finish_time, create_by, create_time, update_by, update_time, state
from experiment_ins
<where>
state = 1
@@ -62,6 +62,12 @@
<if test="experimentIns.nodesLogs != null and experimentIns.nodesLogs != ''">
and nodes_logs = #{experimentIns.nodesLogs}
</if>
<if test="experimentIns.startTime != null">
and start_time = #{experimentIns.startTime}
</if>
<if test="experimentIns.finishTime != null">
and finish_time = #{experimentIns.finishTime}
</if>
<if test="experimentIns.createBy != null and experimentIns.createBy != ''">
and create_by = #{experimentIns.createBy}
</if>
@@ -80,7 +86,7 @@
<!--查询指定行数据-->
<select id="queryAllByLimit" resultMap="ExperimentInsMap">
select
id, experiment_id, argo_ins_name, argo_ins_ns, status, nodes_status, nodes_logs, create_by, create_time, update_by, update_time, state
id, experiment_id, argo_ins_name, argo_ins_ns, status, nodes_status, nodes_logs, start_time, finish_time, create_by, create_time, update_by, update_time, state
from experiment_ins
<where>
state = 1
@@ -105,6 +111,12 @@
<if test="experimentIns.nodesLogs != null and experimentIns.nodesLogs != ''">
and nodes_logs = #{experimentIns.nodesLogs}
</if>
<if test="experimentIns.startTime != null">
and start_time = #{experimentIns.startTime}
</if>
<if test="experimentIns.finishTime != null">
and finish_time = #{experimentIns.finishTime}
</if>
<if test="experimentIns.createBy != null and experimentIns.createBy != ''">
and create_by = #{experimentIns.createBy}
</if>
@@ -149,6 +161,12 @@
<if test="experimentIns.nodesLogs != null and experimentIns.nodesLogs != ''">
and nodes_logs = #{experimentIns.nodesLogs}
</if>
<if test="experimentIns.startTime != null">
and start_time = #{experimentIns.startTime}
</if>
<if test="experimentIns.finishTime != null">
and finish_time = #{experimentIns.finishTime}
</if>
<if test="experimentIns.createBy != null and experimentIns.createBy != ''">
and create_by = #{experimentIns.createBy}
</if>
@@ -166,25 +184,25 @@

<!--新增所有列-->
<insert id="insert" keyProperty="id" useGeneratedKeys="true">
insert into experiment_ins(experiment_id,argo_ins_name,argo_ins_ns,status,nodes_status,nodes_logs,create_by,create_time,update_by,update_time,state)
values (#{experimentIns.experimentId},#{experimentIns.argoInsName},#{experimentIns.argoInsNs},#{experimentIns.status},#{experimentIns.nodesStatus},#{experimentIns.nodesLogs},#{experimentIns.createBy},#{experimentIns.createTime},#{experimentIns.updateBy},#{experimentIns.updateTime},#{experimentIns.state})
insert into experiment_ins(experiment_id,argo_ins_name,argo_ins_ns,status,nodes_status,nodes_logs,start_time,finish_time,create_by,create_time,update_by,update_time,state)
values (#{experimentIns.experimentId},#{experimentIns.argoInsName},#{experimentIns.argoInsNs},#{experimentIns.status},#{experimentIns.nodesStatus},#{experimentIns.nodesLogs},#{experimentIns.startTime},#{experimentIns.finishTime},#{experimentIns.createBy},#{experimentIns.createTime},#{experimentIns.updateBy},#{experimentIns.updateTime},#{experimentIns.state})
</insert>

<insert id="insertBatch" keyProperty="id" useGeneratedKeys="true">
insert into
experiment_ins(experiment_id,argo_ins_name,argo_ins_ns,status,nodes_status,nodes_logs,create_by,create_time,update_by,update_time,state)
experiment_ins(experiment_id,argo_ins_name,argo_ins_ns,status,nodes_status,nodes_logs,start_time,finish_time,create_by,create_time,update_by,update_time,state)
values
<foreach collection="entities" item="entity" separator=",">
(#{entity.experimentId},#{entity.argoInsName},#{entity.argoInsNs},#{entity.status},#{entity.nodesStatus},#{entity.nodesStatus},#{entity.createBy},#{entity.createTime},#{entity.updateBy},#{entity.updateTime},#{entity.state})
(#{entity.experimentId},#{entity.argoInsName},#{entity.argoInsNs},#{entity.status},#{entity.nodesStatus},#{entity.nodesLogs},#{entity.startTime},#{entity.finishTime},#{entity.createBy},#{entity.createTime},#{entity.updateBy},#{entity.updateTime},#{entity.state})
</foreach>
</insert>

<insert id="insertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
insert into
experiment_ins(experiment_id,argo_ins_name,argo_ins_ns,status,nodes_status,create_by,create_time,update_by,update_time,state)
experiment_ins(experiment_id,argo_ins_name,argo_ins_ns,status,nodes_status,start_time,finish_time,create_by,create_time,update_by,update_time,state)
values
<foreach collection="entities" item="entity" separator=",">
(#{entity.experimentId},#{entity.argoInsName},#{entity.argoInsNs},#{entity.status},#{entity.nodesStatus},#{entity.createBy},#{entity.createTime},#{entity.updateBy},#{entity.updateTime},#{entity.state})
(#{entity.experimentId},#{entity.argoInsName},#{entity.argoInsNs},#{entity.status},#{entity.nodesStatus},#{entity.startTime},#{entity.finishTime},#{entity.createBy},#{entity.createTime},#{entity.updateBy},#{entity.updateTime},#{entity.state})
</foreach>
on duplicate key update
experiment_id = values(experiment_id)argo_ins_name = values(argo_ins_name)argo_ins_ns =
@@ -213,6 +231,12 @@
<if test="experimentIns.nodesLogs != null and experimentIns.nodesLogs != ''">
nodes_logs = #{experimentIns.nodesLogs},
</if>
<if test="experimentIns.startTime != null">
start_time = #{experimentIns.startTime},
</if>
<if test="experimentIns.finishTime != null">
finish_time = #{experimentIns.finishTime},
</if>
<if test="experimentIns.createBy != null and experimentIns.createBy != ''">
create_by = #{experimentIns.createBy},
</if>


+ 3
- 2
ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/WorkflowDaoMapper.xml View File

@@ -33,7 +33,7 @@
and id = #{workflow.id}
</if>
<if test="workflow.name != null and workflow.name != ''">
and name = #{workflow.name}
and name like "%"#{workflow.name}"%"
</if>
<if test="workflow.description != null and workflow.description != ''">
and description = #{workflow.description}
@@ -68,7 +68,7 @@
and id = #{workflow.id}
</if>
<if test="workflow.name != null and workflow.name != ''">
and name = #{workflow.name}
and name like "%"#{workflow.name}"%"
</if>
<if test="workflow.description != null and workflow.description != ''">
and description = #{workflow.description}
@@ -171,6 +171,7 @@
<where>
state = 1
<if test="workflow.name != null and workflow.name != ''">

and name like "%"#{workflow.name}"%"
</if>
</where>


Loading…
Cancel
Save