Source code for benchbuild.cli.report

from plumbum import cli

from benchbuild import experiments, reports
from benchbuild.cli.main import BenchBuild
from benchbuild.utils import schema


[docs]@BenchBuild.subcommand("report") class BenchBuildReport(cli.Application): """Generate Reports from the benchbuild db.""" def __init__(self, executable): super(BenchBuildReport, self).__init__(executable=executable) self.experiment_names = [] self.report_names = None self._experiment_ids = [] self._outfile = "report.csv"
[docs] @cli.switch( ["-R", "--report"], str, list=True, help="Specify the reports to generate") def reports(self, _reports): self.report_names = _reports
[docs] @cli.switch( ["-E", "--experiment"], str, list=True, help="Specify experiments to run") def experiments(self, _experiments): self.experiment_names = _experiments
[docs] @cli.switch( ["-e", "--experiment-id"], str, list=True, help="Specify an experiment id to run") def experiment_ids(self, ids): self._experiment_ids = ids
[docs] @cli.switch(["-o", "--outfile"], str, help="Output file name") def outfile(self, outfile): self._outfile = outfile
[docs] def main(self, *args): del args # Unused experiments.discover() reports.discover() all_reports = reports.ReportRegistry.reports def generate_reports(_reports, _experiments=None): if not reports: print("No reports found. Sorry.") for rcls in _reports: if _experiments: for exp in _experiments: report = rcls(exp, self._experiment_ids, self._outfile, schema.Session()) else: report = rcls(None, self._experiment_ids, self._outfile, schema.Session()) report.generate() if self.report_names: _reports = [ all_reports[name] for name in all_reports if name in self.report_names ] generate_reports(_reports, self.experiment_names) exit(0) if self.experiment_names: _reports = [ all_reports[name] for name in all_reports if set(all_reports[name].SUPPORTED_EXPERIMENTS) & set( self.experiment_names) ] generate_reports(_reports, self.experiment_names) exit(0)