diff --git a/py-scripts/tools/mine_regression_results.py b/py-scripts/tools/mine_regression_results.py new file mode 100755 index 00000000..7f210eed --- /dev/null +++ b/py-scripts/tools/mine_regression_results.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 +import pandas as pd +import argparse + + +class MineRegression: + def __init__(self, + system_information=None, + save_csv=False): + self.df = None + self.system_info = system_information + self.save_csv = save_csv + + def generate_csv(self): + if self.system_info: + systems = pd.read_csv(self.system_info) + ips = systems['Machine'] + else: + system_info = {'192.168.92.18': ['3.7.7', '5.4.4', 'F30', '.local'], + '192.168.92.12': ['3.9.7', '5.4.4', 'F34', '.local'], + '192.168.93.51': ['3.7.7', '5.4.4', 'F30', 'venv'], + '192.168.92.15': ['3.6.6', '5.4.4', 'F27', '.local']} + ips = list(system_info.keys()) + systems = pd.DataFrame(system_info).transpose().reset_index() + systems.columns = ['Machine', 'Python version', 'LF version', 'Fedora version', 'environment'] + results = [pd.read_html('http://%s/html-reports/latest.html' % url)[0] for url in ips] + for result in list(range(0, len(ips))): + results[result]['Machine'] = ips[result] + self.df = pd.concat(results) + self.df = pd.merge(self.df, systems, on='Machine') + self.df = self.df[self.df['STDOUT'] == 'STDOUT'] + + def generate_report(self): + system_variations = self.df[['Python version', 'LF version', 'Fedora version', 'environment']].drop_duplicates().reset_index( + drop=True) + errors = list() + for index in system_variations.index: + variation = system_variations.iloc[index] + result = self.df.loc[self.df[['Python version', 'LF version', 'Fedora version', 'environment']].isin(dict( + variation).values()).all(axis=1), :].dropna(subset=['STDERR']).shape[0] + errors.append(result) + system_variations['errors'] = errors + if self.save_csv: + system_variations.to_csv('regression_suite_results.csv') + else: + print(system_variations.sort_values('errors')) + + +def main(): + parser = argparse.ArgumentParser(description='Compare regression results from different systems') + parser.add_argument('--system_info', help='location of system information csv', default=None) + parser.add_argument('--save_csv', help='save CSV of results', default=False) + + args = parser.parse_args() + + Miner = MineRegression(system_information=args.system_info, + save_csv=args.save_csv) + + Miner.generate_csv() + + Miner.generate_report() + + +if __name__ == '__main__': + main()