Compare commits

..

16 Commits

Author SHA1 Message Date
944ac1301b Merge pull request 'master' (#54) from master into prod
Reviewed-on: #54
2025-06-15 03:04:00 +03:00
Egor Matveev
73c8466a50 fix
All checks were successful
Deploy Dev / Push (pull_request) Successful in 8s
Deploy Dev / Build (pull_request) Successful in 4s
Deploy Dev / Deploy dev (pull_request) Successful in 19s
Deploy Prod / Build (pull_request) Successful in 6s
Deploy Prod / Deploy prod (pull_request) Successful in 12s
Deploy Prod / Push (pull_request) Successful in 9s
2025-06-15 02:45:33 +03:00
Egor Matveev
c20c5546fe fx
All checks were successful
Deploy Dev / Build (pull_request) Successful in 6s
Deploy Dev / Push (pull_request) Successful in 9s
Deploy Dev / Deploy dev (pull_request) Successful in 17s
2025-06-15 02:42:23 +03:00
Egor Matveev
151327ae0a fix
All checks were successful
Deploy Dev / Build (pull_request) Successful in 6s
Deploy Dev / Push (pull_request) Successful in 8s
Deploy Dev / Deploy dev (pull_request) Successful in 22s
2025-06-15 02:32:47 +03:00
Egor Matveev
d91ae82f6e fix
All checks were successful
Deploy Dev / Build (pull_request) Successful in 5s
Deploy Dev / Push (pull_request) Successful in 9s
Deploy Dev / Deploy dev (pull_request) Successful in 18s
2025-06-15 00:17:35 +03:00
Egor Matveev
46031265e0 fix
All checks were successful
Deploy Dev / Build (pull_request) Successful in 1m5s
Deploy Dev / Push (pull_request) Successful in 13s
Deploy Dev / Deploy dev (pull_request) Successful in 15s
2025-06-15 00:09:33 +03:00
2a7ad6345f Merge pull request 'fix' (#46) from master into prod
Reviewed-on: #46
2024-12-28 14:23:39 +03:00
39bca8ead9 Merge pull request 'fix' (#45) from master into prod
Reviewed-on: #45
2024-12-28 14:19:04 +03:00
43184acb16 Merge pull request 'fix' (#44) from master into prod
Reviewed-on: #44
2024-12-28 13:50:12 +03:00
fb762e62e9 Merge pull request 'master' (#43) from master into prod
Reviewed-on: #43
2024-12-22 23:55:57 +03:00
56eb2f60ee Merge pull request 'add' (#40) from master into prod
Reviewed-on: #40
2024-12-21 22:21:38 +03:00
cf1f92dcc9 Merge pull request 'master' (#38) from master into prod
Reviewed-on: #38
2024-12-08 19:57:40 +03:00
48489e607e Merge pull request 'master' (#25) from master into prod
Reviewed-on: #25
2024-11-30 15:13:59 +03:00
185ce0c5ce Merge pull request 'master' (#22) from master into prod
Reviewed-on: #22
2024-11-29 20:35:37 +03:00
cab8e15ba8 Merge pull request 'master' (#19) from master into prod
Reviewed-on: #19
2024-11-28 23:14:36 +03:00
d3d92f56ee Merge pull request 'master' (#16) from master into prod
Reviewed-on: #16
2024-11-27 18:44:03 +03:00
3 changed files with 32 additions and 31 deletions

View File

@@ -22,6 +22,7 @@ services:
networks: networks:
- configurator - configurator
- queues-development - queues-development
- monitoring
environment: environment:
STAGE: "development" STAGE: "development"
command: mailbox command: mailbox
@@ -38,3 +39,5 @@ networks:
external: true external: true
queues-development: queues-development:
external: true external: true
monitoring:
external: true

View File

@@ -22,6 +22,7 @@ services:
networks: networks:
- configurator - configurator
- queues - queues
- monitoring
environment: environment:
STAGE: "production" STAGE: "production"
command: mailbox command: mailbox
@@ -38,3 +39,5 @@ networks:
external: true external: true
queues: queues:
external: true external: true
monitoring:
external: true

View File

@@ -1,10 +1,6 @@
from concurrent.futures import ThreadPoolExecutor
import datetime import datetime
import json
import os import os
import traceback from threading import Thread
import uuid
import zoneinfo
import requests import requests
import time import time
@@ -21,23 +17,26 @@ class QueuesException(Exception):
class TasksHandlerMixin: class TasksHandlerMixin:
def __init__(self, *args, **kwargs): def _send_metric(self, start, success, end):
super().__init__(*args, **kwargs) try:
self.executor = ThreadPoolExecutor(max_workers=1) metric = requests.post('http://monitoring:1237/api/v1/metrics/task', json={
'timestamp': start.strftime("%Y-%m-%dT%H:%M:%S") + "Z",
def _send_metric(self, start: datetime.datetime, end: datetime.datetime, success: bool):
def send():
requests.post(f'{QUEUES_URL}/api/v1/metric', json={
'service': 'botalka', 'service': 'botalka',
'environment': stage,
'queue': self.queue_name, 'queue': self.queue_name,
'success': success, 'success': success,
'timestamp': start.strftime("%Y-%m-%dT%H:%M:%S") + "Z", 'execution_time_ms': (end - start).microseconds // 1000,
"success": success,
"execution_time_ms": (end - start).microseconds // 1000,
"environment": stage,
}) })
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}')
self.executor.submit(send) def send_metric(self, start, success, end):
# Thread(target=self._send_metric, args=(start, success, end)).start()
self._send_metric(start, success, end)
def poll(self): def poll(self):
while True: while True:
@@ -51,25 +50,21 @@ class TasksHandlerMixin:
if not task: if not task:
time.sleep(0.2) time.sleep(0.2)
continue continue
start = datetime.datetime.now(zoneinfo.ZoneInfo("Europe/Moscow")) start = datetime.datetime.now()
try: try:
print(f'process task with id {task["id"]}, attempt {task["attempt"]}')
self.process(task['payload']) self.process(task['payload'])
success = True success = True
except Exception as exc: except Exception as exc:
print(f'Error processing message id={task["id"]}, payload={task["payload"]}, exc={exc}') print(f'Error processing message id={task["id"]}, payload={task["payload"]}, exc={exc}')
traceback.print_stack()
success = False success = False
end = datetime.datetime.now(zoneinfo.ZoneInfo("Europe/Moscow")) end = datetime.datetime.now()
if success: try:
try: resp = requests.post(f'{QUEUES_URL}/api/v1/finish', json={'id': task['id']})
resp = requests.post(f'{QUEUES_URL}/api/v1/finish', json={'id': task['id']}) if resp.status_code != 202:
if resp.status_code != 202: raise QueuesException
raise QueuesException except:
print(f'finish task with id {task["id"]}') print(f'Failed to finish task id={task["id"]}')
except: self.send_metric(start, success, end)
print(f'Failed to finish task id={task["id"]}')
self._send_metric(start, end, success)
@property @property
def queue_name(self): def queue_name(self):