feat(3.2.0):工作流Dasharboard提交
完成工作流Dasharboard
This commit is contained in:
parent
1a9d2e43bc
commit
ad5dd3db1c
@ -29,6 +29,11 @@ public class JobBatchSummaryResponseDO {
|
|||||||
*/
|
*/
|
||||||
private Long jobId;
|
private Long jobId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工作流任务id
|
||||||
|
*/
|
||||||
|
//private Long workflowId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 任务批次状态
|
* 任务批次状态
|
||||||
*/
|
*/
|
||||||
|
@ -25,19 +25,23 @@ public interface JobSummaryMapper extends BaseMapper<JobSummary> {
|
|||||||
|
|
||||||
IPage<DashboardRetryLineResponseDO.Task> jobTaskList(@Param("namespaceId") String namespaceId, @Param("groupNames") List<String> groupNames, Page<Object> page);
|
IPage<DashboardRetryLineResponseDO.Task> jobTaskList(@Param("namespaceId") String namespaceId, @Param("groupNames") List<String> groupNames, Page<Object> page);
|
||||||
|
|
||||||
List<DashboardLineResponseDO> jobLineList(@Param("namespaceId") String namespaceId,
|
List<DashboardLineResponseDO> jobLineList(
|
||||||
@Param("groupNames") List<String> groupNames,
|
@Param("systemTaskType") Integer systemTaskType,
|
||||||
@Param("groupName") String groupName,
|
@Param("namespaceId") String namespaceId,
|
||||||
@Param("type") String type,
|
@Param("groupNames") List<String> groupNames,
|
||||||
@Param("from") LocalDateTime from,
|
@Param("groupName") String groupName,
|
||||||
@Param("to") LocalDateTime to);
|
@Param("dateFormat") String dateFormat,
|
||||||
|
@Param("from") LocalDateTime from,
|
||||||
|
@Param("to") LocalDateTime to);
|
||||||
|
|
||||||
DashboardCardResponseDO.JobTask toJobTask(@Param("namespaceId") String namespaceId, @Param("groupNames") List<String> groupNames);
|
List<DashboardRetryLineResponseDO.Rank> dashboardRank(
|
||||||
|
@Param("systemTaskType") Integer systemTaskType,
|
||||||
List<DashboardRetryLineResponseDO.Rank> dashboardRank(@Param("namespaceId") String namespaceId,
|
@Param("namespaceId") String namespaceId,
|
||||||
@Param("groupNames") List<String> groupNames,
|
@Param("groupNames") List<String> groupNames,
|
||||||
@Param("groupName") String groupName,
|
@Param("groupName") String groupName,
|
||||||
@Param("startTime") LocalDateTime startTime,
|
@Param("startTime") LocalDateTime startTime,
|
||||||
@Param("endTime") LocalDateTime endTime
|
@Param("endTime") LocalDateTime endTime
|
||||||
);
|
);
|
||||||
|
|
||||||
|
DashboardCardResponseDO.JobTask toJobTask(@Param("systemTaskType") Integer systemTaskType, @Param("namespaceId") String namespaceId, @Param("groupNames") List<String> groupNames);
|
||||||
}
|
}
|
||||||
|
@ -27,5 +27,7 @@ public interface JobTaskBatchMapper extends BaseMapper<JobTaskBatch> {
|
|||||||
|
|
||||||
List<JobBatchResponseDO> selectJobBatchListByIds(@Param("ids") List<Long> ids);
|
List<JobBatchResponseDO> selectJobBatchListByIds(@Param("ids") List<Long> ids);
|
||||||
|
|
||||||
List<JobBatchSummaryResponseDO> summaryJobBatchList(@Param("from") LocalDateTime todayFrom, @Param("to") LocalDateTime to);
|
List<JobBatchSummaryResponseDO> summaryJobBatchList(@Param("systemTaskType") Integer systemTaskType, @Param("from") LocalDateTime todayFrom, @Param("to") LocalDateTime to);
|
||||||
|
|
||||||
|
List<JobBatchSummaryResponseDO> summaryWorkflowTaskBatchList(@Param("from") LocalDateTime todayFrom, @Param("to") LocalDateTime to);
|
||||||
}
|
}
|
||||||
|
@ -92,4 +92,8 @@ public class JobSummary implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private LocalDateTime updateDt;
|
private LocalDateTime updateDt;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务类型 3、JOB任务 4、WORKFLOW任务
|
||||||
|
*/
|
||||||
|
private Integer systemTaskType;
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
<insert id="insertOrUpdate" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id">
|
<insert id="insertOrUpdate" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id">
|
||||||
INSERT INTO
|
INSERT INTO
|
||||||
job_summary (namespace_id, group_name, job_id, trigger_at,
|
job_summary (namespace_id, group_name, job_id, trigger_at, system_task_type,
|
||||||
success_num,fail_num,fail_reason,stop_num,stop_reason, cancel_num,cancel_reason)
|
success_num,fail_num,fail_reason,stop_num,stop_reason, cancel_num,cancel_reason)
|
||||||
VALUES
|
VALUES
|
||||||
<foreach collection="list" item="item" separator=",">
|
<foreach collection="list" item="item" separator=",">
|
||||||
@ -29,6 +29,7 @@
|
|||||||
#{item.groupName},
|
#{item.groupName},
|
||||||
#{item.jobId},
|
#{item.jobId},
|
||||||
#{item.triggerAt},
|
#{item.triggerAt},
|
||||||
|
#{item.systemTaskType},
|
||||||
#{item.successNum},
|
#{item.successNum},
|
||||||
#{item.failNum},
|
#{item.failNum},
|
||||||
#{item.failReason},
|
#{item.failReason},
|
||||||
@ -51,28 +52,11 @@
|
|||||||
<select id="jobLineList"
|
<select id="jobLineList"
|
||||||
resultType="com.aizuda.easy.retry.template.datasource.persistence.dataobject.DashboardLineResponseDO">
|
resultType="com.aizuda.easy.retry.template.datasource.persistence.dataobject.DashboardLineResponseDO">
|
||||||
SELECT
|
SELECT
|
||||||
<choose>
|
DATE_FORMAT(trigger_at, #{dateFormat}) AS createDt,
|
||||||
<when test="type == 'DAY'">
|
ifnull(SUM(success_num), 0) AS success,
|
||||||
DATE_FORMAT(create_dt,'%H')
|
ifnull(SUM(stop_num), 0) AS stop,
|
||||||
</when>
|
ifnull(SUM(cancel_num), 0) AS cancel,
|
||||||
<when test="type == 'WEEK'">
|
ifnull(SUM(fail_num), 0) AS fail,
|
||||||
DATE_FORMAT(create_dt,'%Y-%m-%d')
|
|
||||||
</when>
|
|
||||||
<when test="type =='MONTH'">
|
|
||||||
DATE_FORMAT(create_dt,'%Y-%m-%d')
|
|
||||||
</when>
|
|
||||||
<when test="type == 'YEAR'">
|
|
||||||
DATE_FORMAT(create_dt,'%Y-%m')
|
|
||||||
</when>
|
|
||||||
<otherwise>
|
|
||||||
DATE_FORMAT(create_dt,'%Y-%m-%d')
|
|
||||||
</otherwise>
|
|
||||||
</choose>
|
|
||||||
AS createDt,
|
|
||||||
ifnull(SUM(success_num), 0) AS success,
|
|
||||||
ifnull(SUM(stop_num), 0) AS stop,
|
|
||||||
ifnull(SUM(cancel_num), 0) AS cancel,
|
|
||||||
ifnull(SUM(fail_num), 0) AS fail,
|
|
||||||
ifnull(SUM(success_num + fail_num + stop_num + cancel_num), 0) AS total
|
ifnull(SUM(success_num + fail_num + stop_num + cancel_num), 0) AS total
|
||||||
FROM job_summary
|
FROM job_summary
|
||||||
<where>
|
<where>
|
||||||
@ -85,20 +69,21 @@
|
|||||||
<if test="groupName != null and groupName != '' ">
|
<if test="groupName != null and groupName != '' ">
|
||||||
AND group_name = #{groupName}
|
AND group_name = #{groupName}
|
||||||
</if>
|
</if>
|
||||||
AND namespace_id = #{namespaceId} AND trigger_at BETWEEN #{from} AND #{to}
|
AND system_task_type = #{systemTaskType} AND namespace_id = #{namespaceId} AND trigger_at BETWEEN #{from} AND #{to}
|
||||||
</where>
|
</where>
|
||||||
GROUP BY createDt
|
GROUP BY DATE_FORMAT(trigger_at, #{dateFormat})
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="toJobTask"
|
<select id="toJobTask"
|
||||||
resultType="com.aizuda.easy.retry.template.datasource.persistence.dataobject.DashboardCardResponseDO$JobTask">
|
resultType="com.aizuda.easy.retry.template.datasource.persistence.dataobject.DashboardCardResponseDO$JobTask">
|
||||||
SELECT ifnull(sum(success_num), 0) AS successNum,
|
SELECT
|
||||||
|
ifnull(sum(success_num), 0) AS successNum,
|
||||||
ifnull(sum(stop_num), 0) AS stopNum,
|
ifnull(sum(stop_num), 0) AS stopNum,
|
||||||
ifnull(sum(cancel_num), 0) AS cancelNum,
|
ifnull(sum(cancel_num), 0) AS cancelNum,
|
||||||
ifnull(sum(fail_num), 0) AS failNum,
|
ifnull(sum(fail_num), 0) AS failNum,
|
||||||
ifnull(sum(success_num + fail_num + stop_num + cancel_num), 0) AS totalNum
|
ifnull(sum(success_num + fail_num + stop_num + cancel_num), 0) AS totalNum
|
||||||
FROM job_summary
|
FROM job_summary
|
||||||
WHERE namespace_id = #{namespaceId}
|
WHERE system_task_type = #{systemTaskType} AND namespace_id = #{namespaceId}
|
||||||
<if test="groupNames != null and groupNames.size > 0">
|
<if test="groupNames != null and groupNames.size > 0">
|
||||||
AND group_name IN
|
AND group_name IN
|
||||||
<foreach collection="groupNames" item="groupName" open="(" separator="," close=")">
|
<foreach collection="groupNames" item="groupName" open="(" separator="," close=")">
|
||||||
@ -110,7 +95,12 @@
|
|||||||
<select id="dashboardRank"
|
<select id="dashboardRank"
|
||||||
resultType="com.aizuda.easy.retry.template.datasource.persistence.dataobject.DashboardRetryLineResponseDO$Rank">
|
resultType="com.aizuda.easy.retry.template.datasource.persistence.dataobject.DashboardRetryLineResponseDO$Rank">
|
||||||
SELECT
|
SELECT
|
||||||
CONCAT(group_name, '/', (SELECT job_name FROM job WHERE id=job_id)) `name`,
|
<if test="systemTaskType == 3">
|
||||||
|
CONCAT(group_name, '/', (SELECT job_name FROM job WHERE id = job_id)) `name`,
|
||||||
|
</if>
|
||||||
|
<if test="systemTaskType == 4">
|
||||||
|
CONCAT(group_name, '/', (SELECT workflow_name FROM workflow WHERE id = job_id)) `name`,
|
||||||
|
</if>
|
||||||
SUM(fail_num) AS total FROM job_summary
|
SUM(fail_num) AS total FROM job_summary
|
||||||
<where>
|
<where>
|
||||||
<if test="groupNames != null and groupNames.size > 0">
|
<if test="groupNames != null and groupNames.size > 0">
|
||||||
@ -124,6 +114,7 @@
|
|||||||
</if>
|
</if>
|
||||||
AND trigger_at >= #{startTime} AND trigger_at <= #{endTime}
|
AND trigger_at >= #{startTime} AND trigger_at <= #{endTime}
|
||||||
</where>
|
</where>
|
||||||
|
AND system_task_type = #{systemTaskType}
|
||||||
AND namespace_id = #{namespaceId}
|
AND namespace_id = #{namespaceId}
|
||||||
GROUP BY namespace_id, group_name, job_id
|
GROUP BY namespace_id, group_name, job_id
|
||||||
HAVING total > 0
|
HAVING total > 0
|
||||||
|
@ -55,9 +55,25 @@
|
|||||||
SUM(CASE WHEN (task_batch_status = 5) THEN 1 ELSE 0 END) AS stopNum,
|
SUM(CASE WHEN (task_batch_status = 5) THEN 1 ELSE 0 END) AS stopNum,
|
||||||
SUM(CASE WHEN (task_batch_status = 4) THEN 1 ELSE 0 END) AS failNum
|
SUM(CASE WHEN (task_batch_status = 4) THEN 1 ELSE 0 END) AS failNum
|
||||||
FROM job_task_batch
|
FROM job_task_batch
|
||||||
WHERE create_dt BETWEEN #{from} AND #{to}
|
WHERE system_task_type = #{systemTaskType} AND create_dt BETWEEN #{from} AND #{to}
|
||||||
GROUP BY namespace_id, group_name, job_id, task_batch_status, operation_reason
|
GROUP BY namespace_id, group_name, job_id, task_batch_status, operation_reason
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="summaryWorkflowTaskBatchList"
|
||||||
|
resultType="com.aizuda.easy.retry.template.datasource.persistence.dataobject.JobBatchSummaryResponseDO">
|
||||||
|
SELECT namespace_id AS namespaceId,
|
||||||
|
workflow_id AS jobId,
|
||||||
|
group_name AS groupName,
|
||||||
|
task_batch_status AS taskBatchStatus,
|
||||||
|
operation_reason AS operationReason,
|
||||||
|
COUNT(operation_reason) AS operationReasonTotal,
|
||||||
|
SUM(CASE WHEN (task_batch_status = 3) THEN 1 ELSE 0 END) AS successNum,
|
||||||
|
SUM(CASE WHEN (task_batch_status = 6) THEN 1 ELSE 0 END) AS cancelNum,
|
||||||
|
SUM(CASE WHEN (task_batch_status = 5) THEN 1 ELSE 0 END) AS stopNum,
|
||||||
|
SUM(CASE WHEN (task_batch_status = 4) THEN 1 ELSE 0 END) AS failNum
|
||||||
|
FROM workflow_task_batch
|
||||||
|
WHERE create_dt BETWEEN #{from} AND #{to}
|
||||||
|
GROUP BY namespace_id, group_name, workflow_id, task_batch_status, operation_reason
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="selectJobBatchListByIds"
|
<select id="selectJobBatchListByIds"
|
||||||
|
@ -0,0 +1,35 @@
|
|||||||
|
package com.aizuda.easy.retry.server.common.enums;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 年、月、日
|
||||||
|
*
|
||||||
|
* @author zhengweilin
|
||||||
|
* @version 1.0.0
|
||||||
|
* @date 2024/03/26
|
||||||
|
*/
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Getter
|
||||||
|
public enum DashboardLineEnum {
|
||||||
|
|
||||||
|
DAY("DAY", "%H"),
|
||||||
|
WEEK("WEEK", "%Y-%m-%d"),
|
||||||
|
MONTH("MONTH", "%Y-%m-%d"),
|
||||||
|
YEAR("YEAR", "%Y-%m"),
|
||||||
|
;
|
||||||
|
|
||||||
|
private final String unit;
|
||||||
|
private final String dateFormat;
|
||||||
|
|
||||||
|
public static DashboardLineEnum modeOf(String mode) {
|
||||||
|
for (DashboardLineEnum value : DashboardLineEnum.values()) {
|
||||||
|
if (value.getUnit().equals(mode)) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return DashboardLineEnum.WEEK;
|
||||||
|
}
|
||||||
|
}
|
@ -6,6 +6,7 @@ import com.aizuda.easy.retry.common.core.util.JsonUtil;
|
|||||||
import com.aizuda.easy.retry.server.common.Lifecycle;
|
import com.aizuda.easy.retry.server.common.Lifecycle;
|
||||||
import com.aizuda.easy.retry.server.common.config.SystemProperties;
|
import com.aizuda.easy.retry.server.common.config.SystemProperties;
|
||||||
import com.aizuda.easy.retry.server.common.dto.JobTaskBatchReason;
|
import com.aizuda.easy.retry.server.common.dto.JobTaskBatchReason;
|
||||||
|
import com.aizuda.easy.retry.server.common.enums.SyetemTaskTypeEnum;
|
||||||
import com.aizuda.easy.retry.server.common.schedule.AbstractSchedule;
|
import com.aizuda.easy.retry.server.common.schedule.AbstractSchedule;
|
||||||
import com.aizuda.easy.retry.template.datasource.persistence.dataobject.JobBatchSummaryResponseDO;
|
import com.aizuda.easy.retry.template.datasource.persistence.dataobject.JobBatchSummaryResponseDO;
|
||||||
import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobSummaryMapper;
|
import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobSummaryMapper;
|
||||||
@ -62,14 +63,14 @@ public class JobSummarySchedule extends AbstractSchedule implements Lifecycle {
|
|||||||
// 定时按日实时查询统计数据(00:00:00 - 23:59:59)
|
// 定时按日实时查询统计数据(00:00:00 - 23:59:59)
|
||||||
LocalDateTime todayFrom = LocalDateTime.of(LocalDate.now(), LocalTime.MIN).plusDays(-i);
|
LocalDateTime todayFrom = LocalDateTime.of(LocalDate.now(), LocalTime.MIN).plusDays(-i);
|
||||||
LocalDateTime todayTo = LocalDateTime.of(LocalDate.now(), LocalTime.MAX).plusDays(-i);
|
LocalDateTime todayTo = LocalDateTime.of(LocalDate.now(), LocalTime.MAX).plusDays(-i);
|
||||||
List<JobBatchSummaryResponseDO> summaryResponseDOList = jobTaskBatchMapper.summaryJobBatchList(todayFrom, todayTo);
|
List<JobBatchSummaryResponseDO> summaryResponseDOList = jobTaskBatchMapper.summaryJobBatchList(SyetemTaskTypeEnum.JOB.getType(), todayFrom, todayTo);
|
||||||
if (summaryResponseDOList == null || summaryResponseDOList.size() < 1) {
|
if (summaryResponseDOList == null || summaryResponseDOList.size() < 1) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// insertOrUpdate
|
// insertOrUpdate
|
||||||
List<JobSummary> jobSummaryList = jobSummaryList(todayFrom, summaryResponseDOList);
|
List<JobSummary> jobSummaryList = jobSummaryList(todayFrom, summaryResponseDOList);
|
||||||
int totalJobSummary = jobSummaryMapper.insertOrUpdate(jobSummaryList);
|
int totalJobSummary = jobSummaryMapper.insertOrUpdate(jobSummaryList);
|
||||||
EasyRetryLog.LOCAL.debug("job summary dashboard success todayFrom:[{}] todayTo:[{}] total:[{}]", todayFrom, todayTo, totalJobSummary);
|
EasyRetryLog.LOCAL.debug("job summary dashboard success todayFrom:[{}] todayTo:[{}] total:[{}]", todayFrom, todayTo, totalJobSummary);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -86,6 +87,7 @@ public class JobSummarySchedule extends AbstractSchedule implements Lifecycle {
|
|||||||
jobSummary.setTriggerAt(triggerAt);
|
jobSummary.setTriggerAt(triggerAt);
|
||||||
jobSummary.setNamespaceId(job.getValue().get(0).getNamespaceId());
|
jobSummary.setNamespaceId(job.getValue().get(0).getNamespaceId());
|
||||||
jobSummary.setGroupName(job.getValue().get(0).getGroupName());
|
jobSummary.setGroupName(job.getValue().get(0).getGroupName());
|
||||||
|
jobSummary.setSystemTaskType(SyetemTaskTypeEnum.JOB.getType());
|
||||||
jobSummary.setSuccessNum(job.getValue().stream().mapToInt(JobBatchSummaryResponseDO::getSuccessNum).sum());
|
jobSummary.setSuccessNum(job.getValue().stream().mapToInt(JobBatchSummaryResponseDO::getSuccessNum).sum());
|
||||||
jobSummary.setFailNum(job.getValue().stream().mapToInt(JobBatchSummaryResponseDO::getFailNum).sum());
|
jobSummary.setFailNum(job.getValue().stream().mapToInt(JobBatchSummaryResponseDO::getFailNum).sum());
|
||||||
jobSummary.setStopNum(job.getValue().stream().mapToInt(JobBatchSummaryResponseDO::getStopNum).sum());
|
jobSummary.setStopNum(job.getValue().stream().mapToInt(JobBatchSummaryResponseDO::getStopNum).sum());
|
||||||
|
@ -0,0 +1,135 @@
|
|||||||
|
package com.aizuda.easy.retry.server.job.task.support.schedule;
|
||||||
|
|
||||||
|
import com.aizuda.easy.retry.common.core.enums.JobTaskBatchStatusEnum;
|
||||||
|
import com.aizuda.easy.retry.common.core.util.JsonUtil;
|
||||||
|
import com.aizuda.easy.retry.common.log.EasyRetryLog;
|
||||||
|
import com.aizuda.easy.retry.server.common.Lifecycle;
|
||||||
|
import com.aizuda.easy.retry.server.common.config.SystemProperties;
|
||||||
|
import com.aizuda.easy.retry.server.common.dto.JobTaskBatchReason;
|
||||||
|
import com.aizuda.easy.retry.server.common.enums.SyetemTaskTypeEnum;
|
||||||
|
import com.aizuda.easy.retry.server.common.schedule.AbstractSchedule;
|
||||||
|
import com.aizuda.easy.retry.template.datasource.persistence.dataobject.JobBatchSummaryResponseDO;
|
||||||
|
import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobSummaryMapper;
|
||||||
|
import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobTaskBatchMapper;
|
||||||
|
import com.aizuda.easy.retry.template.datasource.persistence.po.JobSummary;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.time.Duration;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.LocalTime;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Job Dashboard
|
||||||
|
*
|
||||||
|
* @author: wodeyangzipingpingwuqi
|
||||||
|
* @date : 2024-03-25 10:16
|
||||||
|
* @since 3.2.0
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class WorkflowJobSummarySchedule extends AbstractSchedule implements Lifecycle {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private JobTaskBatchMapper jobTaskBatchMapper;
|
||||||
|
@Autowired
|
||||||
|
private JobSummaryMapper jobSummaryMapper;
|
||||||
|
@Autowired
|
||||||
|
private SystemProperties systemProperties;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String lockName() {
|
||||||
|
return "workflowJobSummarySchedule";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String lockAtMost() {
|
||||||
|
return "PT1M";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String lockAtLeast() {
|
||||||
|
return "PT20S";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void doExecute() {
|
||||||
|
try {
|
||||||
|
for (int i = 0; i < systemProperties.getSummaryDay(); i++) {
|
||||||
|
|
||||||
|
// 定时按日实时查询统计数据(00:00:00 - 23:59:59)
|
||||||
|
LocalDateTime todayFrom = LocalDateTime.of(LocalDate.now(), LocalTime.MIN).plusDays(-i);
|
||||||
|
LocalDateTime todayTo = LocalDateTime.of(LocalDate.now(), LocalTime.MAX).plusDays(-i);
|
||||||
|
List<JobBatchSummaryResponseDO> summaryWorkflowResponseDOList = jobTaskBatchMapper.summaryWorkflowTaskBatchList(todayFrom, todayTo);
|
||||||
|
if (summaryWorkflowResponseDOList == null || summaryWorkflowResponseDOList.size() < 1) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// insertOrUpdate
|
||||||
|
List<JobSummary> jobSummaryList = jobSummaryList(todayFrom, summaryWorkflowResponseDOList);
|
||||||
|
int totalJobSummary = jobSummaryMapper.insertOrUpdate(jobSummaryList);
|
||||||
|
EasyRetryLog.LOCAL.debug("workflow job summary dashboard success todayFrom:[{}] todayTo:[{}] total:[{}]", todayFrom, todayTo, totalJobSummary);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
EasyRetryLog.LOCAL.error("workflow job summary dashboard log error", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<JobSummary> jobSummaryList(LocalDateTime triggerAt, List<JobBatchSummaryResponseDO> summaryResponseDOList) {
|
||||||
|
List<JobSummary> jobSummaryList = new ArrayList<>();
|
||||||
|
Map<Long, List<JobBatchSummaryResponseDO>> jobIdListMap = summaryResponseDOList.parallelStream().collect(Collectors.groupingBy(JobBatchSummaryResponseDO::getJobId));
|
||||||
|
for (Map.Entry<Long, List<JobBatchSummaryResponseDO>> job : jobIdListMap.entrySet()) {
|
||||||
|
JobSummary jobSummary = new JobSummary();
|
||||||
|
jobSummary.setJobId(job.getKey());
|
||||||
|
jobSummary.setTriggerAt(triggerAt);
|
||||||
|
jobSummary.setNamespaceId(job.getValue().get(0).getNamespaceId());
|
||||||
|
jobSummary.setGroupName(job.getValue().get(0).getGroupName());
|
||||||
|
jobSummary.setSystemTaskType(SyetemTaskTypeEnum.WORKFLOW.getType());
|
||||||
|
jobSummary.setSuccessNum(job.getValue().stream().mapToInt(JobBatchSummaryResponseDO::getSuccessNum).sum());
|
||||||
|
jobSummary.setFailNum(job.getValue().stream().mapToInt(JobBatchSummaryResponseDO::getFailNum).sum());
|
||||||
|
jobSummary.setStopNum(job.getValue().stream().mapToInt(JobBatchSummaryResponseDO::getStopNum).sum());
|
||||||
|
jobSummary.setCancelNum(job.getValue().stream().mapToInt(JobBatchSummaryResponseDO::getCancelNum).sum());
|
||||||
|
|
||||||
|
jobSummary.setFailReason(JsonUtil.toJsonString(jobTaskBatchReasonList(JobTaskBatchStatusEnum.FAIL.getStatus(), job.getValue())));
|
||||||
|
jobSummary.setStopReason(JsonUtil.toJsonString(jobTaskBatchReasonList(JobTaskBatchStatusEnum.STOP.getStatus(), job.getValue())));
|
||||||
|
jobSummary.setCancelReason(JsonUtil.toJsonString(jobTaskBatchReasonList(JobTaskBatchStatusEnum.CANCEL.getStatus(), job.getValue())));
|
||||||
|
jobSummaryList.add(jobSummary);
|
||||||
|
}
|
||||||
|
return jobSummaryList;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批次状态查询 (操作原因 && 总数)
|
||||||
|
*
|
||||||
|
* @param jobTaskBatchStatus
|
||||||
|
* @param jobBatchSummaryResponseDOList
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private List<JobTaskBatchReason> jobTaskBatchReasonList(int jobTaskBatchStatus, List<JobBatchSummaryResponseDO> jobBatchSummaryResponseDOList) {
|
||||||
|
List<JobTaskBatchReason> jobTaskBatchReasonArrayList = new ArrayList<>();
|
||||||
|
List<JobBatchSummaryResponseDO> summaryResponseDOList = jobBatchSummaryResponseDOList.stream().filter(i -> jobTaskBatchStatus == i.getTaskBatchStatus()).collect(Collectors.toList());
|
||||||
|
for (JobBatchSummaryResponseDO jobBatchSummaryResponseDO : summaryResponseDOList) {
|
||||||
|
JobTaskBatchReason jobTaskBatchReason = new JobTaskBatchReason();
|
||||||
|
jobTaskBatchReason.setReason(jobBatchSummaryResponseDO.getOperationReason());
|
||||||
|
jobTaskBatchReason.setTotal(jobBatchSummaryResponseDO.getOperationReasonTotal());
|
||||||
|
jobTaskBatchReasonArrayList.add(jobTaskBatchReason);
|
||||||
|
}
|
||||||
|
return jobTaskBatchReasonArrayList;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void start() {
|
||||||
|
taskScheduler.scheduleAtFixedRate(this::execute, Duration.parse("PT1H"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void close() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -51,12 +51,13 @@ public class DashBoardController {
|
|||||||
@LoginRequired
|
@LoginRequired
|
||||||
@GetMapping("/job/line")
|
@GetMapping("/job/line")
|
||||||
public DashboardRetryLineResponseVO jobLineList(BaseQueryVO baseQueryVO,
|
public DashboardRetryLineResponseVO jobLineList(BaseQueryVO baseQueryVO,
|
||||||
|
@RequestParam(value = "mode", required = false) String mode,
|
||||||
@RequestParam(value = "groupName", required = false) String groupName,
|
@RequestParam(value = "groupName", required = false) String groupName,
|
||||||
@RequestParam(value = "type", required = false, defaultValue = "WEEK") String type,
|
@RequestParam(value = "type", required = false, defaultValue = "WEEK") String type,
|
||||||
@RequestParam(value = "startTime", required = false) String startTime,
|
@RequestParam(value = "startTime", required = false) String startTime,
|
||||||
@RequestParam(value = "endTime", required = false) String endTime
|
@RequestParam(value = "endTime", required = false) String endTime
|
||||||
) {
|
) {
|
||||||
return dashBoardService.jobLineList(baseQueryVO, groupName, type, startTime, endTime);
|
return dashBoardService.jobLineList(baseQueryVO, mode, groupName, type, startTime, endTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
@LoginRequired
|
@LoginRequired
|
||||||
|
@ -18,6 +18,11 @@ public class DashboardCardResponseVO {
|
|||||||
*/
|
*/
|
||||||
private JobTask jobTask;
|
private JobTask jobTask;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工作流任务
|
||||||
|
*/
|
||||||
|
private WorkFlowTask workFlowTask;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 重试任务
|
* 重试任务
|
||||||
*/
|
*/
|
||||||
@ -77,6 +82,22 @@ public class DashboardCardResponseVO {
|
|||||||
private BigDecimal successRate;
|
private BigDecimal successRate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public static class WorkFlowTask {
|
||||||
|
//成功
|
||||||
|
private Integer successNum;
|
||||||
|
//失败
|
||||||
|
private Integer failNum;
|
||||||
|
//取消
|
||||||
|
private Integer cancelNum;
|
||||||
|
//停止
|
||||||
|
private Integer stopNum;
|
||||||
|
// 总数
|
||||||
|
private Integer totalNum;
|
||||||
|
// 成功率
|
||||||
|
private BigDecimal successRate;
|
||||||
|
}
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Accessors(chain = true)
|
@Accessors(chain = true)
|
||||||
public static class RetryTaskBar {
|
public static class RetryTaskBar {
|
||||||
|
@ -19,7 +19,7 @@ public interface DashBoardService {
|
|||||||
|
|
||||||
DashboardRetryLineResponseVO retryLineList(BaseQueryVO baseQueryVO, String groupName, String type, String startTime, String endTime);
|
DashboardRetryLineResponseVO retryLineList(BaseQueryVO baseQueryVO, String groupName, String type, String startTime, String endTime);
|
||||||
|
|
||||||
DashboardRetryLineResponseVO jobLineList(BaseQueryVO baseQueryVO, String groupName, String type, String startTime, String endTime);
|
DashboardRetryLineResponseVO jobLineList(BaseQueryVO baseQueryVO, String mode, String groupName, String type, String startTime, String endTime);
|
||||||
|
|
||||||
PageResult<List<ServerNodeResponseVO>> pods(ServerNodeQueryVO serverNodeQueryVO);
|
PageResult<List<ServerNodeResponseVO>> pods(ServerNodeQueryVO serverNodeQueryVO);
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,11 @@ public interface JobSummaryResponseVOConverter {
|
|||||||
})
|
})
|
||||||
DashboardCardResponseVO.JobTask toTaskJob(DashboardCardResponseDO.JobTask jobTask);
|
DashboardCardResponseVO.JobTask toTaskJob(DashboardCardResponseDO.JobTask jobTask);
|
||||||
|
|
||||||
|
@Mappings({
|
||||||
|
@Mapping(target = "successRate", expression = "java(JobSummaryResponseVOConverter.toSuccessRate(jobTask.getSuccessNum(), jobTask.getTotalNum()))")
|
||||||
|
})
|
||||||
|
DashboardCardResponseVO.WorkFlowTask toWorkFlowTask(DashboardCardResponseDO.JobTask jobTask);
|
||||||
|
|
||||||
List<DashboardRetryLineResponseVO.Task> toDashboardRetryLineResponseVO(List<DashboardRetryLineResponseDO.Task> taskList);
|
List<DashboardRetryLineResponseVO.Task> toDashboardRetryLineResponseVO(List<DashboardRetryLineResponseDO.Task> taskList);
|
||||||
|
|
||||||
static BigDecimal toSuccessRate(Integer successNum, Integer totalNum) {
|
static BigDecimal toSuccessRate(Integer successNum, Integer totalNum) {
|
||||||
|
@ -9,6 +9,9 @@ import com.aizuda.easy.retry.common.log.EasyRetryLog;
|
|||||||
import com.aizuda.easy.retry.server.common.config.SystemProperties;
|
import com.aizuda.easy.retry.server.common.config.SystemProperties;
|
||||||
import com.aizuda.easy.retry.server.common.dto.DistributeInstance;
|
import com.aizuda.easy.retry.server.common.dto.DistributeInstance;
|
||||||
import com.aizuda.easy.retry.server.common.dto.ServerNodeExtAttrs;
|
import com.aizuda.easy.retry.server.common.dto.ServerNodeExtAttrs;
|
||||||
|
import com.aizuda.easy.retry.server.common.enums.DashboardLineEnum;
|
||||||
|
import com.aizuda.easy.retry.server.common.enums.SyetemTaskTypeEnum;
|
||||||
|
import com.aizuda.easy.retry.server.common.enums.SystemModeEnum;
|
||||||
import com.aizuda.easy.retry.server.common.register.ServerRegister;
|
import com.aizuda.easy.retry.server.common.register.ServerRegister;
|
||||||
import com.aizuda.easy.retry.server.web.model.base.BaseQueryVO;
|
import com.aizuda.easy.retry.server.web.model.base.BaseQueryVO;
|
||||||
import com.aizuda.easy.retry.server.web.model.base.PageResult;
|
import com.aizuda.easy.retry.server.web.model.base.PageResult;
|
||||||
@ -77,9 +80,17 @@ public class DashBoardServiceImpl implements DashBoardService {
|
|||||||
List<String> groupNames = userSessionVO.isUser() ? userSessionVO.getGroupNames() : new ArrayList<>();
|
List<String> groupNames = userSessionVO.isUser() ? userSessionVO.getGroupNames() : new ArrayList<>();
|
||||||
DashboardCardResponseVO dashboardCardResponseVO = new DashboardCardResponseVO();
|
DashboardCardResponseVO dashboardCardResponseVO = new DashboardCardResponseVO();
|
||||||
// 重试任务
|
// 重试任务
|
||||||
dashboardCardResponseVO.setRetryTask(RetrySummaryResponseVOConverter.INSTANCE.toRetryTask(retrySummaryMapper.retryTask(namespaceId, groupNames)));
|
DashboardCardResponseDO.RetryTask retryTaskDO = retrySummaryMapper.retryTask(namespaceId, groupNames);
|
||||||
|
DashboardCardResponseVO.RetryTask retryTaskVO = RetrySummaryResponseVOConverter.INSTANCE.toRetryTask(retryTaskDO);
|
||||||
|
dashboardCardResponseVO.setRetryTask(retryTaskVO);
|
||||||
// 定时任务
|
// 定时任务
|
||||||
dashboardCardResponseVO.setJobTask(JobSummaryResponseVOConverter.INSTANCE.toTaskJob(jobSummaryMapper.toJobTask(namespaceId, groupNames)));
|
DashboardCardResponseDO.JobTask jobTaskDO = jobSummaryMapper.toJobTask(SyetemTaskTypeEnum.JOB.getType(), namespaceId, groupNames);
|
||||||
|
DashboardCardResponseVO.JobTask jobTaskVO = JobSummaryResponseVOConverter.INSTANCE.toTaskJob(jobTaskDO);
|
||||||
|
dashboardCardResponseVO.setJobTask(jobTaskVO);
|
||||||
|
// 工作流任务
|
||||||
|
DashboardCardResponseDO.JobTask workFlowTaskDO = jobSummaryMapper.toJobTask(SyetemTaskTypeEnum.WORKFLOW.getType(), namespaceId, groupNames);
|
||||||
|
DashboardCardResponseVO.WorkFlowTask workFlowTaskVO = JobSummaryResponseVOConverter.INSTANCE.toWorkFlowTask(workFlowTaskDO);
|
||||||
|
dashboardCardResponseVO.setWorkFlowTask(workFlowTaskVO);
|
||||||
// 重试任务柱状图
|
// 重试任务柱状图
|
||||||
HashMap<LocalDateTime, DashboardCardResponseVO.RetryTaskBar> retryTaskBarMap = new HashMap<>();
|
HashMap<LocalDateTime, DashboardCardResponseVO.RetryTaskBar> retryTaskBarMap = new HashMap<>();
|
||||||
for (int i = 0; i < 7; i++) {
|
for (int i = 0; i < 7; i++) {
|
||||||
@ -89,7 +100,7 @@ public class DashBoardServiceImpl implements DashBoardService {
|
|||||||
|
|
||||||
List<DashboardCardResponseDO.RetryTask> retryTaskList = retrySummaryMapper.retryTaskBarList(namespaceId, groupNames);
|
List<DashboardCardResponseDO.RetryTask> retryTaskList = retrySummaryMapper.retryTaskBarList(namespaceId, groupNames);
|
||||||
Map<LocalDateTime, LongSummaryStatistics> summaryStatisticsMap = retryTaskList.stream().collect(Collectors.groupingBy(DashboardCardResponseDO.RetryTask::getTriggerAt,
|
Map<LocalDateTime, LongSummaryStatistics> summaryStatisticsMap = retryTaskList.stream().collect(Collectors.groupingBy(DashboardCardResponseDO.RetryTask::getTriggerAt,
|
||||||
Collectors.summarizingLong(i -> i.getMaxCountNum() + i.getRunningNum() + i.getSuspendNum() + i.getFinishNum())));
|
Collectors.summarizingLong(i -> i.getMaxCountNum() + i.getRunningNum() + i.getSuspendNum() + i.getFinishNum())));
|
||||||
for (Map.Entry<LocalDateTime, LongSummaryStatistics> map : summaryStatisticsMap.entrySet()) {
|
for (Map.Entry<LocalDateTime, LongSummaryStatistics> map : summaryStatisticsMap.entrySet()) {
|
||||||
if (retryTaskBarMap.containsKey(LocalDateTime.of(map.getKey().toLocalDate(), LocalTime.MIN))) {
|
if (retryTaskBarMap.containsKey(LocalDateTime.of(map.getKey().toLocalDate(), LocalTime.MIN))) {
|
||||||
DashboardCardResponseVO.RetryTaskBar retryTaskBar = retryTaskBarMap.get(LocalDateTime.of(map.getKey().toLocalDate(), LocalTime.MIN));
|
DashboardCardResponseVO.RetryTaskBar retryTaskBar = retryTaskBarMap.get(LocalDateTime.of(map.getKey().toLocalDate(), LocalTime.MIN));
|
||||||
@ -146,7 +157,7 @@ public class DashBoardServiceImpl implements DashBoardService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DashboardRetryLineResponseVO jobLineList(BaseQueryVO baseQueryVO, String groupName, String type, String startTime, String endTime) {
|
public DashboardRetryLineResponseVO jobLineList(BaseQueryVO baseQueryVO, String mode, String groupName, String type, String startTime, String endTime) {
|
||||||
|
|
||||||
// 查询登录用户权限
|
// 查询登录用户权限
|
||||||
UserSessionVO userSessionVO = UserSessionUtils.currentUserSession();
|
UserSessionVO userSessionVO = UserSessionUtils.currentUserSession();
|
||||||
@ -159,6 +170,8 @@ public class DashBoardServiceImpl implements DashBoardService {
|
|||||||
if (DbTypeEnum.SQLSERVER.equals(systemProperties.getDbType())) {
|
if (DbTypeEnum.SQLSERVER.equals(systemProperties.getDbType())) {
|
||||||
pager.setCountId("sqlServer_jobTaskList_Count");
|
pager.setCountId("sqlServer_jobTaskList_Count");
|
||||||
}
|
}
|
||||||
|
// 任务类型
|
||||||
|
Integer systemTaskType = SystemModeEnum.JOB.name().equals(mode) ? SyetemTaskTypeEnum.JOB.getType() : SyetemTaskTypeEnum.WORKFLOW.getType();
|
||||||
IPage<DashboardRetryLineResponseDO.Task> IPage = jobSummaryMapper.jobTaskList(namespaceId, groupNames, pager);
|
IPage<DashboardRetryLineResponseDO.Task> IPage = jobSummaryMapper.jobTaskList(namespaceId, groupNames, pager);
|
||||||
List<DashboardRetryLineResponseVO.Task> taskList = JobSummaryResponseVOConverter.INSTANCE.toDashboardRetryLineResponseVO(IPage.getRecords());
|
List<DashboardRetryLineResponseVO.Task> taskList = JobSummaryResponseVOConverter.INSTANCE.toDashboardRetryLineResponseVO(IPage.getRecords());
|
||||||
PageResult<List<DashboardRetryLineResponseVO.Task>> pageResult = new PageResult<>(new PageDTO(IPage.getCurrent(), IPage.getSize(), IPage.getTotal()), taskList);
|
PageResult<List<DashboardRetryLineResponseVO.Task>> pageResult = new PageResult<>(new PageDTO(IPage.getCurrent(), IPage.getSize(), IPage.getTotal()), taskList);
|
||||||
@ -168,14 +181,14 @@ public class DashBoardServiceImpl implements DashBoardService {
|
|||||||
DateTypeEnum dateTypeEnum = DateTypeEnum.valueOf(type);
|
DateTypeEnum dateTypeEnum = DateTypeEnum.valueOf(type);
|
||||||
LocalDateTime startDateTime = dateTypeEnum.getStartTime().apply(StrUtil.isNotBlank(startTime) ? LocalDateTime.parse(startTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : null);
|
LocalDateTime startDateTime = dateTypeEnum.getStartTime().apply(StrUtil.isNotBlank(startTime) ? LocalDateTime.parse(startTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : null);
|
||||||
LocalDateTime endDateTime = dateTypeEnum.getEndTime().apply(StrUtil.isNotBlank(endTime) ? LocalDateTime.parse(endTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : null);
|
LocalDateTime endDateTime = dateTypeEnum.getEndTime().apply(StrUtil.isNotBlank(endTime) ? LocalDateTime.parse(endTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : null);
|
||||||
List<DashboardLineResponseDO> dashboardLineResponseDOList = jobSummaryMapper.jobLineList(namespaceId, groupNames, groupName, type, startDateTime, endDateTime);
|
List<DashboardLineResponseDO> dashboardLineResponseDOList = jobSummaryMapper.jobLineList(systemTaskType, namespaceId, groupNames, groupName, DashboardLineEnum.modeOf(type).getDateFormat(), startDateTime, endDateTime);
|
||||||
List<DashboardLineResponseVO> dashboardLineResponseVOList = DispatchQuantityResponseVOConverter.INSTANCE.toDashboardLineResponseVO(dashboardLineResponseDOList);
|
List<DashboardLineResponseVO> dashboardLineResponseVOList = DispatchQuantityResponseVOConverter.INSTANCE.toDashboardLineResponseVO(dashboardLineResponseDOList);
|
||||||
dateTypeEnum.getConsumer().accept(dashboardLineResponseVOList);
|
dateTypeEnum.getConsumer().accept(dashboardLineResponseVOList);
|
||||||
dashboardLineResponseVOList.sort(Comparator.comparing(a -> a.getCreateDt()));
|
dashboardLineResponseVOList.sort(Comparator.comparing(a -> a.getCreateDt()));
|
||||||
dashboardRetryLineResponseVO.setDashboardLineResponseDOList(dashboardLineResponseVOList);
|
dashboardRetryLineResponseVO.setDashboardLineResponseDOList(dashboardLineResponseVOList);
|
||||||
|
|
||||||
// 排行榜
|
// 排行榜
|
||||||
List<DashboardRetryLineResponseDO.Rank> rankList = jobSummaryMapper.dashboardRank(namespaceId, groupNames, groupName, startDateTime, endDateTime);
|
List<DashboardRetryLineResponseDO.Rank> rankList = jobSummaryMapper.dashboardRank(systemTaskType, namespaceId, groupNames, groupName, startDateTime, endDateTime);
|
||||||
List<DashboardRetryLineResponseVO.Rank> ranks = SceneQuantityRankResponseVOConverter.INSTANCE.toDashboardRetryLineResponseVORank(rankList);
|
List<DashboardRetryLineResponseVO.Rank> ranks = SceneQuantityRankResponseVOConverter.INSTANCE.toDashboardRetryLineResponseVORank(rankList);
|
||||||
dashboardRetryLineResponseVO.setRankList(ranks);
|
dashboardRetryLineResponseVO.setRankList(ranks);
|
||||||
return dashboardRetryLineResponseVO;
|
return dashboardRetryLineResponseVO;
|
||||||
@ -187,7 +200,7 @@ public class DashBoardServiceImpl implements DashBoardService {
|
|||||||
|
|
||||||
LambdaQueryWrapper<ServerNode> serverNodeLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<ServerNode> serverNodeLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
serverNodeLambdaQueryWrapper.in(ServerNode::getNamespaceId, Lists.newArrayList(
|
serverNodeLambdaQueryWrapper.in(ServerNode::getNamespaceId, Lists.newArrayList(
|
||||||
UserSessionUtils.currentUserSession().getNamespaceId(), ServerRegister.NAMESPACE_ID
|
UserSessionUtils.currentUserSession().getNamespaceId(), ServerRegister.NAMESPACE_ID
|
||||||
));
|
));
|
||||||
if (StrUtil.isNotBlank(queryVO.getGroupName())) {
|
if (StrUtil.isNotBlank(queryVO.getGroupName())) {
|
||||||
serverNodeLambdaQueryWrapper.eq(ServerNode::getGroupName, queryVO.getGroupName());
|
serverNodeLambdaQueryWrapper.eq(ServerNode::getGroupName, queryVO.getGroupName());
|
||||||
@ -219,8 +232,8 @@ public class DashBoardServiceImpl implements DashBoardService {
|
|||||||
List<Integer> data = result.getData();
|
List<Integer> data = result.getData();
|
||||||
if (!CollectionUtils.isEmpty(data)) {
|
if (!CollectionUtils.isEmpty(data)) {
|
||||||
serverNodeResponseVO.setConsumerBuckets(data.stream()
|
serverNodeResponseVO.setConsumerBuckets(data.stream()
|
||||||
.sorted(Integer::compareTo)
|
.sorted(Integer::compareTo)
|
||||||
.collect(Collectors.toCollection(LinkedHashSet::new)));
|
.collect(Collectors.toCollection(LinkedHashSet::new)));
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
EasyRetryLog.LOCAL.error("Failed to retrieve consumer group for node [{}:{}].", serverNodeResponseVO.getHostIp(), serverNodeExtAttrs.getWebPort());
|
EasyRetryLog.LOCAL.error("Failed to retrieve consumer group for node [{}:{}].", serverNodeResponseVO.getHostIp(), serverNodeExtAttrs.getWebPort());
|
||||||
|
@ -20,14 +20,15 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted () {
|
mounted () {
|
||||||
this.getDashboardJobLine()
|
this.getDashboardJobLine('JOB', '')
|
||||||
this.createView()
|
this.createView()
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
getDashboardJobLine (groupName, type = 'WEEK', startTime, endTime) {
|
getDashboardJobLine (mode, groupName, type = 'WEEK', startTime, endTime) {
|
||||||
getDashboardJobLine({
|
getDashboardJobLine({
|
||||||
'groupName': groupName,
|
'mode': mode,
|
||||||
'type': type,
|
'type': type,
|
||||||
|
'groupName': groupName,
|
||||||
'startTime': startTime,
|
'startTime': startTime,
|
||||||
'endTime': endTime
|
'endTime': endTime
|
||||||
}).then(res => {
|
}).then(res => {
|
||||||
|
88
frontend/src/components/Charts/WorkFlowLine.vue
Normal file
88
frontend/src/components/Charts/WorkFlowLine.vue
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<div id="workFlowViewData"></div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import * as G2 from '@antv/g2'
|
||||||
|
import { getDashboardJobLine } from '@/api/manage'
|
||||||
|
|
||||||
|
const DataSet = require('@antv/data-set')
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'WorkFlowLine',
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
viewRecords: [],
|
||||||
|
dashboardLineResponseDOList: [],
|
||||||
|
chart: null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted () {
|
||||||
|
this.getDashboardJobLine('WORKFLOW', '')
|
||||||
|
this.createView()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getDashboardJobLine (mode, groupName, type = 'WEEK', startTime, endTime) {
|
||||||
|
getDashboardJobLine({
|
||||||
|
'mode': mode,
|
||||||
|
'type': type,
|
||||||
|
'groupName': groupName,
|
||||||
|
'startTime': startTime,
|
||||||
|
'endTime': endTime
|
||||||
|
}).then(res => {
|
||||||
|
this.$bus.$emit('WORKFLOW', res)
|
||||||
|
this.viewCharts(res.data.dashboardLineResponseDOList)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
viewCharts (viewRecords, type = 'WEEK') {
|
||||||
|
var ds = new DataSet()
|
||||||
|
if (viewRecords === undefined || viewRecords === null) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var dv = ds.createView().source(viewRecords)
|
||||||
|
dv.transform({
|
||||||
|
type: 'fold',
|
||||||
|
fields: ['success', 'fail', 'stop', 'cancel'],
|
||||||
|
key: 'name',
|
||||||
|
value: 'viewTotal',
|
||||||
|
retains: ['total', 'createDt']
|
||||||
|
})
|
||||||
|
|
||||||
|
this.chart.source(dv, {
|
||||||
|
date: {
|
||||||
|
type: 'cat'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
this.chart.axis('viewTotal', {
|
||||||
|
label: {
|
||||||
|
textStyle: {
|
||||||
|
fill: '#aaaaaa'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
this.chart.tooltip({
|
||||||
|
crosshairs: {
|
||||||
|
type: 'line'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
this.chart.line().position('createDt*viewTotal').color('name', ['#1890ff', '#c28c62']).shape('smooth')
|
||||||
|
this.chart.point().position('createDt*viewTotal').color('name', ['#1890ff', '#c28c62']).size(4).shape('circle').style({
|
||||||
|
stroke: '#fff',
|
||||||
|
lineWidth: 1
|
||||||
|
})
|
||||||
|
|
||||||
|
this.chart.render()
|
||||||
|
},
|
||||||
|
createView () {
|
||||||
|
this.chart = new G2.Chart({
|
||||||
|
container: 'workFlowViewData',
|
||||||
|
forceFit: true,
|
||||||
|
height: 410,
|
||||||
|
padding: [20, 90, 60, 50]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
@ -8,6 +8,7 @@ export default {
|
|||||||
'dashboard.analysis.job_stop': '停止',
|
'dashboard.analysis.job_stop': '停止',
|
||||||
'dashboard.analysis.job_cancel': '取消',
|
'dashboard.analysis.job_cancel': '取消',
|
||||||
'dashboard.analysis.visits': '定时任务',
|
'dashboard.analysis.visits': '定时任务',
|
||||||
|
'dashboard.analysis.work-flow-job': '工作流任务',
|
||||||
'dashboard.analysis.visits-trend': '访问量趋势',
|
'dashboard.analysis.visits-trend': '访问量趋势',
|
||||||
'dashboard.analysis.visits-ranking': '门店访问量排名',
|
'dashboard.analysis.visits-ranking': '门店访问量排名',
|
||||||
'dashboard.analysis.day-visits': '日访问量',
|
'dashboard.analysis.day-visits': '日访问量',
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<a-row :gutter="24">
|
<a-row :gutter="24">
|
||||||
<a-col :sm="24" :md="12" :xl="8" :style="{ marginBottom: '24px' }">
|
<a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }">
|
||||||
<chart-card :loading="loading" :title="$t('dashboard.analysis.total-sales')" :total="retryTask.totalNum">
|
<chart-card :loading="loading" :title="$t('dashboard.analysis.total-sales')" :total="retryTask.totalNum">
|
||||||
<a-tooltip title="总任务量: 重试/回调任务量" slot="action">
|
<a-tooltip title="总任务量: 重试/回调任务量" slot="action">
|
||||||
<a-icon type="info-circle-o" />
|
<a-icon type="info-circle-o" />
|
||||||
@ -31,7 +31,7 @@
|
|||||||
</template>
|
</template>
|
||||||
</chart-card>
|
</chart-card>
|
||||||
</a-col>
|
</a-col>
|
||||||
<a-col :sm="24" :md="12" :xl="8" :style="{ marginBottom: '24px' }">
|
<a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }">
|
||||||
<chart-card :loading="loading" title="定时任务" :total="jobTask.totalNum">
|
<chart-card :loading="loading" title="定时任务" :total="jobTask.totalNum">
|
||||||
<a-tooltip title="成功率:总完成/总调度量;" slot="action">
|
<a-tooltip title="成功率:总完成/总调度量;" slot="action">
|
||||||
<a-icon type="info-circle-o" />
|
<a-icon type="info-circle-o" />
|
||||||
@ -56,7 +56,34 @@
|
|||||||
</template>
|
</template>
|
||||||
</chart-card>
|
</chart-card>
|
||||||
</a-col>
|
</a-col>
|
||||||
<a-col :sm="24" :md="12" :xl="8" :style="{ marginBottom: '24px' }">
|
|
||||||
|
<a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }">
|
||||||
|
<chart-card :loading="loading" title="工作流任务" :total="workFlowTask.totalNum"><!-- -->
|
||||||
|
<a-tooltip title="成功率:总完成/总调度量;" slot="action">
|
||||||
|
<a-icon type="info-circle-o" />
|
||||||
|
</a-tooltip>
|
||||||
|
<div>
|
||||||
|
<a-tooltip title="成功率">
|
||||||
|
<a-progress stroke-linecap="square" :percent="workFlowTask.successRate" />
|
||||||
|
</a-tooltip>
|
||||||
|
</div>
|
||||||
|
<template slot="footer">
|
||||||
|
{{ $t('dashboard.analysis.job_success') }}
|
||||||
|
<span>{{ workFlowTask.successNum }}</span>
|
||||||
|
<a-divider type="vertical" />
|
||||||
|
{{ $t('dashboard.analysis.job_fail') }}
|
||||||
|
<span>{{ workFlowTask.failNum }}</span>
|
||||||
|
<a-divider type="vertical" />
|
||||||
|
{{ $t('dashboard.analysis.job_stop') }}
|
||||||
|
<span>{{ workFlowTask.stopNum }}</span>
|
||||||
|
<a-divider type="vertical" />
|
||||||
|
{{ $t('dashboard.analysis.job_cancel') }}
|
||||||
|
<span>{{ workFlowTask.cancelNum }}</span>
|
||||||
|
</template>
|
||||||
|
</chart-card>
|
||||||
|
</a-col>
|
||||||
|
|
||||||
|
<a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }">
|
||||||
<a href="#" @click="jumpPosList">
|
<a href="#" @click="jumpPosList">
|
||||||
<chart-card :loading="loading" title="总在线机器" :total="onLineService.total">
|
<chart-card :loading="loading" title="总在线机器" :total="onLineService.total">
|
||||||
<a-tooltip title="总在线机器:注册到系统的客户端和服务端之和" slot="action" >
|
<a-tooltip title="总在线机器:注册到系统的客户端和服务端之和" slot="action" >
|
||||||
@ -103,6 +130,11 @@
|
|||||||
<job-analysis ref="jobAnalysisRef"/>
|
<job-analysis ref="jobAnalysisRef"/>
|
||||||
</div>
|
</div>
|
||||||
</a-tab-pane>
|
</a-tab-pane>
|
||||||
|
<a-tab-pane :tab="$t('dashboard.analysis.work-flow-job')" key="WORKFLOW">
|
||||||
|
<div>
|
||||||
|
<work-flow-analysis ref="workFlowAnalysisRef"/>
|
||||||
|
</div>
|
||||||
|
</a-tab-pane>
|
||||||
</a-tabs>
|
</a-tabs>
|
||||||
</div>
|
</div>
|
||||||
</a-card>
|
</a-card>
|
||||||
@ -123,6 +155,7 @@ import {
|
|||||||
import { getAllGroupNameList, getDashboardTaskRetryJob } from '@/api/manage'
|
import { getAllGroupNameList, getDashboardTaskRetryJob } from '@/api/manage'
|
||||||
import RetryAnalysis from '@/views/dashboard/RetryAnalysis.vue'
|
import RetryAnalysis from '@/views/dashboard/RetryAnalysis.vue'
|
||||||
import JobAnalysis from '@/views/dashboard/JobAnalysis.vue'
|
import JobAnalysis from '@/views/dashboard/JobAnalysis.vue'
|
||||||
|
import WorkFlowAnalysis from '@/views/dashboard/WorkFlowAnalysis.vue'
|
||||||
import { APP_MODE } from '@/store/mutation-types'
|
import { APP_MODE } from '@/store/mutation-types'
|
||||||
import storage from 'store'
|
import storage from 'store'
|
||||||
import moment from 'moment'
|
import moment from 'moment'
|
||||||
@ -132,6 +165,7 @@ export default {
|
|||||||
components: {
|
components: {
|
||||||
RetryAnalysis,
|
RetryAnalysis,
|
||||||
JobAnalysis,
|
JobAnalysis,
|
||||||
|
WorkFlowAnalysis,
|
||||||
ChartCard,
|
ChartCard,
|
||||||
MiniArea,
|
MiniArea,
|
||||||
MiniProgress,
|
MiniProgress,
|
||||||
@ -163,6 +197,14 @@ export default {
|
|||||||
stopNum: 0,
|
stopNum: 0,
|
||||||
totalNum: 0
|
totalNum: 0
|
||||||
},
|
},
|
||||||
|
workFlowTask: {
|
||||||
|
successRate: 0,
|
||||||
|
successNum: 0,
|
||||||
|
failNum: 0,
|
||||||
|
cancelNum: 0,
|
||||||
|
stopNum: 0,
|
||||||
|
totalNum: 0
|
||||||
|
},
|
||||||
onLineService: {
|
onLineService: {
|
||||||
clientTotal: 0,
|
clientTotal: 0,
|
||||||
serverTotal: 0,
|
serverTotal: 0,
|
||||||
@ -182,20 +224,39 @@ export default {
|
|||||||
},
|
},
|
||||||
dataHandler (type) {
|
dataHandler (type) {
|
||||||
this.type = type
|
this.type = type
|
||||||
this.mode === 'ALL' || this.mode === 'RETRY' ? this.$refs.retryAnalysisRef.dataHandler(this.type) : this.$refs.jobAnalysisRef.dataHandler(this.type)
|
if (this.mode === 'ALL' || this.mode === 'RETRY') {
|
||||||
|
this.$refs.retryAnalysisRef.dataHandler(this.type)
|
||||||
|
} else if (this.mode === 'JOB') {
|
||||||
|
this.$refs.jobAnalysisRef.dataHandler(this.mode, this.type)
|
||||||
|
} else if (this.mode === 'WORKFLOW') {
|
||||||
|
this.$refs.workFlowAnalysisRef.dataHandler(this.mode, this.type)
|
||||||
|
}
|
||||||
},
|
},
|
||||||
dateChange (date, dateString) {
|
dateChange (date, dateString) {
|
||||||
this.mode === 'ALL' || this.mode === 'RETRY' ? this.$refs.retryAnalysisRef.dateChange(date, dateString) : this.$refs.jobAnalysisRef.dateChange(date, dateString)
|
if (this.mode === 'ALL' || this.mode === 'RETRY') {
|
||||||
|
this.$refs.retryAnalysisRef.dateChange(date, dateString)
|
||||||
|
} else if (this.mode === 'JOB') {
|
||||||
|
this.$refs.jobAnalysisRef.dateChange(this.mode, date, dateString)
|
||||||
|
} else if (this.mode === 'WORKFLOW') {
|
||||||
|
this.$refs.workFlowAnalysisRef.dateChange(this.mode, date, dateString)
|
||||||
|
}
|
||||||
},
|
},
|
||||||
handleChange (value) {
|
handleChange (value) {
|
||||||
this.mode === 'ALL' || this.mode === 'RETRY' ? this.$refs.retryAnalysisRef.handleChange(value) : this.$refs.jobAnalysisRef.handleChange(value)
|
if (this.mode === 'ALL' || this.mode === 'RETRY') {
|
||||||
|
this.$refs.retryAnalysisRef.handleChange(value)
|
||||||
|
} else if (this.mode === 'JOB') {
|
||||||
|
this.$refs.jobAnalysisRef.handleChange(this.mode, value)
|
||||||
|
} else if (this.mode === 'WORKFLOW') {
|
||||||
|
this.$refs.workFlowAnalysisRef.handleChange(this.mode, value)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created () {
|
created () {
|
||||||
this.mode = storage.get(APP_MODE)
|
this.mode = storage.get(APP_MODE)
|
||||||
getDashboardTaskRetryJob().then(res => {
|
getDashboardTaskRetryJob().then(res => {
|
||||||
this.retryTask = res.data.retryTask
|
|
||||||
this.jobTask = res.data.jobTask
|
this.jobTask = res.data.jobTask
|
||||||
|
this.retryTask = res.data.retryTask
|
||||||
|
this.workFlowTask = res.data.workFlowTask
|
||||||
this.onLineService = res.data.onLineService
|
this.onLineService = res.data.onLineService
|
||||||
this.retryTaskBarList = res.data.retryTaskBarList
|
this.retryTaskBarList = res.data.retryTaskBarList
|
||||||
})
|
})
|
||||||
|
@ -68,6 +68,7 @@ export default {
|
|||||||
dashboardLineResponseDOList: [],
|
dashboardLineResponseDOList: [],
|
||||||
type: 'WEEK',
|
type: 'WEEK',
|
||||||
groupName: '',
|
groupName: '',
|
||||||
|
mode: '',
|
||||||
startTime: '',
|
startTime: '',
|
||||||
endTime: '',
|
endTime: '',
|
||||||
success: 0,
|
success: 0,
|
||||||
@ -134,19 +135,22 @@ export default {
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
moment,
|
moment,
|
||||||
dataHandler (type) {
|
dataHandler (mode, type) {
|
||||||
|
this.mode = mode
|
||||||
this.type = type
|
this.type = type
|
||||||
this.$refs.jobViewChart.getDashboardJobLine(this.groupName, this.type, this.startTime, this.endTime)
|
this.$refs.jobViewChart.getDashboardJobLine(this.mode, this.groupName, this.type, this.startTime, this.endTime)
|
||||||
},
|
},
|
||||||
handleChange (value) {
|
handleChange (mode, value) {
|
||||||
|
this.mode = mode
|
||||||
this.groupName = value
|
this.groupName = value
|
||||||
this.$refs.jobViewChart.getDashboardJobLine(this.groupName, this.type, this.startTime, this.endTime)
|
this.$refs.jobViewChart.getDashboardJobLine(this.mode, this.groupName, this.type, this.startTime, this.endTime)
|
||||||
},
|
},
|
||||||
dateChange (date, dateString) {
|
dateChange (mode, date, dateString) {
|
||||||
|
this.mode = mode
|
||||||
this.startTime = dateString[0]
|
this.startTime = dateString[0]
|
||||||
this.endTime = dateString[1]
|
this.endTime = dateString[1]
|
||||||
this.type = this.startTime === '' ? 'WEEK' : 'OTHERS'
|
this.type = this.startTime === '' ? 'WEEK' : 'OTHERS'
|
||||||
this.$refs.jobViewChart.getDashboardJobLine(this.groupName, this.type, this.startTime, this.endTime)
|
this.$refs.jobViewChart.getDashboardJobLine(this.mode, this.groupName, this.type, this.startTime, this.endTime)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created () {
|
created () {
|
||||||
|
170
frontend/src/views/dashboard/WorkFlowAnalysis.vue
Normal file
170
frontend/src/views/dashboard/WorkFlowAnalysis.vue
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
<template>
|
||||||
|
<div class="antd-pro-pages-dashboard-analysis-twoColLayout" :class="!isMobile && 'desktop'">
|
||||||
|
<a-row>
|
||||||
|
<a-col :xl="16" :lg="12" :md="12" :sm="24" :xs="24">
|
||||||
|
<g2-work-flow-line ref="workFlowViewChart" name="G2WorkFlowLine" />
|
||||||
|
</a-col>
|
||||||
|
<a-col :xl="8" :lg="12" :md="12" :sm="24" :xs="24">
|
||||||
|
<rank-list title="失败任务排名" :list="rankList" />
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
<a-row :gutter="24" type="flex" :style="{ marginTop: '24px' }">
|
||||||
|
<a-col :xl="12" :lg="24" :md="24" :sm="24" :xs="24">
|
||||||
|
<a-card :loading="loading" :bordered="false" :title="$t('dashboard.analysis.online-top-search')" :style="{ height: '100%' }">
|
||||||
|
<s-table
|
||||||
|
ref="table"
|
||||||
|
size="default"
|
||||||
|
:rowKey="(record,index) => index"
|
||||||
|
:columns="columns"
|
||||||
|
:data="loadData"
|
||||||
|
:scroll="{ x: 200 }"
|
||||||
|
>
|
||||||
|
</s-table>
|
||||||
|
</a-card>
|
||||||
|
</a-col>
|
||||||
|
<a-col :xl="12" :lg="24" :md="24" :sm="24" :xs="24">
|
||||||
|
<a-card class="antd-pro-pages-dashboard-analysis-salesCard" :loading="loading" :bordered="false" :title="$t('dashboard.analysis.the-proportion-of-sales')" :style="{ height: '100%' }">
|
||||||
|
<h4>{{ $t('dashboard.analysis.job.sales') }}</h4>
|
||||||
|
<div>
|
||||||
|
<div>
|
||||||
|
<v-chart :force-fit="true" :height="405" :data="pieData" :scale="pieScale" >
|
||||||
|
<v-tooltip :showTitle="false" dataKey="value*percent" />
|
||||||
|
<v-axis />
|
||||||
|
<v-legend dataKey="value" />
|
||||||
|
<v-pie position="percent" color="value" :vStyle="pieStyle" />
|
||||||
|
<v-coord type="theta" :radius="0.95" :innerRadius="0.7" />
|
||||||
|
</v-chart>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</a-card>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {
|
||||||
|
RankList,
|
||||||
|
STable
|
||||||
|
} from '@/components'
|
||||||
|
import { getAllGroupNameList, getDashboardJobLine } from '@/api/manage'
|
||||||
|
import { baseMixin } from '@/store/app-mixin'
|
||||||
|
import G2WorkFlowLine from '@/components/Charts/WorkFlowLine.vue'
|
||||||
|
import moment from 'moment'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'WorkFlowAnalysis',
|
||||||
|
mixins: [ baseMixin ],
|
||||||
|
components: {
|
||||||
|
G2WorkFlowLine,
|
||||||
|
RankList,
|
||||||
|
STable
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
loading: true,
|
||||||
|
rankList: [],
|
||||||
|
taskList: [],
|
||||||
|
dashboardLineResponseDOList: [],
|
||||||
|
type: 'WEEK',
|
||||||
|
groupName: '',
|
||||||
|
mode: '',
|
||||||
|
startTime: '',
|
||||||
|
endTime: '',
|
||||||
|
success: 0,
|
||||||
|
fail: 0,
|
||||||
|
stop: 0,
|
||||||
|
cancel: 0,
|
||||||
|
total: 0,
|
||||||
|
groupNameList: [],
|
||||||
|
pieScale: [{
|
||||||
|
dataKey: 'percent',
|
||||||
|
min: 0,
|
||||||
|
formatter: '.0%'
|
||||||
|
}],
|
||||||
|
pieData: [],
|
||||||
|
pieStyle: {
|
||||||
|
stroke: '#fff',
|
||||||
|
lineWidth: 1
|
||||||
|
},
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
title: '组名称',
|
||||||
|
dataIndex: 'groupName'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '运行中任务数',
|
||||||
|
dataIndex: 'run'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '总任务数',
|
||||||
|
dataIndex: 'total'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
loadData: (parameter) => {
|
||||||
|
return getDashboardJobLine(Object.assign(parameter)).then((res) => {
|
||||||
|
this.rankList = res.data.rankList
|
||||||
|
return res.data.taskList
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted () {
|
||||||
|
this.$bus.$on('WORKFLOW', (res) => {
|
||||||
|
this.total = 0
|
||||||
|
this.success = 0
|
||||||
|
this.fail = 0
|
||||||
|
this.stop = 0
|
||||||
|
this.cancel = 0
|
||||||
|
this.rankList = res.data.rankList
|
||||||
|
this.taskList = res.data.taskList
|
||||||
|
res.data.dashboardLineResponseDOList.forEach(res => {
|
||||||
|
this.success += res.success
|
||||||
|
this.fail += res.fail
|
||||||
|
this.stop += res.stop
|
||||||
|
this.cancel += res.cancel
|
||||||
|
})
|
||||||
|
this.total = this.success + this.fail + this.stop + this.cancel
|
||||||
|
this.pieData = [
|
||||||
|
{ value: 'SUCCESS', name: this.success, percent: this.success / this.total },
|
||||||
|
{ value: 'FAIL', name: this.fail, percent: this.fail / this.total },
|
||||||
|
{ value: 'STOP', name: this.stop, percent: this.stop / this.total },
|
||||||
|
{ value: 'CANCEL', name: this.cancel, percent: this.cancel / this.total }
|
||||||
|
]
|
||||||
|
})
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
moment,
|
||||||
|
dataHandler (mode, type) {
|
||||||
|
this.mode = mode
|
||||||
|
this.type = type
|
||||||
|
this.$refs.workFlowViewChart.getDashboardJobLine(this.mode, this.groupName, this.type, this.startTime, this.endTime)
|
||||||
|
},
|
||||||
|
handleChange (mode, value) {
|
||||||
|
this.mode = mode
|
||||||
|
this.groupName = value
|
||||||
|
this.$refs.workFlowViewChart.getDashboardJobLine(this.mode, this.groupName, this.type, this.startTime, this.endTime)
|
||||||
|
},
|
||||||
|
dateChange (mode, date, dateString) {
|
||||||
|
this.mode = mode
|
||||||
|
this.startTime = dateString[0]
|
||||||
|
this.endTime = dateString[1]
|
||||||
|
this.type = this.startTime === '' ? 'WEEK' : 'OTHERS'
|
||||||
|
this.$refs.workFlowViewChart.getDashboardJobLine(this.mode, this.groupName, this.type, this.startTime, this.endTime)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created () {
|
||||||
|
getAllGroupNameList().then(res => {
|
||||||
|
this.groupNameList = res.data
|
||||||
|
})
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
this.loading = !this.loading
|
||||||
|
}, 1000)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang='less' scoped>
|
||||||
|
@import 'Analysis.less';
|
||||||
|
</style>
|
Loading…
Reference in New Issue
Block a user