summaryrefslogtreecommitdiffstats
path: root/doc/TRexDataAnalysis.py
diff options
context:
space:
mode:
authoritraviv <itraviv@cisco.com>2016-12-11 17:35:37 +0200
committeritraviv <itraviv@cisco.com>2016-12-11 17:35:52 +0200
commitd83a3f21745d6245f1cc2040e3e9cd704c7aadb0 (patch)
tree83a208b6455b19a6dcbe5d999cd67215921737a5 /doc/TRexDataAnalysis.py
parent296951010f94dbadba90d06ee4f56e1b221afd67 (diff)
changed trex_analytics to support detailed mode, generating a detailed table for test runs, also inserted machine information per setup to asciidoc. to use detailed mode run ./b build --performance-detailed at doc folder on trex-05
Signed-off-by: itraviv <itraviv@cisco.com>
Diffstat (limited to 'doc/TRexDataAnalysis.py')
-rwxr-xr-xdoc/TRexDataAnalysis.py63
1 files changed, 49 insertions, 14 deletions
diff --git a/doc/TRexDataAnalysis.py b/doc/TRexDataAnalysis.py
index fb855a16..ed674262 100755
--- a/doc/TRexDataAnalysis.py
+++ b/doc/TRexDataAnalysis.py
@@ -2,34 +2,46 @@
import pandas as pd
import numpy as np
import matplotlib
+
matplotlib.use('Agg')
from matplotlib import pyplot as plt
import os
+import time
-def generate_dframe_for_test(test_name, test_data):
+def generate_dframe_for_test(setup_name, test_name, test_data):
test_results = []
+ test_dates = []
+ test_build_ids = []
test_mins = set()
test_maxs = set()
for query in test_data:
- test_results.append(float(query[3]))
- test_mins.add(float(query[4]))
- test_maxs.add(float(query[5]))
+ test_results.append(float(query[5]))
+ date_formatted = time.strftime("%d-%m-%Y", time.strptime(query[2], "%Y%m%d"))
+ time_of_res = date_formatted + '-' + query[3] + ':' + query[4]
+ test_dates.append(time_of_res)
+ test_build_ids.append(query[8])
+ test_mins.add(float(query[6]))
+ test_maxs.add(float(query[7]))
df = pd.DataFrame({test_name: test_results})
+ df_detailed = pd.DataFrame({(test_name + ' Results'): test_results, (test_name + ' Date'): test_dates,
+ "Setup": ([setup_name] * len(test_results)), "Build Id": test_build_ids})
stats = tuple([float(df.mean()), min(test_mins), max(test_maxs)]) # stats = (avg_mpps,min,max)
- return df, stats
+ return df, stats, df_detailed
def generate_dframe_arr_and_stats_of_tests_per_setup(date, setup_name, setup_dict):
dframe_arr_trend = []
stats_arr = []
dframe_arr_latest = []
+ dframe_arr_detailed = []
test_names = setup_dict.keys()
for test in test_names:
- df, stats = generate_dframe_for_test(test, setup_dict[test])
+ df, stats, df_detailed = generate_dframe_for_test(setup_name, test, setup_dict[test])
+ dframe_arr_detailed.append(df_detailed)
dframe_arr_trend.append(df)
stats_arr.append(stats)
- df_latest = float(setup_dict[test][-1][3])
+ df_latest = float(setup_dict[test][-1][6])
dframe_arr_latest.append(df_latest)
dframe_arr_latest = pd.DataFrame({'Date': [date] * len(dframe_arr_latest),
'Setup': [setup_name],
@@ -38,7 +50,7 @@ def generate_dframe_arr_and_stats_of_tests_per_setup(date, setup_name, setup_dic
index=range(1, len(dframe_arr_latest) + 1))
stats_df = pd.DataFrame(stats_arr, index=setup_dict.keys(), columns=['Avg MPPS', 'Golden Min', 'Golden Max'])
stats_df.index.name = 'Test Name'
- return dframe_arr_trend, stats_df, dframe_arr_latest
+ return dframe_arr_trend, stats_df, dframe_arr_latest, dframe_arr_detailed
def create_plot_for_dframe_arr(dframe_arr, setup_name, start_date, end_date, show='no', save_path='',
@@ -78,20 +90,43 @@ def create_bar_plot_for_latest_runs_per_setup(dframe_all_tests_latest, setup_nam
plt.show()
-def create_all_data_per_setup(setup_dict, setup_name, start_date, end_date, show='no', save_path='', add_stats=''):
- dframe_arr, stats_arr, dframe_latest_arr = generate_dframe_arr_and_stats_of_tests_per_setup(end_date, setup_name,
- setup_dict)
+def create_all_data_per_setup(setup_dict, setup_name, start_date, end_date, show='no', save_path='', add_stats='',
+ detailed_test_stats=''):
+ dframe_arr, stats_arr, dframe_latest_arr, dframe_detailed = generate_dframe_arr_and_stats_of_tests_per_setup(
+ end_date, setup_name,
+ setup_dict)
+ if detailed_test_stats:
+ detailed_table = create_detailed_table(dframe_detailed, setup_name, save_path)
+ else:
+ detailed_table = []
create_bar_plot_for_latest_runs_per_setup(dframe_latest_arr, setup_name, show=show, save_path=save_path)
create_plot_for_dframe_arr(dframe_arr, setup_name, start_date, end_date, show, save_path)
if add_stats:
stats_arr = stats_arr.round(2)
stats_arr.to_csv(os.path.join(save_path, setup_name + '_trend_stats.csv'))
plt.close('all')
+ return detailed_table
+
+
+def create_detailed_table(dframe_arr_detailed, setup_name, save_path=''):
+ result = reduce(lambda x, y: pd.merge(x, y, on=('Build Id', 'Setup')), dframe_arr_detailed)
+ return result
-def create_all_data(ga_data, setup_names, start_date, end_date, save_path='', add_stats=''):
+# WARNING: if the file _all_stats.csv already exists, this script deletes it, to prevent overflowing of data
+# since data is appended to the file
+def create_all_data(ga_data, setup_names, start_date, end_date, save_path='', add_stats='', detailed_test_stats=''):
+ total_detailed_data = []
+ if detailed_test_stats:
+ if os.path.exists(os.path.join(save_path, '_detailed_table.csv')):
+ os.remove(os.path.join(save_path, '_detailed_table.csv'))
for setup_name in setup_names:
if setup_name == 'trex11':
continue
- create_all_data_per_setup(ga_data[setup_name], setup_name, start_date, end_date, show='no', save_path=save_path,
- add_stats=add_stats)
+ detailed_setup_data = create_all_data_per_setup(ga_data[setup_name], setup_name, start_date, end_date,
+ show='no', save_path=save_path,
+ add_stats=add_stats, detailed_test_stats=detailed_test_stats)
+ total_detailed_data.append(detailed_setup_data)
+ if detailed_test_stats:
+ total_detailed_dframe = pd.DataFrame().append(total_detailed_data)
+ total_detailed_dframe.to_csv(os.path.join(save_path, '_detailed_table.csv'))