[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[or-cvs] r19632: {torflow} Add Alpha weighting support described in proposal 161 to agg (torflow/trunk/NetworkScanners/BwAuthority)



Author: mikeperry
Date: 2009-06-05 08:22:36 -0400 (Fri, 05 Jun 2009)
New Revision: 19632

Modified:
   torflow/trunk/NetworkScanners/BwAuthority/aggregate.py
Log:

Add Alpha weighting support described in proposal 161 to
aggregator script.



Modified: torflow/trunk/NetworkScanners/BwAuthority/aggregate.py
===================================================================
--- torflow/trunk/NetworkScanners/BwAuthority/aggregate.py	2009-06-05 12:21:02 UTC (rev 19631)
+++ torflow/trunk/NetworkScanners/BwAuthority/aggregate.py	2009-06-05 12:22:36 UTC (rev 19632)
@@ -3,16 +3,17 @@
 import re
 import math
 import sys
+import socket
 
+sys.path.append("../../")
+from TorCtl.TorUtil import plog
+from TorCtl import TorCtl,TorUtil
+
 bw_files = {}
 nodes = {}
+prev_consensus = {}
+ALPHA = 0.3333 # Prev consensus values count for 1/3 of the avg 
 
-# XXX: Alpha smoothing, here or in tor?
-#      - Tor, because we want to be able to opine about stuff
-#        we did not measure this round
-#      - Or maybe that's an argument for reading the whole consensus
-#        and doing it here.. but that will always be one behind..
-
 def base10_round(bw_val):
   # This keeps the first 3 decimal digits of the bw value only
   # to minimize changes for consensus diffs.
@@ -79,6 +80,20 @@
     self.ns_bw = int(re.search("[\s]*ns_bw=([\S]+)[\s]*", line).group(1))
 
 def main(argv):
+  TorUtil.read_config(argv[1]+"/scanner.1/bwauthority.cfg")
+ 
+  s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+  s.connect((TorUtil.control_host,TorUtil.control_port))
+  c = TorCtl.Connection(s)
+  c.authenticate_cookie(file(argv[1]+"/scanner.1/tor-data/control_auth_cookie",
+                              "r"))
+  ns_list = c.get_network_status()
+  for n in ns_list:
+    if n.bandwidth == None:
+      plog("ERROR", "Your Tor is not providing NS w bandwidths!")
+      sys.exit(0)
+    prev_consensus["$"+n.idhex] = n
+
   for da in argv[1:-1]:
     # First, create a list of the most recent files in the
     # scan dirs that are recent enough
@@ -138,9 +153,11 @@
     if closest_to_one((n.sbw_ratio, n.fbw_ratio)) == 0:
       n.ratio = n.sbw_ratio
       n.new_bw = n.ns_bw[n.chosen_sbw]*n.ratio
-    else: 
+    else:
       n.ratio = n.fbw_ratio
       n.new_bw = n.ns_bw[n.chosen_fbw]*n.ratio
+    if n.idhex in prev_consensus:
+      n.new_bw = ((prev_consensus[n.idhex].bandwidth*ALPHA + n.new_bw)/(ALPHA + 1))/1024.0
 
   n_print = nodes.values()
   n_print.sort(lambda x,y: int(x.new_bw) - int(y.new_bw))