tcc/scripts/graph.py

155 lines
4.7 KiB
Python
Raw Normal View History

2023-09-11 02:14:21 +00:00
import numpy as np
import matplotlib.pyplot as plt
2023-10-03 18:31:33 +00:00
from common import API_REQUESTS, FRAMEWORKS
2023-10-29 22:01:24 +00:00
from pylab import plot, show, savefig, xlim, figure, \
ylim, legend, boxplot, setp, axes
2023-10-03 18:31:33 +00:00
2023-10-29 22:01:24 +00:00
FRAMEWORKS_COLORS = [c for _, _, c in FRAMEWORKS]
FRAMEWORKS = [f for f, _, _ in FRAMEWORKS]
2023-10-03 18:31:33 +00:00
2023-10-29 22:01:24 +00:00
def setBoxColors(bp):
for i, box in enumerate(bp['boxes']):
box.set(color=FRAMEWORKS_COLORS[i])
2024-03-24 22:31:53 +00:00
box.set(facecolor=FRAMEWORKS_COLORS[i])
2023-11-02 22:14:16 +00:00
for i in range(len(FRAMEWORKS)):
bp['whiskers'][i*2].set(color=FRAMEWORKS_COLORS[i])
bp['whiskers'][i*2 + 1].set(color=FRAMEWORKS_COLORS[i])
for i in range(len(FRAMEWORKS)):
bp['caps'][i*2].set(color=FRAMEWORKS_COLORS[i])
bp['caps'][i*2 + 1].set(color=FRAMEWORKS_COLORS[i])
2024-03-24 22:31:53 +00:00
for i, median in enumerate(bp['medians']):
median.set(color='white')
2023-11-02 22:14:16 +00:00
2023-09-11 02:14:21 +00:00
2023-10-29 22:01:24 +00:00
def plot_graph(x_data, y_data, title, x_label, y_label, filename, y_lim = None):
2024-03-24 22:31:53 +00:00
print(filename)
2023-10-29 22:01:24 +00:00
old_x_data = x_data
old_y_data = y_data
2023-09-11 02:14:21 +00:00
2023-10-29 22:01:24 +00:00
x_data = []
y_data = []
2023-09-11 02:14:21 +00:00
2023-10-29 22:01:24 +00:00
for i in range(len(old_x_data)):
if old_x_data[i] not in x_data:
x_data.append(old_x_data[i])
y_data.append([])
2023-11-02 22:14:16 +00:00
for f in range(len(FRAMEWORKS)):
2023-10-29 22:01:24 +00:00
y_data[-1].append([])
2023-09-11 02:14:21 +00:00
2023-11-02 22:14:16 +00:00
for f in range(len(FRAMEWORKS)):
2023-10-29 22:01:24 +00:00
y_data[-1][f].append(old_y_data[f][i])
2023-09-11 02:14:21 +00:00
2024-03-24 22:31:53 +00:00
fig, axes = plt.subplots(ncols=len(x_data), sharey=True)
2023-10-03 18:31:33 +00:00
2024-03-24 22:31:53 +00:00
for ax, j in zip(axes, [i for i in range(len(x_data))]):
bp = ax.boxplot(y_data[j], showfliers=False, patch_artist=True, positions=[i for i in range(len(FRAMEWORKS))])
ax.set(xlabel=x_data[j], xticklabels=['' for _ in range(len(FRAMEWORKS))])
ax.margins(0.05)
2023-10-29 22:01:24 +00:00
setBoxColors(bp)
2024-03-24 22:31:53 +00:00
if j % 2 == 1:
ax.set_facecolor('#f2f2f2')
2023-09-11 02:14:21 +00:00
2024-03-24 22:31:53 +00:00
# set title
fig.suptitle(title)
fig.supxlabel(x_label)
fig.supylabel(y_label)
2023-10-29 22:01:24 +00:00
if y_lim:
plt.ylim(y_lim)
2023-11-02 22:14:16 +00:00
if filename.startswith('req'):
for i, framework in enumerate(FRAMEWORKS):
h, = plt.plot([], c=FRAMEWORKS_COLORS[i], label=framework, marker='.', linestyle='--')
# h.set_visible(False)
plt.legend()
2023-10-29 22:01:24 +00:00
2023-11-02 22:14:16 +00:00
plt.tight_layout()
2024-03-24 22:31:53 +00:00
fig.subplots_adjust(hspace=0, wspace=0)
2023-09-11 02:14:21 +00:00
plt.savefig(f'{filename}.png')
plt.clf()
plt.close('all')
def get_data(filename):
lines = []
with open(filename, 'r') as f:
lines = f.readlines()
x = []
y = []
for line in lines:
line = line.strip().split(',')
if line:
x.append(int(line[0]))
y.append(float(line[1]))
return x, y
def get_resource_data(filename):
lines = []
with open(filename, 'r') as f:
lines = f.readlines()
x = []
y = []
for line in lines:
line = line.strip().split(',')
if line:
2023-10-03 18:31:33 +00:00
r = [round(float(line[1])*100), round(float(line[2])*100)]
if r[0] > 100:
r[0] = 100
if r[1] > 100:
r[1] = 100
2023-09-11 02:14:21 +00:00
x.append(int(line[0])) # requests
2023-10-03 18:31:33 +00:00
y.append(r) # cpu, ram
2023-09-11 02:14:21 +00:00
return x, y
def generate_req_graph(filename, framework_name, endpoint_name):
2023-10-03 18:31:33 +00:00
x, _ = get_data(filename)
y = []
for f in FRAMEWORKS:
newfile = filename.replace(framework_name, f)
_, y_data = get_data(newfile)
2023-09-11 02:14:21 +00:00
2023-10-03 18:31:33 +00:00
y.append(y_data)
graph_file = f'req_{endpoint_name.replace("/", "").replace("?", "")}'
plot_graph(x, y, f'Requisições atendidas por segundo - {endpoint_name}', 'Número de requisições', 'Requisições/segundo', graph_file)
2023-09-11 02:14:21 +00:00
def generate_resource_graph(filename, framework_name, endpoint_name):
2023-10-03 18:31:33 +00:00
x, _ = get_resource_data(filename)
for resource_index, resource in enumerate(['cpu', 'ram']):
y = []
for f in FRAMEWORKS:
newfile = filename.replace(framework_name, f)
_, y_data = get_resource_data(newfile)
y.append([data[resource_index] for data in y_data])
graph_file = f'{resource}_{endpoint_name.replace("/", "").replace("?", "")}'
2023-10-29 22:01:24 +00:00
plot_graph(x, y, f'Uso de {resource.upper()} - {endpoint_name}', 'Número de requisições', f'Uso de {resource.upper()} (%)', graph_file)
2023-10-03 18:31:33 +00:00
if __name__ == '__main__':
endpoints = [config[0] for config in API_REQUESTS]
for endpoint_name in endpoints:
framework_name = 'ASP.NET'
endpoint_file = endpoint_name.replace('/', '')
2023-11-02 22:14:16 +00:00
endpoint_name = '/' + endpoint_name.split('/')[-1]
2023-10-03 18:31:33 +00:00
filename = f'data/resource_ASP.NET_{endpoint_file}.csv'
filename = filename.replace("?", "_")
2023-10-03 18:31:33 +00:00
generate_resource_graph(filename, framework_name, endpoint_name)
2023-09-11 02:14:21 +00:00
2023-10-03 18:31:33 +00:00
filename = f'data/req_ASP.NET_{endpoint_file}.csv'
filename = filename.replace("?", "_")
2023-10-03 18:31:33 +00:00
generate_req_graph(filename, framework_name, endpoint_name)