#!/usr/bin/env python3 # -*- coding: utf-8 -*- ''' Example usage: ./pokec_throughput --vendor-references neo4j memgraph \ --vendor-titles Neo4j Memgraph \ --results neo_to_plot memgraph_to_plot \ --plot-title "Pokec small" --window-size 10 ''' import json import matplotlib.pyplot as plt from argparse import ArgumentParser COLORS = { 'memgraph': '#ff7300', 'neo4j': '#008cc2' } def parse_args(): argp = ArgumentParser(description=__doc__) argp.add_argument("--vendor-references", nargs="+", help="Short references that represent all the " "vendors that are going to be " "visualized on the plot.") argp.add_argument("--vendor-titles", nargs="+", help="Vender titles that are going to appear " "on the plot, e.g. legend titles.") argp.add_argument("--results", nargs="+", help="Result files for each vendor") argp.add_argument("--plot-title", default="{{Plot title placeholder}}", help="Plot title.") argp.add_argument("--window-size", type=int, default=1) return argp.parse_args() def main(): # Read the arguments. args = parse_args() # Prepare the datastructure. vendors = {} for vendor_reference, vendor_title, vendor_results in \ zip(args.vendor_references, args.vendor_titles, args.results): vendors[vendor_reference] = {} vendors[vendor_reference]['title'] = vendor_title vendors[vendor_reference]['results_path'] = vendor_results vendors[vendor_reference]['color'] = COLORS[vendor_reference] vendors[vendor_reference]['t'] = [0.0] vendors[vendor_reference]['q'] = [0] vendors[vendor_reference]['dq/dt'] = [0.0] fig, ax = plt.subplots() ax.set_ylabel('Throughput (queries per second)') ax.set_xlabel('Time (seconds)') ax.set_title(args.plot_title) # Collect the benchmark data and plot lines. print("Pokec throughput") for vendor_reference, vendor_data in vendors.items(): print("Vendor: %s" % vendor_reference) with open(vendor_data['results_path']) as results_file: results = json.load(results_file)['results'][0] # Skip first line which contains titles. for measurement in results: vendor_data['t'].append(float(measurement['time'])) vendor_data['q'].append(int(measurement['value'])) for i in range(1, len(vendor_data['t'])): j = max(0, i - args.window_size) vendor_data['dq/dt'].append( (vendor_data['q'][i] - vendor_data['q'][j]) / (vendor_data['t'][i] - vendor_data['t'][j])) line1, = ax.plot(vendor_data['t'], vendor_data['dq/dt'], '-', linewidth=2, label=vendor_data['title'], color=vendor_data['color']) ax.legend(loc='lower right') plt.grid() plt.show() if __name__ == '__main__': main()