adjusted stats

This commit is contained in:
DJ2LS 2024-02-27 22:39:45 +01:00
parent 9706260933
commit fd9fb81fa2
3 changed files with 20 additions and 19 deletions

View file

@ -104,7 +104,7 @@ class ARQSession():
action_name = self.STATE_TRANSITION[self.state][frame_type] action_name = self.STATE_TRANSITION[self.state][frame_type]
received_data, type_byte = getattr(self, action_name)(frame) received_data, type_byte = getattr(self, action_name)(frame)
if isinstance(received_data, bytearray) and isinstance(type_byte, int): if isinstance(received_data, bytearray) and isinstance(type_byte, int):
self.arq_data_type_handler.dispatch(type_byte, received_data, self.calculate_session_statistics()) self.arq_data_type_handler.dispatch(type_byte, received_data, self.update_histograms(len(received_data), len(received_data)))
return return
self.log(f"Ignoring unknown transition from state {self.state.name} with frame {frame['frame_type']}") self.log(f"Ignoring unknown transition from state {self.state.name} with frame {frame['frame_type']}")
@ -121,15 +121,15 @@ class ARQSession():
return self.session_ended - self.session_started return self.session_ended - self.session_started
def calculate_session_statistics(self): def calculate_session_statistics(self, confirmed_bytes, total_bytes):
duration = self.calculate_session_duration() duration = self.calculate_session_duration()
total_bytes = self.total_length #total_bytes = self.total_length
# self.total_length # self.total_length
duration_in_minutes = duration / 60 # Convert duration from seconds to minutes duration_in_minutes = duration / 60 # Convert duration from seconds to minutes
# Calculate bytes per minute # Calculate bytes per minute
if duration_in_minutes > 0: if duration_in_minutes > 0:
bytes_per_minute = int(total_bytes / duration_in_minutes) bytes_per_minute = int(confirmed_bytes / duration_in_minutes)
else: else:
bytes_per_minute = 0 bytes_per_minute = 0
@ -147,11 +147,12 @@ class ARQSession():
'bpm_histogram': bpm_histogram_dict, 'bpm_histogram': bpm_histogram_dict,
} }
def update_histograms(self): def update_histograms(self, confirmed_bytes, total_bytes):
stats = self.calculate_session_statistics() stats = self.calculate_session_statistics(confirmed_bytes, total_bytes)
self.snr_histogram.append(self.snr) self.snr_histogram.append(self.snr)
self.bpm_histogram.append(stats['bytes_per_minute']) self.bpm_histogram.append(stats['bytes_per_minute'])
self.time_histogram.append(datetime.datetime.now().isoformat()) self.time_histogram.append(datetime.datetime.now().isoformat())
return stats
def get_appropriate_speed_level(self, snr): def get_appropriate_speed_level(self, snr):
# Start with the lowest speed level as default # Start with the lowest speed level as default

View file

@ -151,14 +151,14 @@ class ARQSessionIRS(arq_session.ARQSession):
self.received_bytes += len(data_part) self.received_bytes += len(data_part)
self.log(f"Received {self.received_bytes}/{self.total_length} bytes") self.log(f"Received {self.received_bytes}/{self.total_length} bytes")
self.event_manager.send_arq_session_progress( self.event_manager.send_arq_session_progress(
False, self.id, self.dxcall, self.received_bytes, self.total_length, self.state.name, self.calculate_session_statistics()) False, self.id, self.dxcall, self.received_bytes, self.total_length, self.state.name, self.calculate_session_statistics(self.received_bytes, self.total_length))
return True return True
def receive_data(self, burst_frame): def receive_data(self, burst_frame):
self.process_incoming_data(burst_frame) self.process_incoming_data(burst_frame)
# update statistics # update statistics
self.update_histograms() self.update_histograms(self.received_bytes, self.total_length)
if not self.all_data_received(): if not self.all_data_received():
self.calibrate_speed_settings(burst_frame=burst_frame) self.calibrate_speed_settings(burst_frame=burst_frame)
@ -189,7 +189,7 @@ class ARQSessionIRS(arq_session.ARQSession):
self.session_ended = time.time() self.session_ended = time.time()
self.set_state(IRS_State.ENDED) self.set_state(IRS_State.ENDED)
self.event_manager.send_arq_session_finished( self.event_manager.send_arq_session_finished(
False, self.id, self.dxcall, True, self.state.name, data=self.received_data, statistics=self.calculate_session_statistics()) False, self.id, self.dxcall, True, self.state.name, data=self.received_data, statistics=self.calculate_session_statistics(self.received_bytes, self.total_length))
return self.received_data, self.type_byte return self.received_data, self.type_byte
else: else:
@ -256,7 +256,7 @@ class ARQSessionIRS(arq_session.ARQSession):
self.set_state(IRS_State.ABORTED) self.set_state(IRS_State.ABORTED)
self.states.setARQ(False) self.states.setARQ(False)
self.event_manager.send_arq_session_finished( self.event_manager.send_arq_session_finished(
False, self.id, self.dxcall, False, self.state.name, statistics=self.calculate_session_statistics()) False, self.id, self.dxcall, False, self.state.name, statistics=self.calculate_session_statistics(self.received_bytes, self.total_length))
return None, None return None, None
def transmission_failed(self, irs_frame=None): def transmission_failed(self, irs_frame=None):
@ -264,6 +264,6 @@ class ARQSessionIRS(arq_session.ARQSession):
self.session_ended = time.time() self.session_ended = time.time()
self.set_state(IRS_State.FAILED) self.set_state(IRS_State.FAILED)
self.log(f"Transmission failed!") self.log(f"Transmission failed!")
self.event_manager.send_arq_session_finished(True, self.id, self.dxcall,False, self.state.name, statistics=self.calculate_session_statistics()) self.event_manager.send_arq_session_finished(True, self.id, self.dxcall,False, self.state.name, statistics=self.calculate_session_statistics(self.received_bytes, self.total_length))
self.states.setARQ(False) self.states.setARQ(False)
return None, None return None, None

View file

@ -150,14 +150,14 @@ class ARQSessionISS(arq_session.ARQSession):
def send_data(self, irs_frame): def send_data(self, irs_frame):
# update statistics # update statistics
self.update_histograms() self.update_histograms(self.confirmed_bytes, self.total_length)
self.update_speed_level(irs_frame) self.update_speed_level(irs_frame)
if 'offset' in irs_frame: if 'offset' in irs_frame:
self.confirmed_bytes = irs_frame['offset'] self.confirmed_bytes = irs_frame['offset']
self.log(f"IRS confirmed {self.confirmed_bytes}/{self.total_length} bytes") self.log(f"IRS confirmed {self.confirmed_bytes}/{self.total_length} bytes")
self.event_manager.send_arq_session_progress( self.event_manager.send_arq_session_progress(
True, self.id, self.dxcall, self.confirmed_bytes, self.total_length, self.state.name, statistics=self.calculate_session_statistics()) True, self.id, self.dxcall, self.confirmed_bytes, self.total_length, self.state.name, statistics=self.calculate_session_statistics(self.confirmed_bytes, self.total_length))
# check if we received an abort flag # check if we received an abort flag
if irs_frame["flag"]["ABORT"]: if irs_frame["flag"]["ABORT"]:
@ -190,8 +190,8 @@ class ARQSessionISS(arq_session.ARQSession):
self.session_ended = time.time() self.session_ended = time.time()
self.set_state(ISS_State.ENDED) self.set_state(ISS_State.ENDED)
self.log(f"All data transfered! flag_final={irs_frame['flag']['FINAL']}, flag_checksum={irs_frame['flag']['CHECKSUM']}") self.log(f"All data transfered! flag_final={irs_frame['flag']['FINAL']}, flag_checksum={irs_frame['flag']['CHECKSUM']}")
self.event_manager.send_arq_session_finished(True, self.id, self.dxcall,True, self.state.name, statistics=self.calculate_session_statistics()) self.event_manager.send_arq_session_finished(True, self.id, self.dxcall,True, self.state.name, statistics=self.calculate_session_statistics(self.confirmed_bytes, self.total_length))
self.arq_data_type_handler.transmitted(self.type_byte, self.data, self.calculate_session_statistics()) self.arq_data_type_handler.transmitted(self.type_byte, self.data, self.calculate_session_statistics(self.confirmed_bytes, self.total_length))
self.state_manager.remove_arq_iss_session(self.id) self.state_manager.remove_arq_iss_session(self.id)
self.states.setARQ(False) self.states.setARQ(False)
return None, None return None, None
@ -201,10 +201,10 @@ class ARQSessionISS(arq_session.ARQSession):
self.session_ended = time.time() self.session_ended = time.time()
self.set_state(ISS_State.FAILED) self.set_state(ISS_State.FAILED)
self.log(f"Transmission failed!") self.log(f"Transmission failed!")
self.event_manager.send_arq_session_finished(True, self.id, self.dxcall,False, self.state.name, statistics=self.calculate_session_statistics()) self.event_manager.send_arq_session_finished(True, self.id, self.dxcall,False, self.state.name, statistics=self.calculate_session_statistics(self.confirmed_bytes, self.total_length))
self.states.setARQ(False) self.states.setARQ(False)
self.arq_data_type_handler.failed(self.type_byte, self.data, self.calculate_session_statistics()) self.arq_data_type_handler.failed(self.type_byte, self.data, self.calculate_session_statistics(self.confirmed_bytes, self.total_length))
return None, None return None, None
def abort_transmission(self, irs_frame=None): def abort_transmission(self, irs_frame=None):
@ -213,7 +213,7 @@ class ARQSessionISS(arq_session.ARQSession):
self.set_state(ISS_State.ABORTING) self.set_state(ISS_State.ABORTING)
self.event_manager.send_arq_session_finished( self.event_manager.send_arq_session_finished(
True, self.id, self.dxcall, False, self.state.name, statistics=self.calculate_session_statistics()) True, self.id, self.dxcall, False, self.state.name, statistics=self.calculate_session_statistics(self.confirmed_bytes, self.total_length))
# break actual retries # break actual retries
self.event_frame_received.set() self.event_frame_received.set()
@ -233,7 +233,7 @@ class ARQSessionISS(arq_session.ARQSession):
self.event_frame_received.set() self.event_frame_received.set()
self.event_manager.send_arq_session_finished( self.event_manager.send_arq_session_finished(
True, self.id, self.dxcall, False, self.state.name, statistics=self.calculate_session_statistics()) True, self.id, self.dxcall, False, self.state.name, statistics=self.calculate_session_statistics(self.confirmed_bytes, self.total_length))
self.state_manager.remove_arq_iss_session(self.id) self.state_manager.remove_arq_iss_session(self.id)
self.states.setARQ(False) self.states.setARQ(False)
return None, None return None, None