Author: toad
Date: 2008-09-02 16:32:09 +0000 (Tue, 02 Sep 2008)
New Revision: 22353

Modified:
   trunk/freenet/src/freenet/node/simulator/SeednodePingTest.java
Log:
Record success/failure of connection with the time for each node in a file 
dedicated to that node.
Show the track record of the nodes, indicate if one has been failing for a week.
Shut down the node properly.


Modified: trunk/freenet/src/freenet/node/simulator/SeednodePingTest.java
===================================================================
--- trunk/freenet/src/freenet/node/simulator/SeednodePingTest.java      
2008-09-02 16:19:02 UTC (rev 22352)
+++ trunk/freenet/src/freenet/node/simulator/SeednodePingTest.java      
2008-09-02 16:32:09 UTC (rev 22353)
@@ -22,8 +22,14 @@
 import freenet.support.LoggerHook.InvalidThresholdException;
 import freenet.support.SimpleFieldSet;
 import freenet.support.TimeUtil;
+
+import java.io.BufferedReader;
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
 import java.util.EnumMap;
 import java.util.Map;
 import java.util.Vector;
@@ -33,7 +39,12 @@
  */
 public class SeednodePingTest extends RealNodeTest {

+       static File STATUS_DIR = new 
File("/var/www/freenet/tests/seednodes/status/");
+       static final long COUNT_SUCCESSES_PERIOD = 7*24*60*60*1000; // 1 week
+
     public static void main(String[] args) throws FSParseException, 
IOException, OpennetDisabledException, PeerParseException, 
InterruptedException, ReferenceSignatureVerificationException, 
NodeInitException, InvalidThresholdException {
+       if(args.length == 1)
+               STATUS_DIR = new File(args[0]);
         RandomSource random = NodeStarter.globalTestInit("seednode-pingtest", 
false, Logger.ERROR, "");
         // Create one node
         Executor executor = new PooledExecutor();
@@ -106,7 +117,67 @@
                System.out.println("################## 
("+node.peers.countConnectedPeers()+") 
"+countConnectedSeednodes+'/'+node.peers.countSeednodes());
                Thread.sleep(5000);
        }
+       Map<FATE, Integer> totals = new 
EnumMap(SeedServerTestPeerNode.FATE.class);
+       for(SeedServerTestPeerNode seednode : seedNodes) {
+               FATE fate = seednode.getFate();
+               Integer x = totals.get(fate);
+               if(x == null)
+                       totals.put(fate, 1);
+               else
+                       totals.put(fate, x+1);
+               System.out.println(seednode.getIdentityString() + " : "+fate+ " 
: "+seednode.getPeerNodeStatusString());
+       }
+       System.out.println("RESULT:TOTALS:");
+       for(FATE fate : totals.keySet()) {
+               System.out.println("RESULT:"+fate + " : "+totals.get(fate));
+       }
     System.out.println("Completed seednodes scan.");
+    // Record statuses.
+    System.out.println("FINAL STATUS:");
+    long writeTime = System.currentTimeMillis();
+    for(SeedServerTestPeerNode peer : seedNodes) {
+       String status = writeTime+" : "+peer.getIdentityString()+" : 
"+peer.getFate();
+       System.out.println(status);
+       File logFile = new File(STATUS_DIR, peer.getIdentityString());
+       FileOutputStream fos = new FileOutputStream(logFile, true);
+       OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
+       osw.write(status+"\n");
+       osw.close();
+       FileInputStream fis = new FileInputStream(logFile);
+       InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
+       BufferedReader br = new BufferedReader(isr);
+       String line;
+       int successes = 0;
+       int failures = 0;
+       long lastSuccess = 0;
+       long firstSample = 0;
+       long countSince = writeTime - COUNT_SUCCESSES_PERIOD;
+       do {
+               line = br.readLine();
+               if(line == null) break;
+               String[] results = line.split(" : ");
+               if(results.length != 3) {
+                       System.err.println("Unable to parse line in "+logFile+" 
: wrong number of fields : "+results.length+" : "+line);
+                       continue;
+               }
+               long time = Long.parseLong(results[0]);
+               FATE fate = FATE.valueOf(results[2]);
+               if(firstSample == 0) firstSample = time;
+               if(fate == FATE.CONNECTED_SUCCESS) {
+                       if(time >= countSince)
+                               successes++;
+                       lastSuccess = time;
+               } else {
+                       if(time >= countSince)
+                               failures++;
+               }
+       } while(line != null);
+       br.close();
+       if(firstSample < countSince && successes == 0)
+               System.err.println("RESULT:"+peer.getIdentityString()+" NOT 
CONNECTED IN LAST WEEK! LAST CONNECTED: "+(lastSuccess > 0 ? 
TimeUtil.formatTime(writeTime - lastSuccess) : "NEVER"));
+       System.out.println(peer.getIdentityString()+" : last success 
"+(lastSuccess > 0 ? TimeUtil.formatTime(writeTime - lastSuccess) : "NEVER")+" 
failures in last week: "+failures+" successes in last week: "+successes);
+    }
+    node.park();
     System.exit(0);
     }
 }


Reply via email to