from statistics import mean, variance
from buildtest.cli.report import Report
from buildtest.defaults import console
[docs]
def stats_cmd(name, configuration, report_file=None):
"""Entry Point for ``buildtest stats``
Args:
name: Name of test specified command line via ``buildtest stats <name>``
report_file (str, optional): Path to report file for querying results
"""
results = Report(
filter={"name": name},
format="name,state,returncode,starttime,endtime,runtime",
report_file=report_file,
configuration=configuration,
)
first_result = Report(
filter={"name": name},
format="starttime",
report_file=report_file,
oldest=True,
configuration=configuration,
)
last_result = Report(
filter={"name": name},
format="starttime",
report_file=report_file,
latest=True,
configuration=configuration,
)
console.print("Total Test Runs: ", len(results.display_table["name"]))
console.print("First Run:", first_result.display_table["starttime"][0])
console.print("Last Run:", last_result.display_table["starttime"][0])
console.print("Fastest Runtime: ", min(results.display_table["runtime"]))
console.print("Slowest Runtime: ", max(results.display_table["runtime"]))
# need to convert all items to float since each item is str
runtimes = [float(runtime) for runtime in results.display_table["runtime"]]
test_variance = variance(runtimes) if len(runtimes) > 1 else 0
console.print(f"Mean Runtime {mean(runtimes):.6f}")
console.print(f"Variance Runtime {test_variance:0.6f}")
results.print_report()