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