JobLogController.java 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. package com.xxl.job.admin.controller;
  2. import com.xxl.job.admin.core.model.XxlJobGroup;
  3. import com.xxl.job.admin.core.model.XxlJobInfo;
  4. import com.xxl.job.admin.core.model.XxlJobLog;
  5. import com.xxl.job.admin.dao.IXxlJobGroupDao;
  6. import com.xxl.job.admin.dao.IXxlJobInfoDao;
  7. import com.xxl.job.admin.dao.IXxlJobLogDao;
  8. import com.xxl.job.core.biz.ExecutorBiz;
  9. import com.xxl.job.core.biz.model.LogResult;
  10. import com.xxl.job.core.biz.model.ReturnT;
  11. import com.xxl.job.core.rpc.netcom.NetComClientProxy;
  12. import org.apache.commons.lang.StringUtils;
  13. import org.apache.commons.lang.time.DateUtils;
  14. import org.springframework.stereotype.Controller;
  15. import org.springframework.ui.Model;
  16. import org.springframework.web.bind.annotation.RequestMapping;
  17. import org.springframework.web.bind.annotation.RequestParam;
  18. import org.springframework.web.bind.annotation.ResponseBody;
  19. import javax.annotation.Resource;
  20. import java.text.ParseException;
  21. import java.util.Date;
  22. import java.util.HashMap;
  23. import java.util.List;
  24. import java.util.Map;
  25. /**
  26. * index controller
  27. * @author xuxueli 2015-12-19 16:13:16
  28. */
  29. @Controller
  30. @RequestMapping("/joblog")
  31. public class JobLogController {
  32. @Resource
  33. private IXxlJobGroupDao xxlJobGroupDao;
  34. @Resource
  35. public IXxlJobInfoDao xxlJobInfoDao;
  36. @Resource
  37. public IXxlJobLogDao xxlJobLogDao;
  38. @RequestMapping
  39. public String index(Model model, @RequestParam(required = false, defaultValue = "0") Integer jobId) {
  40. // 执行器列表
  41. List<XxlJobGroup> jobGroupList = xxlJobGroupDao.findAll();
  42. model.addAttribute("JobGroupList", jobGroupList);
  43. // 任务
  44. if (jobId > 0) {
  45. XxlJobInfo jobInfo = xxlJobInfoDao.loadById(jobId);
  46. model.addAttribute("jobInfo", jobInfo);
  47. }
  48. return "joblog/joblog.index";
  49. }
  50. @RequestMapping("/getJobsByGroup")
  51. @ResponseBody
  52. public ReturnT<List<XxlJobInfo>> listJobByGroup(String jobGroup){
  53. List<XxlJobInfo> list = xxlJobInfoDao.getJobsByGroup(jobGroup);
  54. return new ReturnT<List<XxlJobInfo>>(list);
  55. }
  56. @RequestMapping("/pageList")
  57. @ResponseBody
  58. public Map<String, Object> pageList(@RequestParam(required = false, defaultValue = "0") int start,
  59. @RequestParam(required = false, defaultValue = "10") int length,
  60. int jobGroup, int jobId, String filterTime) {
  61. // parse param
  62. Date triggerTimeStart = null;
  63. Date triggerTimeEnd = null;
  64. if (StringUtils.isNotBlank(filterTime)) {
  65. String[] temp = filterTime.split(" - ");
  66. if (temp!=null && temp.length == 2) {
  67. try {
  68. triggerTimeStart = DateUtils.parseDate(temp[0], new String[]{"yyyy-MM-dd HH:mm:ss"});
  69. triggerTimeEnd = DateUtils.parseDate(temp[1], new String[]{"yyyy-MM-dd HH:mm:ss"});
  70. } catch (ParseException e) { }
  71. }
  72. }
  73. // page query
  74. List<XxlJobLog> list = xxlJobLogDao.pageList(start, length, jobGroup, jobId, triggerTimeStart, triggerTimeEnd);
  75. int list_count = xxlJobLogDao.pageListCount(start, length, jobGroup, jobId, triggerTimeStart, triggerTimeEnd);
  76. // package result
  77. Map<String, Object> maps = new HashMap<String, Object>();
  78. maps.put("recordsTotal", list_count); // 总记录数
  79. maps.put("recordsFiltered", list_count); // 过滤后的总记录数
  80. maps.put("data", list); // 分页列表
  81. return maps;
  82. }
  83. @RequestMapping("/logDetailPage")
  84. public String logDetailPage(int id, Model model){
  85. // base check
  86. ReturnT<String> logStatue = ReturnT.SUCCESS;
  87. XxlJobLog jobLog = xxlJobLogDao.load(id);
  88. if (jobLog == null) {
  89. logStatue = new ReturnT<String>(ReturnT.FAIL_CODE, "查看执行日志失败: 日志ID非法");
  90. } else {
  91. if (ReturnT.SUCCESS_CODE != jobLog.getTriggerCode()) {
  92. logStatue = new ReturnT<String>(ReturnT.FAIL_CODE, "查看执行日志失败: 任务发起调度失败,无法查看执行日志");
  93. }
  94. model.addAttribute("executorAddress", jobLog.getExecutorAddress());
  95. model.addAttribute("triggerTime", jobLog.getTriggerTime().getTime());
  96. model.addAttribute("logId", jobLog.getId());
  97. }
  98. model.addAttribute("logStatue", logStatue);
  99. return "joblog/logdetail";
  100. }
  101. @RequestMapping("/logDetailCat")
  102. @ResponseBody
  103. public ReturnT<LogResult> logDetailCat(String executorAddress, long triggerTime, int logId, int fromLineNum){
  104. try {
  105. ExecutorBiz executorBiz = (ExecutorBiz) new NetComClientProxy(ExecutorBiz.class, executorAddress).getObject();
  106. ReturnT<LogResult> logResult = executorBiz.log(triggerTime, logId, fromLineNum);
  107. return logResult;
  108. } catch (Exception e) {
  109. e.printStackTrace();
  110. return new ReturnT<LogResult>(ReturnT.FAIL_CODE, e.getMessage());
  111. }
  112. }
  113. @RequestMapping("/logKill")
  114. @ResponseBody
  115. public ReturnT<String> logKill(int id){
  116. // base check
  117. XxlJobLog log = xxlJobLogDao.load(id);
  118. XxlJobInfo jobInfo = xxlJobInfoDao.loadById(log.getJobId());
  119. if (jobInfo==null) {
  120. return new ReturnT<String>(500, "参数异常");
  121. }
  122. if (ReturnT.SUCCESS_CODE != log.getTriggerCode()) {
  123. return new ReturnT<String>(500, "调度失败,无法终止日志");
  124. }
  125. // request of kill
  126. ExecutorBiz executorBiz = null;
  127. try {
  128. executorBiz = (ExecutorBiz) new NetComClientProxy(ExecutorBiz.class, log.getExecutorAddress()).getObject();
  129. } catch (Exception e) {
  130. e.printStackTrace();
  131. return new ReturnT<String>(500, e.getMessage());
  132. }
  133. ReturnT<String> runResult = executorBiz.kill(jobInfo.getId());
  134. if (ReturnT.SUCCESS_CODE == runResult.getCode()) {
  135. log.setHandleCode(ReturnT.FAIL_CODE);
  136. log.setHandleMsg("人为操作主动终止:" + (runResult.getMsg()!=null?runResult.getMsg():""));
  137. log.setHandleTime(new Date());
  138. xxlJobLogDao.updateHandleInfo(log);
  139. return new ReturnT<String>(runResult.getMsg());
  140. } else {
  141. return new ReturnT<String>(500, runResult.getMsg());
  142. }
  143. }
  144. }