[tor-commits] [ooni-probe/master] Start working on remote reporting system

art at torproject.org art at torproject.org
Sun Nov 11 17:18:31 UTC 2012


commit 187b8e98d061da05168ac1f9406154ef6d587038
Author: Arturo Filastò <art at fuffa.org>
Date:   Sun Nov 11 00:43:44 2012 +0100

    Start working on remote reporting system
    * Still broken
---
 ooni/reporter.py        |   86 +++++++++++++++++++++++++++++++++++++++++------
 ooni/runner.py          |   10 ++++--
 ooni/templates/httpt.py |    3 +-
 3 files changed, 84 insertions(+), 15 deletions(-)

diff --git a/ooni/reporter.py b/ooni/reporter.py
index 5d29d54..84137b6 100644
--- a/ooni/reporter.py
+++ b/ooni/reporter.py
@@ -15,11 +15,6 @@ import yaml
 import json
 import traceback
 
-from yaml.representer import *
-from yaml.emitter import *
-from yaml.serializer import *
-from yaml.resolver import *
-
 from twisted.python.util import untilConcludes
 from twisted.trial import reporter
 from twisted.internet import defer, reactor
@@ -114,12 +109,20 @@ class OONIBReporter(object):
                 'test_name': test_name, 'test_version': test_version,
                 'progress': 0}
 
-        log.debug("Creating report via url %s" % url)
-        bodyProducer = StringProducer(json.dumps(request))
-        d = self.agent.request("POST", url, bodyProducer=bodyProducer)
-        d.addCallback(self._processResponseBody, self._newReportCreated)
-        return d
-
+        report = {'input': test_input,
+                'test_name': test_name,
+                'test_started': test_started,
+                'report': test_report}
+        self.writeReportEntry(report)
+    
+    def allDone(self):
+        log.debug("allDone: Finished running all tests")
+        self.finish()
+        try:
+            reactor.stop()
+        except:
+            pass
+        return None
 
 class YamlReporter(object):
     """
@@ -167,6 +170,7 @@ class OReporter(YamlReporter):
 
         client_geodata = {}
 
+<<<<<<< Updated upstream
         if config.privacy.includeip or \
                 config.privacy.includeasn or \
                 config.privacy.includecountry or \
@@ -176,12 +180,21 @@ class OReporter(YamlReporter):
             client_location = geodata.IPToLocation(client_ip)
         else:
             client_ip = "127.0.0.1"
+=======
+class OONIBReporter(OReporter):
+    def __init__(self, backend_url):
+        from twisted.web.client import Agent
+        from twisted.internet import reactor
+        self.agent = Agent(reactor)
+        self.backend_url = backend_url
+>>>>>>> Stashed changes
 
         if config.privacy.includeip:
             client_geodata['ip'] = client_ip
         else:
             client_geodata['ip'] = "127.0.0.1"
 
+<<<<<<< Updated upstream
         client_geodata['asn'] = None
         client_geodata['city'] = None
         client_geodata['countrycode'] = None
@@ -194,6 +207,54 @@ class OReporter(YamlReporter):
 
         if config.privacy.includecountry:
             client_geodata['countrycode'] = client_location['countrycode']
+=======
+    def _processResponseBody(self, *arg, **kw):
+        log.msg("processResponseBody ------------------")
+        print arg, kw
+        #done = defer.Deferred()
+        #response.deliverBody(BodyReceiver(done))
+        #done.addCallback(self._newReportCreated)
+        #return done
+
+    def createReport(self, options):
+        test_name = options['name']
+        test_version = options['version']
+
+        log.debug("Creating report with OONIB Reporter")
+        url = self.backend_url + '/report/new'
+        software_version = '0.0.1'
+
+        def gotDetails(test_details):
+            content = '---\n'
+            content += safe_dump(test_details)
+            content += '...\n'
+
+            request = {'software_name': 'ooniprobe',
+                'software_version': software_version,
+                'test_name': test_name,
+                'test_version': test_version,
+                'progress': 0,
+                'content': content
+            }
+            log.debug("Creating report via url %s" % url)
+            request_json = json.dumps(request)
+            log.debug("Sending %s" % request_json)
+
+            def bothCalls(*arg, **kw):
+                print "In HERE y0"
+                print arg, kw
+
+            body_producer = StringProducer(request_json)
+            d = self.agent.request("POST", url, None,
+                    body_producer)
+            d.addBoth(self._processResponseBody)
+            return d
+
+        d = getTestDetails(options)
+        d.addCallback(gotDetails)
+        # XXX handle errors
+        return d
+>>>>>>> Stashed changes
 
 
         test_details = {'start_time': otime.utcTimeNow(),
@@ -224,6 +285,7 @@ class OReporter(YamlReporter):
                 'report': test_report}
         self.writeReportEntry(report)
 
+<<<<<<< Updated upstream
     def allDone(self):
         log.debug("allDone: Finished running all tests")
         self.finish()
@@ -233,3 +295,5 @@ class OReporter(YamlReporter):
             pass
         return None
 
+=======
+>>>>>>> Stashed changes
diff --git a/ooni/runner.py b/ooni/runner.py
index 1affb15..c2105ea 100644
--- a/ooni/runner.py
+++ b/ooni/runner.py
@@ -223,10 +223,14 @@ def runTestCases(test_cases, options,
             test_inputs = [None]
 
     reportFile = open(yamloo_filename, 'w+')
-    oreporter = reporter.OReporter(reportFile)
+    #oreporter = reporter.YAMLReporter(reportFile)
+    oreporter = reporter.OONIBReporter('http://127.0.0.1:8888')
+
     input_unit_factory = InputUnitFactory(test_inputs)
 
-    yield oreporter.writeReportHeader(options)
+    log.debug("Creating report")
+    yield oreporter.createReport(options)
+
     # This deferred list is a deferred list of deferred lists
     # it is used to store all the deferreds of the tests that 
     # are run
@@ -238,7 +242,7 @@ def runTestCases(test_cases, options,
             test_class = test_case[0]
             test_method = test_case[1]
             yield runTestWithInputUnit(test_class,
-                        test_method, input_list, 
+                        test_method, input_list,
                         oreporter)
     oreporter.allDone()
 
diff --git a/ooni/templates/httpt.py b/ooni/templates/httpt.py
index 4f3be3d..8360d7d 100644
--- a/ooni/templates/httpt.py
+++ b/ooni/templates/httpt.py
@@ -143,7 +143,8 @@ class HTTPTest(NetTestCase):
         d.addCallback(finished)
         return d
 
-    def build_request(self, url, method="GET", headers=None, body=None):
+    def build_request(self, url, method="GET", 
+            headers=None, body=None):
         self.request['method'] = method
         self.request['url'] = url
         self.request['headers'] = headers if headers else {}





More information about the tor-commits mailing list