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):
98 with open(s, 'r') as o:
102 f = row[1].split(' ')
107 res['frames'] = frame
111 overall_stats_broad[nb][type_file].append(res)
113 get_broad_values(stats_broad_wlan, 'wlan')
114 get_broad_values(stats_broad_eth, 'eth')
115 get_broad_values(stats_broad_cli, 'cli')
117 #print overall_stats_broad
121 stats_vod_wlan = list()
122 stats_vod_eth = list()
123 stats_vod_cli = list()
125 # Write the wanted statistics into a file
126 for exp in data_vod_folders :
127 vod_file = os.listdir(folder + 'demo_openlab_traces/vod/'+exp)
129 dest = folder + "/demo_openlab_traces/vod/" + exp + "/stats_" + f + ".txt"
130 command = "tshark -r " + folder + "demo_openlab_traces/vod/" + exp + "/" + f + " -z io,phs > " + dest
131 if f.startswith('capwificen_wlan'):
132 p = subprocess.Popen(command , shell=True)
134 stats_vod_wlan.append(dest)
135 if f.startswith('capwificen_eth'):
136 p = subprocess.Popen(command , shell=True)
138 stats_vod_eth.append(dest)
139 if f.startswith('capcli'):
140 p = subprocess.Popen(command , shell=True)
142 stats_vod_cli.append(dest)
144 # Return the value wanted
145 def get_vod_values(list_files, type_file):
148 with open(s, 'r') as o:
152 f = row[1].split(' ')
157 res['frames'] = frame
161 overall_stats_vod[nb][type_file].append(res)
163 get_vod_values(stats_vod_wlan, 'wlan')
164 get_vod_values(stats_vod_eth, 'eth')
165 get_vod_values(stats_vod_cli, 'cli')
167 #print overall_stats_vod
169 ##### For Plotting #####
171 if plot != "vod_all":
172 means_broad_cli = list()
173 std_broad_cli = list()
175 means_broad_wlan = list()
176 std_broad_wlan = list()
178 means_broad_eth = list()
179 std_broad_eth = list()
183 for elt in overall_stats_broad[i]['cli']:
184 data_cli.append(elt['frames'])
185 samples = np.array(data_cli)
188 std = np.std(data_cli)
189 means_broad_cli.append(m)
190 std_broad_cli.append(std)
193 for elt in overall_stats_broad[i]['wlan']:
194 data_wlan.append(elt['frames'])
195 samples = np.array(data_wlan)
198 std = np.std(data_wlan)
199 means_broad_wlan.append(m)
200 std_broad_wlan.append(std)
203 for elt in overall_stats_broad[i]['eth']:
204 data_eth.append(elt['frames'])
205 samples = np.array(data_eth)
208 std = np.std(data_eth)
209 means_broad_eth.append(m)
210 std_broad_eth.append(std)
212 if plot != "broad_all":
213 means_vod_cli = list()
216 means_vod_wlan = list()
217 std_vod_wlan = list()
219 means_vod_eth = list()
224 for elt in overall_stats_vod[i]['cli']:
225 data_cli.append(elt['frames'])
226 samples = np.array(data_cli)
229 std = np.std(data_cli)
230 means_vod_cli.append(m)
231 std_vod_cli.append(std)
234 for elt in overall_stats_vod[i]['wlan']:
235 data_wlan.append(elt['frames'])
236 samples = np.array(data_wlan)
239 std = np.std(data_wlan)
240 means_vod_wlan.append(m)
241 std_vod_wlan.append(std)
244 for elt in overall_stats_vod[i]['eth']:
245 data_eth.append(elt['frames'])
246 samples = np.array(data_eth)
249 std = np.std(data_eth)
250 means_vod_eth.append(m)
251 std_vod_eth.append(std)
256 #Put the right numbers
257 if plot == "broad_all":
258 means_bars1 = tuple(means_broad_cli)
259 std_bars1 = tuple(std_broad_cli)
261 means_bars2 = tuple(means_broad_wlan)
262 std_bars2 = tuple(std_broad_wlan)
264 means_bars3 = tuple(means_broad_eth)
265 std_bars3 = tuple(std_broad_eth)
267 if plot == "vod_all":
268 means_bars1 = tuple(means_vod_cli)
269 std_bars1 = tuple(std_vod_cli)
271 means_bars2 = tuple(means_vod_wlan)
272 std_bars2 = tuple(std_vod_wlan)
274 means_bars3 = tuple(means_vod_eth)
275 std_bars3 = tuple(std_vod_eth)
277 if plot == "vod_broad_cli":
278 means_bars1 = tuple(means_broad_cli)
279 std_bars1 = tuple(std_broad_cli)
281 means_bars2 = tuple(means_vod_cli)
282 std_bars2 = tuple(std_vod_cli)
284 if plot == "vod_broad_wlan":
285 means_bars1 = tuple(means_broad_wlan)
286 std_bars1 = tuple(std_broad_wlan)
288 means_bars2 = tuple(means_vod_wlan)
289 std_bars2 = tuple(std_vod_wlan)
291 if plot == "vod_broad_eth":
292 means_bars1 = tuple(means_broad_eth)
293 std_bars1 = tuple(std_broad_eth)
295 means_bars2 = tuple(means_vod_eth)
296 std_bars2 = tuple(std_vod_eth)
299 fig, ax = plt.subplots()
301 index = np.arange(n_groups)
305 error_config = {'ecolor': '0.3'}
307 if plot == "vod_all" or plot == "broad_all" :
308 rects1 = plt.bar(index, means_bars1, bar_width,
312 error_kw=error_config,
315 rects2 = plt.bar(index + bar_width, means_bars2, bar_width,
319 error_kw=error_config,
322 rects3 = plt.bar(index + 2*bar_width, means_bars3, bar_width,
326 error_kw=error_config,
330 rects1 = plt.bar(index, means_bars1, bar_width,
334 error_kw=error_config,
337 rects2 = plt.bar(index + bar_width, means_bars2, bar_width,
341 error_kw=error_config,
344 plt.xlabel('Number of Client')
346 if packet == "frames" :
347 plt.ylabel('Frames sent over UDP')
348 if packet == "bytes" :
349 plt.ylabel('Bytes sent over UDP')
351 if plot == "broad_all":
352 plt.title('Packet sent by number of client in broadcast mode')
353 if plot == "vod_all":
354 plt.title('Packet sent by number of client in VOD mode')
355 if plot == "vod_broad_cli":
356 plt.title('Packet received in average by client in broadcast and vod mode')
357 if plot == "vod_broad_wlan":
358 plt.title('Packet sent in average to the clients in broadcast and vod mode')
359 if plot == "vod_broad_eth":
360 plt.title('Packet received in average by the wifi center in broadcast and vod mode')
362 plt.xticks(index + bar_width, ('1', '3', '5'))