5d16c9e1adc12248a2385a1b5c852b763d33aa5c
[nepi.git] / examples / omf / vod_exp / demo_plot.py
1 import matplotlib
2 matplotlib.use('GTK') 
3 import matplotlib.pyplot as plt
4 import numpy as np
5 import os
6 import time
7
8 import subprocess
9
10 ##### Parsing Argument to Plot #####
11 from optparse import OptionParser
12
13 usage = ("usage: %prog -p <type-of-plot> -d <type-of-packets> -f <folder-with-stats>")
14
15 parser = OptionParser(usage = usage)
16 parser.add_option("-p", "--plot", dest="plot",
17         help="Type of Plot : vod_broad_cli | vod_broad_wlan | vod_broad_eth | broad_all | vod_all", type="string")
18 parser.add_option("-d", "--packet", dest="packet",
19         help="Packet to use for the plot : frames | bytes", type="string")
20 parser.add_option("-f", "--folder", dest="folder",
21         help="Folder with the statistics ", type="string")
22
23 (options, args) = parser.parse_args()
24 plot = options.plot
25 packet = options.packet
26 folder = options.folder
27
28 ##### Initialize the data #####
29
30 overall_stats_broad = {}
31 overall_stats_vod = {}
32
33 for i in [1, 3, 5]:
34     overall_stats_broad[i] = {}
35     overall_stats_broad[i]['eth'] = []
36     overall_stats_broad[i]['wlan'] = []
37     overall_stats_broad[i]['cli'] = []
38
39     overall_stats_vod[i] = {}
40     overall_stats_vod[i]['eth'] = []
41     overall_stats_vod[i]['wlan'] = []
42     overall_stats_vod[i]['cli'] = []
43
44 all_broad_folders = os.listdir(folder + 'demo_openlab_traces/broadcast')
45 all_vod_folders = os.listdir(folder + 'demo_openlab_traces/vod')
46
47 data_broad_folders = list()
48 data_vod_folders = list()
49
50 # Loop to take only the wanted folder
51 for f in all_broad_folders :
52     if f.startswith('s_'): 
53         data_broad_folders.append(f)
54
55 for f in all_vod_folders :
56     if f.startswith('s_'): 
57         data_vod_folders.append(f)
58
59 ##### For Broadcast #####
60
61 stats_broad_wlan = list()
62 stats_broad_eth = list()
63 stats_broad_cli = list()
64
65 # Write the wanted statistics into a file
66 for exp in data_broad_folders :
67     broad_file = os.listdir(folder + 'demo_openlab_traces/broadcast/'+exp)
68     for f in broad_file :
69         dest = folder + "demo_openlab_traces/broadcast/" + exp + "/stats_" + f + ".txt"
70         command = "tshark -r " + folder + "demo_openlab_traces/broadcast/" + exp + "/" + f + " -z io,phs > " + dest
71         if f.startswith('capwificen_wlan'):
72             p = subprocess.Popen(command , shell=True)
73             p.wait()
74             stats_broad_wlan.append(dest)
75         if f.startswith('capwificen_eth'):
76             p = subprocess.Popen(command , shell=True)
77             p.wait()
78             stats_broad_eth.append(dest)
79         if f.startswith('capcli'):
80             p = subprocess.Popen(command , shell=True)
81             p.wait()
82             stats_broad_cli.append(dest)
83
84 # Numer of client that was used
85 def nb_client(s):
86     elt = s.split('_')
87     if elt[-2] == '1':
88         return 1
89     if elt[-2] == '3':
90         return 3
91     if elt[-2] == '5':
92         return 5
93
94 # Return the value wanted
95 def get_broad_values(list_files, type_file):
96     for s in list_files:
97         nb = nb_client(s)
98         o = open(s, 'r')
99         for l in o:
100             if 'udp' in l:
101                 row = l.split(':')
102                 f = row[1].split(' ')
103                 frame = int(f[0])
104                 byte = int(row[2])
105
106                 res = {}
107                 res['frames'] = frame
108                 res['bytes'] = byte
109                 if frame < 20 :
110                     continue
111                 overall_stats_broad[nb][type_file].append(res)
112         o.close() 
113
114 get_broad_values(stats_broad_wlan, 'wlan')
115 get_broad_values(stats_broad_eth, 'eth')
116 get_broad_values(stats_broad_cli, 'cli')
117
118 #print overall_stats_broad
119
120 ##### For VOD #####
121
122 stats_vod_wlan = list()
123 stats_vod_eth = list()
124 stats_vod_cli = list()
125
126 # Write the wanted statistics into a file
127 for exp in data_vod_folders :
128     vod_file = os.listdir(folder + 'demo_openlab_traces/vod/'+exp)
129     for f in vod_file :
130         dest = folder + "/demo_openlab_traces/vod/" + exp + "/stats_" + f + ".txt"
131         command = "tshark -r " + folder + "demo_openlab_traces/vod/" + exp + "/" + f + " -z io,phs > " + dest
132         if f.startswith('capwificen_wlan'):
133             p = subprocess.Popen(command , shell=True)
134             p.wait()
135             stats_vod_wlan.append(dest)
136         if f.startswith('capwificen_eth'):
137             p = subprocess.Popen(command , shell=True)
138             p.wait()
139             stats_vod_eth.append(dest)
140         if f.startswith('capcli'):
141             p = subprocess.Popen(command , shell=True)
142             p.wait()
143             stats_vod_cli.append(dest)
144
145 # Return the value wanted
146 def get_vod_values(list_files, type_file):
147     for s in list_files:
148         nb = nb_client(s)
149         o = open(s, 'r')
150         for l in o:
151             if 'udp' in l:
152                 row = l.split(':')
153                 f = row[1].split(' ')
154                 frame = int(f[0])
155                 byte = int(row[2])
156
157                 res = {}
158                 res['frames'] = frame
159                 res['bytes'] = byte
160                 if frame < 100 :
161                     continue
162                 overall_stats_vod[nb][type_file].append(res)
163         o.close() 
164
165 get_vod_values(stats_vod_wlan, 'wlan')
166 get_vod_values(stats_vod_eth, 'eth')
167 get_vod_values(stats_vod_cli, 'cli')
168
169 #print overall_stats_vod
170
171 ##### For Plotting #####
172
173 if plot != "vod_all":
174     means_broad_cli = list()
175     std_broad_cli = list()
176
177     means_broad_wlan = list()
178     std_broad_wlan = list()
179
180     means_broad_eth = list()
181     std_broad_eth = list()
182
183     for i in [1, 3, 5]:
184         data_cli = list()
185         for elt in overall_stats_broad[i]['cli']:
186             data_cli.append(elt['frames'])
187         samples = np.array(data_cli)
188
189         m = samples.mean()
190         std = np.std(data_cli)
191         means_broad_cli.append(m)
192         std_broad_cli.append(std)
193
194         data_wlan = list()
195         for elt in overall_stats_broad[i]['wlan']:
196             data_wlan.append(elt['frames'])
197         samples = np.array(data_wlan)
198
199         m = samples.mean()
200         std = np.std(data_wlan)
201         means_broad_wlan.append(m)
202         std_broad_wlan.append(std)
203     
204         data_eth = list()
205         for elt in overall_stats_broad[i]['eth']:
206             data_eth.append(elt['frames'])
207         samples = np.array(data_eth)
208
209         m = samples.mean()
210         std = np.std(data_eth)
211         means_broad_eth.append(m)
212         std_broad_eth.append(std)
213
214 if plot != "broad_all":
215     means_vod_cli = list()
216     std_vod_cli = list()
217
218     means_vod_wlan = list()
219     std_vod_wlan = list()
220
221     means_vod_eth = list()
222     std_vod_eth = list()
223
224     for i in [1, 3, 5]:
225         data_cli = list()
226         for elt in overall_stats_vod[i]['cli']:
227             data_cli.append(elt['frames'])
228         samples = np.array(data_cli)
229
230         m = samples.mean()
231         std = np.std(data_cli)
232         means_vod_cli.append(m)
233         std_vod_cli.append(std)
234
235         data_wlan = list()
236         for elt in overall_stats_vod[i]['wlan']:
237             data_wlan.append(elt['frames'])
238         samples = np.array(data_wlan)
239
240         m = samples.mean()
241         std = np.std(data_wlan)
242         means_vod_wlan.append(m)
243         std_vod_wlan.append(std)
244     
245         data_eth = list()
246         for elt in overall_stats_vod[i]['eth']:
247             data_eth.append(elt['frames'])
248         samples = np.array(data_eth)
249
250         m = samples.mean()
251         std = np.std(data_eth)
252         means_vod_eth.append(m)
253         std_vod_eth.append(std)
254
255 ### To plot ###
256 n_groups = 3
257
258 #Put the right numbers
259 if plot == "broad_all":
260     means_bars1 = tuple(means_broad_cli)
261     std_bars1 = tuple(std_broad_cli)
262
263     means_bars2 = tuple(means_broad_wlan)
264     std_bars2 = tuple(std_broad_wlan)
265
266     means_bars3 = tuple(means_broad_eth)
267     std_bars3 = tuple(std_broad_eth)
268
269 if plot == "vod_all":
270     means_bars1 = tuple(means_vod_cli)
271     std_bars1 = tuple(std_vod_cli)
272
273     means_bars2 = tuple(means_vod_wlan)
274     std_bars2 = tuple(std_vod_wlan)
275
276     means_bars3 = tuple(means_vod_eth)
277     std_bars3 = tuple(std_vod_eth)
278
279 if plot == "vod_broad_cli":
280     means_bars1 = tuple(means_broad_cli)
281     std_bars1 = tuple(std_broad_cli)
282
283     means_bars2 = tuple(means_vod_cli)
284     std_bars2 = tuple(std_vod_cli)
285
286 if plot == "vod_broad_wlan":
287     means_bars1 = tuple(means_broad_wlan)
288     std_bars1 = tuple(std_broad_wlan)
289
290     means_bars2 = tuple(means_vod_wlan)
291     std_bars2 = tuple(std_vod_wlan)
292
293 if plot == "vod_broad_eth":
294     means_bars1 = tuple(means_broad_eth)
295     std_bars1 = tuple(std_broad_eth)
296
297     means_bars2 = tuple(means_vod_eth)
298     std_bars2 = tuple(std_vod_eth)
299
300
301 fig, ax = plt.subplots()
302
303 index = np.arange(n_groups)
304 bar_width = 0.3
305
306 opacity = 0.4
307 error_config = {'ecolor': '0.3'}
308
309 if plot == "vod_all" or plot == "broad_all" :
310     rects1 = plt.bar(index, means_bars1, bar_width,
311                  alpha=opacity,
312                  color='y',
313                  yerr=std_bars1,
314                  error_kw=error_config,
315                  label='Client')
316
317     rects2 = plt.bar(index + bar_width, means_bars2, bar_width,
318                  alpha=opacity,
319                  color='g',
320                  yerr=std_bars2,
321                  error_kw=error_config,
322                  label='Wlan')
323
324     rects3 = plt.bar(index + 2*bar_width, means_bars3, bar_width,
325                  alpha=opacity,
326                  color='r',
327                  yerr=std_bars3,
328                  error_kw=error_config,
329                  label='Eth')
330
331 else :
332     rects1 = plt.bar(index, means_bars1, bar_width,
333                  alpha=opacity,
334                  color='y',
335                  yerr=std_bars1,
336                  error_kw=error_config,
337                  label='Broadcast')
338
339     rects2 = plt.bar(index + bar_width, means_bars2, bar_width,
340                  alpha=opacity,
341                  color='g',
342                  yerr=std_bars2,
343                  error_kw=error_config,
344                  label='VOD')    
345
346 plt.xlabel('Number of Client')
347
348 if packet == "frames" :
349     plt.ylabel('Frames sent over UDP')
350 if packet == "bytes" :
351     plt.ylabel('Bytes sent over UDP')
352
353 if plot == "broad_all":
354     plt.title('Packet sent by number of client in broadcast mode')
355 if plot == "vod_all":
356     plt.title('Packet sent by number of client in VOD mode')
357 if plot == "vod_broad_cli":
358     plt.title('Packet received in average by client in broadcast and vod mode')
359 if plot == "vod_broad_wlan":
360     plt.title('Packet sent in average to the clients in broadcast and vod mode')
361 if plot == "vod_broad_eth":
362     plt.title('Packet received in average by the wifi center in broadcast and vod mode')
363
364 plt.xticks(index + bar_width, ('1', '3', '5'))
365 plt.legend()
366
367 #plt.tight_layout()
368 plt.show()
369