package fm.liu.timo.manager.response; import java.util.ArrayList; import java.util.Map; import fm.liu.timo.TimoServer; import fm.liu.timo.backend.Node; import fm.liu.timo.backend.Source; import fm.liu.timo.config.model.Datasource; import fm.liu.timo.heartbeat.Heartbeat; import fm.liu.timo.manager.handler.ShowHandler; import fm.liu.timo.manager.response.ResponseUtil.Head; import fm.liu.timo.util.FormatUtil; /** * @author liuhuanting */ public class ShowHeartbeat extends ShowHandler { private static final ArrayList<Head> heads = new ArrayList<Head>(); static { heads.add(new Head("node")); heads.add(new Head("source")); heads.add(new Head("source_type")); heads.add(new Head("host")); heads.add(new Head("db")); heads.add(new Head("retry")); heads.add(new Head("status")); heads.add(new Head("last_active_time")); heads.add(new Head("stoped")); } @Override public String getInfo() { return "show the status of heartbeat check"; } @Override public ArrayList<Head> getHeads() { return heads; } @Override public ArrayList<Object[]> getRows() { ArrayList<Object[]> rows = new ArrayList<>(); Map<Integer, Node> nodes = TimoServer.getInstance().getConfig().getNodes(); for (Node node : nodes.values()) { for (Source source : node.getSources()) { Datasource config = source.getConfig(); Heartbeat heartbeat = source.getHeartbeat(); Object[] row = new Object[heads.size()]; int i = 0; row[i++] = source.getDatanodeID(); row[i++] = config.getID(); row[i++] = config.getType(); row[i++] = config.getHost() + ":" + config.getPort(); row[i++] = config.getDB(); row[i++] = heartbeat.getErrorCount(); row[i++] = heartbeat.getStatus(); row[i++] = FormatUtil.formatTime(heartbeat.getLastActiveTime()); row[i++] = heartbeat.isStoped() ? "true" : "false"; rows.add(row); } } return rows; } }