3 import matplotlib.pyplot as plt
10 ##### Parsing Argument to Plot #####
11 from optparse import OptionParser
13 usage = ("usage: %prog -p <type-of-plot> -d <type-of-packets> -f <folder-with-stats>")
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")
23 (options, args) = parser.parse_args()
25 packet = options.packet
26 folder = options.folder
28 ##### Initialize the data #####
30 overall_stats_broad = {}
31 overall_stats_vod = {}
34 overall_stats_broad[i] = {}
35 overall_stats_broad[i]['eth'] = []
36 overall_stats_broad[i]['wlan'] = []
37 overall_stats_broad[i]['cli'] = []
39 overall_stats_vod[i] = {}
40 overall_stats_vod[i]['eth'] = []
41 overall_stats_vod[i]['wlan'] = []
42 overall_stats_vod[i]['cli'] = []
44 all_broad_folders = os.listdir(folder + 'demo_openlab_traces/broadcast')
45 all_vod_folders = os.listdir(folder + 'demo_openlab_traces/vod')
47 data_broad_folders = list()
48 data_vod_folders = list()
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)
55 for f in all_vod_folders :
56 if f.startswith('s_'):
57 data_vod_folders.append(f)
59 ##### For Broadcast #####
61 stats_broad_wlan = list()
62 stats_broad_eth = list()
63 stats_broad_cli = list()
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)
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)
74 stats_broad_wlan.append(dest)
75 if f.startswith('capwificen_eth'):
76 p = subprocess.Popen(command , shell=True)
78 stats_broad_eth.append(dest)
79 if f.startswith('capcli'):
80 p = subprocess.Popen(command , shell=True)
82 stats_broad_cli.append(dest)
84 # Numer of client that was used
94 # Return the value wanted
95 def get_broad_values(list_files, type_file):
102 f = row[1].split(' ')
107 res['frames'] = frame
111 overall_stats_broad[nb][type_file].append(res)
114 get_broad_values(stats_broad_wlan, 'wlan')
115 get_broad_values(stats_broad_eth, 'eth')
116 get_broad_values(stats_broad_cli, 'cli')
118 #print overall_stats_broad
122 stats_vod_wlan = list()
123 stats_vod_eth = list()
124 stats_vod_cli = list()
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)
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)
135 stats_vod_wlan.append(dest)
136 if f.startswith('capwificen_eth'):
137 p = subprocess.Popen(command , shell=True)
139 stats_vod_eth.append(dest)
140 if f.startswith('capcli'):
141 p = subprocess.Popen(command , shell=True)
143 stats_vod_cli.append(dest)
145 # Return the value wanted
146 def get_vod_values(list_files, type_file):
153 f = row[1].split(' ')
158 res['frames'] = frame
162 overall_stats_vod[nb][type_file].append(res)
165 get_vod_values(stats_vod_wlan, 'wlan')
166 get_vod_values(stats_vod_eth, 'eth')
167 get_vod_values(stats_vod_cli, 'cli')
169 #print overall_stats_vod
171 ##### For Plotting #####
173 if plot != "vod_all":
174 means_broad_cli = list()
175 std_broad_cli = list()
177 means_broad_wlan = list()
178 std_broad_wlan = list()
180 means_broad_eth = list()
181 std_broad_eth = list()
185 for elt in overall_stats_broad[i]['cli']:
186 data_cli.append(elt['frames'])
187 samples = np.array(data_cli)
190 std = np.std(data_cli)
191 means_broad_cli.append(m)
192 std_broad_cli.append(std)
195 for elt in overall_stats_broad[i]['wlan']:
196 data_wlan.append(elt['frames'])
197 samples = np.array(data_wlan)
200 std = np.std(data_wlan)
201 means_broad_wlan.append(m)
202 std_broad_wlan.append(std)
205 for elt in overall_stats_broad[i]['eth']:
206 data_eth.append(elt['frames'])
207 samples = np.array(data_eth)
210 std = np.std(data_eth)
211 means_broad_eth.append(m)
212 std_broad_eth.append(std)
214 if plot != "broad_all":
215 means_vod_cli = list()
218 means_vod_wlan = list()
219 std_vod_wlan = list()
221 means_vod_eth = list()
226 for elt in overall_stats_vod[i]['cli']:
227 data_cli.append(elt['frames'])
228 samples = np.array(data_cli)
231 std = np.std(data_cli)
232 means_vod_cli.append(m)
233 std_vod_cli.append(std)
236 for elt in overall_stats_vod[i]['wlan']:
237 data_wlan.append(elt['frames'])
238 samples = np.array(data_wlan)
241 std = np.std(data_wlan)
242 means_vod_wlan.append(m)
243 std_vod_wlan.append(std)
246 for elt in overall_stats_vod[i]['eth']:
247 data_eth.append(elt['frames'])
248 samples = np.array(data_eth)
251 std = np.std(data_eth)
252 means_vod_eth.append(m)
253 std_vod_eth.append(std)
258 #Put the right numbers
259 if plot == "broad_all":
260 means_bars1 = tuple(means_broad_cli)
261 std_bars1 = tuple(std_broad_cli)
263 means_bars2 = tuple(means_broad_wlan)
264 std_bars2 = tuple(std_broad_wlan)
266 means_bars3 = tuple(means_broad_eth)
267 std_bars3 = tuple(std_broad_eth)
269 if plot == "vod_all":
270 means_bars1 = tuple(means_vod_cli)
271 std_bars1 = tuple(std_vod_cli)
273 means_bars2 = tuple(means_vod_wlan)
274 std_bars2 = tuple(std_vod_wlan)
276 means_bars3 = tuple(means_vod_eth)
277 std_bars3 = tuple(std_vod_eth)
279 if plot == "vod_broad_cli":
280 means_bars1 = tuple(means_broad_cli)
281 std_bars1 = tuple(std_broad_cli)
283 means_bars2 = tuple(means_vod_cli)
284 std_bars2 = tuple(std_vod_cli)
286 if plot == "vod_broad_wlan":
287 means_bars1 = tuple(means_broad_wlan)
288 std_bars1 = tuple(std_broad_wlan)
290 means_bars2 = tuple(means_vod_wlan)
291 std_bars2 = tuple(std_vod_wlan)
293 if plot == "vod_broad_eth":
294 means_bars1 = tuple(means_broad_eth)
295 std_bars1 = tuple(std_broad_eth)
297 means_bars2 = tuple(means_vod_eth)
298 std_bars2 = tuple(std_vod_eth)
301 fig, ax = plt.subplots()
303 index = np.arange(n_groups)
307 error_config = {'ecolor': '0.3'}
309 if plot == "vod_all" or plot == "broad_all" :
310 rects1 = plt.bar(index, means_bars1, bar_width,
314 error_kw=error_config,
317 rects2 = plt.bar(index + bar_width, means_bars2, bar_width,
321 error_kw=error_config,
324 rects3 = plt.bar(index + 2*bar_width, means_bars3, bar_width,
328 error_kw=error_config,
332 rects1 = plt.bar(index, means_bars1, bar_width,
336 error_kw=error_config,
339 rects2 = plt.bar(index + bar_width, means_bars2, bar_width,
343 error_kw=error_config,
346 plt.xlabel('Number of Client')
348 if packet == "frames" :
349 plt.ylabel('Frames sent over UDP')
350 if packet == "bytes" :
351 plt.ylabel('Bytes sent over UDP')
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')
364 plt.xticks(index + bar_width, ('1', '3', '5'))