c149494d507a456de06c991b338bed0d60609834.svn-base 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package com.xxl.job.admin.core.thread;
  2. import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
  3. import com.xxl.job.admin.core.model.XxlJobInfo;
  4. import com.xxl.job.admin.core.model.XxlJobLog;
  5. import com.xxl.job.admin.core.trigger.TriggerTypeEnum;
  6. import com.xxl.job.admin.core.util.I18nUtil;
  7. import org.slf4j.Logger;
  8. import org.slf4j.LoggerFactory;
  9. import java.util.List;
  10. import java.util.concurrent.TimeUnit;
  11. /**
  12. * job monitor instance
  13. *
  14. * @author xuxueli 2015-9-1 18:05:56
  15. */
  16. public class JobFailMonitorHelper {
  17. private static Logger logger = LoggerFactory.getLogger(JobFailMonitorHelper.class);
  18. private static JobFailMonitorHelper instance = new JobFailMonitorHelper();
  19. public static JobFailMonitorHelper getInstance(){
  20. return instance;
  21. }
  22. // ---------------------- monitor ----------------------
  23. private Thread monitorThread;
  24. private volatile boolean toStop = false;
  25. public void start(){
  26. monitorThread = new Thread(new Runnable() {
  27. @Override
  28. public void run() {
  29. // monitor
  30. while (!toStop) {
  31. try {
  32. List<Long> failLogIds = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().findFailJobLogIds(1000);
  33. if (failLogIds!=null && !failLogIds.isEmpty()) {
  34. for (long failLogId: failLogIds) {
  35. // lock log
  36. int lockRet = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().updateAlarmStatus(failLogId, 0, -1);
  37. if (lockRet < 1) {
  38. continue;
  39. }
  40. XxlJobLog log = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().load(failLogId);
  41. XxlJobInfo info = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().loadById(log.getJobId());
  42. // 1、fail retry monitor
  43. if (log.getExecutorFailRetryCount() > 0) {
  44. JobTriggerPoolHelper.trigger(log.getJobId(), TriggerTypeEnum.RETRY, (log.getExecutorFailRetryCount()-1), log.getExecutorShardingParam(), log.getExecutorParam(), null);
  45. String retryMsg = "<br><br><span style=\"color:#F39C12;\" > >>>>>>>>>>>"+ I18nUtil.getString("jobconf_trigger_type_retry") +"<<<<<<<<<<< </span><br>";
  46. log.setTriggerMsg(log.getTriggerMsg() + retryMsg);
  47. XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().updateTriggerInfo(log);
  48. }
  49. // 2、fail alarm monitor
  50. int newAlarmStatus = 0; // 告警状态:0-默认、-1=锁定状态、1-无需告警、2-告警成功、3-告警失败
  51. if (info!=null && info.getAlarmEmail()!=null && info.getAlarmEmail().trim().length()>0) {
  52. boolean alarmResult = XxlJobAdminConfig.getAdminConfig().getJobAlarmer().alarm(info, log);
  53. newAlarmStatus = alarmResult?2:3;
  54. } else {
  55. newAlarmStatus = 1;
  56. }
  57. XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().updateAlarmStatus(failLogId, -1, newAlarmStatus);
  58. }
  59. }
  60. } catch (Exception e) {
  61. if (!toStop) {
  62. logger.error(">>>>>>>>>>> xxl-job, job fail monitor thread error:{}", e);
  63. }
  64. }
  65. try {
  66. TimeUnit.SECONDS.sleep(10);
  67. } catch (Exception e) {
  68. if (!toStop) {
  69. logger.error(e.getMessage(), e);
  70. }
  71. }
  72. }
  73. logger.info(">>>>>>>>>>> xxl-job, job fail monitor thread stop");
  74. }
  75. });
  76. monitorThread.setDaemon(true);
  77. monitorThread.setName("xxl-job, admin JobFailMonitorHelper");
  78. monitorThread.start();
  79. }
  80. public void toStop(){
  81. toStop = true;
  82. // interrupt and wait
  83. monitorThread.interrupt();
  84. try {
  85. monitorThread.join();
  86. } catch (InterruptedException e) {
  87. logger.error(e.getMessage(), e);
  88. }
  89. }
  90. }