|
|
|
@ -1,17 +1,38 @@
|
|
|
|
|
package com.xxl.job.admin.core.alarm;
|
|
|
|
|
|
|
|
|
|
import com.xxl.job.admin.core.alarm.impl.EmailJobAlarm;
|
|
|
|
|
import com.xxl.job.admin.core.model.XxlJobInfo;
|
|
|
|
|
import com.xxl.job.admin.core.model.XxlJobLog;
|
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
import org.springframework.beans.BeansException;
|
|
|
|
|
import org.springframework.beans.factory.InitializingBean;
|
|
|
|
|
import org.springframework.context.ApplicationContext;
|
|
|
|
|
import org.springframework.context.ApplicationContextAware;
|
|
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
|
|
@Component
|
|
|
|
|
public class JobAlarmer {
|
|
|
|
|
public class JobAlarmer implements ApplicationContextAware, InitializingBean {
|
|
|
|
|
private static Logger logger = LoggerFactory.getLogger(JobAlarmer.class);
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
private EmailJobAlarm emailJobAlarm;
|
|
|
|
|
private ApplicationContext applicationContext;
|
|
|
|
|
private List<JobAlarm> jobAlarmList;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
|
|
|
|
|
this.applicationContext = applicationContext;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void afterPropertiesSet() throws Exception {
|
|
|
|
|
Map<String, JobAlarm> serviceBeanMap = applicationContext.getBeansOfType(JobAlarm.class);
|
|
|
|
|
if (serviceBeanMap != null && serviceBeanMap.size() > 0) {
|
|
|
|
|
jobAlarmList = new ArrayList<JobAlarm>(serviceBeanMap.values());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* job alarm
|
|
|
|
@ -22,15 +43,23 @@ public class JobAlarmer {
|
|
|
|
|
*/
|
|
|
|
|
public boolean alarm(XxlJobInfo info, XxlJobLog jobLog) {
|
|
|
|
|
|
|
|
|
|
// alarm by email
|
|
|
|
|
boolean emailResult = emailJobAlarm.doAlarm(info, jobLog);
|
|
|
|
|
boolean result = false;
|
|
|
|
|
if (jobAlarmList!=null && jobAlarmList.size()>0) {
|
|
|
|
|
result = true; // success means all-success
|
|
|
|
|
for (JobAlarm alarm: jobAlarmList) {
|
|
|
|
|
boolean resultItem = false;
|
|
|
|
|
try {
|
|
|
|
|
resultItem = alarm.doAlarm(info, jobLog);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
logger.error(e.getMessage(), e);
|
|
|
|
|
}
|
|
|
|
|
if (!resultItem) {
|
|
|
|
|
result = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// do something, custom alarm strategy, such as sms
|
|
|
|
|
// ...
|
|
|
|
|
|
|
|
|
|
return emailResult;
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|