import matplotlib matplotlib.use('GTK') import matplotlib.pyplot as plt import numpy as np import os import time import subprocess ##### Parsing Argument to Plot ##### from optparse import OptionParser usage = ("usage: %prog -p -d -f ") parser = OptionParser(usage = usage) parser.add_option("-p", "--plot", dest="plot", help="Type of Plot : vod_broad_cli | vod_broad_wlan | vod_broad_eth | broad_all | vod_all", type="string") parser.add_option("-d", "--packet", dest="packet", help="Packet to use for the plot : frames | bytes", type="string") parser.add_option("-f", "--folder", dest="folder", help="Folder with the statistics ", type="string") (options, args) = parser.parse_args() plot = options.plot packet = options.packet folder = options.folder ##### Initialize the data ##### overall_stats_broad = {} overall_stats_vod = {} for i in [1, 3, 5]: overall_stats_broad[i] = {} overall_stats_broad[i]['eth'] = [] overall_stats_broad[i]['wlan'] = [] overall_stats_broad[i]['cli'] = [] overall_stats_vod[i] = {} overall_stats_vod[i]['eth'] = [] overall_stats_vod[i]['wlan'] = [] overall_stats_vod[i]['cli'] = [] all_broad_folders = os.listdir(folder + 'demo_openlab_traces/broadcast') all_vod_folders = os.listdir(folder + 'demo_openlab_traces/vod') data_broad_folders = list() data_vod_folders = list() # Loop to take only the wanted folder for f in all_broad_folders : if f.startswith('s_'): data_broad_folders.append(f) for f in all_vod_folders : if f.startswith('s_'): data_vod_folders.append(f) ##### For Broadcast ##### stats_broad_wlan = list() stats_broad_eth = list() stats_broad_cli = list() # Write the wanted statistics into a file for exp in data_broad_folders : broad_file = os.listdir(folder + 'demo_openlab_traces/broadcast/'+exp) for f in broad_file : dest = folder + "demo_openlab_traces/broadcast/" + exp + "/stats_" + f + ".txt" command = "tshark -r " + folder + "demo_openlab_traces/broadcast/" + exp + "/" + f + " -z io,phs > " + dest if f.startswith('capwificen_wlan'): p = subprocess.Popen(command , shell=True) p.wait() stats_broad_wlan.append(dest) if f.startswith('capwificen_eth'): p = subprocess.Popen(command , shell=True) p.wait() stats_broad_eth.append(dest) if f.startswith('capcli'): p = subprocess.Popen(command , shell=True) p.wait() stats_broad_cli.append(dest) # Numer of client that was used def nb_client(s): elt = s.split('_') if elt[-2] == '1': return 1 if elt[-2] == '3': return 3 if elt[-2] == '5': return 5 # Return the value wanted def get_broad_values(list_files, type_file): for s in list_files: nb = nb_client(s) with open(s, 'r') as o: for l in o: if 'udp' in l: row = l.split(':') f = row[1].split(' ') frame = int(f[0]) byte = int(row[2]) res = {} res['frames'] = frame res['bytes'] = byte if frame < 20 : continue overall_stats_broad[nb][type_file].append(res) get_broad_values(stats_broad_wlan, 'wlan') get_broad_values(stats_broad_eth, 'eth') get_broad_values(stats_broad_cli, 'cli') #print overall_stats_broad ##### For VOD ##### stats_vod_wlan = list() stats_vod_eth = list() stats_vod_cli = list() # Write the wanted statistics into a file for exp in data_vod_folders : vod_file = os.listdir(folder + 'demo_openlab_traces/vod/'+exp) for f in vod_file : dest = folder + "/demo_openlab_traces/vod/" + exp + "/stats_" + f + ".txt" command = "tshark -r " + folder + "demo_openlab_traces/vod/" + exp + "/" + f + " -z io,phs > " + dest if f.startswith('capwificen_wlan'): p = subprocess.Popen(command , shell=True) p.wait() stats_vod_wlan.append(dest) if f.startswith('capwificen_eth'): p = subprocess.Popen(command , shell=True) p.wait() stats_vod_eth.append(dest) if f.startswith('capcli'): p = subprocess.Popen(command , shell=True) p.wait() stats_vod_cli.append(dest) # Return the value wanted def get_vod_values(list_files, type_file): for s in list_files: nb = nb_client(s) with open(s, 'r') as o: for l in o: if 'udp' in l: row = l.split(':') f = row[1].split(' ') frame = int(f[0]) byte = int(row[2]) res = {} res['frames'] = frame res['bytes'] = byte if frame < 100 : continue overall_stats_vod[nb][type_file].append(res) get_vod_values(stats_vod_wlan, 'wlan') get_vod_values(stats_vod_eth, 'eth') get_vod_values(stats_vod_cli, 'cli') #print overall_stats_vod ##### For Plotting ##### if plot != "vod_all": means_broad_cli = list() std_broad_cli = list() means_broad_wlan = list() std_broad_wlan = list() means_broad_eth = list() std_broad_eth = list() for i in [1, 3, 5]: data_cli = list() for elt in overall_stats_broad[i]['cli']: data_cli.append(elt['frames']) samples = np.array(data_cli) m = samples.mean() std = np.std(data_cli) means_broad_cli.append(m) std_broad_cli.append(std) data_wlan = list() for elt in overall_stats_broad[i]['wlan']: data_wlan.append(elt['frames']) samples = np.array(data_wlan) m = samples.mean() std = np.std(data_wlan) means_broad_wlan.append(m) std_broad_wlan.append(std) data_eth = list() for elt in overall_stats_broad[i]['eth']: data_eth.append(elt['frames']) samples = np.array(data_eth) m = samples.mean() std = np.std(data_eth) means_broad_eth.append(m) std_broad_eth.append(std) if plot != "broad_all": means_vod_cli = list() std_vod_cli = list() means_vod_wlan = list() std_vod_wlan = list() means_vod_eth = list() std_vod_eth = list() for i in [1, 3, 5]: data_cli = list() for elt in overall_stats_vod[i]['cli']: data_cli.append(elt['frames']) samples = np.array(data_cli) m = samples.mean() std = np.std(data_cli) means_vod_cli.append(m) std_vod_cli.append(std) data_wlan = list() for elt in overall_stats_vod[i]['wlan']: data_wlan.append(elt['frames']) samples = np.array(data_wlan) m = samples.mean() std = np.std(data_wlan) means_vod_wlan.append(m) std_vod_wlan.append(std) data_eth = list() for elt in overall_stats_vod[i]['eth']: data_eth.append(elt['frames']) samples = np.array(data_eth) m = samples.mean() std = np.std(data_eth) means_vod_eth.append(m) std_vod_eth.append(std) ### To plot ### n_groups = 3 #Put the right numbers if plot == "broad_all": means_bars1 = tuple(means_broad_cli) std_bars1 = tuple(std_broad_cli) means_bars2 = tuple(means_broad_wlan) std_bars2 = tuple(std_broad_wlan) means_bars3 = tuple(means_broad_eth) std_bars3 = tuple(std_broad_eth) if plot == "vod_all": means_bars1 = tuple(means_vod_cli) std_bars1 = tuple(std_vod_cli) means_bars2 = tuple(means_vod_wlan) std_bars2 = tuple(std_vod_wlan) means_bars3 = tuple(means_vod_eth) std_bars3 = tuple(std_vod_eth) if plot == "vod_broad_cli": means_bars1 = tuple(means_broad_cli) std_bars1 = tuple(std_broad_cli) means_bars2 = tuple(means_vod_cli) std_bars2 = tuple(std_vod_cli) if plot == "vod_broad_wlan": means_bars1 = tuple(means_broad_wlan) std_bars1 = tuple(std_broad_wlan) means_bars2 = tuple(means_vod_wlan) std_bars2 = tuple(std_vod_wlan) if plot == "vod_broad_eth": means_bars1 = tuple(means_broad_eth) std_bars1 = tuple(std_broad_eth) means_bars2 = tuple(means_vod_eth) std_bars2 = tuple(std_vod_eth) fig, ax = plt.subplots() index = np.arange(n_groups) bar_width = 0.3 opacity = 0.4 error_config = {'ecolor': '0.3'} if plot == "vod_all" or plot == "broad_all" : rects1 = plt.bar(index, means_bars1, bar_width, alpha=opacity, color='y', yerr=std_bars1, error_kw=error_config, label='Client') rects2 = plt.bar(index + bar_width, means_bars2, bar_width, alpha=opacity, color='g', yerr=std_bars2, error_kw=error_config, label='Wlan') rects3 = plt.bar(index + 2*bar_width, means_bars3, bar_width, alpha=opacity, color='r', yerr=std_bars3, error_kw=error_config, label='Eth') else : rects1 = plt.bar(index, means_bars1, bar_width, alpha=opacity, color='y', yerr=std_bars1, error_kw=error_config, label='Broadcast') rects2 = plt.bar(index + bar_width, means_bars2, bar_width, alpha=opacity, color='g', yerr=std_bars2, error_kw=error_config, label='VOD') plt.xlabel('Number of Client') if packet == "frames" : plt.ylabel('Frames sent over UDP') if packet == "bytes" : plt.ylabel('Bytes sent over UDP') if plot == "broad_all": plt.title('Packet sent by number of client in broadcast mode') if plot == "vod_all": plt.title('Packet sent by number of client in VOD mode') if plot == "vod_broad_cli": plt.title('Packet received in average by client in broadcast and vod mode') if plot == "vod_broad_wlan": plt.title('Packet sent in average to the clients in broadcast and vod mode') if plot == "vod_broad_eth": plt.title('Packet received in average by the wifi center in broadcast and vod mode') plt.xticks(index + bar_width, ('1', '3', '5')) plt.legend() #plt.tight_layout() plt.show()