提交 ae7fe92f authored 作者: xuxueli's avatar xuxueli

任务调度备注中标注任务触发类型,如Cron触发、父任务触发、API触发等等,方便排查调度日志;

上级 9ac897f5
...@@ -1238,6 +1238,8 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段 ...@@ -1238,6 +1238,8 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
- 22、新增左侧菜单"运行报表"; - 22、新增左侧菜单"运行报表";
- 23、执行器手动设置IP时取消绑定Host的操作,该IP仅供执行器注册使用;修复指定外网IP时无法绑定执行器Host的问题; - 23、执行器手动设置IP时取消绑定Host的操作,该IP仅供执行器注册使用;修复指定外网IP时无法绑定执行器Host的问题;
- 24、取消父子任务不可重复的限制,支持循环任务触发等特殊场景; - 24、取消父子任务不可重复的限制,支持循环任务触发等特殊场景;
- 25、任务调度备注中标注任务触发类型,如Cron触发、父任务触发、API触发等等,方便排查调度日志;
- 26、【迭代中】分片任务失败重试优化,仅重试当前失败的分片;
### TODO LIST ### TODO LIST
......
...@@ -4,6 +4,7 @@ import com.xxl.job.admin.core.model.XxlJobGroup; ...@@ -4,6 +4,7 @@ import com.xxl.job.admin.core.model.XxlJobGroup;
import com.xxl.job.admin.core.model.XxlJobInfo; import com.xxl.job.admin.core.model.XxlJobInfo;
import com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum; import com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum;
import com.xxl.job.admin.core.thread.JobTriggerPoolHelper; import com.xxl.job.admin.core.thread.JobTriggerPoolHelper;
import com.xxl.job.admin.core.util.I18nUtil;
import com.xxl.job.admin.dao.XxlJobGroupDao; import com.xxl.job.admin.dao.XxlJobGroupDao;
import com.xxl.job.admin.service.XxlJobService; import com.xxl.job.admin.service.XxlJobService;
import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.ReturnT;
...@@ -90,7 +91,7 @@ public class JobInfoController { ...@@ -90,7 +91,7 @@ public class JobInfoController {
@RequestMapping("/trigger") @RequestMapping("/trigger")
@ResponseBody @ResponseBody
public ReturnT<String> triggerJob(int id) { public ReturnT<String> triggerJob(int id) {
JobTriggerPoolHelper.trigger(id, -1); JobTriggerPoolHelper.trigger(id, -1, I18nUtil.getString("jobconf_trigger_type_manual"));
return ReturnT.SUCCESS; return ReturnT.SUCCESS;
} }
......
...@@ -11,8 +11,6 @@ import com.xxl.job.admin.dao.XxlJobLogDao; ...@@ -11,8 +11,6 @@ import com.xxl.job.admin.dao.XxlJobLogDao;
import com.xxl.job.core.biz.ExecutorBiz; import com.xxl.job.core.biz.ExecutorBiz;
import com.xxl.job.core.biz.model.LogResult; import com.xxl.job.core.biz.model.LogResult;
import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.glue.GlueTypeEnum;
import com.xxl.job.core.rpc.netcom.NetComClientProxy;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils; import org.apache.commons.lang3.time.DateUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -52,7 +50,6 @@ public class JobLogController { ...@@ -52,7 +50,6 @@ public class JobLogController {
// 执行器列表 // 执行器列表
List<XxlJobGroup> jobGroupList = xxlJobGroupDao.findAll(); List<XxlJobGroup> jobGroupList = xxlJobGroupDao.findAll();
model.addAttribute("JobGroupList", jobGroupList); model.addAttribute("JobGroupList", jobGroupList);
model.addAttribute("GlueTypeEnum", GlueTypeEnum.values());
// 任务 // 任务
if (jobId > 0) { if (jobId > 0) {
......
package com.xxl.job.admin.core.jobbean; package com.xxl.job.admin.core.jobbean;
import com.xxl.job.admin.core.thread.JobTriggerPoolHelper; import com.xxl.job.admin.core.thread.JobTriggerPoolHelper;
import com.xxl.job.admin.core.util.I18nUtil;
import org.quartz.JobExecutionContext; import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; import org.quartz.JobExecutionException;
import org.quartz.JobKey; import org.quartz.JobKey;
...@@ -27,7 +28,7 @@ public class RemoteHttpJobBean extends QuartzJobBean { ...@@ -27,7 +28,7 @@ public class RemoteHttpJobBean extends QuartzJobBean {
// trigger // trigger
//XxlJobTrigger.trigger(jobId); //XxlJobTrigger.trigger(jobId);
JobTriggerPoolHelper.trigger(jobId, -1); JobTriggerPoolHelper.trigger(jobId, -1, I18nUtil.getString("jobconf_trigger_type_cron"));
} }
} }
\ No newline at end of file
...@@ -65,8 +65,25 @@ public class JobFailMonitorHelper { ...@@ -65,8 +65,25 @@ public class JobFailMonitorHelper {
} else /*if (IJobHandler.FAIL.getCode() == log.getTriggerCode() } else /*if (IJobHandler.FAIL.getCode() == log.getTriggerCode()
|| IJobHandler.FAIL.getCode() == log.getHandleCode() || IJobHandler.FAIL.getCode() == log.getHandleCode()
|| IJobHandler.FAIL_RETRY.getCode() == log.getHandleCode() )*/ { || IJobHandler.FAIL_RETRY.getCode() == log.getHandleCode() )*/ {
// job fail, // job fail,
failAlarm(log);
// 1、fail retry
XxlJobInfo info = XxlJobDynamicScheduler.xxlJobInfoDao.loadById(log.getJobId());
if (log.getExecutorFailRetryCount() > 0) {
// TODO,分片任务失败重试优化,仅重试失败分片
JobTriggerPoolHelper.trigger(log.getJobId(), (log.getExecutorFailRetryCount()-1), I18nUtil.getString("jobconf_trigger_type_retry"));
String retryMsg = "<br><br><span style=\"color:#F39C12;\" > >>>>>>>>>>>"+ I18nUtil.getString("jobconf_fail_trigger_retry") +"<<<<<<<<<<< </span><br>";
log.setTriggerMsg(log.getTriggerMsg() + retryMsg);
XxlJobDynamicScheduler.xxlJobLogDao.updateTriggerInfo(log);
}
// 2、fail alarm
failAlarm(info, log);
logger.info(">>>>>>>>>>> job monitor, job fail, JobLogId:{}", jobLogId); logger.info(">>>>>>>>>>> job monitor, job fail, JobLogId:{}", jobLogId);
}/* else { }/* else {
JobFailMonitorHelper.monitor(jobLogId); JobFailMonitorHelper.monitor(jobLogId);
...@@ -89,7 +106,9 @@ public class JobFailMonitorHelper { ...@@ -89,7 +106,9 @@ public class JobFailMonitorHelper {
XxlJobLog log = XxlJobDynamicScheduler.xxlJobLogDao.load(jobLogId); XxlJobLog log = XxlJobDynamicScheduler.xxlJobLogDao.load(jobLogId);
if (ReturnT.FAIL_CODE == log.getTriggerCode()|| ReturnT.FAIL_CODE==log.getHandleCode()) { if (ReturnT.FAIL_CODE == log.getTriggerCode()|| ReturnT.FAIL_CODE==log.getHandleCode()) {
// job fail, // job fail,
failAlarm(log); XxlJobInfo info = XxlJobDynamicScheduler.xxlJobInfoDao.loadById(log.getJobId());
failAlarm(info, log);
logger.info(">>>>>>>>>>> job monitor last, job fail, JobLogId:{}", jobLogId); logger.info(">>>>>>>>>>> job monitor last, job fail, JobLogId:{}", jobLogId);
} }
} }
...@@ -148,10 +167,9 @@ public class JobFailMonitorHelper { ...@@ -148,10 +167,9 @@ public class JobFailMonitorHelper {
* *
* @param jobLog * @param jobLog
*/ */
private void failAlarm(XxlJobLog jobLog){ private void failAlarm(XxlJobInfo info, XxlJobLog jobLog){
// send monitor email // send monitor email
XxlJobInfo info = XxlJobDynamicScheduler.xxlJobInfoDao.loadById(jobLog.getJobId());
if (info!=null && info.getAlarmEmail()!=null && info.getAlarmEmail().trim().length()>0) { if (info!=null && info.getAlarmEmail()!=null && info.getAlarmEmail().trim().length()>0) {
String alarmContent = "Alarm Job LogId=" + jobLog.getId(); String alarmContent = "Alarm Job LogId=" + jobLog.getId();
......
...@@ -28,11 +28,11 @@ public class JobTriggerPoolHelper { ...@@ -28,11 +28,11 @@ public class JobTriggerPoolHelper {
new ThreadPoolExecutor.CallerRunsPolicy()); new ThreadPoolExecutor.CallerRunsPolicy());
public void addTrigger(final int jobId, final int failRetryCount){ public void addTrigger(final int jobId, final int failRetryCount, final String type){
triggerPool.execute(new Runnable() { triggerPool.execute(new Runnable() {
@Override @Override
public void run() { public void run() {
XxlJobTrigger.trigger(jobId, failRetryCount); XxlJobTrigger.trigger(jobId, failRetryCount, type);
} }
}); });
} }
...@@ -55,8 +55,8 @@ public class JobTriggerPoolHelper { ...@@ -55,8 +55,8 @@ public class JobTriggerPoolHelper {
* <0: use param from job info config * <0: use param from job info config
* *
*/ */
public static void trigger(int jobId, int failRetryCount) { public static void trigger(int jobId, int failRetryCount, String type) {
helper.addTrigger(jobId, failRetryCount); helper.addTrigger(jobId, failRetryCount, type);
} }
public static void toStop(){ public static void toStop(){
......
...@@ -6,7 +6,6 @@ import com.xxl.job.admin.core.model.XxlJobLog; ...@@ -6,7 +6,6 @@ import com.xxl.job.admin.core.model.XxlJobLog;
import com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum; import com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum;
import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler; import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler;
import com.xxl.job.admin.core.thread.JobFailMonitorHelper; import com.xxl.job.admin.core.thread.JobFailMonitorHelper;
import com.xxl.job.admin.core.thread.JobTriggerPoolHelper;
import com.xxl.job.admin.core.util.I18nUtil; import com.xxl.job.admin.core.util.I18nUtil;
import com.xxl.job.core.biz.ExecutorBiz; import com.xxl.job.core.biz.ExecutorBiz;
import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.ReturnT;
...@@ -36,7 +35,7 @@ public class XxlJobTrigger { ...@@ -36,7 +35,7 @@ public class XxlJobTrigger {
* <0: use param from job info config * <0: use param from job info config
* *
*/ */
public static void trigger(int jobId, int failRetryCount) { public static void trigger(int jobId, int failRetryCount, String type) {
// load data // load data
XxlJobInfo jobInfo = XxlJobDynamicScheduler.xxlJobInfoDao.loadById(jobId); // job info XxlJobInfo jobInfo = XxlJobDynamicScheduler.xxlJobInfoDao.loadById(jobId); // job info
...@@ -57,7 +56,6 @@ public class XxlJobTrigger { ...@@ -57,7 +56,6 @@ public class XxlJobTrigger {
// broadcast // broadcast
if (ExecutorRouteStrategyEnum.SHARDING_BROADCAST == executorRouteStrategyEnum && CollectionUtils.isNotEmpty(addressList)) { if (ExecutorRouteStrategyEnum.SHARDING_BROADCAST == executorRouteStrategyEnum && CollectionUtils.isNotEmpty(addressList)) {
boolean onceFailed = false;
for (int i = 0; i < addressList.size(); i++) { for (int i = 0; i < addressList.size(); i++) {
String address = addressList.get(i); String address = addressList.get(i);
...@@ -77,6 +75,7 @@ public class XxlJobTrigger { ...@@ -77,6 +75,7 @@ public class XxlJobTrigger {
ReturnT<String> triggerResult = new ReturnT<String>(null); ReturnT<String> triggerResult = new ReturnT<String>(null);
StringBuffer triggerMsgSb = new StringBuffer(); StringBuffer triggerMsgSb = new StringBuffer();
triggerMsgSb.append(I18nUtil.getString("jobconf_trigger_type")).append(":").append(type);
triggerMsgSb.append(I18nUtil.getString("jobconf_trigger_admin_adress")).append(":").append(IpUtil.getIp()); triggerMsgSb.append(I18nUtil.getString("jobconf_trigger_admin_adress")).append(":").append(IpUtil.getIp());
triggerMsgSb.append("<br>").append(I18nUtil.getString("jobconf_trigger_exe_regtype")).append(":") triggerMsgSb.append("<br>").append(I18nUtil.getString("jobconf_trigger_exe_regtype")).append(":")
.append( (group.getAddressType() == 0)?I18nUtil.getString("jobgroup_field_addressType_0"):I18nUtil.getString("jobgroup_field_addressType_1") ); .append( (group.getAddressType() == 0)?I18nUtil.getString("jobgroup_field_addressType_0"):I18nUtil.getString("jobgroup_field_addressType_1") );
...@@ -106,24 +105,13 @@ public class XxlJobTrigger { ...@@ -106,24 +105,13 @@ public class XxlJobTrigger {
triggerResult = runExecutor(triggerParam, address); // update03 triggerResult = runExecutor(triggerParam, address); // update03
triggerMsgSb.append("<br><br><span style=\"color:#00c0ef;\" > >>>>>>>>>>>"+ I18nUtil.getString("jobconf_trigger_run") +"<<<<<<<<<<< </span><br>").append(triggerResult.getMsg()); triggerMsgSb.append("<br><br><span style=\"color:#00c0ef;\" > >>>>>>>>>>>"+ I18nUtil.getString("jobconf_trigger_run") +"<<<<<<<<<<< </span><br>").append(triggerResult.getMsg());
// 4、save trigger-info
// 4、fail retry)
if (triggerResult.getCode()!=ReturnT.SUCCESS_CODE) {
onceFailed = true;
}
if (addressList.size()==i+1 && onceFailed && finalFailRetryCount > 0) { // each trigger only retry once
JobTriggerPoolHelper.trigger(jobId, (finalFailRetryCount-1));
triggerMsgSb.append("<br><br><span style=\"color:#F39C12;\" > >>>>>>>>>>>"+ I18nUtil.getString("jobconf_fail_trigger_retry") +"<<<<<<<<<<< </span><br>");
}
// 5、save trigger-info
jobLog.setExecutorAddress(triggerResult.getContent()); jobLog.setExecutorAddress(triggerResult.getContent());
jobLog.setTriggerCode(triggerResult.getCode()); jobLog.setTriggerCode(triggerResult.getCode());
jobLog.setTriggerMsg(triggerMsgSb.toString()); jobLog.setTriggerMsg(triggerMsgSb.toString());
XxlJobDynamicScheduler.xxlJobLogDao.updateTriggerInfo(jobLog); XxlJobDynamicScheduler.xxlJobLogDao.updateTriggerInfo(jobLog);
// 6、monitor trigger // 5、monitor trigger
JobFailMonitorHelper.monitor(jobLog.getId()); JobFailMonitorHelper.monitor(jobLog.getId());
logger.debug(">>>>>>>>>>> xxl-job trigger end, jobId:{}", jobLog.getId()); logger.debug(">>>>>>>>>>> xxl-job trigger end, jobId:{}", jobLog.getId());
...@@ -182,19 +170,13 @@ public class XxlJobTrigger { ...@@ -182,19 +170,13 @@ public class XxlJobTrigger {
} }
// 4、fail retry // 4、save trigger-info
if (triggerResult.getCode()!=ReturnT.SUCCESS_CODE && finalFailRetryCount > 0) {
JobTriggerPoolHelper.trigger(jobId, (finalFailRetryCount-1));
triggerMsgSb.append("<br><br><span style=\"color:#F39C12;\" > >>>>>>>>>>>"+ I18nUtil.getString("jobconf_fail_trigger_retry") +"<<<<<<<<<<< </span><br>");
}
// 5、save trigger-info
jobLog.setExecutorAddress(triggerResult.getContent()); jobLog.setExecutorAddress(triggerResult.getContent());
jobLog.setTriggerCode(triggerResult.getCode()); jobLog.setTriggerCode(triggerResult.getCode());
jobLog.setTriggerMsg(triggerMsgSb.toString()); jobLog.setTriggerMsg(triggerMsgSb.toString());
XxlJobDynamicScheduler.xxlJobLogDao.updateTriggerInfo(jobLog); XxlJobDynamicScheduler.xxlJobLogDao.updateTriggerInfo(jobLog);
// 6、monitor trigger // 5、monitor trigger
JobFailMonitorHelper.monitor(jobLog.getId()); JobFailMonitorHelper.monitor(jobLog.getId());
logger.debug(">>>>>>>>>>> xxl-job trigger end, jobId:{}", jobLog.getId()); logger.debug(">>>>>>>>>>> xxl-job trigger end, jobId:{}", jobLog.getId());
} }
......
...@@ -7,7 +7,6 @@ import com.xxl.job.admin.core.util.I18nUtil; ...@@ -7,7 +7,6 @@ import com.xxl.job.admin.core.util.I18nUtil;
import com.xxl.job.admin.dao.XxlJobInfoDao; import com.xxl.job.admin.dao.XxlJobInfoDao;
import com.xxl.job.admin.dao.XxlJobLogDao; import com.xxl.job.admin.dao.XxlJobLogDao;
import com.xxl.job.admin.dao.XxlJobRegistryDao; import com.xxl.job.admin.dao.XxlJobRegistryDao;
import com.xxl.job.admin.service.XxlJobService;
import com.xxl.job.core.biz.AdminBiz; import com.xxl.job.core.biz.AdminBiz;
import com.xxl.job.core.biz.model.HandleCallbackParam; import com.xxl.job.core.biz.model.HandleCallbackParam;
import com.xxl.job.core.biz.model.RegistryParam; import com.xxl.job.core.biz.model.RegistryParam;
...@@ -36,8 +35,6 @@ public class AdminBizImpl implements AdminBiz { ...@@ -36,8 +35,6 @@ public class AdminBizImpl implements AdminBiz {
private XxlJobInfoDao xxlJobInfoDao; private XxlJobInfoDao xxlJobInfoDao;
@Resource @Resource
private XxlJobRegistryDao xxlJobRegistryDao; private XxlJobRegistryDao xxlJobRegistryDao;
@Resource
private XxlJobService xxlJobService;
@Override @Override
...@@ -73,7 +70,7 @@ public class AdminBizImpl implements AdminBiz { ...@@ -73,7 +70,7 @@ public class AdminBizImpl implements AdminBiz {
int childJobId = (StringUtils.isNotBlank(childJobIds[i]) && StringUtils.isNumeric(childJobIds[i]))?Integer.valueOf(childJobIds[i]):-1; int childJobId = (StringUtils.isNotBlank(childJobIds[i]) && StringUtils.isNumeric(childJobIds[i]))?Integer.valueOf(childJobIds[i]):-1;
if (childJobId > 0) { if (childJobId > 0) {
JobTriggerPoolHelper.trigger(childJobId, 0); JobTriggerPoolHelper.trigger(childJobId, 0, I18nUtil.getString("jobconf_trigger_type_parent"));
ReturnT<String> triggerChildResult = ReturnT.SUCCESS; ReturnT<String> triggerChildResult = ReturnT.SUCCESS;
// add msg // add msg
...@@ -92,16 +89,6 @@ public class AdminBizImpl implements AdminBiz { ...@@ -92,16 +89,6 @@ public class AdminBizImpl implements AdminBiz {
} }
} }
} else {
if (log.getExecutorFailRetryCount() > 0) {
int nextFailRetryCount = log.getExecutorFailRetryCount()-1;
// TODO,广播路由的失败重试,会导致重试暴增,需要优化
JobTriggerPoolHelper.trigger(log.getJobId(), nextFailRetryCount);
callbackMsg = "<br><br><span style=\"color:#F39C12;\" > >>>>>>>>>>>"+ I18nUtil.getString("jobconf_fail_handle_retry") +"<<<<<<<<<<< </span><br>";
}
} }
// handle msg // handle msg
...@@ -142,7 +129,7 @@ public class AdminBizImpl implements AdminBiz { ...@@ -142,7 +129,7 @@ public class AdminBizImpl implements AdminBiz {
@Override @Override
public ReturnT<String> triggerJob(int jobId) { public ReturnT<String> triggerJob(int jobId) {
JobTriggerPoolHelper.trigger(jobId, -1); JobTriggerPoolHelper.trigger(jobId, -1, I18nUtil.getString("jobconf_trigger_type_api"));
return ReturnT.SUCCESS; return ReturnT.SUCCESS;
} }
......
...@@ -224,6 +224,12 @@ jobconf_trigger_run=触发调度 ...@@ -224,6 +224,12 @@ jobconf_trigger_run=触发调度
jobconf_trigger_child_run=触发子任务 jobconf_trigger_child_run=触发子任务
jobconf_callback_child_msg1={0}/{1} [任务ID={2}], 触发{3}, 触发备注: {4} <br> jobconf_callback_child_msg1={0}/{1} [任务ID={2}], 触发{3}, 触发备注: {4} <br>
jobconf_callback_child_msg2={0}/{1} [任务ID={2}], 触发失败, 触发备注: 任务ID格式错误 <br> jobconf_callback_child_msg2={0}/{1} [任务ID={2}], 触发失败, 触发备注: 任务ID格式错误 <br>
jobconf_trigger_type=任务触发类型
jobconf_trigger_type_cron=Cron触发
jobconf_trigger_type_manual=手动触发
jobconf_trigger_type_parent=父任务触发
jobconf_trigger_type_api=API触发
jobconf_trigger_type_retry=失败重试触发
## help ## help
job_help=使用教程 job_help=使用教程
......
...@@ -224,6 +224,12 @@ jobconf_trigger_run=Trigger Job ...@@ -224,6 +224,12 @@ jobconf_trigger_run=Trigger Job
jobconf_trigger_child_run=Trigger child job jobconf_trigger_child_run=Trigger child job
jobconf_callback_child_msg1={0}/{1} [Job ID={2}], Trigger {3}, Trigger msg: {4} <br> jobconf_callback_child_msg1={0}/{1} [Job ID={2}], Trigger {3}, Trigger msg: {4} <br>
jobconf_callback_child_msg2={0}/{1} [Job ID={2}], Trigger Fail, Trigger msg: Job ID is illegal <br> jobconf_callback_child_msg2={0}/{1} [Job ID={2}], Trigger Fail, Trigger msg: Job ID is illegal <br>
jobconf_trigger_type=Job trigger type
jobconf_trigger_type_cron=Cron trigger
jobconf_trigger_type_manual=Manual trigger
jobconf_trigger_type_parent=Parent job trigger
jobconf_trigger_type_api=Api trigger
jobconf_trigger_type_retry=Fail retry trigger
## help ## help
job_help=Tutorial job_help=Tutorial
......
...@@ -167,12 +167,6 @@ ...@@ -167,12 +167,6 @@
</div> </div>
<@netCommon.commonScript /> <@netCommon.commonScript />
<script>
var GlueTypeEnum = {};
<#list GlueTypeEnum as item>
GlueTypeEnum['${item}'] = '${item.desc}';
</#list>
</script>
<!-- DataTables --> <!-- DataTables -->
<script src="${request.contextPath}/static/adminlte/plugins/datatables/jquery.dataTables.min.js"></script> <script src="${request.contextPath}/static/adminlte/plugins/datatables/jquery.dataTables.min.js"></script>
<script src="${request.contextPath}/static/adminlte/plugins/datatables/dataTables.bootstrap.min.js"></script> <script src="${request.contextPath}/static/adminlte/plugins/datatables/dataTables.bootstrap.min.js"></script>
......
...@@ -98,14 +98,8 @@ $(function() { ...@@ -98,14 +98,8 @@ $(function() {
"width":'10%', "width":'10%',
"render": function ( data, type, row ) { "render": function ( data, type, row ) {
var glueTypeTitle = GlueTypeEnum[row.glueType];
if (row.executorHandler) {
glueTypeTitle = glueTypeTitle +":" + row.executorHandler;
}
var temp = ''; var temp = '';
temp += I18n.joblog_field_executorAddress + ':' + (row.executorAddress?row.executorAddress:''); temp += I18n.joblog_field_executorAddress + ':' + (row.executorAddress?row.executorAddress:'');
temp += '<br>'+ I18n.jobinfo_field_gluetype +':' + glueTypeTitle;
temp += '<br>'+ I18n.jobinfo_field_executorparam +':' + row.executorParam; temp += '<br>'+ I18n.jobinfo_field_executorparam +':' + row.executorParam;
return '<a class="logTips" href="javascript:;" >'+ row.jobId +'<span style="display:none;">'+ temp +'</span></a>'; return '<a class="logTips" href="javascript:;" >'+ row.jobId +'<span style="display:none;">'+ temp +'</span></a>';
......
package com.xxl.job.admin.dao; package com.xxl.job.admin.dao;
import com.xxl.job.admin.core.model.XxlJobLog; import com.xxl.job.admin.core.model.XxlJobLog;
import com.xxl.job.admin.dao.XxlJobLogDao;
import org.apache.commons.lang3.time.DateUtils; import org.apache.commons.lang3.time.DateUtils;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
...@@ -32,7 +31,6 @@ public class XxlJobLogDaoTest { ...@@ -32,7 +31,6 @@ public class XxlJobLogDaoTest {
int ret1 = xxlJobLogDao.save(log); int ret1 = xxlJobLogDao.save(log);
XxlJobLog dto = xxlJobLogDao.load(log.getId()); XxlJobLog dto = xxlJobLogDao.load(log.getId());
log.setGlueType("1");
log.setTriggerTime(new Date()); log.setTriggerTime(new Date());
log.setTriggerCode(1); log.setTriggerCode(1);
log.setTriggerMsg("1"); log.setTriggerMsg("1");
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论