[tor-commits] [ooni-probe/master] Add option to disable the default collector

art at torproject.org art at torproject.org
Tue Apr 30 13:01:44 UTC 2013


commit 9a30d020ce6bbfdbfc3e56dcc2b89cb932bfdb6f
Author: Arturo Filastò <art at fuffa.org>
Date:   Sat Mar 9 03:13:50 2013 +0100

    Add option to disable the default collector
    
    * More robust startup process
---
 ooni/errors.py  |    2 ++
 ooni/oonicli.py |   36 ++++++++++++++++++++++++++----------
 2 files changed, 28 insertions(+), 10 deletions(-)

diff --git a/ooni/errors.py b/ooni/errors.py
index ac05463..1be42c3 100644
--- a/ooni/errors.py
+++ b/ooni/errors.py
@@ -147,3 +147,5 @@ class GeoIPDataFilesNotFound(Exception):
     pass
 class NoMoreReporters(Exception):
     pass
+class TorNotRunning(Exception):
+    pass
diff --git a/ooni/oonicli.py b/ooni/oonicli.py
index 06aa20c..3eae499 100644
--- a/ooni/oonicli.py
+++ b/ooni/oonicli.py
@@ -10,7 +10,7 @@ from twisted.internet import reactor
 from twisted.python import usage
 from twisted.python.util import spewer
 
-from ooni.errors import InvalidOONIBCollectorAddress
+from ooni import errors
 
 from ooni import config
 from ooni.director import Director
@@ -29,7 +29,9 @@ class Options(usage.Options):
                 " files listed on the command line")
 
     optFlags = [["help", "h"],
-                ["resume", "r"]]
+                ["resume", "r"],
+                ["no-collector", "n"]
+                ]
 
     optParameters = [["reportfile", "o", None, "report file name"],
                      ["testdeck", "i", None,
@@ -102,6 +104,9 @@ def runWithDirector():
 
     # contains (test_cases, options, cmd_line_options)
     test_list = []
+    if global_options['no-collector']:
+        log.msg("Not reporting using a collector")
+        global_options.pop('collector')
 
     if global_options['testdeck']:
         test_deck = yaml.safe_load(open(global_options['testdeck']))
@@ -131,32 +136,43 @@ def runWithDirector():
 
     def director_startup_failed(failure):
         log.err("Failed to start the director")
-        log.exception(failure)
         reactor.stop()
 
     # Wait until director has started up (including bootstrapping Tor) before adding tess
     def post_director_start(_):
         for net_test_loader in test_list:
+            collector = global_options['collector']
             test_details = net_test_loader.testDetails
 
             yaml_reporter = YAMLReporter(test_details)
             reporters = [yaml_reporter]
 
-            if global_options['collector']:
+            if collector.startswith('httpo') \
+                    and not config.tor_state:
+                log.err("Tor does not appear to be running")
+                log.err("Reporting with the collector %s is not possible")
+                log.msg("Try with a different collector or disable collector reporting with -n")
+                raise errors.TorNotRunning
+            elif collector:
+                log.msg("Reporting using collector: %s" %
+                        collector)
                 try:
                     oonib_reporter = OONIBReporter(test_details,
-                            global_options['collector'])
+                            collector)
                     reporters.append(oonib_reporter)
-                except InvalidOONIBCollectorAddress:
+                except errors.InvalidOONIBCollectorAddress, e:
                     log.err("Invalid format for oonib collector address.")
                     log.msg("Should be in the format http://<collector_address>:<port>")
                     log.msg("for example: ooniprobe -c httpo://nkvphnp3p6agi5qq.onion")
-                    sys.exit(1)
+                    raise e
 
             log.debug("adding callback for startNetTest")
             d.addCallback(director.startNetTest, net_test_loader, reporters)
-        d.addCallback(shutdown)
+        d.addBoth(shutdown)
 
-    d.addCallback(post_director_start)
-    d.addErrback(director_startup_failed)
+    def start():
+        d.addCallback(post_director_start)
+        d.addErrback(director_startup_failed)
+
+    reactor.callWhenRunning(start)
     reactor.run()





More information about the tor-commits mailing list