X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=scripts%2Fbabeltrace-benchmark%2Fbenchmark.py;h=0c8476d0151a0d1b2573061c593d7a34877b6f42;hb=5e79a3e048d695c8c455c5533d3cd31fb0f9bcfc;hp=7ab6029f9a61863af23336ea2e5cd6c26ca8a275;hpb=20defd5e328ab5a054111f3657ebc0323a3a2f7f;p=lttng-ci.git diff --git a/scripts/babeltrace-benchmark/benchmark.py b/scripts/babeltrace-benchmark/benchmark.py index 7ab6029..0c8476d 100644 --- a/scripts/babeltrace-benchmark/benchmark.py +++ b/scripts/babeltrace-benchmark/benchmark.py @@ -38,6 +38,28 @@ from minio.error import ResponseError BENCHMARK_TYPES = ["dummy", "text"] DEFAULT_BUCKET = "lava" +invalid_commits = { + "ec9a9794af488a9accce7708a8b0d8188b498789", # Does not build + "8c99128c640cbce71fb8a6caa15e4c672252b662", # Block on configure + "f3847c753f1b4f12353c38d97b0577d9993d19fb", # Does not build + "e0111295f17ddfcc33ec771a8deac505473a06ad", # Does not build + "d0d4e0ed487ea23aaf0d023513c0a4d86901b79b", # Does not build + "c24f7ab4dd9edeb5e50b0070fd9d9e8691057dde", # Does not build + "ce67f5614a4db3b2de4d887eca52135b439b4937", # Does not build + "80aff5efc66679fd934cef433c0e698694748385", # Does not build + "f4f11e84942d36fcc8a597d226928bce2ccac4b3", # Does not build + } + +def json_type(string): + """ + Argpase type for json args. + We expect a base dictionary. + """ + passed_json = json.loads(string) + if not isinstance(passed_json, dict): + msg = "%r is not a dict" % string + raise argparse.ArgumentTypeError(msg) + return passed_json def graph_get_color(branch): """ @@ -126,7 +148,7 @@ def get_benchmark_results(client, commit, workdir): results = {} benchmark_valid = True for b_type in BENCHMARK_TYPES: - prefix = "/results/benchmarks/babeltrace/{}/".format(b_type) + prefix = "/results/benchmarks/babeltrace/{}".format(b_type) result_file = get_file(client, prefix, commit, workdir) if not result_file: """ @@ -186,6 +208,7 @@ def plot_raw_value(branch, benchmark_type, x_data, y_data, labels, latest_values plt.ylabel("User + system time (s)") plt.xlabel("Latest commits") plt.legend() + plt.grid(True) # Put tick on the right side ax.tick_params(labeltop=False, labelright=True) @@ -193,7 +216,10 @@ def plot_raw_value(branch, benchmark_type, x_data, y_data, labels, latest_values plt.tight_layout() return -def plot_delta_between_point(branch, benchmark_type, x_data, y_data, labels, latest_values): + +def plot_delta_between_point( + branch, benchmark_type, x_data, y_data, labels, latest_values +): """ Plot the graph of delta between each sequential commit. """ @@ -218,10 +244,14 @@ def plot_delta_between_point(branch, benchmark_type, x_data, y_data, labels, lat ax = plt.gca() plt.xticks(x_data, labels, rotation=90, family="monospace") - plt.title(graph_get_title(branch, benchmark_type) + " Delta to previous commit", fontweight="bold") + plt.title( + graph_get_title(branch, benchmark_type) + " Delta to previous commit", + fontweight="bold", + ) plt.ylabel("Seconds") plt.xlabel("Latest commits") plt.legend() + plt.grid(True) # Put tick on the right side ax.tick_params(labeltop=False, labelright=True) @@ -229,6 +259,7 @@ def plot_delta_between_point(branch, benchmark_type, x_data, y_data, labels, lat plt.tight_layout() return + def plot_ratio(branch, benchmark_type, x_data, y_data, labels, latest_values): """ Plot the graph using a ratio using first point as reference (0%). @@ -281,6 +312,7 @@ def plot_ratio(branch, benchmark_type, x_data, y_data, labels, latest_values): plt.ylabel("Ratio") plt.xlabel("Latest commits") plt.legend() + plt.grid(True) # Put tick on the right side ax.tick_params(labeltop=False, labelright=True) @@ -288,6 +320,7 @@ def plot_ratio(branch, benchmark_type, x_data, y_data, labels, latest_values): plt.tight_layout() return + def generate_graph(branches, report_name, git_path): # The PDF document @@ -348,13 +381,15 @@ def generate_graph(branches, report_name, git_path): pdf_pages.savefig(fig) fig = plt.figure(figsize=(width, 8.27), dpi=100) - plot_delta_between_point(branch, b_type, x_data, y_data, labels, latest_values) + plot_delta_between_point( + branch, b_type, x_data, y_data, labels, latest_values + ) pdf_pages.savefig(fig) pdf_pages.close() -def launch_jobs(branches, git_path, wait_for_completion, debug): +def launch_jobs(branches, git_path, wait_for_completion, debug, force): """ Lauch jobs for all missing results. """ @@ -364,8 +399,10 @@ def launch_jobs(branches, git_path, wait_for_completion, debug): with tempfile.TemporaryDirectory() as workdir: for commit in commits: + if commit in invalid_commits: + continue b_results = get_benchmark_results(client, commit, workdir)[0] - if b_results: + if b_results and not force: continue lava_submit.submit( commit, wait_for_completion=wait_for_completion, debug=debug @@ -386,6 +423,9 @@ def main(): parser.add_argument( "--generate-jobs", action="store_true", help="Generate and send jobs" ) + parser.add_argument( + "--force-jobs", action="store_true", help="Force the queueing of jobs to lava" + ) parser.add_argument( "--do-not-wait-on-completion", action="store_true", @@ -407,19 +447,35 @@ def main(): parser.add_argument( "--repo-path", help="The location of the git repo to use.", required=True ) + parser.add_argument( + "--overwrite-branches-cutoff", + help="A dictionary of the form {" + "'branch_name': 'commit_hash_cutoff',...}. Allow custom graphing and" + "jobs generation.", + required=False, type=json_type + ) args = parser.parse_args() + if args.overwrite_branches_cutoff: + bt_branches = args.overwrite_branches_cutoff + if not os.path.exists(args.repo_path): print("Repository location does not exists.") return 1 if args.generate_jobs: print("Launching jobs for:") + for branch, cutoff in bt_branches.items(): print("\t Branch {} with cutoff {}".format(branch, cutoff)) + launch_jobs( - bt_branches, args.repo_path, not args.do_not_wait_on_completion, args.debug + bt_branches, + args.repo_path, + not args.do_not_wait_on_completion, + args.debug, + args.force_jobs, ) if args.generate_report: