From 5f684d7f05a6e6d3acab0b1127e3bbeb081e8be4 Mon Sep 17 00:00:00 2001 From: Jaroslava Fiedlerova Date: Thu, 1 Aug 2024 13:31:07 +0200 Subject: [PATCH 1/4] Improve error handling in Iperf_analyzeV3TCPJson() --- ci-scripts/cls_oaicitest.py | 39 +++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/ci-scripts/cls_oaicitest.py b/ci-scripts/cls_oaicitest.py index b7e61c06cd..8bfc6bc599 100644 --- a/ci-scripts/cls_oaicitest.py +++ b/ci-scripts/cls_oaicitest.py @@ -96,29 +96,26 @@ def Iperf_ComputeTime(args): return int(result.group('iperf_time')) def Iperf_analyzeV3TCPJson(filename, iperf_tcp_rate_target): - if (not os.path.isfile(filename)): - return (False, 'Iperf3 TCP: Log file not present') - if (os.path.getsize(filename)==0): - return (False, 'Iperf3 TCP: Log file is empty') - - with open(filename) as file: - filename = json.load(file) - try: - sender_bitrate = round(filename['end']['streams'][0]['sender']['bits_per_second']/1000000,2) - receiver_bitrate = round(filename['end']['streams'][0]['receiver']['bits_per_second']/1000000,2) - except Exception as e: - return (False, 'Could not compute Iperf3 bitrate!') - - snd_msg = f'Sender Bitrate : {sender_bitrate} Mbps' - rcv_msg = f'Receiver Bitrate : {receiver_bitrate} Mbps' - success = True - if (iperf_tcp_rate_target is not None): - if (int(receiver_bitrate) < int(iperf_tcp_rate_target)): - rcv_msg += f" (too low! < {iperf_tcp_rate_target} Mbps)" - success = False + try: + with open(filename) as f: + results = json.load(f) + sender_bitrate = round(results['end']['streams'][0]['sender']['bits_per_second'] / 1000000, 2) + receiver_bitrate = round(results['end']['streams'][0]['receiver']['bits_per_second'] / 1000000, 2) + snd_msg = f'Sender Bitrate : {sender_bitrate} Mbps' + rcv_msg = f'Receiver Bitrate : {receiver_bitrate} Mbps' + success = True + if (iperf_tcp_rate_target is not None): + if (int(receiver_bitrate) < int(iperf_tcp_rate_target)): + rcv_msg += f" (too low! < {iperf_tcp_rate_target} Mbps)" + success = False else: rcv_msg += f" (target : {iperf_tcp_rate_target} Mbps)" - return(success, f'{snd_msg}\n{rcv_msg}') + return(success, f'{snd_msg}\n{rcv_msg}') + except KeyError as e: + e_msg = results.get('error', f'error report not found in {filename}') + return (False, f'While parsing Iperf3 results: missing key {e}, {e_msg}') + except Exception as e: + return (False, f'While parsing Iperf3 results: generic exception: {e}') def Iperf_analyzeV3BIDIRJson(filename): if (not os.path.isfile(filename)): From 9acf60a33954e593386219479796fc08b3efa1d7 Mon Sep 17 00:00:00 2001 From: Jaroslava Fiedlerova Date: Thu, 1 Aug 2024 13:31:51 +0200 Subject: [PATCH 2/4] Improve error handling in Iperf_analyzeV3BIDIRJson() --- ci-scripts/cls_oaicitest.py | 37 +++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/ci-scripts/cls_oaicitest.py b/ci-scripts/cls_oaicitest.py index 8bfc6bc599..737b8ca580 100644 --- a/ci-scripts/cls_oaicitest.py +++ b/ci-scripts/cls_oaicitest.py @@ -118,26 +118,23 @@ def Iperf_analyzeV3TCPJson(filename, iperf_tcp_rate_target): return (False, f'While parsing Iperf3 results: generic exception: {e}') def Iperf_analyzeV3BIDIRJson(filename): - if (not os.path.isfile(filename)): - return (False, 'Iperf3 Bidir TCP: Log file not present') - if (os.path.getsize(filename)==0): - return (False, 'Iperf3 Bidir TCP: Log file is empty') - - with open(filename) as file: - filename = json.load(file) - try: - sender_bitrate_ul = round(filename['end']['streams'][0]['sender']['bits_per_second']/1000000,2) - receiver_bitrate_ul = round(filename['end']['streams'][0]['receiver']['bits_per_second']/1000000,2) - sender_bitrate_dl = round(filename['end']['streams'][1]['sender']['bits_per_second']/1000000,2) - receiver_bitrate_dl = round(filename['end']['streams'][1]['receiver']['bits_per_second']/1000000,2) - except Exception as e: - return (False, 'Could not compute BIDIR bitrate!') - - msg = f'Sender Bitrate DL : {sender_bitrate_dl} Mbps\n' - msg += f'Receiver Bitrate DL : {receiver_bitrate_dl} Mbps\n' - msg += f'Sender Bitrate UL : {sender_bitrate_ul} Mbps\n' - msg += f'Receiver Bitrate UL : {receiver_bitrate_ul} Mbps\n' - return (True, msg) + try: + with open(filename) as f: + results = json.load(f) + sender_bitrate_ul = round(results['end']['streams'][0]['sender']['bits_per_second'] / 1000000, 2) + receiver_bitrate_ul = round(results['end']['streams'][0]['receiver']['bits_per_second'] / 1000000, 2) + sender_bitrate_dl = round(results['end']['streams'][1]['sender']['bits_per_second'] / 1000000, 2) + receiver_bitrate_dl = round(results['end']['streams'][1]['receiver']['bits_per_second'] / 1000000, 2) + msg = f'Sender Bitrate DL : {sender_bitrate_dl} Mbps\n' + msg += f'Receiver Bitrate DL : {receiver_bitrate_dl} Mbps\n' + msg += f'Sender Bitrate UL : {sender_bitrate_ul} Mbps\n' + msg += f'Receiver Bitrate UL : {receiver_bitrate_ul} Mbps\n' + return (True, msg) + except KeyError as e: + e_msg = results.get('error', f'error report not found in {filename}') + return (False, f'While parsing Iperf3 results: missing key {e}, {e_msg}') + except Exception as e: + return (False, f'While parsing Iperf3 results: generic exception: {e}') def Iperf_analyzeV3UDP(filename, iperf_bitrate_threshold, iperf_packetloss_threshold, target_bitrate): if (not os.path.isfile(filename)): From 39070f6541d4f146b4afb2d40149afc861cd8007 Mon Sep 17 00:00:00 2001 From: Jaroslava Fiedlerova Date: Thu, 1 Aug 2024 15:59:35 +0200 Subject: [PATCH 3/4] Minor fix in Iperf_analyzeV3TCPJson() --- ci-scripts/cls_oaicitest.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci-scripts/cls_oaicitest.py b/ci-scripts/cls_oaicitest.py index 737b8ca580..281f8b6d48 100644 --- a/ci-scripts/cls_oaicitest.py +++ b/ci-scripts/cls_oaicitest.py @@ -108,8 +108,8 @@ def Iperf_analyzeV3TCPJson(filename, iperf_tcp_rate_target): if (int(receiver_bitrate) < int(iperf_tcp_rate_target)): rcv_msg += f" (too low! < {iperf_tcp_rate_target} Mbps)" success = False - else: - rcv_msg += f" (target : {iperf_tcp_rate_target} Mbps)" + else: + rcv_msg += f" (target : {iperf_tcp_rate_target} Mbps)" return(success, f'{snd_msg}\n{rcv_msg}') except KeyError as e: e_msg = results.get('error', f'error report not found in {filename}') From 12229ef50e18ebf6cf31382b9700df982466b5f3 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Thu, 1 Aug 2024 17:44:21 +0200 Subject: [PATCH 4/4] Smaller except blocks, add JSONDecodeError --- ci-scripts/cls_oaicitest.py | 39 +++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/ci-scripts/cls_oaicitest.py b/ci-scripts/cls_oaicitest.py index 281f8b6d48..037f0fdf19 100644 --- a/ci-scripts/cls_oaicitest.py +++ b/ci-scripts/cls_oaicitest.py @@ -101,21 +101,23 @@ def Iperf_analyzeV3TCPJson(filename, iperf_tcp_rate_target): results = json.load(f) sender_bitrate = round(results['end']['streams'][0]['sender']['bits_per_second'] / 1000000, 2) receiver_bitrate = round(results['end']['streams'][0]['receiver']['bits_per_second'] / 1000000, 2) - snd_msg = f'Sender Bitrate : {sender_bitrate} Mbps' - rcv_msg = f'Receiver Bitrate : {receiver_bitrate} Mbps' - success = True - if (iperf_tcp_rate_target is not None): - if (int(receiver_bitrate) < int(iperf_tcp_rate_target)): - rcv_msg += f" (too low! < {iperf_tcp_rate_target} Mbps)" - success = False - else: - rcv_msg += f" (target : {iperf_tcp_rate_target} Mbps)" - return(success, f'{snd_msg}\n{rcv_msg}') + except json.JSONDecodeError as e: + return (False, f'Could not decode JSON log file {filename}: {e}') except KeyError as e: e_msg = results.get('error', f'error report not found in {filename}') return (False, f'While parsing Iperf3 results: missing key {e}, {e_msg}') except Exception as e: - return (False, f'While parsing Iperf3 results: generic exception: {e}') + return (False, f'While parsing Iperf3 results: exception: {e}') + snd_msg = f'Sender Bitrate : {sender_bitrate} Mbps' + rcv_msg = f'Receiver Bitrate : {receiver_bitrate} Mbps' + success = True + if iperf_tcp_rate_target is not None: + success = float(receiver_bitrate) >= float(iperf_tcp_rate_target) + if success: + rcv_msg += f" (target: {iperf_tcp_rate_target})" + else: + rcv_msg += f" (too low! < {iperf_tcp_rate_target})" + return(success, f'{snd_msg}\n{rcv_msg}') def Iperf_analyzeV3BIDIRJson(filename): try: @@ -125,16 +127,19 @@ def Iperf_analyzeV3BIDIRJson(filename): receiver_bitrate_ul = round(results['end']['streams'][0]['receiver']['bits_per_second'] / 1000000, 2) sender_bitrate_dl = round(results['end']['streams'][1]['sender']['bits_per_second'] / 1000000, 2) receiver_bitrate_dl = round(results['end']['streams'][1]['receiver']['bits_per_second'] / 1000000, 2) - msg = f'Sender Bitrate DL : {sender_bitrate_dl} Mbps\n' - msg += f'Receiver Bitrate DL : {receiver_bitrate_dl} Mbps\n' - msg += f'Sender Bitrate UL : {sender_bitrate_ul} Mbps\n' - msg += f'Receiver Bitrate UL : {receiver_bitrate_ul} Mbps\n' - return (True, msg) + except json.JSONDecodeError as e: + return (False, f'Could not decode JSON log file: {e}') except KeyError as e: e_msg = results.get('error', f'error report not found in {filename}') return (False, f'While parsing Iperf3 results: missing key {e}, {e_msg}') except Exception as e: - return (False, f'While parsing Iperf3 results: generic exception: {e}') + return (False, f'While parsing Iperf3 results: exception: {e}') + + msg = f'Sender Bitrate DL : {sender_bitrate_dl} Mbps\n' + msg += f'Receiver Bitrate DL : {receiver_bitrate_dl} Mbps\n' + msg += f'Sender Bitrate UL : {sender_bitrate_ul} Mbps\n' + msg += f'Receiver Bitrate UL : {receiver_bitrate_ul} Mbps\n' + return (True, msg) def Iperf_analyzeV3UDP(filename, iperf_bitrate_threshold, iperf_packetloss_threshold, target_bitrate): if (not os.path.isfile(filename)):