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