Newer
Older
import pandas as pd
import matplotlib.pyplot as plt
import os
import numpy as np
# Leitura do arquivo
main_folder = "./"
scenarios = [name for name in os.listdir(main_folder) if os.path.isdir(os.path.join(main_folder, name))]
int(x.split('_')[-1]) if x.startswith('scen_') and x.split('_')[-1].isdigit() else float('inf')
)
)
ue_dataframes = {}
for scenario in scenarios:
ue_dataframes[scenario] = {}
scenario_path = main_folder + scenario
cap_confs_list = [name for name in os.listdir(scenario_path) if os.path.isdir(os.path.join(scenario_path, name))]
for cap_conf_folder in cap_confs_list:
ue_dataframes[scenario][cap_conf_folder] = {}
cap_path = scenario_path + '/' + cap_conf_folder
ues = [name for name in os.listdir(cap_path) if os.path.isdir(os.path.join(cap_path, name))]
for ue in ues:
data = []
ue_path = cap_path + '/' + ue + '/' + 'job_1.txt'
##Organização do dataframe
with open(ue_path, 'r') as file:
count = 0
data.append({
"Interval": 0,
"Transfer": 0,
"Bandwidth": 0,
"Jitter": 0,
})
for line in file:
if "[ 3]" in line and "sec" in line and "MBytes" in line:
parts = line.split()
count += 1
if count < 10:
data.append({
"Interval": count,
"Transfer": parts[5],
"Bandwidth": float(parts[7]),
"Jitter": parts[9] if len(parts) > 6 else None,
"PacketsLost": int(parts[-2].split("/")[0]) if "/" in parts[-2] else int(parts[-3].split("/")[0]),
"TotalPackets": int(parts[-2].split("/")[1]) if "/" in parts[-2] else int(parts[-2])
data.append({
"Interval": count,
"Transfer": parts[4],
"Bandwidth": float(parts[6]),
"Jitter": parts[8] if len(parts) > 6 else None,
"PacketsLost": int(parts[-2].split("/")[0]) if "/" in parts[-2] else int(parts[-3].split("/")[0]),
"TotalPackets": int(parts[-2].split("/")[1]) if "/" in parts[-2] else int(parts[-2])
cap_confs_list = [name for name in os.listdir(scenario_path) if os.path.isdir(os.path.join(scenario_path, name))] ## Configuração da capacidade dos slices
cap_confs_list = sorted(cap_confs_list, key=lambda x: (x == 'no_slicing', x))
'axes.titlesize': 18, # Tamanho do título dos eixos
'axes.labelsize': 18, # Tamanho dos rótulos dos eixos
'xtick.labelsize': 18, # Tamanho dos rótulos do eixo X
'ytick.labelsize': 18, # Tamanho dos rótulos do eixo Y
'legend.fontsize': 14, # Tamanho da fonte da legenda
with open(os.path.join(scenario_path, "scenario_description.txt"), 'r') as file:
scenario_file = file.read().split("\n")
scenario_info = {item.split(':', 1)[0].strip(): item.split(':', 1)[1].strip() for item in scenario_file if item}
for cap_conf_folder in cap_confs_list:
cap_path = scenario_path + '/' + cap_conf_folder
with open(os.path.join(cap_path, "cap_conf_description.txt"), 'r') as file:
cap_conf_description = file.read().split("\n")
cap_conf_info = {item.split(':', 1)[0].strip(): item.split(':', 1)[1].strip() for item in cap_conf_description if item}
plt.plot(ue_dataframes[scenario][cap_conf_folder]['ue1']["Interval"], ue_dataframes[scenario][cap_conf_folder]['ue1']["Bandwidth"], marker="o", label=f"UE1 (Banda: {scenario_info['UE1_bandwidth']} Mbps)", color='#ff7f0e', linestyle="-")
plt.plot(ue_dataframes[scenario][cap_conf_folder]['ue2']["Interval"], ue_dataframes[scenario][cap_conf_folder]['ue2']["Bandwidth"], marker="o", label=f"UE2 (Banda: {scenario_info['UE2_bandwidth']} Mbps)", color='#1f77b4', linestyle="--")
y_ticks = np.arange(0, max(ue_dataframes[scenario][cap_conf_folder]['ue2']["Bandwidth"].max(),
ue_dataframes[scenario][cap_conf_folder]['ue1']["Bandwidth"].max()) + 10, 10) # Intervalo de 2 Mbps
plt.yticks(y_ticks) # Define os valores do eixo Y com intervalos mais detalhados
# if cap_conf_info['UE1_slice'] != '-':
# plt.title(f"Taxa Efetiva de Usuários Móveis: UE1 no Slice 1 ({cap_conf_info['UE1_slice']}% dos Recursos) e UE2 no Slice 2 ({cap_conf_info['UE2_slice']}% dos Recursos)")
# else:
# plt.title(f"Taxa Efetiva de Usuários sem configuração dos slices")
plt.grid(which="both", linestyle="--", linewidth=0.5, alpha=0.7) # Grelha mais sutil
plt.tight_layout() # Garante que todos os elementos estejam visíveis
if cap_conf_info['UE1_slice'] != '-' and cap_conf_info['UE2_slice'] != '-':
conf_list.append(f"({cap_conf_info['UE1_slice']}%/{cap_conf_info['UE2_slice']}%)")
save_path_throughput = os.path.join(scenario_path, f"{cap_conf_info['UE1_slice']}_{cap_conf_info['UE2_slice']}.png")
plt.savefig(save_path_throughput, dpi=300, bbox_inches='tight')
pl_ue1.append((ue_dataframes[scenario][cap_conf_folder]['ue1']["PacketsLost"].sum()/ue_dataframes[scenario][cap_conf_folder]['ue1']["TotalPackets"].sum())*100)
pl_ue2.append((ue_dataframes[scenario][cap_conf_folder]['ue2']["PacketsLost"].sum()/ue_dataframes[scenario][cap_conf_folder]['ue2']["TotalPackets"].sum())*100)
#conf_list = [f"Cenário {j + 1} \n {conf_list[i]}" for j, i in enumerate([0, 3, 6]) if i < len(conf_list)]
conf_list = [f"C{j + 1} \n {conf}" for j, conf in enumerate(conf_list)]
#pl_ue1 = [pl_ue1[i] for i in [0, 3, 6] if i < len(pl_ue1)]
#pl_ue2 = [pl_ue2[i] for i in [0, 3, 6] if i < len(pl_ue2)]
plt.bar(x - largura / 2, pl_ue1, width=largura, label=f"UE1 (Banda: {scenario_info['UE1_bandwidth']} Mbps)", color='#ff7f0e') # Barras para UE1
plt.bar(x + largura / 2, pl_ue2, width=largura, label=f"UE2 (Banda: {scenario_info['UE2_bandwidth']} Mbps)", color='#1f77b4') # Barras para UE2
for i in range(len(x)):
plt.text(x[i] - largura / 2, pl_ue1[i] + 0.5, f'{pl_ue1[i]:.0f} %', ha='center', va='bottom', fontsize=14)
plt.text(x[i] + largura / 2, pl_ue2[i] + 0.5, f'{pl_ue2[i]:.0f} %', ha='center', va='bottom', fontsize=14)
# plt.title('Perda de Pacotes (%) para Diferentes Configurações de Capacidade')
plt.xticks(x, conf_list, fontsize = 14) # Ajustar rótulos do eixo x
plt.legend(loc='upper center') # Adicionar legenda