[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [stem/master] Parsing extrainfo dirreq-read/write-history lines
commit 0737bada04f71434e9169bc964257dffce8f90c3
Author: Damian Johnson <atagar@xxxxxxxxxxxxxx>
Date: Wed May 9 10:01:32 2012 -0700
Parsing extrainfo dirreq-read/write-history lines
Handling the dirreq-read-history and dirreq-write-history. These are almost
identical to the read-history and write-history lines so tieing it into that
parser. This is the last field I need to parse the metrics descriptor I'm using
for an example in the integ tests.
---
stem/descriptor/extrainfo_descriptor.py | 38 +++++++++++++++++++++++-
test/integ/descriptor/extrainfo_descriptor.py | 23 ++++++++++++--
2 files changed, 55 insertions(+), 6 deletions(-)
diff --git a/stem/descriptor/extrainfo_descriptor.py b/stem/descriptor/extrainfo_descriptor.py
index 1def09c..aa02bc9 100644
--- a/stem/descriptor/extrainfo_descriptor.py
+++ b/stem/descriptor/extrainfo_descriptor.py
@@ -155,6 +155,16 @@ class ExtraInfoDescriptor(stem.descriptor.Descriptor):
write_history_interval (int) - seconds per interval
write_history_values (list) - bytes written during each interval (*)
+ dir_read_history_line (str) - bytes read for directory mirroring
+ dir_read_history_end (datetime.datetime) - end of the sampling interval
+ dir_read_history_interval (int) - seconds per interval
+ dir_read_history_values (list) - bytes read during each interval (*)
+
+ dir_write_history_line (str) - bytes written for directory mirroring
+ 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 (*)
+
(*) required fields, others are left as None if undefined
"""
@@ -195,6 +205,16 @@ class ExtraInfoDescriptor(stem.descriptor.Descriptor):
self.write_history_interval = None
self.write_history_values = []
+ self.dir_read_history_line = None
+ self.dir_read_history_end = None
+ self.dir_read_history_interval = None
+ self.dir_read_history_values = []
+
+ self.dir_write_history_line = None
+ self.dir_write_history_end = None
+ self.dir_write_history_interval = None
+ self.dir_write_history_values = []
+
self._unrecognized_lines = []
entries, first_keyword, last_keyword, _ = \
@@ -263,7 +283,7 @@ class ExtraInfoDescriptor(stem.descriptor.Descriptor):
except ValueError:
if validate:
raise ValueError("Published line's time wasn't parseable: %s" % line)
- elif keyword in ("read-history", "write-history"):
+ elif keyword in ("read-history", "write-history", "dirreq-read-history", "dirreq-write-history"):
try:
timestamp, interval, remainder = _parse_timestamp_and_interval(keyword, value)
@@ -280,11 +300,25 @@ class ExtraInfoDescriptor(stem.descriptor.Descriptor):
self.read_history_end = timestamp
self.read_history_interval = interval
self.read_history_values = history_values
- else:
+ elif keyword == "write-history":
self.write_history_line = value
self.write_history_end = timestamp
self.write_history_interval = interval
self.write_history_values = history_values
+ elif keyword == "dirreq-read-history":
+ self.dir_read_history_line = value
+ self.dir_read_history_end = timestamp
+ self.dir_read_history_interval = interval
+ self.dir_read_history_values = history_values
+ elif keyword == "dirreq-write-history":
+ self.dir_write_history_line = value
+ self.dir_write_history_end = timestamp
+ self.dir_write_history_interval = interval
+ self.dir_write_history_values = history_values
+ else:
+ # not gonna happen unless we change the main loop's conditional
+ # without fixing this one
+ raise ValueError("BUG: unrecognized keyword '%s'" % keyword)
except ValueError, exc:
if not validate: continue
else: raise exc
diff --git a/test/integ/descriptor/extrainfo_descriptor.py b/test/integ/descriptor/extrainfo_descriptor.py
index 51af571..7a041d0 100644
--- a/test/integ/descriptor/extrainfo_descriptor.py
+++ b/test/integ/descriptor/extrainfo_descriptor.py
@@ -38,12 +38,15 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
self.assertEquals(900, desc.read_history_interval)
self.assertEquals(datetime.datetime(2012, 5, 5, 17, 2, 45), desc.write_history_end)
self.assertEquals(900, desc.write_history_interval)
+ self.assertEquals(datetime.datetime(2012, 5, 5, 17, 2, 45), desc.dir_read_history_end)
+ self.assertEquals(900, desc.dir_read_history_interval)
+ self.assertEquals(datetime.datetime(2012, 5, 5, 17, 2, 45), desc.dir_write_history_end)
+ self.assertEquals(900, desc.dir_write_history_interval)
self.assertEquals(expected_signature, desc.signature)
+ self.assertEquals([], desc.get_unrecognized_lines())
- # TODO: still missing dirreq-read-history and dirreq-write-history
- #self.assertEquals([], desc.get_unrecognized_lines())
-
- # The read-history and write-history lines are pretty long so just checking
+ # The read-history, write-history, dirreq-read-history, and
+ # dirreq-write-history lines are pretty long so just checking
# the initial contents for the line and parsed values.
read_start = "2012-05-05 17:02:45 (900 s) 3309568,9216,41984"
@@ -57,6 +60,18 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
write_values_start = [1082368, 19456, 50176, 272384, 485376]
self.assertEquals(write_values_start, desc.write_history_values[:5])
+
+ dir_read_start = "2012-05-05 17:02:45 (900 s) 0,0,0,0,33792,27648,48128"
+ self.assertTrue(desc.dir_read_history_line.startswith(dir_read_start))
+
+ dir_read_values_start = [0, 0, 0, 0, 33792, 27648, 48128]
+ self.assertEquals(dir_read_values_start, desc.dir_read_history_values[:7])
+
+ dir_write_start = "2012-05-05 17:02:45 (900 s) 0,0,0,227328,349184"
+ self.assertTrue(desc.dir_write_history_line.startswith(dir_write_start))
+
+ dir_write_values_start = [0, 0, 0, 227328, 349184, 382976, 738304]
+ self.assertEquals(dir_write_values_start, desc.dir_write_history_values[:7])
def test_cached_descriptor(self):
"""
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits