From 9e7ba8c89c7cf6f23403aacf599f740a84ad4d0a Mon Sep 17 00:00:00 2001 From: durga-ct Date: Thu, 4 Jun 2026 17:09:25 +0530 Subject: [PATCH 1/3] lf_interop_speedtest.py: fixed avoid results folder creation and keep reports in the original output path Signed-off-by: durga-ct --- py-scripts/lf_interop_speedtest.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/py-scripts/lf_interop_speedtest.py b/py-scripts/lf_interop_speedtest.py index 49e37385f..83bbe2a1f 100644 --- a/py-scripts/lf_interop_speedtest.py +++ b/py-scripts/lf_interop_speedtest.py @@ -1386,10 +1386,10 @@ def generate_report(self, result_dir_name, do_webgui=False, per_post_timeout=120 _results_dir_name=result_dir_name, _path=self.result_dir if self.result_dir is not None else "/home/lanforge/html-reports" ) - report_path = report.get_path() + # report_path = report.get_path() report_path_date_time = report.get_path_date_time() - os.makedirs(report_path, exist_ok=True) - os.makedirs(report_path_date_time, exist_ok=True) + # os.makedirs(report_path, exist_ok=True) + # os.makedirs(report_path_date_time, exist_ok=True) all_ips = set() for iter_data in self.iteration_dict.values(): @@ -1921,7 +1921,7 @@ def main(): optional.add_argument( '--result_dir', type=str, - default='results', + default='', help='Directory to store test results') optional.add_argument( From 8341d4c23e343683230c2ef7948fc638f834fd1d Mon Sep 17 00:00:00 2001 From: durga-ct Date: Thu, 4 Jun 2026 17:28:22 +0530 Subject: [PATCH 2/3] lf_interop_speedtest: move generated CSV files to report directory Signed-off-by: durga-ct --- py-scripts/lf_interop_speedtest.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/py-scripts/lf_interop_speedtest.py b/py-scripts/lf_interop_speedtest.py index 83bbe2a1f..366f4a341 100644 --- a/py-scripts/lf_interop_speedtest.py +++ b/py-scripts/lf_interop_speedtest.py @@ -1741,9 +1741,13 @@ def wait_for_iteration_posts(iter_idx, expected, timeout_s=per_post_timeout, sle _xticks_rotation=30, _enable_csv=True ) - report.set_graph_image(graph.build_bar_graph()) - report.move_graph_image() - report.build_graph() + png = graph.build_bar_graph() + if png: + report.set_graph_image(png) + report.move_graph_image() + report.build_graph() + report.set_csv_filename(png) + report.move_csv_file() report.set_table_title('Per-Client Latency (Download & Upload)') report.build_table_title() @@ -1763,9 +1767,13 @@ def wait_for_iteration_posts(iter_idx, expected, timeout_s=per_post_timeout, sle _xticks_rotation=30, _enable_csv=True ) - report.set_graph_image(graph2.build_bar_graph()) - report.move_graph_image() - report.build_graph() + png2 = graph2.build_bar_graph() + if png2: + report.set_graph_image(png2) + report.move_graph_image() + report.build_graph() + report.set_csv_filename(png2) + report.move_csv_file() test_input_info = { # "IP": [dev["ip"] for dev in roster], # Uncomment for IP column From 149e0374746d491debd07f4bd7b69235453fee40 Mon Sep 17 00:00:00 2001 From: durga-ct Date: Thu, 4 Jun 2026 17:31:35 +0530 Subject: [PATCH 3/3] lf_interop_speedtest: improve graph readability by limiting values to 2 decimal places VERIFIED CLI: 1.python3 lf_interop_speedtest.py --mgr 192.168.207.78 --device_list 1.10,1.12 --instance_name SAMPLE_TEST --iteration 1 --upstream_port eth1 --cleanup Signed-off-by: durga-ct --- py-scripts/lf_interop_speedtest.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/py-scripts/lf_interop_speedtest.py b/py-scripts/lf_interop_speedtest.py index 366f4a341..6b1c0b9ad 100644 --- a/py-scripts/lf_interop_speedtest.py +++ b/py-scripts/lf_interop_speedtest.py @@ -1535,10 +1535,10 @@ def wait_for_iteration_posts(iter_idx, expected, timeout_s=per_post_timeout, sle # store clean iteration data per_iter[iter_idx] = { "hostnames": host_list, - "download": dls, - "upload": uls, - "download_lat": dlat, - "upload_lat": ulat, + "download": [round(x, 2) for x in dls], + "upload": [round(x, 2) for x in uls], + "download_lat": [round(x, 2) for x in dlat], + "upload_lat": [round(x, 2) for x in ulat], "meta": meta } print('DEBUG', per_iter) @@ -1566,10 +1566,10 @@ def wait_for_iteration_posts(iter_idx, expected, timeout_s=per_post_timeout, sle # aggregate averages per iteration rotation_summary[rotation]["coords"].append(coord) - rotation_summary[rotation]["download"].append(sum(dls) / len(dls)) - rotation_summary[rotation]["upload"].append(sum(uls) / len(uls)) - rotation_summary[rotation]["download_lat"].append(sum(dlat) / len(dlat)) - rotation_summary[rotation]["upload_lat"].append(sum(ulat) / len(ulat)) + rotation_summary[rotation]["download"].append(round(sum(dls) / len(dls), 2)) + rotation_summary[rotation]["upload"].append(round(sum(uls) / len(uls), 2)) + rotation_summary[rotation]["download_lat"].append(round(sum(dlat) / len(dlat), 2)) + rotation_summary[rotation]["upload_lat"].append(round(sum(ulat) / len(ulat), 2)) if self.robot_test: # TODO NEED to add heading of rotation @@ -1702,10 +1702,10 @@ def wait_for_iteration_posts(iter_idx, expected, timeout_s=per_post_timeout, sle if ip in ip_to_idx: j = ip_to_idx[ip] hostnames.append(host or ip) - dls.append(iter_block['download_speed'][j]) - uls.append(iter_block['upload_speed'][j]) - dlat.append(iter_block['download_lat'][j]) - ulat.append(iter_block['upload_lat'][j]) + dls.append(round(iter_block['download_speed'][j], 2)) + uls.append(round(iter_block['upload_speed'][j], 2)) + dlat.append(round(iter_block['download_lat'][j], 2)) + ulat.append(round(iter_block['upload_lat'][j], 2)) else: host_label = host or ip or "(unknown)" hostnames.append(host_label)