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(" 
","&nbsp;")+"</font>";
@@ -1942,11 +1955,25 @@
                 labelString = "<font size = 2>"+label.replaceAll(" ","&nbsp;") 
+"&nbsp;(</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(" ","&nbsp;")+"</font><font size = 2 
>/</font><font size = 2 color="+v2.barColor+">"+v2.data.replaceAll(" ","&nbsp;")+ 
"</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")+">&nbsp;</TD><TD ROWSPAN = 
"+(v2==null?"2":"3")+">[History&nbsp;graph&nbsp;here]</TD></TR>");
+            pw.println("<TD ROWSPAN = "+(v2==null?"2":"3")+">&nbsp;</TD><TD ROWSPAN = 
"+(v2==null?"2":"3")+">[History&nbsp;graph&nbsp;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(" ", "&nbsp;") + 
"</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

Reply via email to