| 1 |
import os,sys,string |
|---|
| 2 |
from xml.sax import * |
|---|
| 3 |
dico = {} |
|---|
| 4 |
|
|---|
| 5 |
class ResultHandler(ContentHandler): |
|---|
| 6 |
def __init__(self): |
|---|
| 7 |
global dico |
|---|
| 8 |
self.inElmt = False |
|---|
| 9 |
self.nbInputs = False |
|---|
| 10 |
self.nbDiffInputs = False |
|---|
| 11 |
self.nbDiffInputsSunked = False |
|---|
| 12 |
self.sinks = False |
|---|
| 13 |
self.variables = False |
|---|
| 14 |
self.functions = False |
|---|
| 15 |
self.classes = False |
|---|
| 16 |
self.inFile = False |
|---|
| 17 |
self.nLoc = -1 |
|---|
| 18 |
self.sName, self.tmp = "","" |
|---|
| 19 |
self.temp = {} |
|---|
| 20 |
def startElement(self, name, attrs): |
|---|
| 21 |
if name == 'instance': |
|---|
| 22 |
self.inElmt = True |
|---|
| 23 |
self.temp = {} |
|---|
| 24 |
self.sName = "" |
|---|
| 25 |
elif name == 'file': |
|---|
| 26 |
self.inFile = True |
|---|
| 27 |
self.sName = "" |
|---|
| 28 |
if attrs.getValue('loc'): |
|---|
| 29 |
self.nLoc = attrs.getValue('loc') |
|---|
| 30 |
elif name == "variables": |
|---|
| 31 |
self.variables = True |
|---|
| 32 |
self.tmp = "" |
|---|
| 33 |
elif name == "classes": |
|---|
| 34 |
self.classes = True |
|---|
| 35 |
self.tmp = "" |
|---|
| 36 |
elif name == "functions": |
|---|
| 37 |
self.functions = True |
|---|
| 38 |
self.tmp = "" |
|---|
| 39 |
elif name == "sinks": |
|---|
| 40 |
self.sinks = True |
|---|
| 41 |
self.tmp = "" |
|---|
| 42 |
elif name == "nbInputs": |
|---|
| 43 |
self.nbInputs = True |
|---|
| 44 |
self.tmp = "" |
|---|
| 45 |
elif name == "nbDiffInputs": |
|---|
| 46 |
self.nbDiffInputs = True |
|---|
| 47 |
self.tmp = "" |
|---|
| 48 |
elif name == "nbDiffInputsSunked": |
|---|
| 49 |
self.nbDiffInputsSunked = True |
|---|
| 50 |
self.tmp = "" |
|---|
| 51 |
def characters(self, ch): |
|---|
| 52 |
if self.inFile: |
|---|
| 53 |
self.sName = self.sName + ch |
|---|
| 54 |
else: |
|---|
| 55 |
self.tmp = self.tmp + ch |
|---|
| 56 |
def endElement(self, name): |
|---|
| 57 |
global attack_list |
|---|
| 58 |
if name == 'nbInputs': |
|---|
| 59 |
self.nbInputs = False |
|---|
| 60 |
self.temp['nbInputs'] = self.tmp |
|---|
| 61 |
elif name == 'nbDiffInputs': |
|---|
| 62 |
self.nbDiffInputs = False |
|---|
| 63 |
self.temp['nbDiffInputs'] = self.tmp |
|---|
| 64 |
elif name == 'nbDiffInputsSunked': |
|---|
| 65 |
self.nbDiffInputsSunked = False |
|---|
| 66 |
self.temp['nbDiffInputsSunked'] = self.tmp |
|---|
| 67 |
elif name == 'functions': |
|---|
| 68 |
self.functions = False |
|---|
| 69 |
self.temp['functions'] = self.tmp |
|---|
| 70 |
elif name == 'sinks': |
|---|
| 71 |
self.sinks = False |
|---|
| 72 |
self.temp['sinks'] = self.tmp |
|---|
| 73 |
elif name == 'classes': |
|---|
| 74 |
self.classes = False |
|---|
| 75 |
self.temp['classes'] = self.tmp |
|---|
| 76 |
elif name == 'variables': |
|---|
| 77 |
self.variables = False |
|---|
| 78 |
self.temp['variables'] = self.tmp |
|---|
| 79 |
elif name == 'file': |
|---|
| 80 |
self.inFile = False |
|---|
| 81 |
self.temp['loc'] = self.nLoc |
|---|
| 82 |
elif name == 'instance': |
|---|
| 83 |
self.inElmt = False |
|---|
| 84 |
if '.xml' in self.sName: |
|---|
| 85 |
self.sName = self.sName.replace(".xml", "") |
|---|
| 86 |
dico[self.sName] = self.temp |
|---|
| 87 |
|
|---|
| 88 |
from pychart import * |
|---|
| 89 |
|
|---|
| 90 |
def parse(f): |
|---|
| 91 |
global dico |
|---|
| 92 |
print f |
|---|
| 93 |
dico = {} |
|---|
| 94 |
parser = make_parser() |
|---|
| 95 |
def_handler = ResultHandler() |
|---|
| 96 |
parser.setContentHandler(def_handler) |
|---|
| 97 |
parser.parse(f) |
|---|
| 98 |
sample = [] |
|---|
| 99 |
for a in dico: |
|---|
| 100 |
fname = a.replace("./study/metrics/",'') |
|---|
| 101 |
isunk = int(dico[a]['nbDiffInputsSunked']) |
|---|
| 102 |
entry = int(dico[a]['nbDiffInputs']) |
|---|
| 103 |
sinks = int(dico[a]['sinks']) |
|---|
| 104 |
sample.append([fname, isunk, entry * sinks]) |
|---|
| 105 |
return sample |
|---|
| 106 |
|
|---|
| 107 |
def get_bar(string, value, ratio): |
|---|
| 108 |
s= "" |
|---|
| 109 |
s += string |
|---|
| 110 |
s += "] .|" |
|---|
| 111 |
n = int(value * ratio) |
|---|
| 112 |
for k in range(0,n): |
|---|
| 113 |
s += "-" |
|---|
| 114 |
s += "| (%d)" % value |
|---|
| 115 |
return s |
|---|
| 116 |
|
|---|
| 117 |
if __name__ == "__main__": |
|---|
| 118 |
fname = sys.argv[1] |
|---|
| 119 |
data = parse(fname) |
|---|
| 120 |
max_bar1 = 0 |
|---|
| 121 |
max_bar2 = 0 |
|---|
| 122 |
max_trait= 100.0 |
|---|
| 123 |
for a in data: |
|---|
| 124 |
if a[1] > max_bar1: |
|---|
| 125 |
max_bar1 = float(a[1]) |
|---|
| 126 |
if a[2] > max_bar2: |
|---|
| 127 |
max_bar2 = float(a[2]) |
|---|
| 128 |
ratio_1 = float(max_trait / max_bar1) |
|---|
| 129 |
ratio_2 = float(max_trait / max_bar2) |
|---|
| 130 |
for a in data: |
|---|
| 131 |
print a[0].replace(fname[:fname.find('.xml')], '') |
|---|
| 132 |
print get_bar("[ df ", a[1], ratio_1) |
|---|
| 133 |
print get_bar("[ S ", a[2], ratio_2) |
|---|
| 134 |
|
|---|