Assembla home | Assembla project page
 

root/results_stats.py

Revision 1, 3.4 kB (checked in by nEUrOO, 1 year ago)

--

Line 
1 import os,sys,string
2 from xml.sax import *
3 dico = {}
4 # Handle the XML file with a SAX Parser
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
Note: See TracBrowser for help on using the browser.