[tor-commits] [ooni-probe/master] Improve the reporting of HTTP Test template. Include the reason of the failure for every request.
art at torproject.org
art at torproject.org
Mon Nov 26 21:58:12 UTC 2012
commit 44859c555f34f6b5e0a65546b476d3ba2e158bad
Author: Arturo Filastò <art at fuffa.org>
Date: Mon Nov 26 22:54:42 2012 +0100
Improve the reporting of HTTP Test template. Include the reason of the failure for every request.
* Extend config file to support the tor related options
* Create ooniprobe.sample
* Add ooniprobe.conf to .gitignore
---
.gitignore | 1 +
ooni/config.py | 15 ++++++++++++++-
ooni/templates/httpt.py | 45 ++++++++++++++++++++++++---------------------
ooniprobe.conf | 2 +-
ooniprobe.conf.sample | 37 +++++++++++++++++++++++++++++++++++++
5 files changed, 77 insertions(+), 23 deletions(-)
diff --git a/.gitignore b/.gitignore
index d1015ab..4cb0775 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,3 +19,4 @@ pcaps/
report*.yaml
docs/build/*
data/*.dat
+ooniprobe.conf
diff --git a/ooni/config.py b/ooni/config.py
index edfb196..1c40b32 100644
--- a/ooni/config.py
+++ b/ooni/config.py
@@ -30,12 +30,24 @@ resume_filename = None
# There should be a more twisted way of doing this.
start_reactor = True
+tor_state = None
+tor_control = None
+
+config_file = None
+sample_config_file = None
+
def get_root_path():
this_directory = os.path.dirname(__file__)
root = os.path.join(this_directory, '..')
root = os.path.abspath(root)
return root
+def createConfigFile():
+ """
+ XXX implement me
+ """
+ sample_config_file = os.path.join(get_root_path(), 'ooniprobe.conf.sample')
+
def loadConfigFile():
"""
This is a helper function that makes sure that the configuration attributes
@@ -45,8 +57,9 @@ def loadConfigFile():
try:
f = open(config_file)
except IOError:
+ createConfigFile()
raise Exception("Unable to open config file. "\
- "Create a config file called ooniprobe.conf")
+ "Copy ooniprobe.conf.sample to ooniprobe.conf")
config_file_contents = '\n'.join(f.readlines())
configuration = yaml.safe_load(config_file_contents)
diff --git a/ooni/templates/httpt.py b/ooni/templates/httpt.py
index 480d011..b8bd9a7 100644
--- a/ooni/templates/httpt.py
+++ b/ooni/templates/httpt.py
@@ -101,7 +101,7 @@ class HTTPTest(NetTestCase):
def processInputs(self):
pass
- def addToReport(self, request, response=None, response_body=None):
+ def addToReport(self, request, response=None, response_body=None, failure=None):
"""
Adds to the report the specified request and response.
@@ -111,6 +111,8 @@ class HTTPTest(NetTestCase):
response (instance): An instance of
:class:twisted.web.client.Response.
Note: headers is our modified True Headers version.
+
+ failure (instance): An instance of :class:twisted.internet.failure.Failure
"""
log.debug("Adding %s to report" % request)
request_response = {
@@ -127,6 +129,26 @@ class HTTPTest(NetTestCase):
'body': response_body,
'code': response.code
}
+ if failure:
+ if isinstance(failure.value, ConnectionRefusedError):
+ log.err("Connection refused. The backend may be down")
+ request_response['failure'] = 'connection_refused_error'
+
+ elif isinstance(failure.value, SOCKSError):
+ log.err("Sock error. The SOCKS proxy may be down")
+ request_response['failure'] = 'socks_error'
+
+ elif isinstance(failure.value, DNSLookupError):
+ log.err("DNS lookup failure")
+ request_response['failure'] = 'dns_lookup_error'
+
+ elif isinstance(failure.value, TCPTimedOutError):
+ log.err("TCP Timed Out Error")
+ request_response['failure'] = 'tcp_timed_out_error'
+
+ elif isinstance(failure.value, ResponseNeverReceived):
+ log.err("Response Never Received")
+ request_response['failure'] = 'response_never_received'
self.report['requests'].append(request_response)
def _processResponseBody(self, response_body, request, response, body_processor):
@@ -296,26 +318,7 @@ class HTTPTest(NetTestCase):
def errback(failure, request):
failure.trap(ConnectionRefusedError, SOCKSError, DNSLookupError, TCPTimedOutError)
log.err("Error performing %s" % request)
- self.addToReport(request)
- if isinstance(failure.value, ConnectionRefusedError):
- log.err("Connection refused. The backend may be down")
- self.report['failure'] = 'connection_refused_error'
-
- elif isinstance(failure.value, SOCKSError):
- log.err("Sock error. The SOCKS proxy may be down")
- self.report['failure'] = 'socks_error'
-
- elif isinstance(failure.value, DNSLookupError):
- log.err("DNS lookup failure")
- self.report['failure'] = 'dns_lookup_error'
-
- elif isinstance(failure.value, TCPTimedOutError):
- log.err("TCP Timed Out Error")
- self.report['failure'] = 'tcp_timed_out_error'
-
- elif isinstance(failure.value, ResponseNeverReceived):
- log.err("Response Never Received")
- self.report['failure'] = 'response_never_received'
+ self.addToReport(request, failure=failure)
return
d = agent.request(request['method'], request['url'], headers,
diff --git a/ooniprobe.conf b/ooniprobe.conf
index 6777fde..b553a37 100644
--- a/ooniprobe.conf
+++ b/ooniprobe.conf
@@ -15,7 +15,7 @@ privacy:
# Should we include the ASN of the probe in the report?
includecity: false
# Should we collect a full packet capture on the client?
- includepcap: true
+ includepcap: false
advanced:
# XXX change this to point to the directory where you have stored the GeoIP
# database file. This should be the directory in which OONI is installed
diff --git a/ooniprobe.conf.sample b/ooniprobe.conf.sample
new file mode 100644
index 0000000..a032c0c
--- /dev/null
+++ b/ooniprobe.conf.sample
@@ -0,0 +1,37 @@
+# This is the configuration file for OONIProbe
+# This file follows the YAML markup format: http://yaml.org/spec/1.2/spec.html
+# Keep in mind that indentation matters.
+
+basic:
+ # Where OONIProbe should be writing it's log file
+ logfile: ooniprobe.log
+privacy:
+ # Should we include the IP address of the probe in the report?
+ includeip: false
+ # Should we include the ASN of the probe in the report?
+ includeasn: false
+ # Should we include the ASN of the probe in the report?
+ includecountry: false
+ # Should we include the ASN of the probe in the report?
+ includecity: false
+ # Should we collect a full packet capture on the client?
+ includepcap: false
+advanced:
+ # XXX change this to point to the directory where you have stored the GeoIP
+ # database file. This should be the directory in which OONI is installed
+ # /path/to/ooni-probe/data/
+ geoip_data_dir: /usr/share/GeoIP/
+ debug: true
+ threadpool_size: 10
+ tor_binary: '/usr/sbin/tor'
+ # For auto detection
+ interface: auto
+ # Of specify a specific interface
+ #interface: wlan0
+ start_tor: true
+tor:
+ #socks_port: 9050
+ #control_port: 9051
+ # Specify the absolute path to the Tor bridges to use for testing
+ bridges: bridges.list
+
More information about the tor-commits
mailing list