package com.taobao.zeus.broadcast.alarm; import java.util.ArrayList; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import com.taobao.zeus.model.JobHistory; import com.taobao.zeus.model.JobStatus.TriggerType; import com.taobao.zeus.model.ZeusFollow; import com.taobao.zeus.schedule.mvc.JobFailListener.ChainException; import com.taobao.zeus.store.FollowManager; import com.taobao.zeus.store.FollowManagerOld; import com.taobao.zeus.store.GroupManager; import com.taobao.zeus.store.GroupManagerOld; import com.taobao.zeus.store.JobHistoryManager; import com.taobao.zeus.store.UserManager; public abstract class AbstractZeusAlarm implements ZeusAlarm{ protected static Logger log=LoggerFactory.getLogger(AbstractZeusAlarm.class); @Autowired protected JobHistoryManager jobHistoryManager; @Autowired @Qualifier("followManagerOld") protected FollowManagerOld followManagerOld; @Autowired @Qualifier("groupManagerOld") protected GroupManagerOld groupManagerOld; /* @Override public void alarm(String historyId, String title, String content,ChainException chain) throws Exception { JobHistory history=jobHistoryManager.findJobHistory(historyId); TriggerType type=history.getTriggerType(); //获得action_id String jobId=history.getJobId(); //获得job_id String tojobId=history.getToJobId(); List<String> users=new ArrayList<String>(); if(type==TriggerType.SCHEDULE){ users=followManagerOld.findActualJobFollowers(tojobId); }else{ users.add(groupManagerOld.getJobDescriptor(tojobId).getX().getOwner()); if(history.getOperator()!=null){ if(!users.contains(history.getOperator())){ users.add(history.getOperator()); } } } List<String> result=new ArrayList<String>(); if(chain==null){ result=users; }else{ for(String uid:users){ Integer count=chain.getUserCountMap().get(uid); if(count==null){ count=1; chain.getUserCountMap().put(uid, count); } if(count<20){//一个job失败,最多发给同一个人20个报警 chain.getUserCountMap().put(uid, ++count); result.add(uid); } } } alarm(jobId, result, title, content); } */ @Override public void alarm(String historyId, String title, String content,ChainException chain) throws Exception { JobHistory history=jobHistoryManager.findJobHistory(historyId); TriggerType type=history.getTriggerType(); //获得action_id String jobId=history.getJobId(); //获得job_id String tojobId=history.getToJobId(); List<String> users=new ArrayList<String>(); if(type==TriggerType.SCHEDULE){ List<ZeusFollow> zeusFollowers = followManagerOld.findAllFollowers(tojobId); List<ZeusFollow> importantContacts = new ArrayList<ZeusFollow>(); List<ZeusFollow> otherFollowers = new ArrayList<ZeusFollow>(); for(ZeusFollow zf : zeusFollowers){ if (zf.isImportant() && ZeusFollow.JobType.equals(zf.getType())) { importantContacts.add(zf); }else { otherFollowers.add(zf); } } String owner = groupManagerOld.getJobDescriptor(tojobId).getX().getOwner(); //首先添加重要联系人,然后是job本身的owner,最后是关注者。 for(ZeusFollow person : importantContacts){ if (!users.contains(person.getUid())) { users.add(person.getUid()); } } if (!users.contains(owner)) { users.add(owner); } for (ZeusFollow other : otherFollowers) { if (!users.contains(other.getUid())) { users.add(other.getUid()); } } }else{ users.add(groupManagerOld.getJobDescriptor(tojobId).getX().getOwner()); if(history.getOperator()!=null){ if(!users.contains(history.getOperator())){ users.add(history.getOperator()); } } } List<String> result=new ArrayList<String>(); if(chain==null){ result=users; }else{ for(String uid:users){ Integer count=chain.getUserCountMap().get(uid); if(count==null){ count=1; chain.getUserCountMap().put(uid, count); } if(count<20){//一个job失败,最多发给同一个人20个报警 chain.getUserCountMap().put(uid, ++count); result.add(uid); } } } alarm(jobId, result, title, content); } @Override public void alarm(String historyId, String title, String content) throws Exception { alarm(historyId, title, content, null); } /** * @param jobId anction_id * @param users 用户域账号id * @param title * @param content * @throws Exception */ public abstract void alarm(String jobId, List<String> users,String title,String content) throws Exception; }