[tor-commits] [ooni-probe/master] Make how we keep track of successful reports more robust.
art at torproject.org
art at torproject.org
Tue Apr 30 13:01:45 UTC 2013
commit 056a24b84505d1d3f2602bc5ae55e8eea9edafba
Author: Arturo Filastò <art at fuffa.org>
Date: Mon Apr 29 13:42:01 2013 +0200
Make how we keep track of successful reports more robust.
---
ooni/reporter.py | 12 ++++++------
ooni/tasks.py | 19 +++++++++++++++++++
2 files changed, 25 insertions(+), 6 deletions(-)
diff --git a/ooni/reporter.py b/ooni/reporter.py
index b04b46b..732d516 100644
--- a/ooni/reporter.py
+++ b/ooni/reporter.py
@@ -34,7 +34,7 @@ from ooni.utils.net import BodyReceiver, StringProducer, userAgents
from ooni import config
-from ooni.tasks import ReportEntry, TaskTimedOut
+from ooni.tasks import ReportEntry, TaskTimedOut, ReportTracker
class ReporterException(Exception):
pass
@@ -429,13 +429,13 @@ class Report(object):
been written or errbacks when no more reporters
"""
all_written = defer.Deferred()
- self._report_write_completed = []
+ report_tracker = ReportTracker(self.reporters)
for reporter in self.reporters[:]:
- def report_completed(result):
- self._report_write_completed.append(result)
- if len(self.reporters) == len(self._report_write_completed):
- all_written.callback(self._report_write_completed)
+ def report_completed(task):
+ report_tracker.completed()
+ if report_tracker.finished():
+ all_written.callback(report_tracker)
report_entry_task = ReportEntry(reporter, measurement)
self.reportEntryManager.schedule(report_entry_task)
diff --git a/ooni/tasks.py b/ooni/tasks.py
index 59a908d..428fdbf 100644
--- a/ooni/tasks.py
+++ b/ooni/tasks.py
@@ -129,6 +129,25 @@ class Measurement(TaskWithTimeout):
d = self.netTestMethod()
return d
+class ReportTracker(object):
+ def __init__(self, reporters):
+ self.report_completed = 0
+ self.reporters = reporters
+
+ def finished(self):
+ """
+ Returns true if all the tasks are done. False if not.
+ """
+ if self.report_completed == len(self.reporters):
+ return True
+ return False
+
+ def completed(self):
+ """
+ Called when a new report is completed.
+ """
+ self.report_completed += 1
+
class ReportEntry(TaskWithTimeout):
timeout = config.advanced.reporting_timeout
More information about the tor-commits
mailing list