[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] r22757: {arm} Fixing a couple more issues, no longer caching desc fetch fa (arm/trunk/init)
Author: atagar
Date: 2010-07-31 21:00:34 +0000 (Sat, 31 Jul 2010)
New Revision: 22757
Modified:
arm/trunk/init/consensusTracker.py
Log:
Fixing a couple more issues, no longer caching desc fetch failures and properly
cropping samplings when it gets too large. Also sending daily emails at
midnight (GMT).
Modified: arm/trunk/init/consensusTracker.py
===================================================================
--- arm/trunk/init/consensusTracker.py 2010-07-31 18:10:35 UTC (rev 22756)
+++ arm/trunk/init/consensusTracker.py 2010-07-31 21:00:34 UTC (rev 22757)
@@ -48,8 +48,8 @@
DEFAULT_NS_OUTPUT = "./newRelays"
# thresholds at which alerts are sent for relay counts
-HOURLY_COUNT_THRESHOLD = 20
-HOURLY_BW_THRESHOLD = 52428800 # trying 50 Mbit/s
+HOURLY_COUNT_THRESHOLD = 5
+HOURLY_BW_THRESHOLD = 6553600 # trying 50 Mbit/s
OPT = "g:t:f:n:qh"
OPT_EXPANDED = ["gmail=", "to=", "fingerprints=", "nsOutput=", "quiet", "help"]
@@ -235,12 +235,18 @@
return (guardCount, middleCount, exitCount)
def getBandwidth(self, descInfo, relayType, newOnly=True):
+ # Tries to use the observed bandwidth rather than measured since the
+ # later is just a heuristic (has little bearing on what the relay
+ # actually provides.
totalBandwidth = 0
relaySet = self.newRelays[relayType] if newOnly else self.allRelays[relayType]
for nsEntry in relaySet:
- totalBandwidth += descInfo[nsEntry.idhex][0]
- #if nsEntry.bandwidth: totalBandwidth += nsEntry.bandwidth
+ # we might not have a desc entry (or if FetchUselessDescriptors is
+ # unset), but when it first appears network status bandwidth is equal to
+ # the observed too
+ if nsEntry.idhex in descInfo: totalBandwidth += descInfo[nsEntry.idhex][0]
+ elif nsEntry.bandwidth: totalBandwidth += nsEntry.bandwidth
return totalBandwidth
@@ -336,7 +342,7 @@
router = TorCtl.Router.build_from_desc(conn.get_info(descLookupCmd)[descLookupCmd].split("\n"), nsEntry)
descInfo[router.idhex] = (router.desc_bw, router.exitpolicy)
except TorCtl.ErrorReply:
- descInfo[nsEntry.idhex] = (0, "")
+ pass
except TorCtl.TorCtlClosed:
print "Connection to tor is closed"
sys.exit()
@@ -358,7 +364,7 @@
router = TorCtl.Router.build_from_desc(conn.get_info(descLookupCmd)[descLookupCmd].split("\n"), nsEntry)
descInfo[router.idhex] = (router.desc_bw, router.exitpolicy)
except TorCtl.ErrorReply:
- descInfo[nsEntry.idhex] = (0, "")
+ pass
except TorCtl.TorCtlClosed:
print "Connection to tor is closed"
sys.exit()
@@ -382,11 +388,15 @@
bwAlert = newSampling.getBandwidth(descInfo, RELAY_EXIT, True) > HOURLY_BW_THRESHOLD
samplings.insert(0, newSampling)
- if len(samplings) > 168:
- # only remove entries if we have a full day's worth of data to discard
+ if len(samplings) > 192:
+ # discards last day's worth of results
lastDate = samplings[-1].getValidAfter().split(" ")[0]
- earlierDate = samplings[-25].getValidAfter().split(" ")[0]
- if lastDate == earlierDate: samplings = samplings[:-25]
+
+ # usually we'll be removing 24 entries, but could possibly be less
+ cropStart = -25
+ while samplings[cropStart].getValidAfter().split(" ")[0] != lastDate:
+ cropStart += 1
+ samplings = samplings[:cropStart]
# writes new ns entries
if nsOutputPath:
@@ -400,13 +410,18 @@
for nsEntry in newSampling.newRelays[relayType]:
# TODO: the str call of the following produces a deprecation warning, as discussed on:
# https://trac.torproject.org/projects/tor/ticket/1777
- exitPolicy = [str(policyLine) for policyLine in descInfo[nsEntry.idhex][1]]
+ if nsEntry.idhex in descInfo:
+ bwLabel = getSizeLabel(descInfo[nsEntry.idhex][0], 2)
+ exitPolicyLabel = ", ".join([str(policyLine) for policyLine in descInfo[nsEntry.idhex][1]])
+ else:
+ bwLabel = getSizeLabel(nsEntry.bandwidth, 2)
+ exitPolicyLabel = "Unknown"
nsContents += "%s (%s:%s)\n" % (nsEntry.idhex, nsEntry.ip, nsEntry.orport)
nsContents += " nickname: %s\n" % nsEntry.nickname
- nsContents += " bandwidth: %s\n" % getSizeLabel(descInfo[nsEntry.idhex][0], 2)
+ nsContents += " bandwidth: %s\n" % bwLabel
nsContents += " flags: %s\n" % ", ".join(nsEntry.flags)
- nsContents += " exit policy: %s\n\n" % ", ".join(exitPolicy)
+ nsContents += " exit policy: %s\n\n" % exitPolicyLabel
try:
# make ns entries directory if it doesn't already exist
@@ -427,7 +442,10 @@
if countAlert: print " *count threshold broken*"
if bwAlert: print " *bandwidth threshold broken*"
- if countAlert or bwAlert or (tick % 24 == 0):
+ # checks if, with this entry, we have all the samplings for the day
+ isMidnightEntry = newSampling.getValidAfter().split(" ")[1] == "23:00:00"
+
+ if countAlert or bwAlert or isMidnightEntry:
currentTime = time.strftime("%H:%M", time.localtime(time.time()))
currentDate = time.strftime("%m/%d/%Y", time.localtime(time.time()))
@@ -527,7 +545,10 @@
for sampling in datesToSamplings[date]:
samplingTotalBw = 0
for nsEntry in sampling.getRelays(False):
- samplingTotalBw += descInfo[nsEntry.idhex][0]
+ if nsEntry.idhex in descInfo:
+ samplingTotalBw += descInfo[nsEntry.idhex][0]
+ else:
+ samplingTotalBw += nsEntry.bandwidth
totalBw.append(samplingTotalBw)
hourlyEntries = ""