diff --git a/utils/metrics.py b/utils/metrics.py deleted file mode 100644 index 6480ba9..0000000 --- a/utils/metrics.py +++ /dev/null @@ -1,27 +0,0 @@ -from queue import Queue -from threading import Thread - - -class MetricsSender(Thread): - queue: Queue = Queue() - - def put(self, metric): - self.queue.put(metric) - - def run(self): - while True: - metric = self.queue.get() - if not metric: - continue - - try: - metric = metric() - if metric.status_code == 202: - print('metric ok') - else: - print(f'metric failed: {metric.status_code}') - except Exception as e: - print(f'metric failed: {e}') - -metrics_sender = MetricsSender() -metrics_sender.start() diff --git a/utils/queues.py b/utils/queues.py index 1999db1..b4c71e4 100644 --- a/utils/queues.py +++ b/utils/queues.py @@ -1,8 +1,8 @@ import datetime import os +from threading import Thread import requests import time -from utils.metrics import metrics_sender stage = os.getenv("STAGE", 'local') @@ -17,6 +17,26 @@ class QueuesException(Exception): class TasksHandlerMixin: + def _send_metric(self, start, success, end): + try: + metric = requests.post('http://monitoring:1237/api/v1/metrics/task', json={ + 'timestamp': start.strftime("%Y-%m-%dT%H:%M:%S") + "Z", + 'service': 'botalka', + 'environment': stage, + 'queue': self.queue_name, + 'success': success, + 'execution_time_ms': (end - start).microseconds // 1000, + }) + if metric.status_code == 202: + print('metric ok') + else: + print(f'metric failed: {metric.status_code}') + except Exception as e: + print(f'metric failed: {e}') + + def send_metric(self, start, success, end): + Thread(target=self._send_metric, args=(start, success, end)).start() + def poll(self): while True: try: @@ -43,16 +63,7 @@ class TasksHandlerMixin: raise QueuesException except: print(f'Failed to finish task id={task["id"]}') - - metrics_sender.put(lambda: requests.post('http://monitoring:1237/api/v1/metrics/task', json={ - 'timestamp': start.strftime("%Y-%m-%dT%H:%M:%S") + "Z", - 'service': 'botalka', - 'environment': stage, - 'queue': self.queue_name, - 'success': success, - 'execution_time_ms': (end - start).microseconds // 1000, - })) - + self.send_metric(start, success, end) @property def queue_name(self):