[tor-commits] [stem/master] Parsing dirreq-stats-end extrainfo lines
atagar at torproject.org
atagar at torproject.org
Mon May 14 00:14:27 UTC 2012
commit 6f40a5e87228ea8f0af76d2aeba859025ce468b2
Author: Damian Johnson <atagar at torproject.org>
Date: Sat May 12 12:32:09 2012 -0700
Parsing dirreq-stats-end extrainfo lines
Parsing and test. This is the same format as bridge-stats-end so combining
those tests.
---
stem/descriptor/extrainfo_descriptor.py | 32 ++++++++++++++----
test/unit/descriptor/extrainfo_descriptor.py | 47 +++++++++++++++-----------
2 files changed, 52 insertions(+), 27 deletions(-)
diff --git a/stem/descriptor/extrainfo_descriptor.py b/stem/descriptor/extrainfo_descriptor.py
index 380d022..a8f7961 100644
--- a/stem/descriptor/extrainfo_descriptor.py
+++ b/stem/descriptor/extrainfo_descriptor.py
@@ -154,6 +154,12 @@ class ExtraInfoDescriptor(stem.descriptor.Descriptor):
write_history_end (datetime.datetime) - end of the sampling interval
write_history_interval (int) - seconds per interval
write_history_values (list) - bytes written during each interval (*)
+
+ Directory Mirror Attributes:
+ dirreq_stats_end (datetime.datetime) - end of the period where directory
+ mirroring stats were gathered
+ dirreq_stats_interval (int) - length in seconds of the interval where
+ directory stats were gathered
dir_read_history_line (str) - bytes read for directory mirroring
dir_read_history_end (datetime.datetime) - end of the sampling interval
@@ -164,18 +170,18 @@ class ExtraInfoDescriptor(stem.descriptor.Descriptor):
dir_write_history_end (datetime.datetime) - end of the sampling interval
dir_write_history_interval (int) - seconds per interval
dir_write_history_values (list) - bytes read during each interval (*)
-
- Bridge-only Attributes:
+
+ Bridge Attributes:
bridge_stats_end (datetime.datetime) - end of the period when geoip
statistics were gathered
- bridge_stats_end_interval (int) - length in seconds of th interval where
+ bridge_stats_interval (int) - length in seconds of the interval where
stats were gathered
bridge_ips (dict) - mapping of country codes to a rounded number of unique
ips from that region
geoip_start_time (datetime.datetime) - replaced by bridge_stats_end
geoip_client_origins (dict) - replaced by bridge_ips
-
- (*) required fields, others are left as None if undefined
+
+ (*) required fields, others are left as None if undefined
"""
def __init__(self, raw_contents, validate = True, annotations = None):
@@ -215,6 +221,9 @@ class ExtraInfoDescriptor(stem.descriptor.Descriptor):
self.write_history_interval = None
self.write_history_values = []
+ self.dirreq_stats_end = None
+ self.dirreq_stats_interval = None
+
self.dir_read_history_line = None
self.dir_read_history_end = None
self.dir_read_history_interval = None
@@ -226,7 +235,7 @@ class ExtraInfoDescriptor(stem.descriptor.Descriptor):
self.dir_write_history_values = []
self.bridge_stats_end = None
- self.bridge_stats_end_interval = None
+ self.bridge_stats_interval = None
self.bridge_ips = None
self.geoip_start_time = None
self.geoip_client_origins = None
@@ -320,7 +329,7 @@ class ExtraInfoDescriptor(stem.descriptor.Descriptor):
try:
timestamp, interval, _ = _parse_timestamp_and_interval(keyword, value)
self.bridge_stats_end = timestamp
- self.bridge_stats_end_interval = interval
+ self.bridge_stats_interval = interval
except ValueError, exc:
if validate: raise exc
elif keyword in ("geoip-client-origins", "bridge-ips"):
@@ -345,6 +354,15 @@ class ExtraInfoDescriptor(stem.descriptor.Descriptor):
self.geoip_client_origins = locale_usage
elif keyword == "bridge-ips":
self.bridge_ips = locale_usage
+ elif keyword == "dirreq-stats-end":
+ # "dirreq-stats-end" YYYY-MM-DD HH:MM:SS (NSEC s)
+
+ try:
+ timestamp, interval, _ = _parse_timestamp_and_interval(keyword, value)
+ self.dirreq_stats_end = timestamp
+ self.dirreq_stats_interval = interval
+ except ValueError, exc:
+ if validate: raise exc
elif keyword in ("read-history", "write-history", "dirreq-read-history", "dirreq-write-history"):
try:
timestamp, interval, remainder = _parse_timestamp_and_interval(keyword, value)
diff --git a/test/unit/descriptor/extrainfo_descriptor.py b/test/unit/descriptor/extrainfo_descriptor.py
index 32732e3..b4c5fbe 100644
--- a/test/unit/descriptor/extrainfo_descriptor.py
+++ b/test/unit/descriptor/extrainfo_descriptor.py
@@ -151,29 +151,36 @@ class TestExtraInfoDescriptor(unittest.TestCase):
desc_text = _make_descriptor({"geoip-start-time": entry})
desc = self._expect_invalid_attr(desc_text, "geoip_start_time")
- def test_bridge_stats_end(self):
+ def test_stats_end(self):
"""
- Parses the bridge-stats-end line with valid and invalid data.
+ Parses the bridge-stats-end and dirreq-stats-end lines with valid and
+ invalid data.
"""
- desc_text = _make_descriptor({"bridge-stats-end": "2012-05-03 12:07:50 (500 s)"})
- desc = ExtraInfoDescriptor(desc_text)
- self.assertEquals(datetime.datetime(2012, 5, 3, 12, 7, 50), desc.bridge_stats_end)
- self.assertEquals(500, desc.bridge_stats_end_interval)
-
- test_entry = (
- "",
- "2012-05-03 12:07:60 (500 s)",
- "2012-05-03 12:07:50 (500s)",
- "2012-05-03 12:07:50 (500 s",
- "2012-05-03 12:07:50 (500 )",
- "2012-05-03 ",
- "2012-05-03",
- )
-
- for entry in test_entry:
- desc_text = _make_descriptor({"bridge-stats-end": entry})
- desc = self._expect_invalid_attr(desc_text, "bridge_stats_end")
+ for keyword in ('bridge-stats-end', 'dirreq-stats-end'):
+ end_attr = keyword.replace('-', '_')
+ interval_attr = end_attr[:-4] + "_interval"
+
+ desc_text = _make_descriptor({keyword: "2012-05-03 12:07:50 (500 s)"})
+ desc = ExtraInfoDescriptor(desc_text)
+ self.assertEquals(datetime.datetime(2012, 5, 3, 12, 7, 50), getattr(desc, end_attr))
+ self.assertEquals(500, getattr(desc, interval_attr))
+
+ test_entry = (
+ "",
+ "2012-05-03 12:07:60 (500 s)",
+ "2012-05-03 12:07:50 (500s)",
+ "2012-05-03 12:07:50 (500 s",
+ "2012-05-03 12:07:50 (500 )",
+ "2012-05-03 ",
+ "2012-05-03",
+ )
+
+ for entry in test_entry:
+ desc_text = _make_descriptor({keyword: entry})
+ desc = self._expect_invalid_attr(desc_text)
+ self.assertEquals(None, getattr(desc, end_attr))
+ self.assertEquals(None, getattr(desc, interval_attr))
def test_bridge_ips(self):
"""
More information about the tor-commits
mailing list