[tor-commits] [metrics-tasks/master] Take into account the router flags

karsten at torproject.org karsten at torproject.org
Thu Jul 5 08:35:20 UTC 2012


commit 98859a1e367c4b5728fb0d7bc2c5acf8e99d2208
Author: Sathyanarayanan Gunasekaran <gsathya.ceg at gmail.com>
Date:   Thu Jul 5 10:08:40 2012 +0200

    Take into account the router flags
    
    Measure entropy for exit and guard nodes
---
 task-6232/pyentropy.py |   45 ++++++++++++++++++++++++++++++++++++---------
 1 files changed, 36 insertions(+), 9 deletions(-)

diff --git a/task-6232/pyentropy.py b/task-6232/pyentropy.py
index 226aca8..6fa5b86 100644
--- a/task-6232/pyentropy.py
+++ b/task-6232/pyentropy.py
@@ -1,6 +1,6 @@
 """
 Usage - python pyentropy.py <consensus-dir> <output-file>
-Output - A CSV file of the format <valid-after>,<entropy>
+Output - A CSV file of the format <valid-after>,<entropy for all nodes>,<entropy for exitnodes>,<entropy for guardnodes>
 rsync -arz --delete metrics.torproject.org::metrics-recent/relay-descriptors/consensuses in
 """
 
@@ -20,6 +20,8 @@ class Router:
         self.bandwidth = None
         self.flags = None
         self.probability = None
+        self.is_exit = None
+        self.is_guard = None
         
     def add(self, key, values):
         if key == 'r':
@@ -28,7 +30,11 @@ class Router:
            self.bandwidth = int(values[0].split('=')[1])
         if key == 's':
            self.flags = values
-           
+           if "Exit" in self.flags:
+               self.is_exit = True
+           if "Guard" in self.flags:
+               self.is_guard = True
+        
 def run(file_name):
     routers = []
         # parse consensus
@@ -47,11 +53,22 @@ def run(file_name):
             elif key in KEYS:
                 router.add(key, values)
                 
-        # build hash table with freq. distribution
-        # key: bandwidth
-        # value: number of bandwidth's observations
-    bw_dist = {}
+    # build hash table with freq. distribution
+    # key: bandwidth
+    # value: number of bandwidth's observations
+    
+    bw_dist, bw_dist_exit, bw_dist_guard = {}, {}, {}
     for router in routers:
+        if router.is_exit:
+            if bw_dist_exit.has_key(router.bandwidth):
+                bw_dist_exit[router.bandwidth] += 1
+            else:
+                bw_dist_exit[router.bandwidth] = 1
+        if router.is_guard:
+            if bw_dist_guard.has_key(router.bandwidth):
+                bw_dist_guard[router.bandwidth] += 1
+            else:
+                bw_dist_guard[router.bandwidth] = 1
         if bw_dist.has_key(router.bandwidth):
             bw_dist[router.bandwidth] += 1
         else:
@@ -61,13 +78,23 @@ def run(file_name):
         print "Error: amount of routers must be > 0."
         return;
     
-    entropy = 0.0
+    entropy, entropy_exit, entropy_guard = 0.0, 0.0, 0.0
     for bw in bw_dist.iterkeys():
-            # p = probability of one particular bandwidth
+        # p = probability of one particular bandwidth
         p = float(bw_dist[bw]) / len(routers)
         entropy += -(p * math.log(p, 2))
+        
+    for bw in bw_dist_exit.iterkeys():
+        # p = probability of one particular bandwidth
+        p = float(bw_dist[bw]) / len(routers)
+        entropy_exit += -(p * math.log(p, 2))
+        
+    for bw in bw_dist_guard.iterkeys():
+        # p = probability of one particular bandwidth
+        p = float(bw_dist[bw]) / len(routers)
+        entropy_guard += -(p * math.log(p, 2))
     
-    return ",".join([valid_after, str(entropy)])
+    return ",".join([valid_after, str(entropy), str(entropy_exit), str(entropy_guard)])
 
 def usage():
     print "Usage - python pyentropy.py <consensus-dir> <output-file>"





More information about the tor-commits mailing list