| #!/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) |