commit a592986dfa5a79b8d4f0d11c44a1e18cdf46938b Author: Arturo Filastò art@fuffa.org Date: Fri Dec 4 17:44:37 2015 +0100
Start adding support for reporting via JSON --- oonib/report/handlers.py | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-)
diff --git a/oonib/report/handlers.py b/oonib/report/handlers.py index 7f7da20..50e0cb7 100644 --- a/oonib/report/handlers.py +++ b/oonib/report/handlers.py @@ -18,6 +18,11 @@ from oonib.config import config
def report_file_name(archive_dir, report_details): timestamp = datetime.fromtimestamp(report_details['start_time']) + ext = report_details.get("format") + if ext == "json": + ext = "json" + else: + ext = "yamloo" keys = dict( report_details.items(), iso8601_timestamp=otime.timestamp(timestamp), @@ -26,9 +31,10 @@ def report_file_name(archive_dir, report_details): day=timestamp.strftime("%d"), hour=timestamp.strftime("%H"), minute=timestamp.strftime("%M"), - second=timestamp.strftime("%S") + second=timestamp.strftime("%S"), + ext=ext ) - report_file_template = "{probe_cc}/{test_name}-{iso8601_timestamp}-{probe_asn}-probe.yamloo" + report_file_template = "{probe_cc}/{test_name}-{iso8601_timestamp}-{probe_asn}-probe.{ext}" if config.main.report_file_template: report_file_template = config.main.report_file_template dst_filename = os.path.join(archive_dir, report_file_template.format(**keys)) @@ -45,13 +51,14 @@ class Report(object): stale_time, report_dir, archive_dir, - reports): + reports, file_format="yaml"): self.report_id = report_id
self.stale_time = stale_time self.report_dir = report_dir self.archive_dir = archive_dir self.reports = reports + self.file_format = file_format
self.refresh()
@@ -76,14 +83,24 @@ class Report(object): report_filename = get_report_path(self.report_id) try: with open(report_filename) as fd: - g = yaml.safe_load_all(fd) - report_details = g.next() + if self.file_format == "json": + line = fd.readline() + json.loads(line) + else: + g = yaml.safe_load_all(fd) + report_details = g.next() except IOError: raise e.ReportNotFound
dst_filename = report_file_name(self.archive_dir, report_details) shutil.move(report_filename, dst_filename)
+ if self.file_format == "json": + report_details["record_type"] = "footer" + with open(dst_filename, "a+") as fd: + json.dump(report_details, dst_filename) + fd.write("\n") + if not self.delayed_call.called: self.delayed_call.cancel() del self.reports[self.report_id]
tor-commits@lists.torproject.org