X-Git-Url: http://rtime.felk.cvut.cz/gitweb/can-benchmark.git/blobdiff_plain/8c81374c57a81ccab4210951e6374102f4a04d26..7fe827a3c5ca6f6197bb9cade6a1d08efd9a5b41:/gw-tests/genhtml/genhtml.py diff --git a/gw-tests/genhtml/genhtml.py b/gw-tests/genhtml/genhtml.py index 83995bc..5dacc9e 100755 --- a/gw-tests/genhtml/genhtml.py +++ b/gw-tests/genhtml/genhtml.py @@ -9,10 +9,27 @@ class DimValue: def __init__(self, dim, value): self.dim = dim self.value = value + def __str__(self): + return self.dim.val2str(self.value) def __repr__(self): - return repr(self.value) - def htmlLabel(self): - return self.dim.htmlLabel(self.value) + return "DimValue("+str(self.dim.__class__.__name__) + ", "+repr(self.value)+")" + def htmlTableHeading(self): + return self.dim.htmlTableHeading(self.value) + +class DimValues(list): + def replace(self, val): + for i in xrange(len(self)): + if self[i].dim == val.dim: + self[i] = val + def __add__(self, val): + return DimValues(self).append(val) + def __sub__(self, dim): + result = DimValues(self) + print repr(result) + for v in self: + if v.dim == dim: + result.remove(v) + return result class Dimension(dict): def __init__(self, atype, name=None): @@ -21,19 +38,25 @@ class Dimension(dict): self.name = name else: self.name = atype + self.sortedKeys = [] def __iter__(self): - keys = self.keys() - keys.sort() - for k in keys: - yield self[k] + for i in xrange(len(self)): + yield self.getValue(i) + def getValue(self, index): + print self.sortedKeys + return self[self.sortedKeys[index]] def addValue(self, *values): for value in values: if value not in self: self[value] = DimValue(self, value) - def htmlLabel(self, v): - return v + self.sortedKeys = self.keys() + self.sortedKeys.sort() + def val2str(self, v): + return str(v) + def htmlTableHeading(self, v): + return self.val2str(v) def __str__(self): return self.name def __repr__(self): @@ -42,7 +65,7 @@ class Dimension(dict): class DimensionKern(Dimension): def __init__(self): Dimension.__init__(self, 'gwkern', 'GW kernel') - def htmlLabel(self, v): + def htmlTableHeading(self, v): i=v.find(":") if i>0: kver=v[:i] else: kver=v @@ -57,10 +80,12 @@ class DimensionKern(Dimension): class DimensionHostKern(Dimension): def __init__(self): Dimension.__init__(self, 'hostkern', 'Host kernel') - def htmlLabel(self, v): + def val2str(self, v): if v.find("host-") == 0: v = v[5:] - # TODO: remove host- prefix + return v + def htmlTableHeading(self, v): + v = self.val2str(v) i = v.find(":") if i>0: kver = v[:i] else: kver = v @@ -75,15 +100,21 @@ class DimensionHostKern(Dimension): class DimensionTest(Dimension): def __init__(self): Dimension.__init__(self, 'test', 'Test') - def htmlLabel(self, v): + def htmlTableHeading(self, v): return v+"
source"%(urllib.quote(v)) class DimensionTraffic(Dimension): def __init__(self): Dimension.__init__(self, 'traf', 'Traffic') - def htmlLabel(self, v): - return v - + def val2str(self, v): + if v == "50": + return "50%" + elif v == "oneatatime": + return "one message at a time" + else: + return v + def htmlTableHeading(self, v): + return self.val2str(v) class Test: @classmethod def isOnPath(cls, path): @@ -91,17 +122,22 @@ class Test: return os.path.isfile(f) def __init__(self, path): self.path = path + self.name = os.path.basename(path) def printThumbLink(self, file): - print self.path - for img in dircache.listdir(self.path+'/thumb'): - print >>file, "" % \ - (urllib.quote(self.path), img, urllib.quote(self.path), img) + thumb = self.path+'/thumb' + try: + imgs = [img for img in dircache.listdir(thumb)] + except OSError: + imgs = [ self.name + ".png" ] + for img in imgs: + print >>file, "" % \ + (urllib.quote(self.path), img, urllib.quote(self.path), img) def iterDimValues(dimensions): idx = [0 for i in xrange(len(dimensions))] done=False while not done: - values=[] + values=DimValues() for i in xrange(len(dimensions)): values.append(dimensions[i].values()[idx[i]]) yield values @@ -157,7 +193,6 @@ class Tests(dict): def generateHtml(self): for pair in self.iterDimensionPairs(): remDims = [d for d in self.iterRemainingDimensions(pair)] - print pair, remDims for vals in iterDimValues(remDims): page = Page(pair, remDims, vals, self) page.generate() @@ -174,11 +209,13 @@ class Page: self.dimOther = dimOther self.valsOther = valsOther self.tests = tests - def getName(self): - return "%s-vs-%s-%s.html"%(self.dimy.type, self.dimx.type, "-".join([v.value for v in self.valsOther])) + def getName(self, dimy=None, dimx=None, valsOther=None): + return "%s-vs-%s-for-%s.html"%(dimx or self.dimy.type, + dimy or self.dimx.type, + "-".join([v.value for v in valsOther or self.valsOther])) def generate(self): html = open(self.getName(), "w") - title = "CAN gateway timing analysis" + ", ".join([v.dim.name+" "+v.value for v in self.valsOther]) + title = "CAN gateway timing analysis" print >> html, """ @@ -192,31 +229,46 @@ th, td { border: 1px solid lightgray; padding: 4px;}

%s

""" % (title, title) + params = ["%s %s" % (v.dim, v) for v in self.valsOther] + print >>html, "Results for:", ", ".join(params), "
" for d in self.dimOther: - pass -# print >>html, "View for %s: " % str(ps.pageclass.name) -# for v in ps.values: -# print >>html, "%s | "%(ps.values.type, urllib.quote(v), v) -# print >>html, "
" -# try: -# print >>html, d.htmlPreamble() -# except Exception: -# pass - - print >>html, "" + print >>html, "%s: " % d + print >>html, "X axis, " % \ + self.getName(dimx=d, + valsOther=self.valsOther - d + self.dimx.getValue(0)) + print >>html, "Y axis;  " % self.getName(dimy=d) + links = [] + for v in d.values(): + if v in self.valsOther: + links.append(str(v)) + else: + vv = DimValues(self.valsOther) + vv.replace(v) + links.append("%s"%(urllib.quote(self.getName(valsOther=vv)), str(v))) + print >>html, " | ".join(links) + print >>html, "
" + try: + print >>html, d.htmlPreamble() + except Exception: + pass + + print >>html, "
" % (self.dimx.name, self.dimy.name) for x in self.dimx: - print >>html, "" % x.htmlLabel() + print >>html, "" % x.htmlTableHeading() print >>html, "" for y in self.dimy: - print >>html, "" % y.htmlLabel() + print >>html, "" % y.htmlTableHeading() for x in self.dimx: print >>html, "" + try: + test = tests.getTest(idx) + test.printThumbLink(html) + except KeyError: + print >>html, "N/A" + print >>html, "" print >>html, "" print >> html, """
%s →
%s ↓
%s%s
%s
%s" idx = [x,y] idx.extend(self.valsOther) - test = tests.getTest(idx) - test.printThumbLink(html) - print >>html, "
@@ -227,6 +279,7 @@ th, td { border: 1px solid lightgray; padding: 4px;} if __name__ == "__main__": os.chdir(sys.argv[1]) + os.system("rm *.html") tests = Tests("./", DimensionHostKern(), DimensionKern(), DimensionTraffic(), DimensionTest()) tests.generateHtml() sys.exit(0)