blob: 6627a668c66ff7afdc792c54050d3480931e5905 [file] [log] [blame]
#!/usr/bin/env python
from __future__ import division
import pylab
import optparse
import sys
def parse_data(l, state):
state['data'].append([float(x) for x in filter(None, l.split(' '))])
return state
def parse_event(l, state):
components = filter(None, l.split(' '))
vals = [float(x) for x in components[1:]]
if not components[0] in state:
state[components[0]] = [vals]
else:
state[components[0]].append(vals)
return state
def read_line(fd, state):
l = fd.readline()
if not l:
return None
l = l.strip()
if l[0].isdigit():
return parse_data(l, state)
else:
return parse_event(l, state)
def read_data(fd):
state = {'data':[],
'packet-sent':[],
'packet-lost':[],
'packet-received':[],
'packet-observed':[]}
newstate = state
while newstate:
state = newstate
newstate = read_line(fd, state)
return state
def make_xticks(start, end, numticks):
return range(int(start), int(end), int((start-end)/numticks))
def make_plot(title):
l = sys.stdin.readline()
labels = l.strip().split(';')
state = read_data(sys.stdin)
data = state['data']
lost_packets = state['packet-lost']
obsv_packets = state['packet-observed']
sent_packets = state['packet-sent']
recd_packets = state['packet-received']
domain = [x[0] for x in data]
for i in range(1,len(labels)):
pylab.plot(domain, [x[i] for x in data], label=labels[i])
pylab.plot([x[0] for x in lost_packets], [x[1] for x in lost_packets],
label='Client sent packet, but dropped', marker='x', linestyle=None, ms=8)
pylab.plot([x[0] for x in sent_packets], [x[1] for x in sent_packets],
label='Client sent packet', marker='^', linestyle=None, ms=8)
pylab.plot([x[0] for x in obsv_packets], [x[1] for x in obsv_packets],
label='Remote time observation', marker='D', linestyle=None, ms=8)
pylab.plot([x[0] for x in recd_packets], [x[1] for x in recd_packets],
label='Client received packet', marker='v', linestyle=None, ms=8)
pylab.legend()
pylab.ylabel(r'Clock time (s)')
pylab.xlabel(r'Real time (s)')
pylab.title(title)
pylab.grid(True)
pylab.show()
def main(args):
parser = optparse.OptionParser()
title = ' '.join(args[1:])
make_plot(title)
main(sys.argv)