content: package com.xxl.job.admin.core.alarm;
  
  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 java.util.ArrayList;
  import java.util.List;
  import java.util.Map;
  
  @Component
  public class JobAlarmer implements ApplicationContextAware, InitializingBean {
  
  	private static Logger logger = LoggerFactory.getLogger(JobAlarmer.class);
  
  	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
  	 * @param info
  	 * @param jobLog
  	 * @return
  	 */
  	public boolean alarm(XxlJobInfo info, XxlJobLog 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;
  				}
  			}
  		}
  
  		return result;
  	}
  
  }
  