diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index 1de666ee..26f3e7f0 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -1057,6 +1057,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段 - 9、任务注解调整为 “@JobHandler”,与任务注解统一; - 10、执行器端口支持随机生成(小于等于0时),避免端口定义冲突; - 11、任务Cron长度扩展支持至128位; +- 12、调度报表优化,支持时间区间筛选; ### TODO LIST - 1、任务权限管理:执行器为粒度分配权限,核心操作校验权限; @@ -1075,11 +1076,10 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段 - 14、脚本任务 Shell、Python和Nodejs,如何友好获取分片参数; - 15、Bean模式任务,JobHandler自动从执行器中查询展示为下拉框,选择后自动填充任务名称等属性; - 16、任务告警邮件优化,调整为表格形式; -- 17、任务报表,支持时间筛选; -- 18、JobHandler提供 init/destroy 方法,支持自定义任务线程销毁逻辑; -- 19、cron表达式的最大长度调整,兼容复杂类型cron; -- 20、执行器回调地址/日志地址格式兼容,是否已"/"结尾均支持; -- 21、任务单机多线程:提升任务单机并行处理能力; +- 17、JobHandler提供 init/destroy 方法,支持自定义任务线程销毁逻辑; +- 18、cron表达式的最大长度调整,兼容复杂类型cron; +- 19、执行器回调地址/日志地址格式兼容,是否已"/"结尾均支持; +- 20、任务单机多线程:提升任务单机并行处理能力; ## 七、其他 diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/IndexController.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/IndexController.java index c63f9cf7..cc3c6120 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/IndexController.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/IndexController.java @@ -6,8 +6,11 @@ import com.xxl.job.admin.core.util.PropertiesUtil; import com.xxl.job.admin.service.XxlJobService; import com.xxl.job.core.biz.model.ReturnT; import org.apache.commons.lang.StringUtils; +import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; @@ -15,6 +18,8 @@ import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.Map; /** @@ -38,8 +43,8 @@ public class IndexController { @RequestMapping("/triggerChartDate") @ResponseBody - public ReturnT> triggerChartDate() { - ReturnT> triggerChartDate = xxlJobService.triggerChartDate(); + public ReturnT> triggerChartDate(Date startDate, Date endDate) { + ReturnT> triggerChartDate = xxlJobService.triggerChartDate(startDate, endDate); return triggerChartDate; } @@ -91,5 +96,12 @@ public class IndexController { return "help"; } + + @InitBinder + public void initBinder(WebDataBinder binder) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + dateFormat.setLenient(false); + binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true)); + } } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/service/XxlJobService.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/XxlJobService.java index 64f9f57b..7a0c1607 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/service/XxlJobService.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/XxlJobService.java @@ -4,6 +4,7 @@ package com.xxl.job.admin.service; import com.xxl.job.admin.core.model.XxlJobInfo; import com.xxl.job.core.biz.model.ReturnT; +import java.util.Date; import java.util.Map; /** @@ -29,6 +30,6 @@ public interface XxlJobService { public Map dashboardInfo(); - public ReturnT> triggerChartDate(); + public ReturnT> triggerChartDate(Date startDate, Date endDate); } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java index 65d53971..2eccb310 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java @@ -310,18 +310,15 @@ public class XxlJobServiceImpl implements XxlJobService { } @Override - public ReturnT> triggerChartDate() { - Date from = DateUtils.addDays(new Date(), -30); - Date to = new Date(); - + public ReturnT> triggerChartDate(Date startDate, Date endDate) { List triggerDayList = new ArrayList(); List triggerDayCountSucList = new ArrayList(); List triggerDayCountFailList = new ArrayList(); int triggerCountSucTotal = 0; int triggerCountFailTotal = 0; - List> triggerCountMapAll = xxlJobLogDao.triggerCountByDay(from, to, -1); - List> triggerCountMapSuc = xxlJobLogDao.triggerCountByDay(from, to, ReturnT.SUCCESS_CODE); + List> triggerCountMapAll = xxlJobLogDao.triggerCountByDay(startDate, endDate, -1); + List> triggerCountMapSuc = xxlJobLogDao.triggerCountByDay(startDate, endDate, ReturnT.SUCCESS_CODE); if (CollectionUtils.isNotEmpty(triggerCountMapAll)) { for (Map item: triggerCountMapAll) { String day = String.valueOf(item.get("triggerDay")); diff --git a/xxl-job-admin/src/main/webapp/WEB-INF/template/index.ftl b/xxl-job-admin/src/main/webapp/WEB-INF/template/index.ftl index 347d8977..bca912ec 100644 --- a/xxl-job-admin/src/main/webapp/WEB-INF/template/index.ftl +++ b/xxl-job-admin/src/main/webapp/WEB-INF/template/index.ftl @@ -4,6 +4,8 @@ 任务调度中心 <#import "/common/common.macro.ftl" as netCommon> <@netCommon.commonStyle /> + + sidebar-collapse ">
@@ -43,7 +45,7 @@
- 系统中配置的任务数量 + 调度中心运行的任务数量
@@ -82,7 +84,7 @@
- 心跳检测成功的执行器机器数量 + 调度中心注册发现的执行器机器数量 @@ -94,8 +96,20 @@
-

调度报表(一月之内)

+

调度报表

<#----> + + +
+ + <#----> +
+ +
@@ -113,7 +127,6 @@
-
@@ -123,10 +136,11 @@ <@netCommon.commonFooter />
<@netCommon.commonScript /> -<#-- ---> + + + +<#-- echarts --> - diff --git a/xxl-job-admin/src/main/webapp/static/js/index.js b/xxl-job-admin/src/main/webapp/static/js/index.js index fa5e578e..0eda6b69 100644 --- a/xxl-job-admin/src/main/webapp/static/js/index.js +++ b/xxl-job-admin/src/main/webapp/static/js/index.js @@ -5,29 +5,74 @@ $(function () { + // 过滤时间 + var _startDate = moment().subtract(1, 'months'); + var _endDate = moment(); + $('#filterTime').daterangepicker({ + autoApply:false, + singleDatePicker:false, + showDropdowns:false, // 是否显示年月选择条件 + timePicker: true, // 是否显示小时和分钟选择条件 + timePickerIncrement: 10, // 时间的增量,单位为分钟 + timePicker24Hour : true, + opens : 'left', //日期选择框的弹出位置 + ranges: { + //'最近1小时': [moment().subtract(1, 'hours'), moment()], + '今日': [moment().startOf('day'), moment().endOf('day')], + '昨日': [moment().subtract(1, 'days').startOf('day'), moment().subtract(1, 'days').endOf('day')], + '最近7日': [moment().subtract(7, 'days'), moment()], + '最近30日': [moment().subtract(1, 'months'), moment()], + '本月': [moment().startOf('month'), moment().endOf('month')], + '上个月': [moment().subtract(1, 'months').startOf('month'), moment().subtract(1, 'months').endOf('month')] + }, + locale : { + format: 'YYYY-MM-DD HH:mm:ss', + separator : ' - ', + customRangeLabel : '自定义', + applyLabel : '确定', + cancelLabel : '取消', + fromLabel : '起始时间', + toLabel : '结束时间', + daysOfWeek : [ '日', '一', '二', '三', '四', '五', '六' ], + monthNames : [ '一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月' ], + firstDay : 1 + }, + startDate:_startDate, + endDate: _endDate + }, function (start, end, label) { + freshChartDate(start, end); + }); + freshChartDate(_startDate, _endDate); + /** + * 刷新报表 * + * @param startDate + * @param endDate */ - $.ajax({ - type : 'POST', - url : base_url + '/triggerChartDate', - data : { }, - dataType : "json", - success : function(data){ - if (data.code == 200) { - lineChartInit(data) - pieChartInit(data); - } else { - layer.open({ - title: '系统提示', - content: (data.msg || '调度报表数据加载异常'), - icon: '2' - }); + function freshChartDate(startDate, endDate) { + $.ajax({ + type : 'POST', + url : base_url + '/triggerChartDate', + data : { + 'startDate':startDate.format('YYYY-MM-DD HH:mm:ss'), + 'endDate':endDate.format('YYYY-MM-DD HH:mm:ss') + }, + dataType : "json", + success : function(data){ + if (data.code == 200) { + lineChartInit(data) + pieChartInit(data); + } else { + layer.open({ + title: '系统提示', + content: (data.msg || '调度报表数据加载异常'), + icon: '2' + }); + } } - } - }); - - + }); + } /** * 折线图 @@ -151,38 +196,4 @@ $(function () { pieChart.setOption(option); } - // 过滤时间 - /*$('#filterTime').daterangepicker({ - autoApply:false, - singleDatePicker:false, - showDropdowns:false, // 是否显示年月选择条件 - timePicker: true, // 是否显示小时和分钟选择条件 - timePickerIncrement: 10, // 时间的增量,单位为分钟 - timePicker24Hour : true, - opens : 'left', //日期选择框的弹出位置 - ranges: { - '最近1小时': [moment().subtract(1, 'hours'), moment()], - '今日': [moment().startOf('day'), moment().endOf('day')], - '昨日': [moment().subtract(1, 'days').startOf('day'), moment().subtract(1, 'days').endOf('day')], - '最近7日': [moment().subtract(6, 'days'), moment()], - '最近30日': [moment().subtract(29, 'days'), moment()], - '本月': [moment().startOf('month'), moment().endOf('month')], - '上个月': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')] - }, - locale : { - format: 'YYYY-MM-DD HH:mm:ss', - separator : ' - ', - customRangeLabel : '自定义', - applyLabel : '确定', - cancelLabel : '取消', - fromLabel : '起始时间', - toLabel : '结束时间', - daysOfWeek : [ '日', '一', '二', '三', '四', '五', '六' ], - monthNames : [ '一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月' ], - firstDay : 1, - startDate: moment().startOf('day'), - endDate: moment().endOf('day') - } - });*/ - });