瀏覽代碼

告警邮件中展示失败告警信息;

xuxueli 7 年之前
父節點
當前提交
caf3888118

+ 10 - 10
doc/XXL-JOB官方文档.md 查看文件

1215
 
1215
 
1216
 ### 6.22 版本 V1.9.2 特性[迭代中]
1216
 ### 6.22 版本 V1.9.2 特性[迭代中]
1217
 - 1、[迭代中]支持通过API服务操作任务信息;
1217
 - 1、[迭代中]支持通过API服务操作任务信息;
1218
-- 2、[迭代中]任务告警逻辑调整:任务调度,以及任务回调失败时,均推送监控队列。后期考虑通过任务Log字段控制告警状态
1218
+- 2、告警邮件中展示失败告警信息
1219
 - 3、任务超时控制:支持设置任务超时时间,任务运行超时的情况下,将会主动中断任务;
1219
 - 3、任务超时控制:支持设置任务超时时间,任务运行超时的情况下,将会主动中断任务;
1220
 - 4、任务属性枚举 "任务模式、阻塞策略" 国际化优化;
1220
 - 4、任务属性枚举 "任务模式、阻塞策略" 国际化优化;
1221
 - 5、任务日志表状态字段类型优化;
1221
 - 5、任务日志表状态字段类型优化;
1248
 - 13、任务依赖增强,新增任务类型 "流程任务",流程节点可挂载普通类型任务,承担任务依赖功能。现有子任务模型取消;需要考虑任务依赖死循环问题;
1248
 - 13、任务依赖增强,新增任务类型 "流程任务",流程节点可挂载普通类型任务,承担任务依赖功能。现有子任务模型取消;需要考虑任务依赖死循环问题;
1249
 - 14、分片任务某一分片失败,支持分片转移;
1249
 - 14、分片任务某一分片失败,支持分片转移;
1250
 - 15、调度中心触发任务后,先推送触发队列,异步触发,然后立即返回。降低quartz线程占用时长。
1250
 - 15、调度中心触发任务后,先推送触发队列,异步触发,然后立即返回。降低quartz线程占用时长。
1251
-- 16、新增API服务 "XxlJobService" ,支持通过API服务来维护管理任务信息
1251
+- 16、任务告警逻辑调整:任务调度,以及任务回调失败时,均推送监控队列。后期考虑通过任务Log字段控制告警状态
1252
 - 17、新增任务默认运行状态,任务更新时运行状态保持不变;
1252
 - 17、新增任务默认运行状态,任务更新时运行状态保持不变;
1253
-- 18、告警邮件中展示失败告警信息
1254
-- 19、提供多版本执行器:不依赖容器版本、不内嵌Jetty版本(通过配置executoraddress替换jetty通讯)等;
1255
-- 20、注册中心支持扩展,除默认基于DB之外,支持扩展接入第三方注册中心如zk、eureka等
1256
-- 21、依赖Core内部国际化处理
1257
-- 22、故障转移、失败重试等策略,规范化合并归类
1258
-- 23、流程任务,支持参数传递
1259
-- 24、SimpleTrigger 支持;
1260
-- 25、springboot热部署支持;
1253
+- 18、提供多版本执行器:不依赖容器版本、不内嵌Jetty版本(通过配置executoraddress替换jetty通讯)等
1254
+- 19、注册中心支持扩展,除默认基于DB之外,支持扩展接入第三方注册中心如zk、eureka等;
1255
+- 20、依赖Core内部国际化处理
1256
+- 21、故障转移、失败重试等策略,规范化合并归类
1257
+- 22、流程任务,支持参数传递
1258
+- 23、SimpleTrigger 支持
1259
+- 24、springboot热部署支持;
1260
+
1261
 
1261
 
1262
 
1262
 
1263
 ## 七、其他
1263
 ## 七、其他

+ 19 - 5
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java 查看文件

125
 			"<table border=\"1\" cellpadding=\"3\" style=\"border-collapse:collapse; width:80%;\" >\n" +
125
 			"<table border=\"1\" cellpadding=\"3\" style=\"border-collapse:collapse; width:80%;\" >\n" +
126
 			"   <thead style=\"font-weight: bold;color: #ffffff;background-color: #ff8c00;\" >" +
126
 			"   <thead style=\"font-weight: bold;color: #ffffff;background-color: #ff8c00;\" >" +
127
 			"      <tr>\n" +
127
 			"      <tr>\n" +
128
-			"         <td>"+ I18nUtil.getString("jobinfo_field_jobgroup") +"</td>\n" +
129
-			"         <td>"+ I18nUtil.getString("jobinfo_field_id") +"</td>\n" +
130
-			"         <td>"+ I18nUtil.getString("jobinfo_field_jobdesc") +"</td>\n" +
131
-			"         <td>"+ I18nUtil.getString("jobconf_monitor_alarm_title") +"</td>\n" +
128
+			"         <td width=\"20%\" >"+ I18nUtil.getString("jobinfo_field_jobgroup") +"</td>\n" +
129
+			"         <td width=\"10%\" >"+ I18nUtil.getString("jobinfo_field_id") +"</td>\n" +
130
+			"         <td width=\"20%\" >"+ I18nUtil.getString("jobinfo_field_jobdesc") +"</td>\n" +
131
+			"         <td width=\"10%\" >"+ I18nUtil.getString("jobconf_monitor_alarm_title") +"</td>\n" +
132
+			"         <td width=\"40%\" >"+ I18nUtil.getString("jobconf_monitor_alarm_content") +"</td>\n" +
132
 			"      </tr>\n" +
133
 			"      </tr>\n" +
133
 			"   <thead/>\n" +
134
 			"   <thead/>\n" +
134
 			"   <tbody>\n" +
135
 			"   <tbody>\n" +
137
 			"         <td>{1}</td>\n" +
138
 			"         <td>{1}</td>\n" +
138
 			"         <td>{2}</td>\n" +
139
 			"         <td>{2}</td>\n" +
139
 			"         <td>"+ I18nUtil.getString("jobconf_monitor_alarm_type") +"</td>\n" +
140
 			"         <td>"+ I18nUtil.getString("jobconf_monitor_alarm_type") +"</td>\n" +
141
+			"         <td>{3}</td>\n" +
140
 			"      </tr>\n" +
142
 			"      </tr>\n" +
141
 			"   <tbody>\n" +
143
 			"   <tbody>\n" +
142
 			"</table>";
144
 			"</table>";
152
 		XxlJobInfo info = XxlJobDynamicScheduler.xxlJobInfoDao.loadById(jobLog.getJobId());
154
 		XxlJobInfo info = XxlJobDynamicScheduler.xxlJobInfoDao.loadById(jobLog.getJobId());
153
 		if (info!=null && info.getAlarmEmail()!=null && info.getAlarmEmail().trim().length()>0) {
155
 		if (info!=null && info.getAlarmEmail()!=null && info.getAlarmEmail().trim().length()>0) {
154
 
156
 
157
+			String alarmContent = "Alarm Job LogId=" + jobLog.getId();
158
+			if (jobLog.getTriggerCode() != ReturnT.SUCCESS_CODE) {
159
+				alarmContent += "<br>TriggerMsg=" + jobLog.getTriggerMsg();
160
+			}
161
+			if (jobLog.getHandleCode()>0 && jobLog.getHandleCode() != ReturnT.SUCCESS_CODE) {
162
+				alarmContent += "<br>HandleCode=" + jobLog.getHandleMsg();
163
+			}
164
+
155
 			Set<String> emailSet = new HashSet<String>(Arrays.asList(info.getAlarmEmail().split(",")));
165
 			Set<String> emailSet = new HashSet<String>(Arrays.asList(info.getAlarmEmail().split(",")));
156
 			for (String email: emailSet) {
166
 			for (String email: emailSet) {
157
 				XxlJobGroup group = XxlJobDynamicScheduler.xxlJobGroupDao.load(Integer.valueOf(info.getJobGroup()));
167
 				XxlJobGroup group = XxlJobDynamicScheduler.xxlJobGroupDao.load(Integer.valueOf(info.getJobGroup()));
158
 
168
 
159
 				String title = I18nUtil.getString("jobconf_monitor");
169
 				String title = I18nUtil.getString("jobconf_monitor");
160
-				String content = MessageFormat.format(mailBodyTemplate, group!=null?group.getTitle():"null", info.getId(), info.getJobDesc());
170
+				String content = MessageFormat.format(mailBodyTemplate,
171
+						group!=null?group.getTitle():"null",
172
+						info.getId(),
173
+						info.getJobDesc(),
174
+						alarmContent);
161
 
175
 
162
 				MailUtil.sendMail(email, title, content);
176
 				MailUtil.sendMail(email, title, content);
163
 			}
177
 			}

+ 1 - 0
xxl-job-admin/src/main/resources/i18n/message.properties 查看文件

215
 jobconf_monitor_detail=监控告警明细
215
 jobconf_monitor_detail=监控告警明细
216
 jobconf_monitor_alarm_title=告警类型
216
 jobconf_monitor_alarm_title=告警类型
217
 jobconf_monitor_alarm_type=调度失败
217
 jobconf_monitor_alarm_type=调度失败
218
+jobconf_monitor_alarm_content=告警内容
218
 jobconf_trigger_admin_adress=调度机器
219
 jobconf_trigger_admin_adress=调度机器
219
 jobconf_trigger_exe_regtype=执行器-注册方式
220
 jobconf_trigger_exe_regtype=执行器-注册方式
220
 jobconf_trigger_exe_regaddress=执行器-地址列表
221
 jobconf_trigger_exe_regaddress=执行器-地址列表

+ 1 - 0
xxl-job-admin/src/main/resources/i18n/message_en.properties 查看文件

215
 jobconf_monitor_detail=monitor alarm details
215
 jobconf_monitor_detail=monitor alarm details
216
 jobconf_monitor_alarm_title=Alarm Type
216
 jobconf_monitor_alarm_title=Alarm Type
217
 jobconf_monitor_alarm_type=Trigger Fail
217
 jobconf_monitor_alarm_type=Trigger Fail
218
+jobconf_monitor_alarm_content=Alarm Content
218
 jobconf_trigger_admin_adress=Trigger machine address
219
 jobconf_trigger_admin_adress=Trigger machine address
219
 jobconf_trigger_exe_regtype=Execotor-Registry Type
220
 jobconf_trigger_exe_regtype=Execotor-Registry Type
220
 jobconf_trigger_exe_regaddress=Execotor-Registry Address
221
 jobconf_trigger_exe_regaddress=Execotor-Registry Address

+ 0 - 50
xxl-job-admin/src/test/java/com/xxl/job/admin/util/MailUtilTest.java 查看文件

1
-package com.xxl.job.admin.util;
2
-
3
-import com.xxl.job.admin.core.util.MailUtil;
4
-import org.junit.Test;
5
-import org.junit.runner.RunWith;
6
-import org.springframework.test.context.ContextConfiguration;
7
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
8
-
9
-import java.text.MessageFormat;
10
-
11
-/**
12
- * email util test
13
- *
14
- * @author xuxueli 2017-12-22 17:16:23
15
- */
16
-@RunWith(SpringJUnit4ClassRunner.class)
17
-@ContextConfiguration(locations = "classpath*:spring/applicationcontext-*.xml")
18
-public class MailUtilTest {
19
-
20
-    @Test
21
-    public void mailTest() throws Exception {
22
-
23
-        String mailBodyTemplate = "<h5>监控告警明细:</span>" +
24
-                "<table border=\"1\" cellpadding=\"3\" style=\"border-collapse:collapse; width:80%;\" >\n" +
25
-                "   <thead style=\"font-weight: bold;color: #ffffff;background-color: #ff8c00;\" >" +
26
-                "      <tr>\n" +
27
-                "         <td>执行器</td>\n" +
28
-                "         <td>任务ID</td>\n" +
29
-                "         <td>任务描述</td>\n" +
30
-                "         <td>告警类型</td>\n" +
31
-                "      </tr>\n" +
32
-                "   <thead/>\n" +
33
-                "   <tbody>\n" +
34
-                "      <tr>\n" +
35
-                "         <td>{0}</td>\n" +
36
-                "         <td>{1}</td>\n" +
37
-                "         <td>{2}</td>\n" +
38
-                "         <td>调度失败</td>\n" +
39
-                "      </tr>\n" +
40
-                "   <tbody>\n" +
41
-                "</table>";
42
-
43
-        String title = "调度中心监控报警";
44
-        String content = MessageFormat.format(mailBodyTemplate, "执行器A", "01", "任务A1");
45
-
46
-        boolean ret = MailUtil.sendMail("931591021@qq.com", title, content);
47
-        System.out.println(ret);
48
-    }
49
-
50
-}

+ 1 - 1
xxl-job-core/src/main/java/com/xxl/job/core/thread/JobThread.java 查看文件

143
 							XxlJobLogger.log("<br>----------- xxl-job job execute timeout");
143
 							XxlJobLogger.log("<br>----------- xxl-job job execute timeout");
144
 							XxlJobLogger.log(e);
144
 							XxlJobLogger.log(e);
145
 
145
 
146
-							executeResult = new ReturnT<String>(IJobHandler.FAIL_TIMEOUT.getCode(), "job execute timeout " + e.getMessage());
146
+							executeResult = new ReturnT<String>(IJobHandler.FAIL_TIMEOUT.getCode(), "job execute timeout ");
147
 						} finally {
147
 						} finally {
148
 							futureThread.interrupt();
148
 							futureThread.interrupt();
149
 						}
149
 						}