From 4b6b8f2bddb0cfdb888aea4c3d1377c40fbe0298 Mon Sep 17 00:00:00 2001 From: Alan Rominger Date: Mon, 3 May 2021 11:32:03 -0400 Subject: [PATCH] Finish up the immediate or average rate method --- awx/main/tasks.py | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/awx/main/tasks.py b/awx/main/tasks.py index 1cbfe240b0..58e033bcc4 100644 --- a/awx/main/tasks.py +++ b/awx/main/tasks.py @@ -1157,20 +1157,32 @@ class BaseTask(object): cpu_time = time.time() first_window_time = self.recent_event_timings[0] last_window_time = self.recent_event_timings[-1] - inverse_effective_rate = cpu_time - first_window_time - # if last 30 events (which we sent websockets for) came in under 1 second ago - should_skip = bool( - inverse_effective_rate < 1.0 - and self.recent_event_timings.maxlen * (cpu_time - last_window_time) < 1.0 - and (len(self.recent_event_timings) == self.recent_event_timings.maxlen) + + should_emit = bool( + # if 30the most recent websocket message was sent over 1 second ago + cpu_time - first_window_time > 1.0 + # if the very last websocket message came in over 1/30 seconds ago + or self.recent_event_timings.maxlen * (cpu_time - last_window_time) > 1.0 + # if the queue is not yet full + or (len(self.recent_event_timings) != self.recent_event_timings.maxlen) ) - if should_skip: + + logger.debug( + 'Event {} websocket send {}, queue {}, avg rate {}, last rate {}'.format( + event_data['counter'], + should_emit, + len(self.recent_event_timings), + 30.0 / (cpu_time - first_window_time), + 1.0 / (cpu_time - last_window_time), + ) + ) + + if should_emit: + self.recent_event_timings.append(cpu_time) + else: event_data.setdefault('event_data', {}) event_data['event_data']['skip_websocket_message'] = True - else: - if self.recent_event_timings[0] == self.recent_event_timings[-1]: - logger.debug('Starting a window of event emission') - self.recent_event_timings.append(cpu_time) + elif self.recent_event_timings.maxlen: self.recent_event_timings.append(time.time())