Source code for oct.results.graphs

import os
import pytz
import pygal
import numpy as np
import pandas as pd
from dateutil.tz import tzlocal


[docs]def get_local_time(index): """Localize datetime for better output in graphs :param pandas.DateTimeIndex index: pandas datetime index :return: aware time objet :rtype: datetime.time """ dt = index.to_pydatetime() dt = dt.replace(tzinfo=pytz.utc) return dt.astimezone(tzlocal()).time()
[docs]def resp_graph_raw(dataframe, image_name, dir='./'): """Response time graph for raw data :param pandas.DataFrame dataframe: the raw results dataframe :param str image_name: the output file name :param str dir: the output directory :return: None """ factor = int(len(dataframe) / 10) df = dataframe.reset_index() grp = df.groupby(pd.cut(df.index, np.arange(0, len(df), factor))) fig = pygal.Dot(stroke=False, x_label_rotation=25, x_title='Elapsed Time In Test (secs)', y_title='Average Response Time (secs)', js=('scripts/pygal-tooltip.min.js',)) fig.x_labels = [x for x in grp.first()['epoch']] fig.title = image_name.split('.')[0] fig.add('Time', [x for x in grp.describe()['scriptrun_time'].unstack()['mean'].round(2)]) fig.render_to_file(filename=os.path.join(dir, image_name))
[docs]def resp_graph(dataframe, image_name, dir='./'): """Response time graph for bucketed data :param pandas.DataFrame dataframe: dataframe containing all data :param str image_name: the output file name :param str dir: the output directory :return: None """ fig = pygal.TimeLine(x_title='Elapsed Time In Test (secs)', y_title='Response Time (secs)', x_label_rotation=25, js=('scripts/pygal-tooltip.min.js',)) fig.add('AVG', [(get_local_time(index), row['mean'] if pd.notnull(row['mean']) else None) for index, row in dataframe.iterrows()]) fig.add('90%', [(get_local_time(index), row['90%'] if pd.notnull(row['90%']) else None) for index, row in dataframe.iterrows()]) fig.add('80%', [(get_local_time(index), row['80%'] if pd.notnull(row['80%']) else None) for index, row in dataframe.iterrows()]) fig.render_to_file(filename=os.path.join(dir, image_name))
[docs]def tp_graph(dataframe, image_name, dir='./'): """Throughput graph :param pandas.DataFrame dataframe: dataframe containing all data :param str dir: the output directory :return: None """ fig = pygal.TimeLine(x_title='Elapsed Time In Test (secs)', x_label_rotation=25, y_title='Transactions Per Second (count)', human_readable=True, js=('scripts/pygal-tooltip.min.js',)) fig.add('Transactions per second', [(get_local_time(index), row['count']) for index, row in dataframe.iterrows()]) fig.render_to_file(filename=os.path.join(dir, image_name))