mirror of
				https://github.com/ivanch/tcc.git
				synced 2025-11-04 03:07:36 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			144 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			144 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import numpy as np
 | 
						|
import matplotlib.pyplot as plt
 | 
						|
from common import API_REQUESTS, FRAMEWORKS
 | 
						|
from pylab import plot, show, savefig, xlim, figure, \
 | 
						|
                ylim, legend, boxplot, setp, axes
 | 
						|
 | 
						|
FRAMEWORKS_COLORS = [c for _, _, c in FRAMEWORKS]
 | 
						|
FRAMEWORKS = [f for f, _, _ in FRAMEWORKS]
 | 
						|
 | 
						|
def setBoxColors(bp):
 | 
						|
    for i, box in enumerate(bp['boxes']):
 | 
						|
        box.set(color=FRAMEWORKS_COLORS[i])
 | 
						|
 | 
						|
def plot_graph(x_data, y_data, title, x_label, y_label, filename, y_lim = None):
 | 
						|
    old_x_data = x_data
 | 
						|
    old_y_data = y_data
 | 
						|
 | 
						|
    x_data = []
 | 
						|
    y_data = []
 | 
						|
 | 
						|
    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([])
 | 
						|
            for f in range(2):
 | 
						|
                y_data[-1].append([])
 | 
						|
 | 
						|
        for f in range(2):
 | 
						|
            y_data[-1][f].append(old_y_data[f][i])
 | 
						|
 | 
						|
    fig = figure()
 | 
						|
    ax = axes()
 | 
						|
 | 
						|
    all_positions = []
 | 
						|
 | 
						|
    for j in range(len(x_data)):
 | 
						|
        positions = [len(FRAMEWORKS)*j + i + 1 for i in range(len(FRAMEWORKS))]
 | 
						|
        bp = boxplot(y_data[j], positions = positions, widths = 0.6)
 | 
						|
        all_positions.append(positions)
 | 
						|
        setBoxColors(bp)
 | 
						|
 | 
						|
    avg_positions = []
 | 
						|
    for positions in all_positions:
 | 
						|
        avg_positions.append(np.average(positions))
 | 
						|
 | 
						|
    ax.set_xticks(avg_positions)
 | 
						|
    ax.set_xticklabels([str(x) for x in x_data])
 | 
						|
 | 
						|
    plt.title(title)
 | 
						|
    plt.xlabel(x_label)
 | 
						|
    plt.ylabel(y_label)
 | 
						|
 | 
						|
    if y_lim:
 | 
						|
        plt.ylim(y_lim)
 | 
						|
 | 
						|
    for i, framework in enumerate(FRAMEWORKS):
 | 
						|
        h, = plt.plot([], c=FRAMEWORKS_COLORS[i], label=framework)
 | 
						|
        # h.set_visible(False)
 | 
						|
 | 
						|
    plt.legend()
 | 
						|
    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:
 | 
						|
            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
 | 
						|
 | 
						|
            x.append(int(line[0])) # requests
 | 
						|
            y.append(r) # cpu, ram
 | 
						|
 | 
						|
    return x, y
 | 
						|
 | 
						|
def generate_req_graph(filename, framework_name, endpoint_name):
 | 
						|
    x, _ = get_data(filename)
 | 
						|
    y = []
 | 
						|
 | 
						|
    for f in FRAMEWORKS:
 | 
						|
        newfile = filename.replace(framework_name, f)
 | 
						|
        _, y_data = get_data(newfile)
 | 
						|
 | 
						|
        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)
 | 
						|
 | 
						|
def generate_resource_graph(filename, framework_name, endpoint_name):
 | 
						|
    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("?", "")}'
 | 
						|
        plot_graph(x, y, f'Uso de {resource.upper()} - {endpoint_name}', 'Número de requisições', f'Uso de {resource.upper()} (%)', graph_file)
 | 
						|
 | 
						|
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('/', '')
 | 
						|
 | 
						|
        filename = f'data/resource_ASP.NET_{endpoint_file}.csv'
 | 
						|
        filename = filename.replace("?", "_")
 | 
						|
        generate_resource_graph(filename, framework_name, endpoint_name)
 | 
						|
 | 
						|
        filename = f'data/req_ASP.NET_{endpoint_file}.csv'
 | 
						|
        filename = filename.replace("?", "_")
 | 
						|
        generate_req_graph(filename, framework_name, endpoint_name)
 |