package fm.liu.timo.manager.response;
import java.util.ArrayList;
import java.util.Collection;
import fm.liu.timo.TimoServer;
import fm.liu.timo.manager.handler.ShowHandler;
import fm.liu.timo.manager.response.ResponseUtil.Head;
import fm.liu.timo.net.NIOProcessor;
import fm.liu.timo.net.connection.FrontendConnection;
import fm.liu.timo.util.TimeUtil;
/**
* @author liuhuanting
*/
public class ShowConnection extends ShowHandler {
private static final ArrayList<Head> heads = new ArrayList<>();
static {
heads.add(new Head("processor"));
heads.add(new Head("id"));
heads.add(new Head("host"));
heads.add(new Head("dest_port"));
heads.add(new Head("db", "database"));
heads.add(new Head("charset"));
heads.add(new Head("up_time", "uptime(s)"));
heads.add(new Head("received", "received bytes"));
heads.add(new Head("sent", "sent bytes"));
}
@Override
public String getInfo() {
return "show the status of current connections";
}
@Override
public ArrayList<Head> getHeads() {
return heads;
}
@Override
public ArrayList<Object[]> getRows() {
ArrayList<Object[]> rows = new ArrayList<>();
NIOProcessor[] processors = TimoServer.getInstance().getProcessors();
for (NIOProcessor processor : processors) {
Collection<FrontendConnection> frontends = processor.getFrontends().values();
for (FrontendConnection frontend : frontends) {
Object[] row = new Object[heads.size()];
int i = 0;
row[i++] = processor.getName();
row[i++] = frontend.getID();
row[i++] = frontend.getHost() + ":" + frontend.getLocalPort();
row[i++] = frontend.getPort();
row[i++] = frontend.getDB();
row[i++] = frontend.getCharset();
row[i++] =
(TimeUtil.currentTimeMillis() - frontend.getVariables().getUpTime()) / 1000;
row[i++] = frontend.getReadBuffer().capacity();
row[i++] = frontend.getWriteQueue().size();
rows.add(row);
}
}
return rows;
}
}