瀏覽代碼

调度报表新增"运行中"中状态项,数据加载SQL优化

xuxueli 7 年之前
父節點
當前提交
0169d537ef

+ 3 - 1
doc/XXL-JOB官方文档.md

@@ -1144,6 +1144,8 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
 - 1、修复打包部署时资源文件乱码问题;
 - 2、修复新版本chrome滚动到顶部失效问题;
 - 3、国际化:调度中心实现国际化,支持中文、英文两种语言,默认为中文。
+- 4、调度报表新增"运行中"中状态项,数据加载SQL优化;
+- 5、调度报表缓存优化,修复大数据量执行日志加载缓慢的问题;
 
 ### TODO LIST
 - 1、任务权限管理:执行器为粒度分配权限,核心操作校验权限;
@@ -1161,7 +1163,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
 - 13、任务依赖增强,新增任务类型 "流程任务",流程节点可挂载普通类型任务,承担任务依赖功能。现有子任务模型取消;需要考虑任务依赖死循环问题;
 - 14、分片任务某一分片失败,支持分片转移;
 - 15、调度中心触发任务后,先推送触发队列,异步触发,然后立即返回。降低quartz线程占用时长。
-- 16、调度报表加载速度慢问题;
+
 
 ## 七、其他
 

+ 1 - 1
xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/I18nUtil.java

@@ -28,7 +28,7 @@ public class I18nUtil {
 
     public static Properties loadI18nProp(){
         if (prop != null && (System.currentTimeMillis()-lastCacheTim)<60*1000) {
-            return prop;
+            //return prop;
         }
         try {
             // bild i18n prop

+ 1 - 2
xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogDao.java

@@ -41,8 +41,7 @@ public interface XxlJobLogDao {
 	public int triggerCountByHandleCode(@Param("handleCode") int handleCode);
 
 	public List<Map<String, Object>> triggerCountByDay(@Param("from") Date from,
-													   @Param("to") Date to,
-													   @Param("handleCode") int handleCode);
+													   @Param("to") Date to);
 
 	public int clearLog(@Param("jobGroup") int jobGroup,
 						@Param("jobId") int jobId,

+ 17 - 19
xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java

@@ -323,35 +323,30 @@ public class XxlJobServiceImpl implements XxlJobService {
 	@Override
 	public ReturnT<Map<String, Object>> triggerChartDate(Date startDate, Date endDate) {
 		List<String> triggerDayList = new ArrayList<String>();
+		List<Integer> triggerDayCountRunningList = new ArrayList<Integer>();
 		List<Integer> triggerDayCountSucList = new ArrayList<Integer>();
 		List<Integer> triggerDayCountFailList = new ArrayList<Integer>();
+		int triggerCountRunningTotal = 0;
 		int triggerCountSucTotal = 0;
 		int triggerCountFailTotal = 0;
 
-		List<Map<String, Object>> triggerCountMapAll = xxlJobLogDao.triggerCountByDay(startDate, endDate, -1);
-		List<Map<String, Object>> triggerCountMapSuc = xxlJobLogDao.triggerCountByDay(startDate, endDate, ReturnT.SUCCESS_CODE);
+		List<Map<String, Object>> triggerCountMapAll = xxlJobLogDao.triggerCountByDay(startDate, endDate);
 		if (CollectionUtils.isNotEmpty(triggerCountMapAll)) {
 			for (Map<String, Object> item: triggerCountMapAll) {
 				String day = String.valueOf(item.get("triggerDay"));
-				int dayAllCount = Integer.valueOf(String.valueOf(item.get("triggerCount")));
-				int daySucCount = 0;
-				int dayFailCount = dayAllCount - daySucCount;
-
-				if (CollectionUtils.isNotEmpty(triggerCountMapSuc)) {
-					for (Map<String, Object> sucItem: triggerCountMapSuc) {
-						String daySuc = String.valueOf(sucItem.get("triggerDay"));
-						if (day.equals(daySuc)) {
-							daySucCount = Integer.valueOf(String.valueOf(sucItem.get("triggerCount")));
-							dayFailCount = dayAllCount - daySucCount;
-						}
-					}
-				}
+				int triggerDayCount = Integer.valueOf(String.valueOf(item.get("triggerDayCount")));
+				int triggerDayCountRunning = Integer.valueOf(String.valueOf(item.get("triggerDayCountRunning")));
+				int triggerDayCountSuc = Integer.valueOf(String.valueOf(item.get("triggerDayCountSuc")));
+				int triggerDayCountFail = triggerDayCount - triggerDayCountRunning - triggerDayCountSuc;
 
 				triggerDayList.add(day);
-				triggerDayCountSucList.add(daySucCount);
-				triggerDayCountFailList.add(dayFailCount);
-				triggerCountSucTotal += daySucCount;
-				triggerCountFailTotal += dayFailCount;
+				triggerDayCountRunningList.add(triggerDayCountRunning);
+				triggerDayCountSucList.add(triggerDayCountSuc);
+				triggerDayCountFailList.add(triggerDayCountFail);
+
+				triggerCountRunningTotal += triggerDayCountRunning;
+				triggerCountSucTotal += triggerDayCountSuc;
+				triggerCountFailTotal += triggerDayCountFail;
 			}
 		} else {
             for (int i = 4; i > -1; i--) {
@@ -363,8 +358,11 @@ public class XxlJobServiceImpl implements XxlJobService {
 
 		Map<String, Object> result = new HashMap<String, Object>();
 		result.put("triggerDayList", triggerDayList);
+		result.put("triggerDayCountRunningList", triggerDayCountRunningList);
 		result.put("triggerDayCountSucList", triggerDayCountSucList);
 		result.put("triggerDayCountFailList", triggerDayCountFailList);
+
+		result.put("triggerCountRunningTotal", triggerCountRunningTotal);
 		result.put("triggerCountSucTotal", triggerCountSucTotal);
 		result.put("triggerCountFailTotal", triggerCountFailTotal);
 		return new ReturnT<Map<String, Object>>(result);

+ 0 - 4
xxl-job-admin/src/main/resources/i18n/message.properties

@@ -93,11 +93,7 @@ job_dashboard_jobgroup_num_tip=调度中心在线的执行器机器数量
 job_dashboard_report=调度报表
 job_dashboard_report_loaddata_fail=调度报表数据加载异常
 job_dashboard_date_report=日期分布图
-job_dashboard_date_report_suc_count=成功调度次数
-job_dashboard_date_report_fail_count=失败调度次数
 job_dashboard_rate_report=成功比例图
-job_dashboard_rate_report_suc_count=成功调度次数
-job_dashboard_rate_report_fail_count=失败调度次数
 
 ## job info
 jobinfo_name=任务管理

+ 0 - 4
xxl-job-admin/src/main/resources/i18n/message_en.properties

@@ -93,11 +93,7 @@ job_dashboard_jobgroup_num_tip=The number of online executor machines perceived
 job_dashboard_report=Scheduling report
 job_dashboard_report_loaddata_fail=Scheduling report load data error
 job_dashboard_date_report=Date distribution
-job_dashboard_date_report_suc_count=Successful scheduling number
-job_dashboard_date_report_fail_count=Fail scheduling number
 job_dashboard_rate_report=Percentage distribution
-job_dashboard_rate_report_suc_count=Successful scheduling percentage
-job_dashboard_rate_report_fail_count=Fail scheduling percentage
 
 ## job info
 jobinfo_name=Job Manage

+ 8 - 7
xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml

@@ -163,13 +163,14 @@
 	</select>
 
     <select id="triggerCountByDay" resultType="java.util.Map" >
-        SELECT DATE_FORMAT(trigger_time,'%Y-%m-%d') triggerDay, COUNT(id) triggerCount
-        FROM XXL_JOB_QRTZ_TRIGGER_LOG
-        WHERE trigger_time BETWEEN #{from} and #{to}
-		<if test="handleCode gt 0">
-			AND handle_code = #{handleCode}
-		</if>
-        GROUP BY triggerDay;
+		SELECT
+			DATE_FORMAT(trigger_time,'%Y-%m-%d') triggerDay,
+			COUNT(handle_code) triggerDayCount,
+			SUM(CASE WHEN handle_code = 0 then 1 else 0 end) as triggerDayCountRunning,
+			SUM(CASE WHEN handle_code = 200 then 1 else 0 end) as triggerDayCountSuc
+		FROM XXL_JOB_QRTZ_TRIGGER_LOG
+		WHERE trigger_time BETWEEN #{from} and #{to}
+		GROUP BY triggerDay;
     </select>
 
 	<delete id="clearLog" >

+ 23 - 12
xxl-job-admin/src/main/webapp/static/js/index.js

@@ -89,7 +89,7 @@ $(function () {
                    }
                },
                legend: {
-                   data:[I18n.job_dashboard_date_report_suc_count, I18n.job_dashboard_date_report_fail_count]
+                   data:[I18n.joblog_status_suc, I18n.joblog_status_fail, I18n.joblog_status_running]
                },
                toolbox: {
                    feature: {
@@ -116,14 +116,14 @@ $(function () {
                ],
                series : [
                    {
-                       name:I18n.job_dashboard_date_report_suc_count,
+                       name:I18n.joblog_status_suc,
                        type:'line',
                        stack: 'Total',
                        areaStyle: {normal: {}},
                        data: data.content.triggerDayCountSucList
                    },
                    {
-                       name:I18n.job_dashboard_date_report_fail_count,
+                       name:I18n.joblog_status_fail,
                        type:'line',
                        stack: 'Total',
                        label: {
@@ -134,9 +134,16 @@ $(function () {
                        },
                        areaStyle: {normal: {}},
                        data: data.content.triggerDayCountFailList
+                   },
+                   {
+                       name:I18n.joblog_status_running,
+                       type:'line',
+                       stack: 'Total',
+                       areaStyle: {normal: {}},
+                       data: data.content.triggerDayCountRunningList
                    }
                ],
-                color:['#00A65A', '#F39C12']
+                color:['#00A65A', '#c23632', '#F39C12']
         };
 
         var lineChart = echarts.init(document.getElementById('lineChart'));
@@ -155,27 +162,31 @@ $(function () {
             },
             tooltip : {
                 trigger: 'item',
-                formatter: "{a} <br/>{b} : {c} ({d}%)"
+                formatter: "{b} : {c} ({d}%)"
             },
             legend: {
                 orient: 'vertical',
                 left: 'left',
-                data: [I18n.job_dashboard_rate_report_suc_count, I18n.job_dashboard_rate_report_fail_count ]
+                data: [I18n.joblog_status_suc, I18n.joblog_status_fail, I18n.joblog_status_running ]
             },
             series : [
                 {
-                    name: '分布比例',
+                    //name: '分布比例',
                     type: 'pie',
                     radius : '55%',
                     center: ['50%', '60%'],
                     data:[
                         {
-                            value:data.content.triggerCountSucTotal,
-                            name:I18n.job_dashboard_rate_report_suc_count
+                            name:I18n.joblog_status_suc,
+                            value:data.content.triggerCountSucTotal
+                        },
+                        {
+                            name:I18n.joblog_status_fail,
+                            value:data.content.triggerCountFailTotal
                         },
                         {
-                            value:data.content.triggerCountFailTotal,
-                            name:I18n.job_dashboard_rate_report_fail_count
+                            name:I18n.joblog_status_running,
+                            value:data.content.triggerCountRunningTotal
                         }
                     ],
                     itemStyle: {
@@ -187,7 +198,7 @@ $(function () {
                     }
                 }
             ],
-            color:['#00A65A', '#F39C12']
+            color:['#00A65A', '#c23632', '#F39C12']
         };
         var pieChart = echarts.init(document.getElementById('pieChart'));
         pieChart.setOption(option);

+ 1 - 1
xxl-job-admin/src/test/java/com/xxl/job/admin/dao/XxlJobLogDaoTest.java

@@ -50,7 +50,7 @@ public class XxlJobLogDaoTest {
         dto = xxlJobLogDao.load(log.getId());
 
 
-        List<Map<String, Object>> list2 = xxlJobLogDao.triggerCountByDay(DateUtils.addDays(new Date(), 30), new Date(), 200);
+        List<Map<String, Object>> list2 = xxlJobLogDao.triggerCountByDay(DateUtils.addDays(new Date(), 30), new Date());
 
         int ret4 = xxlJobLogDao.clearLog(1, 1, new Date(), 100);