[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] r18259: {torflow} Finally fix a an annoying bug with calculating the minimum p (torflow/trunk/CircuitAnalysis/BuildTimes)
Author: mikeperry
Date: 2009-01-23 18:33:41 -0500 (Fri, 23 Jan 2009)
New Revision: 18259
Modified:
torflow/trunk/CircuitAnalysis/BuildTimes/dist_check.py
Log:
Finally fix a an annoying bug with calculating the minimum
percentile rank of a router over time. Turns out we were
calculating minimum bandwidth, so min=100 doesn't make sense
as an initial value :)
Modified: torflow/trunk/CircuitAnalysis/BuildTimes/dist_check.py
===================================================================
--- torflow/trunk/CircuitAnalysis/BuildTimes/dist_check.py 2009-01-23 22:45:08 UTC (rev 18258)
+++ torflow/trunk/CircuitAnalysis/BuildTimes/dist_check.py 2009-01-23 23:33:41 UTC (rev 18259)
@@ -55,15 +55,15 @@
return pathfile
-def min_avg_max(list):
- minr = 100
+def min_avg_max(l):
+ minr = 2**30
maxr = 0
avgr = 0.0
- for v in list:
+ for v in l:
avgr += v
if v < minr: minr = v
if v > maxr: maxr = v
- avgr /= len(list)
+ avgr /= len(l)
return (minr,avgr,maxr)
def check_ranks(r):
@@ -79,7 +79,7 @@
c.authenticate(control_pass) # also launches thread...
return c
-def run_check(routers, pathfile, log):
+def run_check(routers, pathfile, log, disk_only=False):
for i in xrange(len(routers)):
if routers[i].list_rank != i:
log("WARN: List unsorted at position "+str(i)+", "+routers[i].idhex)
@@ -118,7 +118,9 @@
exit_check = OrNodeRestriction([
ExitPolicyRestriction("255.255.255.255", 80),
ExitPolicyRestriction("255.255.255.255", 443)])
-
+
+ exit_fails={}
+
for line in ok_circs+failed_circs:
nodes = map(lambda n: n.strip(), line.split("\t"))
cid,nodes = (nodes[0],nodes[1:])
@@ -142,15 +144,21 @@
if nodes[2] in router_map:
if not exit_check.r_is_ok(router_map[nodes[2]]):
- log("WARN: Exit policy fail for circ "+str(cid)+" on "+nodes[2])
- log("Exit policy:")
- for e in router_map[nodes[2]].exitpolicy:
- log(" "+str(e))
- log(" 80: "+str(router_map[nodes[2]].will_exit_to("255.255.255.255", 80)))
- log(" 443: "+str(router_map[nodes[2]].will_exit_to("255.255.255.255", 443)))
+ if not nodes[2] in exit_fails: exit_fails[nodes[2]] = 1
+ else: exit_fails[nodes[2]] += 1
- # FIXME: Compare circuits/chosen to %bw. Multiply by pct_min+max
- # FIXME: Verify by guard+exit weighting?
+ for e in exit_fails.iterkeys():
+ log("WARN: "+str(exit_fails[e])+"/"+str(router_map[e].chosen[2])+" exit policy mismatches using exit "+e)
+ log("Exit policy:")
+ for p in router_map[e].exitpolicy:
+ log(" "+str(p))
+ log(" 80: "+str(router_map[e].will_exit_to("255.255.255.255", 80)))
+ log(" 443: "+str(router_map[e].will_exit_to("255.255.255.255", 443)))
+
+
+ # FIXME: Compare chosen/n_circuits to weighted %bw.
+ # Multiply by pct_min+max
+
tot_len = len(routers)
# FIXME: Read in from files, compare against saved infoz
@@ -163,7 +171,15 @@
ranks = map(int, nodes[2:])
elif nodes[0] == 'b': # bw list
bws = map(int, nodes[2:])
- router = router_map[nodes[1]]
+ if nodes[1] in router_map:
+ router = router_map[nodes[1]]
+ if disk_only:
+ if ranks: router.rank_history = ranks
+ if bws: router.bw_history = bws
+ continue
+ elif disk_only:
+ continue
+
if router.rank_history and not ranks or ranks and not router.rank_history:
print "WARN: Rank storage mismatch for "+router.idhex
continue
@@ -235,7 +251,7 @@
routers = map(BTRouter, c.read_routers(c.get_network_status()))
routers.sort(lambda x, y: cmp(y.bw, x.bw))
for i in xrange(len(routers)): routers[i].list_rank = i
- run_check(routers, pathfile, logger)
+ run_check(routers, pathfile, logger, True)
if __name__ == '__main__':
main()