📄 httpdebug.java
字号:
listServers(cmd.substring(CMD_SERVERS.length()), buf); if (cmd.substring(CMD_SERVERS.length()).startsWith(CMD_STOP)) { AgentServer.stop(false); } } else if (cmd.startsWith(CMD_MSG_CONS)) { // a list of consumers has been requested listConsumers(cmd.substring(CMD_MSG_CONS.length()), buf); } else if (cmd.startsWith(CMD_SERVICES)) { // a list of services has been requested listServices(cmd.substring(CMD_SERVICES.length()), buf); } else if (cmd.startsWith(CMD_DUMP_AGENT)) { // a dump command has been requested dumpAgent(cmd.substring(CMD_DUMP_AGENT.length()), buf); } } else if (cmd.equals(CMD_DEBUG_WAIT)) { header("A3 AgentServer #" + AgentServer.getServerId()); writer.println("<H2>Debug Waiting</H2>"); } else if (cmd.equals(CMD_DEBUG_RUN)) { header("A3 AgentServer #" + AgentServer.getServerId()); writer.println("<H2>Debug Running</H2>"); } else if (cmd.startsWith(CMD_DEBUG)) { // a debug tool has been requested header("A3 AgentServer #" + AgentServer.getServerId() + " Debug Tool"); debug(cmd.substring(CMD_DEBUG.length()), buf); } else if (cmd.startsWith(CMD_CLASS)) { loadClass(cmd.substring(CMD_CLASS.length())); } else if (cmd.startsWith(CMD_THREADS)) { // a list of threads has been requested header("A3 AgentServer #" + AgentServer.getServerId()); menu(); listThread(cmd.substring(CMD_THREADS.length()), buf); } else { unknown(cmd); } writer.println(buf.toString()); } catch (Exception exc) { error(exc); } footer(); } } catch(IOException exc) { logmon.log(BasicLevel.WARN, getName() + ", error in \"" + cmd + "\"", exc); } finally { } } /** * List all active threads in current ThreadGroup */ void listThread(String cmd, StringBuffer buf) { String group = null; if ((cmd.length() > 1) && (cmd.charAt(0) == '/')) group = cmd.substring(1); ThreadGroup tg = Thread.currentThread().getThreadGroup(); while (tg.getParent() != null) tg = tg.getParent(); int nbt = tg.activeCount(); Thread[] tab = new Thread[nbt]; nbt = tg.enumerate(tab); buf.append("<H2>List of threads</H2>\n"); buf.append("<TABLE BORDER=1 CELLSPACING=0 CELLPADDING=0 WIDTH=\"100%\">\n"); for (int j=0; j<nbt; j++) { if (tab[j] == null) continue; if ((group != null) && ! tab[j].getThreadGroup().getName().equals(group)) continue; buf.append("<TR><TD CLASS=FONT2><PRE>\n"); buf.append("name=").append(tab[j].getName()).append("\n") .append("group=").append(tab[j].getThreadGroup().getName()).append("\n") .append("isAlive=").append(tab[j].isAlive()).append("\n") .append("isDaemon=").append(tab[j].isDaemon()).append("\n"); buf.append("</PRE></TD></TR>\n"); buf.append(""); } buf.append("</TABLE>"); return; } /** * List all agents deployed on the current server */ void listAgents(StringBuffer buf) { buf.append("<H2>List of agents</H2>\n"); buf.append("<PRE>\n"); buf.append("now=" + AgentServer.engine.now + "\n"); buf.append("NumberAgents=" + AgentServer.engine.agents.size() + "\n"); buf.append("NbMaxAgents=" + AgentServer.engine.NbMaxAgents + "\n"); buf.append("</PRE>\n"); buf.append("<TABLE BORDER=1 CELLSPACING=0 CELLPADDING=0 WIDTH=\"100%\">\n"); AgentId list[] = AgentServer.engine.getLoadedAgentIdlist(); for (int i=0; i<list.length; i++) { Agent agent = (Agent) AgentServer.engine.agents.get(list[i]); buf.append("<TR>\n"); buf.append("<TD CLASS=FONT1 WIDTH=\"20%\"><CENTER>\n"); if (agent != null) { buf.append(urlAgent(list[i]) + "\n"); } else { buf.append(list[i] + "\n"); } buf.append("</CENTER></TD>\n"); buf.append("<TD WIDTH=\"80%\"><PRE>\n"); if (agent != null) { buf.append("name=" + agent.name + "\n\n"); buf.append("\tclass=" + agent.getClass().getName() + "\n\n"); buf.append("fixed=" + agent.fixed + "\n"); buf.append("last=" + agent.last + "\n"); } buf.append("</PRE></TD>\n"); buf.append("</TR>\n"); } buf.append("</TABLE>"); return; } String urlServer(short serverId) { if (serverId == AgentServer.getServerId()) return base; try { ServerDesc desc = AgentServer.getServerDesc(serverId); int port = Integer.parseInt( AgentServer.getServiceArgs(desc.sid, "fr.dyade.aaa.agent.HttpDebug")); if (desc.getHostname().equals("localhost")) return new String("http://" + InetAddress.getLocalHost().getHostName() + ":" + port); else return new String("http://" + desc.getHostname() + ":" + port); } catch (Exception exc) {} return null; } String urlAgent(AgentId id) { String url = urlServer(id.getTo()); if (url == null) return id.toString(); return new String("<A href=\"" + urlServer(id.getTo()) + CMD_DUMP_AGENT + "/" + id.toString().substring(1) + "\">" + id + "</A>"); } /** * List all servers. */ void listServers(String cmd, StringBuffer buf) { buf.append("<H2>List of servers</H2>\n"); buf.append("<TABLE BORDER=1 CELLSPACING=0 CELLPADDING=0 WIDTH=\"100%\">\n"); for (short i=0; i<AgentServer.getServerNb(); i++ ) { int port = -1; ServerDesc desc = null; try { desc = (ServerDesc) AgentServer.getServerDesc(i); } catch (Exception exc) { desc = null; } if (desc == null) continue; buf.append("<TR>\n"); buf.append("<TD CLASS=FONT1 WIDTH=\"20%\" VALIGN=TOP>\n"); String url = urlServer(desc.sid); if ((url != null) && (i == AgentServer.getServerId()) && (cmd.startsWith(CMD_STOP))) { // The server will be stopped, prevent all new request. url = null; } if (url != null) { buf.append("<A href=\"" + url + CMD_SERVERS + "\">Server #" + desc.sid + "</A>\n"); buf.append("<BLOCKQUOTE><FONT CLASS=FONT3>\n"); buf.append("<P><A href=\"" + url + CMD_AGENTS + "\">Agents</A>\n"); buf.append("<P><A href=\"" + url + CMD_MSG_CONS + "\">Messages Consumers</A>\n"); buf.append("<P><A href=\"" + url + CMD_SERVICES + "\">Services</A>\n"); buf.append("</FONT></BLOCKQUOTE>\n"); } else { buf.append("Server #" + desc.sid + "\n"); } buf.append("</TD>\n" + "<TD WIDTH=\"80%\" VALIGN=TOP>\n"); if (url != null) { buf.append("<BLOCKQUOTE><FORM ACTION=\"" + url + CMD_SERVERS + CMD_STOP + "\" METHOD=\"GET\">\n" + "<INPUT TYPE=\"submit\" VALUE=\"STOP\" NAME=\"A\">\n" + "</FORM></BLOCKQUOTE>\n"); } buf.append("<PRE><CODE>\n" + "name=" + desc.name + "\n");// buf.append("isTransient=" + desc.isTransient + "\n"); if (desc.gateway == desc.sid) { buf.append("domain=<A href=\"" + base + CMD_MSG_CONS + "/" + desc.domain.getName() + "\">" + desc.domain.getName() + "</A>\n"); buf.append("hostname=" + desc.getHostname() + "\n"); buf.append("port=" + desc.getPort() + "\n"); if (desc.active) { buf.append("active=" + desc.active + "\n"); } else { buf.append("last=" + desc.last + "\n"); buf.append("retry=" + desc.retry); } } else { buf.append("gateway=#" + desc.gateway + "\n"); } buf.append("</CODE></PRE></TD>\n"); buf.append("</TR>\n"); } buf.append("</TABLE>"); return; }// int getArg(String cmd) {// if (cmd.charAt(0) != '+')// return -1;// int i = 1;// for (; i < cmd.length();i += 1) {// if ((cmd.charAt(i) < '0') || (cmd.charAt(i) > '9'))// break;// }// try {// if (i > 1)// return Integer.parseInt(cmd.substring(1, i));// } catch (Exception exc) {// // Can never happened// }// return -1;// } /** * */ void listConsumers(String cmd, StringBuffer buf) { String msgConsId = null; int sub = -1; if (cmd.startsWith(CMD_QUEUE)) { sub = 0; msgConsId = cmd.substring(CMD_QUEUE.length() +1); } else if (cmd.startsWith(CMD_START)) { sub = 1; msgConsId = cmd.substring(CMD_START.length() +1); } else if (cmd.startsWith(CMD_STOP)) { sub = 2; msgConsId = cmd.substring(CMD_STOP.length() +1); } buf.append("<H2>List of messages consumers</H2>\n"); buf.append("<TABLE BORDER=\"1\" CELLSPACING=\"0\" CELLPADDING=\"0\" WIDTH=\"100%\">\n"); for (Enumeration c=AgentServer.getConsumers(); c.hasMoreElements(); ) { MessageConsumer cons = (MessageConsumer) c.nextElement(); buf.append("<TR>\n" + "<TD CLASS=FONT1 VALIGN=\"TOP\" WIDTH=\"20%\">\n" + "<CENTER>").append(cons.getName()).append("</CENTER>\n"); buf.append("</TD>\n"); buf.append("<TD WIDTH=\"80%\">"); buf.append("<TABLE BORDER=\"1\" WIDTH=\"100%\"><TR><TD COLSPAN=\"3\">"); if (msgConsId.equals(cons.getName())) { if (sub == 1) { try { cons.start(); } catch (Exception exc) { buf.append("<TR><TD COLSPAN=\"3\"><PRE WIDTH=\"80\">"); buf.append(exc.toString()).append(" during starting.\n"); buf.append("</PRE></TD></TR>"); } } else if (sub == 2) { cons.stop(); } } buf.append(cons.getClass().getName()); if (cons.isRunning()) { buf.append(" is running."); } else { buf.append(" is stopped."); } buf.append("</TD></TR><TR>"); buf.append("<TD CLASS=FONT1 ALIGN=\"CENTER\" BGCOLOR=\"#3366FF\"><A href=\"") .append(base).append(CMD_MSG_CONS) .append(CMD_STOP + "+").append(cons.getName()) .append("\">STOP</A>\n") .append("</TD>"); buf.append("<TD CLASS=FONT1 ALIGN=\"CENTER\" BGCOLOR=\"#3366FF\"><A href=\"") .append(base).append(CMD_MSG_CONS) .append(CMD_START + "+").append(cons.getName()) .append("\">START</A>\n") .append("</TD>"); buf.append("<TD CLASS=FONT1 ALIGN=\"CENTER\" BGCOLOR=\"#3366FF\"><A href=\"") .append(base).append(CMD_MSG_CONS) .append(CMD_QUEUE + "+").append(cons.getName()) .append("\">QUEUE</A>\n") .append("</TD>"); buf.append("</TR><TR><TD COLSPAN=\"3\">"); buf.append("<PRE WIDTH=\"80\">\n"); buf.append(cons.toString()); buf.append("</PRE>"); buf.append("</TD></TR>"); if ((msgConsId.equals(cons.getName())) && (sub == 0) && (cons.getQueue().size() > 0)) { buf.append("<TR><TD COLSPAN=\"3\"><PRE WIDTH=\"80\">"); dumpQueue(buf, cons.getQueue().toString().toCharArray()); buf.append("</PRE></TD></TR>"); } buf.append("</TABLE>"); buf.append("</TD>"); buf.append("</TR>\n"); } buf.append("</TABLE>"); return; } void dumpQueue(StringBuffer buf, char dump[]) { int j; AgentId id; try { int idx = 0; if (dump[idx++] != '(') throw new IllegalArgumentException(); while (true) { try { if (dump[idx++] != '(') throw new IllegalArgumentException(); // get "from=" while (dump[idx] != '=') buf.append(dump[idx++]); buf.append(dump[idx++]); // Get AgentId if (dump[idx] != '#') throw new IllegalArgumentException(); id = null; j = dumpAgentId(dump, idx); if (j != -1) id = AgentId.fromString(new String(dump, idx, j-idx)); if (id == null) throw new IllegalArgumentException(); // The rigth URL buf.append(urlAgent(id)); idx = j; // get ",to=" while (dump[idx] != '=') buf.append(dump[idx++]); buf.append(dump[idx++]); // Get AgentId if (dump[idx] != '#') throw new IllegalArgumentException(); id = null; j = dumpAgentId(dump, idx); if (j != -1) id = AgentId.fromString(new String(dump, idx, j-idx)); if (id == null) throw new IllegalArgumentException(); // The rigth URL buf.append(urlAgent(id)); idx = j; // get ",not=" if (dump[idx] == ',') buf.append('\n'); else throw new IllegalArgumentException(); idx++; while (dump[idx] != '=') buf.append(dump[idx++]); buf.append(dump[idx++]); // Copy notification with AgentId transformation if (dump[idx++] != '[') throw new IllegalArgumentException(); while (dump[idx] != ']') { if (dump[idx] == '#') { id = null; j = dumpAgentId(dump, idx); if (j != -1) id = AgentId.fromString(new String(dump, idx, j-idx)); if (id != null) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -