Update of /cvsroot/freenet/freenet/src/freenet
In directory sc8-pr-cvs1:/tmp/cvs-serv28797/src/freenet
Modified Files:
OpenConnectionManager.java
Log Message:
Initial version of routing table graphs on the OCM PeerMode page.
Index: OpenConnectionManager.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/OpenConnectionManager.java,v
retrieving revision 1.151
retrieving revision 1.152
diff -u -w -r1.151 -r1.152
--- OpenConnectionManager.java 30 Oct 2003 01:34:00 -0000 1.151
+++ OpenConnectionManager.java 30 Oct 2003 03:21:51 -0000 1.152
@@ -1,5 +1,6 @@
/* -*- Mode: java; c-basic-indent: 4; tab-width: 4 -*- */
package freenet;
+
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
@@ -14,15 +15,23 @@
import java.util.List;
import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
import freenet.node.Main;
import freenet.node.Node;
import freenet.node.NodeReference;
+import freenet.node.rt.NGRoutingTable;
+import freenet.node.rt.RoutingTable;
+import freenet.node.rt.TimeEstimator;
import freenet.session.Link;
import freenet.session.LinkManager;
import freenet.support.LRUQueue;
import freenet.support.Logger;
import freenet.support.MultiValueTable;
+import freenet.support.graph.Bitmap;
+import freenet.support.graph.BitmapEncoder;
+import freenet.support.graph.Color;
+import freenet.support.graph.DibEncoder;
import freenet.support.io.NIOInputStream;
import freenet.thread.ThreadFactory;
import freenet.transport.tcpConnection;
@@ -1301,6 +1310,10 @@
renderOverview(pw,req);
doRenderBody(pw,req);
}
+ public boolean renderFile(String file, HttpServletRequest req,
HttpServletResponse resp) throws IOException
+ {
+ return false;
+ }
protected abstract void doRenderBody(PrintWriter pw, HttpServletRequest req);
protected void renderLeftHeader(PrintWriter pw, HttpServletRequest req)
{
@@ -1851,7 +1864,7 @@
v1 = new
Value("out",sendQueue,"7810D0",calculateBarLength(p.sendQueue,normalizeTo.sendQueue,normalizeTo.receiveQueue));
v2 = new
Value("in",receiveQueue,"252597",calculateBarLength(0,normalizeTo.sendQueue,normalizeTo.sendQueue));
}
- renderPeerHandlerCell(pw,req,"Data queued",v1,v2);
+ renderPeerHandlerCell(pw,req,"Data
queued",v1,v2,inRoutingTable?p.identity:null);
//Data Transfered
@@ -1864,7 +1877,7 @@
v1 = new
Value("sent",dataSent,"7810D0",calculateBarLength(p.dataSent,normalizeTo.dataSent,normalizeTo.dataReceived));
v2 = new
Value("received",dataReceived,"252597",calculateBarLength(p.dataReceived,normalizeTo.dataReceived,normalizeTo.dataSent));
}
- renderPeerHandlerCell(pw,req,"Data transfered",v1,v2);
+ renderPeerHandlerCell(pw,req,"Data transfered",v1,v2,null);
//MessageQueue
if(viewLevel ==0){
@@ -1874,7 +1887,7 @@
v1 = new
Value("small",String.valueOf(p.nonTrailerMessagesQueued),"7810D0",calculateBarLength(p.nonTrailerMessagesQueued,normalizeTo.nonTrailerMessagesQueued,normalizeTo.trailerMessagesQueued));
v2 = new
Value("large",String.valueOf(p.trailerMessagesQueued),"252597",calculateBarLength(p.trailerMessagesQueued,normalizeTo.trailerMessagesQueued,normalizeTo.nonTrailerMessagesQueued));
}
- renderPeerHandlerCell(pw,req,"Messages queued",v1,v2);
+ renderPeerHandlerCell(pw,req,"Messages queued",v1,v2,null);
//Messages transfered
if(viewLevel < 2){
@@ -1885,14 +1898,14 @@
v1 = new
Value("sent",String.valueOf(p.messagesSent),"7810D0",calculateBarLength(p.messagesSent,normalizeTo.messagesSent,normalizeTo.messagesReceived));
v2 = new
Value("received",String.valueOf(p.messagesReceived),"252597",calculateBarLength(p.messagesReceived,normalizeTo.messagesReceived,normalizeTo.messagesSent));
}
- renderPeerHandlerCell(pw,req,"Messages handled",v1,v2);
+ renderPeerHandlerCell(pw,req,"Messages handled",v1,v2,null);
}else{
v1 = new
Value("sucesses",String.valueOf(p.messagesSent),"7810D0",calculateBarLength(p.messagesSent,normalizeTo.messagesSent,normalizeTo.messagesSendFailed));
v2 = new
Value("failures",String.valueOf(p.messagesSendFailed),"252597",calculateBarLength(p.messagesSendFailed,normalizeTo.messagesSendFailed,normalizeTo.messagesSent));
- renderPeerHandlerCell(pw,req,"Messages sent",v1,v2);
+ renderPeerHandlerCell(pw,req,"Messages sent",v1,v2,null);
v1 = new
Value("sucesses",String.valueOf(p.messagesReceived),"7810D0",calculateBarLength(p.messagesReceived,normalizeTo.messagesReceived,normalizeTo.messagesReceiveFailed));
v2 = new
Value("failures",String.valueOf(p.messagesReceiveFailed),"252597",calculateBarLength(p.messagesReceiveFailed,normalizeTo.messagesReceiveFailed,normalizeTo.messagesReceived));
- renderPeerHandlerCell(pw,req,"Messages received",v1,v2);
+ renderPeerHandlerCell(pw,req,"Messages received",v1,v2,null);
}
@@ -1904,7 +1917,7 @@
//Idle time
v1 = new
Value("idle",timeFromMillis(p.idleTime,true,true),"7810D0",calculateBarLength(p.idleTime,normalizeTo.idleTime,normalizeTo.lifeTime));
v2 = new
Value("life",timeFromMillis(p.lifeTime,true,true),"252597",calculateBarLength(p.lifeTime,normalizeTo.lifeTime,normalizeTo.idleTime));
- renderPeerHandlerCell(pw,req,"Time",v1,v2);
+ renderPeerHandlerCell(pw,req,"Time",v1,v2,null);
//Open Connections
if (viewLevel == 0) {
@@ -1914,7 +1927,7 @@
v1 = new
Value("out",String.valueOf(p.outboundConnectionsCount),"7810D0",calculateBarLength(p.outboundConnectionsCount,normalizeTo.outboundConnectionsCount,normalizeTo.inboundConnectionsCount));
v2 = new
Value("in",String.valueOf(p.inboundConnectionsCount),"252597",calculateBarLength(p.inboundConnectionsCount,normalizeTo.inboundConnectionsCount,normalizeTo.outboundConnectionsCount));
}
- renderPeerHandlerCell(pw,req,"Open connections",v1,v2);
+ renderPeerHandlerCell(pw,req,"Open connections",v1,v2,null);
//Connection Attempts
if(viewLevel == 1)
@@ -1922,7 +1935,7 @@
else if (viewLevel > 1) {
v1 = new
Value("total",String.valueOf(p.connectionAttempts),"7810D0",calculateBarLength(p.connectionAttempts,normalizeTo.connectionAttempts,normalizeTo.connectionSuccesses));
v2 = new
Value("successes",String.valueOf(p.connectionSuccesses),"252597",calculateBarLength(p.connectionSuccesses,normalizeTo.connectionSuccesses,normalizeTo.inboundConnectionsCount));
- renderPeerHandlerCell(pw,req,"Connection attempts",v1,v2);
+ renderPeerHandlerCell(pw,req,"Connection attempts",v1,v2,null);
}
pw.println("</TABLE></TD></TR></TABLE>");
@@ -1930,10 +1943,10 @@
}
protected void renderPeerHandlerCell(PrintWriter pw, HttpServletRequest req,
String label,String data,String barColor, long barLength) {
- renderPeerHandlerCell(pw,req,label,new
Value(null,data,barColor,barLength),null);
+ renderPeerHandlerCell(pw,req,label,new
Value(null,data,barColor,barLength),null,null);
}
- protected void renderPeerHandlerCell(PrintWriter pw, HttpServletRequest req,
String label, Value v1, Value v2) {
+ protected void renderPeerHandlerCell(PrintWriter pw, HttpServletRequest req,
String label, Value v1, Value v2,Identity id) {
String labelString,dataString;
if(v2 == null){
labelString = "<font size = 2>"+label.replaceAll("
"," ")+"</font>";
@@ -1942,11 +1955,25 @@
labelString = "<font size = 2>"+label.replaceAll(" "," ")
+" (</FONT><font size = 2 color="+v1.barColor+">"+v1.subLabel+"</font><font size
= 2 >/</font><font size = 2 color="+v2.barColor+">"+v2.subLabel+ "</font><font size =
2>)</font>";
dataString = "<font size = 2
color="+v1.barColor+">"+v1.data.replaceAll(" "," ")+"</font><font size = 2
>/</font><font size = 2 color="+v2.barColor+">"+v2.data.replaceAll(" "," ")+
"</font>";
}
+ int rtGraphRowSpan=3*6;
+ if(viewLevel == 0)
+ rtGraphRowSpan = 3*6;
+ else if(viewLevel == 1)
+ rtGraphRowSpan = 3*7;
+ else if(viewLevel == 2)
+ rtGraphRowSpan = 3*8;
+ String rtGraphString;
+ if(id != null)
+ rtGraphString = "<TD ROWSPAN ="+rtGraphRowSpan+"><IMG
height = 240 width=180
SRC='"+req.getRequestURI()+"/all?identity="+((DSAIdentity)id).getYAsHexString()+"'></IMG></TD>";
+ else
+ rtGraphString = "";
pw.println("<TR><TD>"+labelString+"</TD><TD>" + dataString+ "</TD>");
- pw.println("<TD ROWSPAN = "+(v2==null?"2":"3")+"> </TD><TD ROWSPAN =
"+(v2==null?"2":"3")+">[History graph here]</TD></TR>");
+ pw.println("<TD ROWSPAN = "+(v2==null?"2":"3")+"> </TD><TD ROWSPAN =
"+(v2==null?"2":"3")+">[History graph here]</TD>"+rtGraphString+"</TR>");
pw.println("<TR height = 3px><TD COLSPAN=2><IMG height = 4
width="+v1.barLength+"
SRC='/servlet/coloredpixel?color="+v1.barColor+"'></IMG></TD></TR>");
if(v2 != null)
pw.println("<TR height = 3px><TD COLSPAN=2><IMG height = 4
width="+v2.barLength+"
SRC='/servlet/coloredpixel?color="+v2.barColor+"'></IMG></TD></TR>");
+ else
+ pw.println("<TR height = 0px><TD
COLSPAN=2></TD></TR>");
}
protected void renderRightHeader(PrintWriter pw, HttpServletRequest req)
{
@@ -2012,7 +2039,91 @@
return "<TR><TD><A HREF='" + scriptName + "?setSorting=" + (iSortingMode
== clickSortingMode ? ("-" + clickSortingMode) : new
Long(clickSortingMode).toString()) + "'>" + (Math.abs(iSortingMode) ==
clickSortingMode ? sImgClause : "") + " " + label.replaceAll(" ", " ") +
"</A></TD></TR>";
}
+ private boolean sendPeerRoutingGraph(String graph,HttpServletRequest
req, HttpServletResponse resp) throws IOException {
+ String id = req.getParameter("identity");
+ if(id == null)
+ {
+ resp.sendError(404, "No identity specified");
+ return true;
+ }
+ DSAIdentity i = null;
+ try {
+ i = new DSAIdentity(freenet.crypt.Global.DSAgroupC,id);
+ } catch (Throwable t) {
+ Core.logger.log(this, "Caught exception creating
Identity from "+id,t, Logger.NORMAL);
+ resp.sendError(404, "Invalid identity specified");
+ return true;
+ }
+ // FIXME: if nodes generate their own groups, this will need
to be revised... group would be humongous, so maybe we could use fingerprint
+ RoutingTable rt = Main.origRT;
+ if (!(rt instanceof NGRoutingTable)) {
+ resp.sendError(404, "Not an NGRoutingTable");
+ return true;
+ }
+ NGRoutingTable ngrt = (NGRoutingTable) rt;
+
+ int width = 240;
+ String pwidth = req.getParameter("width");
+ if (pwidth != null) {
+ try {
+ width = Integer.parseInt(pwidth);
+ } catch (NumberFormatException ex) {}
+ }
+
+ int height = 180;
+ String pheight = req.getParameter("height");
+ if (pheight != null) {
+ try {
+ height = Integer.parseInt(pheight);
+ } catch (NumberFormatException ex) {}
+ }
+
+ resp.setContentType("image/bmp");
+ Bitmap bmp = new Bitmap(width, height);
+ if (graph.equalsIgnoreCase("all")){
+ Hashtable colors = new Hashtable();
+ //TODO: Figure out how the heck to do this
drawing stuff better..
+ //we cannot really know the names graphs in
the subtype of the NodeEstimator..
+ //should we maybe have the NodeEstimator
itself draw the required HTML AND the graphs?
+ colors.put("tSuccessSearch", new
Color(255,0,0));
+ colors.put("tTransferRate", new
Color(255,255,0));
+ colors.put("pDNF", new Color(0,255,0));
+ colors.put("tDNF", new Color(0,0,255));
+
ngrt.getEstimator(i).getHTMLReportingTool().drapGraphOnImage(false,bmp,colors);
+ }else{
+ TimeEstimator e =ngrt.getEstimator(i, graph);
+ if(e == null) {
+ resp.sendError(404, "Invalid graph
'"+graph+"' specified");
+ return true;
+ }
+
e.getHTMLReportingTool().drapGraphOnImage(false,bmp,new Color(0,0,0),null);
+ }
+
+ BitmapEncoder enc = new DibEncoder();
+ enc.setBitmap(bmp);
+ enc.encode(resp.getOutputStream());
+ resp.getOutputStream().close();
+ return true;
+ }
+
+ public boolean renderFile(String file, HttpServletRequest req,
HttpServletResponse resp) throws IOException {
+ return sendPeerRoutingGraph(file,req,resp);
+ }
+
+ }
+
+ public boolean writeHtmlFile(String file, HttpServletRequest req,
HttpServletResponse resp) throws IOException {
+ if (req.getParameter("setMode") != null) //Check for modeswitch
+ if (req.getParameter("setMode").compareTo("Peer") == 0)
+ peerHandlerHTMLMode = true;
+ else
+ peerHandlerHTMLMode = false;
+
+ if (peerHandlerHTMLMode)
+ return peerHTMLRenderer.renderFile(file, req, resp);
+ else
+ return connectionsHTMLRenderer.renderFile(file, req, resp);
}
}
_______________________________________________
cvs mailing list
[EMAIL PROTECTED]
http://dodo.freenetproject.org/cgi-bin/mailman/listinfo/cvs