|
@@ -8,12 +8,11 @@ import com.helospark.lightdi.annotation.Service;
|
|
|
import com.winhc.dataworks.flow.touch.bean.*;
|
|
|
import com.winhc.dataworks.flow.touch.configuration.SchemaInit;
|
|
|
import com.winhc.dataworks.flow.touch.service.TouchService;
|
|
|
+import com.winhc.dataworks.flow.touch.utils.DingUtils;
|
|
|
import lombok.SneakyThrows;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
@@ -27,6 +26,9 @@ public class Main {
|
|
|
@Autowired
|
|
|
private TouchService touchService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private DingUtils dingUtils;
|
|
|
+
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
if (args.length != 1) {
|
|
@@ -65,19 +67,19 @@ public class Main {
|
|
|
|
|
|
int totalTask = collect.size();
|
|
|
|
|
|
+ Set<TaskInfo> end = new HashSet<>();
|
|
|
while (true) {
|
|
|
int awaitTask = 0;
|
|
|
int successTask = 0;
|
|
|
int failedTask = 0;
|
|
|
|
|
|
- int awaitNode = 0;
|
|
|
- int successNode = 0;
|
|
|
- int failedNode = 0;
|
|
|
-
|
|
|
boolean flag = true;
|
|
|
List<String> empty = new ArrayList<>();
|
|
|
|
|
|
for (TaskInfo taskInfo : collect) {
|
|
|
+ if (end.contains(taskInfo)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
Map<String, TaskFlowEnum> query = touchService.query(taskInfo.getProject(), taskInfo.getDagId());
|
|
|
Map<String, List<String>> status = query.entrySet().stream()
|
|
|
.map(e -> {
|
|
@@ -87,6 +89,7 @@ public class Main {
|
|
|
} else {
|
|
|
entry.setKey("运行中");
|
|
|
}
|
|
|
+ entry.setValue(e.getKey());
|
|
|
return entry;
|
|
|
}).collect(Collectors.groupingBy(Entry::getKey, Collectors.mapping(Entry::getValue, Collectors.toList())));
|
|
|
List<String> success = status.getOrDefault(TaskFlowEnum.SUCCESS.getMsg(), empty);
|
|
@@ -94,21 +97,27 @@ public class Main {
|
|
|
List<String> await = status.getOrDefault("运行中", empty);
|
|
|
|
|
|
|
|
|
- if (await.size() != 0) {
|
|
|
- awaitTask++;
|
|
|
- awaitNode += await.size();
|
|
|
+ if (failure.size() != 0) {
|
|
|
+ failedTask++;
|
|
|
+ log.error("failure node:{} ", failure);
|
|
|
+ DingMsg error = new DingMsg("任务失败", taskInfo.getProject(), taskInfo.getFlow(), String.join(",", failure), TaskFlowEnum.FAILURE.getMsg());
|
|
|
+ dingUtils.send(error);
|
|
|
} else {
|
|
|
- if (failure.size() != 0) {
|
|
|
- failedTask++;
|
|
|
- failedNode += failure.size();
|
|
|
- log.error("failure node:{} {}", failedTask, failedNode);
|
|
|
+ if (await.size() != 0) {
|
|
|
+ awaitTask++;
|
|
|
} else {
|
|
|
- successNode += success.size();
|
|
|
successTask++;
|
|
|
}
|
|
|
}
|
|
|
- flag = flag && await.size() == 0;
|
|
|
+
|
|
|
+
|
|
|
+ flag = flag && (await.size() == 0 || failure.size() != 0);
|
|
|
+
|
|
|
+ if (await.size() == 0 || failure.size() != 0) {
|
|
|
+ end.add(taskInfo);
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
log.info("\nawait task:{}\ntotal task:{}\nsuccess task:{}\nfailure task:{}\n"
|
|
|
, awaitTask
|
|
|
, totalTask
|
|
@@ -116,12 +125,6 @@ public class Main {
|
|
|
, failedTask
|
|
|
);
|
|
|
|
|
|
- log.info("\nawait node:{}\ntotal node:{}\nsuccess node:{}\nfailure node:{}\n"
|
|
|
- , awaitNode
|
|
|
- , awaitNode + successNode + failedNode
|
|
|
- , successNode
|
|
|
- , failedNode
|
|
|
- );
|
|
|
if (flag) {
|
|
|
break;
|
|
|
}
|