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;
      }
  
  }
  