#!/usr/bin/env python # Copyright (c) 2014, NORDUnet A/S. # See LICENSE for licensing information. import argparse import sys import ast import itertools def parse_one_line(line): row = line.rstrip().split(":") assert row[0].startswith("mergeoutput.") iteration = int(row[0][12:]) stage = row[2].strip() data = ast.literal_eval(row[3].strip()) return (iteration, stage, data) def main(): parser = argparse.ArgumentParser(description="") parser.add_argument('inputfile', help="Input file") args = parser.parse_args() lines = [parse_one_line(line) for line in open(args.inputfile)] iterations = itertools.groupby(lines, lambda x: x[0]) print "<!DOCTYPE html>" print "<html>" print "<head>" print "</head>" print "<body>" print "<div>" legend = [] for (i, iteration) in iterations: print "<table><tr>" for (stagen, (_, stage, data)) in enumerate(iteration): if i == 0: legend.append("<div><span>%s</span>" % (stage,)) data = list(data) for (itemn, (item, useconds)) in enumerate(data): seconds = useconds / 1000000 step = 50 / (len(data) - 1) print "<td style='width: %dpx; padding: 0; background-color: hsl(%d, 90%%, %d%%);' title='%s:%s'>" % (seconds, stagen * 90, itemn * step + 40, stage, item) if i == 0: legend.append("<span style='background-color: hsl(%d, 90%%, %d%%);'>%s</span>" % (stagen * 90, itemn * step + 40, item)) print " " print "</td>" if i == 0: legend.append("</div>") print "</tr></table>" print "</div>" print "<div style='height: 30px;'>" print "</div>" print "<div>" for row in legend: print row print "</div>" print "</body>" print "</html>" main()