[tor-commits] [onionoo/master] Add four fields to details documents for #6498.

karsten at torproject.org karsten at torproject.org
Wed Aug 1 08:11:51 UTC 2012


commit 5dfeedd8d7a65e3159133acbfff42e249042c864
Author: Karsten Loesing <karsten.loesing at gmx.net>
Date:   Wed Aug 1 10:09:55 2012 +0200

    Add four fields to details documents for #6498.
---
 src/org/torproject/onionoo/CurrentNodes.java     |   41 ++++++++++++++++-----
 src/org/torproject/onionoo/DetailDataWriter.java |   24 +++++++++++--
 src/org/torproject/onionoo/Node.java             |   13 ++++++-
 web/index.html                                   |   24 +++++++++++++
 4 files changed, 88 insertions(+), 14 deletions(-)

diff --git a/src/org/torproject/onionoo/CurrentNodes.java b/src/org/torproject/onionoo/CurrentNodes.java
index 7ef1473..a34cbb7 100644
--- a/src/org/torproject/onionoo/CurrentNodes.java
+++ b/src/org/torproject/onionoo/CurrentNodes.java
@@ -104,16 +104,27 @@ public class CurrentNodes {
             hostName = parts[11].equals("null") ? null : parts[11];
             lastRdnsLookup = Long.parseLong(parts[12]);
           }
+          String defaultPolicy = null, portList = null;
+          if (parts.length > 14) {
+            if (!parts[13].equals("null")) {
+              defaultPolicy = parts[13];
+            }
+            if (!parts[14].equals("null")) {
+              portList = parts[14];
+            }
+          }
           if (isRelay) {
             this.addRelay(nickname, fingerprint, address,
                 orAddressesAndPorts, exitAddresses,
                 publishedOrValidAfterMillis, orPort, dirPort, relayFlags,
-                consensusWeight, countryCode, hostName, lastRdnsLookup);
+                consensusWeight, countryCode, hostName, lastRdnsLookup,
+                defaultPolicy, portList);
           } else {
             this.addBridge(nickname, fingerprint, address,
                 orAddressesAndPorts, exitAddresses,
                 publishedOrValidAfterMillis, orPort, dirPort, relayFlags,
-                consensusWeight, countryCode, hostName, lastRdnsLookup);
+                consensusWeight, countryCode, hostName, lastRdnsLookup,
+                defaultPolicy, portList);
           }
         }
         br.close();
@@ -175,11 +186,16 @@ public class CurrentNodes {
         String hostName = entry.getHostName() != null
             ? entry.getHostName() : "null";
         long lastRdnsLookup = entry.getLastRdnsLookup();
+        String defaultPolicy = entry.getDefaultPolicy() != null
+            ? entry.getDefaultPolicy() : "null";
+        String portList = entry.getPortList() != null
+            ? entry.getPortList() : "null";
         bw.write("r " + nickname + " " + fingerprint + " "
             + addressesBuilder.toString() + " " + validAfter + " "
             + orPort + " " + dirPort + " " + relayFlags + " "
             + consensusWeight + " " + countryCode + " " + hostName + " "
-            + String.valueOf(lastRdnsLookup) + "\n");
+            + String.valueOf(lastRdnsLookup) + " " + defaultPolicy + " "
+            + portList + "\n");
       }
       for (Node entry : this.currentBridges.values()) {
         String nickname = entry.getNickname();
@@ -204,7 +220,8 @@ public class CurrentNodes {
         String relayFlags = sb.toString().substring(1);
         bw.write("b " + nickname + " " + fingerprint + " "
             + addressesBuilder.toString() + " " + published + " " + orPort
-            + " " + dirPort + " " + relayFlags + " -1 ?? null -1\n");
+            + " " + dirPort + " " + relayFlags + " -1 ?? null -1 null "
+            + "null\n");
       }
       bw.close();
     } catch (IOException e) {
@@ -268,9 +285,11 @@ public class CurrentNodes {
       int dirPort = entry.getDirPort();
       SortedSet<String> relayFlags = entry.getFlags();
       long consensusWeight = entry.getBandwidth();
+      String defaultPolicy = entry.getDefaultPolicy();
+      String portList = entry.getPortList();
       this.addRelay(nickname, fingerprint, address, orAddressesAndPorts,
           null, validAfterMillis, orPort, dirPort, relayFlags,
-          consensusWeight, null, null, -1L);
+          consensusWeight, null, null, -1L, defaultPolicy, portList);
     }
     if (this.lastValidAfterMillis == validAfterMillis) {
       this.lastBandwidthWeights = consensus.getBandwidthWeights();
@@ -281,7 +300,8 @@ public class CurrentNodes {
       String address, SortedSet<String> orAddressesAndPorts,
       SortedSet<String> exitAddresses, long validAfterMillis, int orPort,
       int dirPort, SortedSet<String> relayFlags, long consensusWeight,
-      String countryCode, String hostName, long lastRdnsLookup) {
+      String countryCode, String hostName, long lastRdnsLookup,
+      String defaultPolicy, String portList) {
     if (validAfterMillis >= cutoff &&
         (!this.currentRelays.containsKey(fingerprint) ||
         this.currentRelays.get(fingerprint).getLastSeenMillis() <
@@ -296,7 +316,7 @@ public class CurrentNodes {
       Node entry = new Node(nickname, fingerprint, address,
           orAddressesAndPorts, exitAddresses, validAfterMillis, orPort,
           dirPort, relayFlags, consensusWeight, countryCode, hostName,
-          lastRdnsLookup);
+          lastRdnsLookup, defaultPolicy, portList);
       this.currentRelays.put(fingerprint, entry);
       if (validAfterMillis > this.lastValidAfterMillis) {
         this.lastValidAfterMillis = validAfterMillis;
@@ -394,7 +414,7 @@ public class CurrentNodes {
       SortedSet<String> relayFlags = entry.getFlags();
       this.addBridge(nickname, fingerprint, address, orAddressesAndPorts,
           null, publishedMillis, orPort, dirPort, relayFlags, -1, "??",
-          null, -1L);
+          null, -1L, null, null);
     }
   }
 
@@ -402,7 +422,8 @@ public class CurrentNodes {
       String address, SortedSet<String> orAddressesAndPorts,
       SortedSet<String> exitAddresses, long publishedMillis, int orPort,
       int dirPort, SortedSet<String> relayFlags, long consensusWeight,
-      String countryCode, String hostname, long lastRdnsLookup) {
+      String countryCode, String hostname, long lastRdnsLookup,
+      String defaultPolicy, String portList) {
     if (publishedMillis >= cutoff &&
         (!this.currentBridges.containsKey(fingerprint) ||
         this.currentBridges.get(fingerprint).getLastSeenMillis() <
@@ -410,7 +431,7 @@ public class CurrentNodes {
       Node entry = new Node(nickname, fingerprint, address,
           orAddressesAndPorts, exitAddresses, publishedMillis, orPort,
           dirPort, relayFlags, consensusWeight, countryCode, hostname,
-          lastRdnsLookup);
+          lastRdnsLookup, defaultPolicy, portList);
       this.currentBridges.put(fingerprint, entry);
       if (publishedMillis > this.lastPublishedMillis) {
         this.lastPublishedMillis = publishedMillis;
diff --git a/src/org/torproject/onionoo/DetailDataWriter.java b/src/org/torproject/onionoo/DetailDataWriter.java
index 2961de9..43d1206 100644
--- a/src/org/torproject/onionoo/DetailDataWriter.java
+++ b/src/org/torproject/onionoo/DetailDataWriter.java
@@ -494,11 +494,16 @@ public class DetailDataWriter {
         String lastRestartedString = dateTimeFormat.format(
             descriptor.getPublishedMillis()
             - descriptor.getUptime() * 1000L);
-        int advertisedBandwidth = Math.min(descriptor.getBandwidthRate(),
-            Math.min(descriptor.getBandwidthBurst(),
-            descriptor.getBandwidthObserved()));
+        int bandwidthRate = descriptor.getBandwidthRate();
+        int bandwidthBurst = descriptor.getBandwidthBurst();
+        int observedBandwidth = descriptor.getBandwidthObserved();
+        int advertisedBandwidth = Math.min(bandwidthRate,
+            Math.min(bandwidthBurst, observedBandwidth));
         sb.append("\"desc_published\":\"" + publishedDateTime + "\",\n"
             + "\"last_restarted\":\"" + lastRestartedString + "\",\n"
+            + "\"bandwidth_rate\":" + bandwidthRate + ",\n"
+            + "\"bandwidth_burst\":" + bandwidthBurst + ",\n"
+            + "\"observed_bandwidth\":" + observedBandwidth + ",\n"
             + "\"advertised_bandwidth\":" + advertisedBandwidth + ",\n"
             + "\"exit_policy\":[");
         int written = 0;
@@ -560,6 +565,8 @@ public class DetailDataWriter {
       double guardProbability = entry.getGuardProbability();
       double middleProbability = entry.getMiddleProbability();
       double exitProbability = entry.getExitProbability();
+      String defaultPolicy = entry.getDefaultPolicy();
+      String portList = entry.getPortList();
       StringBuilder sb = new StringBuilder();
       sb.append("{\"version\":1,\n"
           + "\"nickname\":\"" + nickname + "\",\n"
@@ -638,6 +645,17 @@ public class DetailDataWriter {
         sb.append(String.format(",\n\"exit_probability\":%.9f",
             exitProbability));
       }
+      if (defaultPolicy != null && (defaultPolicy.equals("accept") ||
+          defaultPolicy.equals("reject")) && portList != null) {
+        sb.append(",\n\"exit_policy_summary\":{\"" + defaultPolicy
+            + "\":[");
+        int portsWritten = 0;
+        for (String portOrPortRange : portList.split(",")) {
+          sb.append((portsWritten++ > 0 ? "," : "")
+              + "\"" + portOrPortRange + "\"");
+        }
+        sb.append("]}");
+      }
 
       /* Add exit addresses if at least one of them is distinct from the
        * onion-routing addresses. */
diff --git a/src/org/torproject/onionoo/Node.java b/src/org/torproject/onionoo/Node.java
index 61a26ed..1bf984d 100644
--- a/src/org/torproject/onionoo/Node.java
+++ b/src/org/torproject/onionoo/Node.java
@@ -40,11 +40,14 @@ public class Node {
   private double guardProbability = -1.0;
   private double middleProbability = -1.0;
   private double exitProbability = -1.0;
+  private String defaultPolicy;
+  private String portList;
   public Node(String nickname, String fingerprint, String address,
       SortedSet<String> orAddressesAndPorts,
       SortedSet<String> exitAddresses, long lastSeenMillis, int orPort,
       int dirPort, SortedSet<String> relayFlags, long consensusWeight,
-      String countryCode, String hostName, long lastRdnsLookup) {
+      String countryCode, String hostName, long lastRdnsLookup,
+      String defaultPolicy, String portList) {
     this.nickname = nickname;
     this.fingerprint = fingerprint;
     try {
@@ -75,6 +78,8 @@ public class Node {
     this.countryCode = countryCode;
     this.hostName = hostName;
     this.lastRdnsLookup = lastRdnsLookup;
+    this.defaultPolicy = defaultPolicy;
+    this.portList = portList;
   }
   public String getFingerprint() {
     return this.fingerprint;
@@ -230,5 +235,11 @@ public class Node {
   public double getExitProbability() {
     return this.exitProbability;
   }
+  public String getDefaultPolicy() {
+    return this.defaultPolicy;
+  }
+  public String getPortList() {
+    return this.portList;
+  }
 }
 
diff --git a/web/index.html b/web/index.html
index e80a99e..a74feac 100755
--- a/web/index.html
+++ b/web/index.html
@@ -256,6 +256,22 @@ was successful yet.</li>
 <li><b>"last_restarted":</b> UTC timestamp (YYYY-MM-DD hh:mm:ss) when the
 relay was last (re-)started.
 Optional field.</li>
+<li><b><font color="blue">"bandwidth_rate":</font></b> Average bandwidth
+in bytes per second that this relay is willing to sustain over long
+periods.
+Required field.
+<font color="blue">Added field on August 1, 2012.</font></li>
+<li><b><font color="blue">"bandwidth_burst":</font></b> Bandwidth in bytes
+per second that this relay is willing to sustain in very short intervals.
+Required field.
+<font color="blue">Added field on August 1, 2012.</font></li>
+<li><b><font color="blue">"observed_bandwidth":</font></b> Bandwidth
+estimate in bytes per second of the capacity this relay can handle.
+The relay remembers the maximum bandwidth sustained output over any ten
+second period in the past day, and another sustained input.
+The "observed_bandwidth" value is the lesser of these two numbers.
+Required field.
+<font color="blue">Added field on August 1, 2012.</font></li>
 <li><b>"advertised_bandwidth":</b> Bandwidth in bytes per second that this
 relay is willing and capable to provide.
 Optional field.
@@ -265,6 +281,14 @@ found.</li>
 Optional field.
 Missing if router descriptor containing this information cannot be
 found.</li>
+<li><b><font color="blue">"exit_policy_summary":</font></b> Summary
+version of the relay's exit policy containing a dictionary with either an
+"accept" or a "reject" element.
+If there is an "accept" ("reject") element, the relay accepts (rejects)
+all TCP ports or port ranges in the given list for most IP addresses and
+rejects (accepts) all other ports.
+Optional field.
+<font color="blue">Added field on August 1, 2012.</font></li>
 <li><b>"contact":</b> Contact address of the relay operator.
 Omitted if empty or if descriptor containing this information cannot be
 found.</li>



More information about the tor-commits mailing list