Browse Source

新增批量删除实验实例接口

dev-lhz
chenzhihang 1 year ago
parent
commit
4474d3a003
1 changed files with 52 additions and 52 deletions
  1. +52
    -52
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentInsServiceImpl.java

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

@@ -36,13 +36,13 @@ public class ExperimentInsServiceImpl implements ExperimentInsService {
@Resource @Resource
private WorkflowService workflowService; private WorkflowService workflowService;
@Value("${argo.url}") @Value("${argo.url}")
private String argoUrl;
private String argoUrl;
@Value("${argo.convert}") @Value("${argo.convert}")
private String argoConvert;
private String argoConvert;
@Value("${argo.workflowRun}") @Value("${argo.workflowRun}")
private String argoWorkflowRun;
private String argoWorkflowRun;
@Value("${argo.workflowStatus}") @Value("${argo.workflowStatus}")
private String argoWorkflowStatus;
private String argoWorkflowStatus;
@Value("${argo.workflowTermination}") @Value("${argo.workflowTermination}")
private String argoWorkflowTermination; private String argoWorkflowTermination;
@Value("${argo.workflowLog}") @Value("${argo.workflowLog}")
@@ -60,6 +60,7 @@ public class ExperimentInsServiceImpl implements ExperimentInsService {
@Resource @Resource
private K8sClientUtil k8sClientUtil; private K8sClientUtil k8sClientUtil;
private final MinioUtil minioUtil; private final MinioUtil minioUtil;

public ExperimentInsServiceImpl(MinioUtil minioUtil) { public ExperimentInsServiceImpl(MinioUtil minioUtil) {
this.minioUtil = minioUtil; this.minioUtil = minioUtil;
} }
@@ -97,8 +98,6 @@ public class ExperimentInsServiceImpl implements ExperimentInsService {
} }


/** /**
*
*
* 根据实验ID查找所有具有相同ID的实例,并将它们添加到实验列表中 * 根据实验ID查找所有具有相同ID的实例,并将它们添加到实验列表中
* *
* @param experimentId 实验ID * @param experimentId 实验ID
@@ -187,8 +186,6 @@ public class ExperimentInsServiceImpl implements ExperimentInsService {
} }






/** /**
* 修改数据 * 修改数据
* *
@@ -207,7 +204,7 @@ public class ExperimentInsServiceImpl implements ExperimentInsService {
@Override @Override
public String removeById(Integer id) { public String removeById(Integer id) {
ExperimentIns experimentIns = experimentInsDao.queryById(id); ExperimentIns experimentIns = experimentInsDao.queryById(id);
if (experimentIns == null){
if (experimentIns == null) {
return "实验实例不存在"; return "实验实例不存在";
} }


@@ -215,25 +212,28 @@ public class ExperimentInsServiceImpl implements ExperimentInsService {
LoginUser loginUser = SecurityUtils.getLoginUser(); LoginUser loginUser = SecurityUtils.getLoginUser();
String username = loginUser.getUsername(); String username = loginUser.getUsername();
String createdBy = experimentIns.getCreateBy(); String createdBy = experimentIns.getCreateBy();
if (!(StringUtils.equals(username,"admin") || StringUtils.equals(username,createdBy))){
if (!(StringUtils.equals(username, "admin") || StringUtils.equals(username, createdBy))) {
return "无权限删除该流水线"; return "无权限删除该流水线";
} }


if (StringUtils.isEmpty(experimentIns.getStatus())){
if (StringUtils.isEmpty(experimentIns.getStatus())) {
experimentIns = queryStatusFromArgo(experimentIns); experimentIns = queryStatusFromArgo(experimentIns);
} }
if (StringUtils.equals(experimentIns.getStatus(),"Running")){
if (StringUtils.equals(experimentIns.getStatus(), "Running")) {
return "实验实例正在运行,不可删除"; return "实验实例正在运行,不可删除";
} }
experimentIns.setState(0); experimentIns.setState(0);
return this.experimentInsDao.update(experimentIns)>0?"删除成功":"删除失败";
return this.experimentInsDao.update(experimentIns) > 0 ? "删除成功" : "删除失败";


} }


@Override @Override
public String batchDelete(List<Integer> ids) { public String batchDelete(List<Integer> ids) {
for (Integer id : ids) { for (Integer id : ids) {
removeById(id);
String result = removeById(id);
if (!"删除成功".equals(result)) {
return result;
}
} }
return "删除成功"; return "删除成功";
} }
@@ -263,16 +263,16 @@ public class ExperimentInsServiceImpl implements ExperimentInsService {
Integer id = ins.getId(); Integer id = ins.getId();
// 创建请求数据map // 创建请求数据map
ExperimentIns experimentIns = this.experimentInsDao.queryById(id); ExperimentIns experimentIns = this.experimentInsDao.queryById(id);
Map<String,Object> requestData = new HashMap<>();
Map<String, Object> requestData = new HashMap<>();
requestData.put("namespace", namespace); requestData.put("namespace", namespace);
requestData.put("name", name); requestData.put("name", name);
// 创建发送数据map,将请求数据作为"data"键的值 // 创建发送数据map,将请求数据作为"data"键的值
Map<String,Object> res = new HashMap<>();
Map<String, Object> res = new HashMap<>();
res.put("data", requestData); res.put("data", requestData);


try { try {
// 发送POST请求到Argo工作流状态查询接口,并将请求数据转换为JSON // 发送POST请求到Argo工作流状态查询接口,并将请求数据转换为JSON
String req = httpUtils.sendPost(argoUrl + argoWorkflowStatus,null, JsonUtils.mapToJson(res));
String req = httpUtils.sendPost(argoUrl + argoWorkflowStatus, null, JsonUtils.mapToJson(res));
// 检查响应是否为空或无内容 // 检查响应是否为空或无内容
if (req == null || StringUtils.isEmpty(req)) { if (req == null || StringUtils.isEmpty(req)) {
throw new RuntimeException("工作流状态响应为空。"); throw new RuntimeException("工作流状态响应为空。");
@@ -300,10 +300,10 @@ public class ExperimentInsServiceImpl implements ExperimentInsService {


// 解析nodes字段,提取节点状态并转换为JSON字符串 // 解析nodes字段,提取节点状态并转换为JSON字符串
Map<String, Object> nodes = (Map<String, Object>) status.get("nodes"); Map<String, Object> nodes = (Map<String, Object>) status.get("nodes");
Map<String, Object> modifiedNodes = new LinkedHashMap<>();
if (nodes != null ) {
Map<String, Object> modifiedNodes = new LinkedHashMap<>();
if (nodes != null) {
for (Map.Entry<String, Object> nodeEntry : nodes.entrySet()) { for (Map.Entry<String, Object> nodeEntry : nodes.entrySet()) {
Map<String,Object> nodeDetails = (Map<String, Object>) nodeEntry.getValue();
Map<String, Object> nodeDetails = (Map<String, Object>) nodeEntry.getValue();
String templateName = (String) nodeDetails.get("displayName"); String templateName = (String) nodeDetails.get("displayName");
modifiedNodes.put(templateName, nodeDetails); modifiedNodes.put(templateName, nodeDetails);
} }
@@ -313,10 +313,10 @@ public class ExperimentInsServiceImpl implements ExperimentInsService {
experimentIns.setNodesStatus(nodeStatusJson); experimentIns.setNodesStatus(nodeStatusJson);


//终止态为终止不改 //终止态为终止不改
if (!StringUtils.equals(experimentIns.getStatus(),"Terminated")) {
experimentIns.setStatus(StringUtils.isNotEmpty((String) status.get("phase"))?(String) status.get("phase"):"Pending");
if (!StringUtils.equals(experimentIns.getStatus(), "Terminated")) {
experimentIns.setStatus(StringUtils.isNotEmpty((String) status.get("phase")) ? (String) status.get("phase") : "Pending");
} }
if (StringUtils.equals(experimentIns.getStatus(),"Error")) {
if (StringUtils.equals(experimentIns.getStatus(), "Error")) {
experimentIns.setStatus("Failed"); experimentIns.setStatus("Failed");
} }


@@ -357,16 +357,16 @@ public class ExperimentInsServiceImpl implements ExperimentInsService {
} }


// 创建请求数据map // 创建请求数据map
Map<String,Object> requestData = new HashMap<>();
Map<String, Object> requestData = new HashMap<>();
requestData.put("namespace", namespace); requestData.put("namespace", namespace);
requestData.put("name", name); requestData.put("name", name);
// 创建发送数据map,将请求数据作为"data"键的值 // 创建发送数据map,将请求数据作为"data"键的值
Map<String,Object> res = new HashMap<>();
Map<String, Object> res = new HashMap<>();
res.put("data", requestData); res.put("data", requestData);


try { try {
// 发送POST请求到Argo工作流状态查询接口,并将请求数据转换为JSON // 发送POST请求到Argo工作流状态查询接口,并将请求数据转换为JSON
String req = httpUtils.sendPost(argoUrl + argoWorkflowTermination,null, JsonUtils.mapToJson(res));
String req = httpUtils.sendPost(argoUrl + argoWorkflowTermination, null, JsonUtils.mapToJson(res));
// 检查响应是否为空或无内容 // 检查响应是否为空或无内容
if (StringUtils.isEmpty(req)) { if (StringUtils.isEmpty(req)) {
throw new RuntimeException("终止响应内容为空。"); throw new RuntimeException("终止响应内容为空。");
@@ -430,20 +430,20 @@ public class ExperimentInsServiceImpl implements ExperimentInsService {
String namespace = experimentIns.getArgoInsNs(); String namespace = experimentIns.getArgoInsNs();


// 创建请求数据的Json(map) // 创建请求数据的Json(map)
Map<String,Object> requestData = new HashMap<>();
Map<String, Object> requestData = new HashMap<>();
requestData.put("namespace", namespace); requestData.put("namespace", namespace);
requestData.put("name", name); requestData.put("name", name);
//先写死这两个数据项 //先写死这两个数据项
requestData.put("workflow-type","workflows");
requestData.put("artifact-name","main-logs");
requestData.put("component-id",componentId);
requestData.put("workflow-type", "workflows");
requestData.put("artifact-name", "main-logs");
requestData.put("component-id", componentId);
// 创建发送数据map,将请求数据作为"data"键的值 // 创建发送数据map,将请求数据作为"data"键的值
Map<String,Object> res = new HashMap<>();
Map<String, Object> res = new HashMap<>();
res.put("data", requestData); res.put("data", requestData);


try { try {
// 发送POST请求到Argo工作流日志查询接口,并将请求数据转换为JSON // 发送POST请求到Argo工作流日志查询接口,并将请求数据转换为JSON
String req = httpUtils.sendPost(argoUrl + argoWorkflowLog, null,JsonUtils.mapToJson(res));
String req = httpUtils.sendPost(argoUrl + argoWorkflowLog, null, JsonUtils.mapToJson(res));
// 检查响应是否为空或无内容 // 检查响应是否为空或无内容
if (StringUtils.isEmpty(req)) { if (StringUtils.isEmpty(req)) {
throw new RuntimeException("响应内容为空"); throw new RuntimeException("响应内容为空");
@@ -452,7 +452,7 @@ public class ExperimentInsServiceImpl implements ExperimentInsService {
Map<String, Object> runResMap = JsonUtils.jsonToMap(req); Map<String, Object> runResMap = JsonUtils.jsonToMap(req);
// 从响应Map中获取"data"的值,也就是日志的值 // 从响应Map中获取"data"的值,也就是日志的值
String experimentInsLog = (String) runResMap.get("data"); String experimentInsLog = (String) runResMap.get("data");
if (experimentInsLog == null){
if (experimentInsLog == null) {
throw new RuntimeException("日志为空。"); throw new RuntimeException("日志为空。");
} }
//返回日志内容 //返回日志内容
@@ -470,28 +470,28 @@ public class ExperimentInsServiceImpl implements ExperimentInsService {
//查询 实例 //查询 实例
ExperimentIns experimentIns = this.experimentInsDao.queryById(id); ExperimentIns experimentIns = this.experimentInsDao.queryById(id);
if (experimentIns == null) { if (experimentIns == null) {
throw new Exception("实验实例未查询到,id:" + id);
throw new Exception("实验实例未查询到,id:" + id);
} }
//找到 节点 节点结果 //找到 节点 节点结果
String nodesResultString = experimentIns.getNodesResult(); String nodesResultString = experimentIns.getNodesResult();
if (StringUtils.isEmpty(nodesResultString)) { if (StringUtils.isEmpty(nodesResultString)) {
throw new Exception("实验实例未查询到节点结果,id:" + id);
throw new Exception("实验实例未查询到节点结果,id:" + id);
} }
Map<String, Object> nodesResult = JsonUtils.jsonToMap(nodesResultString); Map<String, Object> nodesResult = JsonUtils.jsonToMap(nodesResultString);
Map<String, Object> paramOutput = (Map<String, Object>) nodesResult.get("param_output"); Map<String, Object> paramOutput = (Map<String, Object>) nodesResult.get("param_output");
List<Map<String,Object>> nodeList = (List<Map<String,Object>>) paramOutput.get(nodeId);
List<Map<String, Object>> nodeList = (List<Map<String, Object>>) paramOutput.get(nodeId);
//遍历 查询minio //遍历 查询minio
for (int i = 0; i < nodeList.size(); i++) { for (int i = 0; i < nodeList.size(); i++) {
Map<String, Object> map = nodeList.get(i); Map<String, Object> map = nodeList.get(i);
String path = (String) map.get("path"); String path = (String) map.get("path");
String bucketName = path.substring(0, path.indexOf("/")); String bucketName = path.substring(0, path.indexOf("/"));
String prefix = path.substring(path.indexOf("/")+1,path.length())+"/";
if (StringUtils.equals( (String)map.get("type"),"file")){
String prefix = path.substring(path.indexOf("/") + 1, path.length()) + "/";
if (StringUtils.equals((String) map.get("type"), "file")) {
List<Map> fileInfo = minioUtil.listFilesInDirectory(bucketName, prefix); List<Map> fileInfo = minioUtil.listFilesInDirectory(bucketName, prefix);
map.put("value",fileInfo);
}else if (StringUtils.equals( (String)map.get("type"),"string")){
map.put("value", fileInfo);
} else if (StringUtils.equals((String) map.get("type"), "string")) {
String resultInfo = minioUtil.readObjectAsString(bucketName, prefix); String resultInfo = minioUtil.readObjectAsString(bucketName, prefix);
map.put("value",resultInfo);
map.put("value", resultInfo);
} }
results.add(map); results.add(map);
//组装 //组装
@@ -508,14 +508,14 @@ public class ExperimentInsServiceImpl implements ExperimentInsService {
String taskId = logRequest.getTaskId(); String taskId = logRequest.getTaskId();
String startTime = logRequest.getStartTime(); String startTime = logRequest.getStartTime();
// 创建请求数据的Json(map) // 创建请求数据的Json(map)
Map<String,Object> requestData = new HashMap<>();
Map<String, Object> requestData = new HashMap<>();
requestData.put("component_id", componentId); requestData.put("component_id", componentId);
requestData.put("namespace", nameSpace); requestData.put("namespace", nameSpace);
requestData.put("name", name); requestData.put("name", name);
requestData.put("task_id",taskId);
requestData.put("start_time",startTime);
requestData.put("task_id", taskId);
requestData.put("start_time", startTime);
// 创建发送数据map,将请求数据作为"data"键的值 // 创建发送数据map,将请求数据作为"data"键的值
Map<String,Object> res = new HashMap<>();
Map<String, Object> res = new HashMap<>();
res.put("data", requestData); res.put("data", requestData);


try { try {
@@ -538,9 +538,9 @@ public class ExperimentInsServiceImpl implements ExperimentInsService {


@Override @Override
public Map<String, Object> getRealtimePodLog(String podName, String startTime) { public Map<String, Object> getRealtimePodLog(String podName, String startTime) {
Map<String,Object> requestData = new HashMap<>();
requestData.put("pod_name",podName);
requestData.put("start_time",startTime);
Map<String, Object> requestData = new HashMap<>();
requestData.put("pod_name", podName);
requestData.put("start_time", startTime);
try { try {
// 将Map转换为JSON字符串 // 将Map转换为JSON字符串
String req = HttpUtils.sendPost(argoUrl + argoWorkflowPodLog, JsonUtils.mapToJson(requestData)); String req = HttpUtils.sendPost(argoUrl + argoWorkflowPodLog, JsonUtils.mapToJson(requestData));
@@ -561,7 +561,7 @@ public class ExperimentInsServiceImpl implements ExperimentInsService {


@Override @Override
public String getRealtimePodLogFromPod(PodLogVo podLogVo) { public String getRealtimePodLogFromPod(PodLogVo podLogVo) {
return k8sClientUtil.getPodLogs(podLogVo.getPodName(), podLogVo.getNamespace(),podLogVo.getContainerName(), logsLines);
return k8sClientUtil.getPodLogs(podLogVo.getPodName(), podLogVo.getNamespace(), podLogVo.getContainerName(), logsLines);
} }


@Override @Override
@@ -580,7 +580,7 @@ public class ExperimentInsServiceImpl implements ExperimentInsService {
experimentIns.setStatus(status.toString()); // 设置实例的状态为枚举中的状态 experimentIns.setStatus(status.toString()); // 设置实例的状态为枚举中的状态


// 查询具有相同状态的实例数量 // 查询具有相同状态的实例数量
Long count = experimentInsDao.count(experimentIns);
Long count = experimentInsDao.count(experimentIns);


// 将状态及其对应的实例数量放入map中 // 将状态及其对应的实例数量放入map中
statusCountMap.put(status.toString(), count); statusCountMap.put(status.toString(), count);
@@ -595,7 +595,7 @@ public class ExperimentInsServiceImpl implements ExperimentInsService {
boolean flag = true; boolean flag = true;
List<String> terminatedStates = Arrays.asList("Succeeded", "Failed"); List<String> terminatedStates = Arrays.asList("Succeeded", "Failed");
flag = terminatedStates.contains(status); flag = terminatedStates.contains(status);
if (StringUtils.equals(status, "Terminated")){
if (StringUtils.equals(status, "Terminated")) {
//如果跟node_status里面不一样,就要去更新node_status的信息 //如果跟node_status里面不一样,就要去更新node_status的信息
String nodesStatus = ins.getNodesStatus(); String nodesStatus = ins.getNodesStatus();
Map<String, Object> nodeMap = JsonUtils.jsonToMap(nodesStatus); Map<String, Object> nodeMap = JsonUtils.jsonToMap(nodesStatus);
@@ -604,7 +604,7 @@ public class ExperimentInsServiceImpl implements ExperimentInsService {
.findFirst() .findFirst()
.orElse(null); .orElse(null);
Map workflowMap = (Map) nodeMap.get(keyStartsWithWorkflow); Map workflowMap = (Map) nodeMap.get(keyStartsWithWorkflow);
if (workflowMap != null){
if (workflowMap != null) {
flag = StringUtils.equals("Terminated", (String) workflowMap.get("phase")); flag = StringUtils.equals("Terminated", (String) workflowMap.get("phase"));
} }
} }


Loading…
Cancel
Save