package com.alimama.web; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import com.alipay.bluewhale.core.cluster.StormClusterState; import com.alipay.bluewhale.core.daemon.NodePort; import com.alipay.bluewhale.core.task.common.Assignment; import com.alimama.mdrill.partion.GetShards; public class Topology { public static String[] active_storms() throws Exception { StormClusterState stat=GetShards.getCluster(); List<String> list=stat.active_storms(); String[] rtn=new String[list.size()]; return list.toArray(rtn); } public static String[] heartbeat_storms() throws Exception { StormClusterState stat=GetShards.getCluster(); List<String> list=stat.heartbeat_storms(); String[] rtn=new String[list.size()]; return list.toArray(rtn); } public static List<String> getStatus(String stormId) throws Exception { StormClusterState stat=GetShards.getCluster(); Assignment ass=stat.assignment_info(stormId, null); Map<String, String> nodeHost=(ass==null)?(new HashMap<String, String>()):ass.getNodeHost(); Map<Integer, Integer> taskStartTimeSecs=(ass==null)?(new HashMap<Integer, Integer>()):ass.getTaskStartTimeSecs(); Map<Integer, NodePort> taskToNodeport=(ass==null)?(new HashMap<Integer, NodePort>()):ass.getTaskToNodeport(); List<String> rtn=new ArrayList<String>(); List<Integer> taskids=stat.task_ids(stormId); for(Integer tid:taskids) { try{ TaskInfoContainer con=new TaskInfoContainer(); con.setStarttime(taskStartTimeSecs.get(tid)); NodePort np=taskToNodeport.get(tid); con.setNp(np); if(np!=null) { con.setHostname(nodeHost.get(np.getNode())); }else{ con.setHostname("nohost"); } con.setTaskId(tid); con.setTaskInfo(stat.task_info(stormId, tid)); con.setHb(stat.task_heartbeat(stormId, tid)); con.setTaskerrors(stat.task_errors(stormId, tid)); StringBuffer buff=new StringBuffer(); buff.append("getComponentId:"+ con.getTaskInfo().getComponentId()+"<br>\r\n"); buff.append("任务:"+ String.format("%03d",con.getTaskId())+"<br>\r\n"); buff.append("机器域名:"+con.getHostname()+"<br>\r\n"); buff.append("nodeport:"+con.getNp()+"<br>\r\n"); SimpleDateFormat fmt=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); if(con.getStarttime()!=null) { String yyyymmmddd=fmt.format(new Date(1000l*con.getStarttime())); buff.append("启动时间:"+yyyymmmddd+"<br>\r\n"); } buff.append("心跳信息:"+con.getHb()+"<br>\r\n"); buff.append("task异常信息:"+con.getTaskerrors()+"<br>\r\n"); rtn.add(buff.toString()); }catch(Throwable e){ } } Collections.sort(rtn); return rtn; } }