Skip to content
Snippets Groups Projects
Commit af311882 authored by Bruce Flynn's avatar Bruce Flynn
Browse files

Have stream info include first, last packet

parent 6caa44a5
No related branches found
No related tags found
No related merge requests found
......@@ -22,6 +22,9 @@ parsing use the ``PacketStream`` class as an iterator.
<Packet apid=826 seqid=13072 stamp=2015-10-13 00:22:04.042798>
>>> packets = list(stream)
>>> first, last, info = stream.info()
>>> print("First:{}\nLast:{}".format(first, last))
First:2015-10-13 00:22:04.042798
Last:2015-10-13 02:04:58.107582
>>> print info
defaultdict(<function edosl0util.stream.<lambda>>,
{800: {'count': 32351, 'last_seqid': 16043, 'num_missing': 0},
......
......@@ -80,9 +80,10 @@ def cmd_info():
first = min(packet.stamp, first)
last = max(packet.stamp, last)
total = 0
first, last, info = packets.info()
LOG.info("First: %s", first)
LOG.info("Last: %s", last)
for apid, dat in packets.info().items():
for apid, dat in info.items():
total += dat['count']
LOG.info("%d: count=%d missing=%d", apid, dat['count'], dat['num_missing'])
LOG.info("{} total packets".format(total))
......
......@@ -170,8 +170,12 @@ class PacketStream(object):
"""
self._stream = jpss_full_stream(fobj)
self._seek_cache = deque()
self._first = None
self._last = None
self._apid_info = defaultdict(
lambda: {'count': 0, 'last_seqid': self.SEQID_NOTSET, 'num_missing': 0})
lambda: {'count': 0,
'last_seqid': self.SEQID_NOTSET,
'num_missing': 0})
self._fail_on_missing = fail_on_missing
def __iter__(self):
......@@ -199,6 +203,15 @@ class PacketStream(object):
def _update_info(self, packet):
have_missing = False
apid = self._apid_info[packet.apid]
if packet.stamp:
if self._first is None:
self._first = packet.stamp
else:
self._first = min(packet.stamp, self._first)
if self._last is None:
self._last = packet.stamp
else:
self._last = max(packet.stamp, self._last)
apid['count'] += 1
if apid['last_seqid'] != self.SEQID_NOTSET:
if packet.seqid > apid['last_seqid']:
......@@ -211,7 +224,7 @@ class PacketStream(object):
return have_missing
def info(self):
return self._apid_info
return self._first, self._last, self._apid_info
def seek_to(self, stamp, apid=None):
"""
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment