Compare commits

..

44 Commits

Author SHA1 Message Date
d27eed093b Merge pull request 'fix' (#51) from master into dev
Reviewed-on: #51
2025-06-15 02:33:20 +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
77fe38acc0 Merge pull request 'fix' (#50) from master into dev
Reviewed-on: #50
2025-06-15 00:17:58 +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
64db408144 Merge pull request 'fix' (#49) from master into dev
Reviewed-on: #49
2025-06-15 00:09:59 +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
bd1e26cb50 Merge pull request 'fix' (#48) from master into dev
Reviewed-on: #48
2024-12-31 02:53:25 +03:00
5102564b84 Merge pull request 'master' (#47) from master into dev
Reviewed-on: #47
2024-12-31 02:50:30 +03:00
733ab721d6 Merge pull request 'fix' (#42) from master into dev
Reviewed-on: #42
2024-12-22 23:50:21 +03:00
57c012cb44 Merge pull request 'master' (#41) from master into dev
Reviewed-on: #41
2024-12-22 23:48:35 +03:00
96eef035c5 Merge pull request 'master' (#39) from master into dev
Reviewed-on: #39
2024-12-21 19:27:36 +03:00
cbbd1462cd Merge pull request 'fix' (#37) from master into dev
Reviewed-on: #37
2024-12-08 19:42:42 +03:00
5c6142202b Merge pull request 'fix' (#36) from master into dev
Reviewed-on: #36
2024-12-08 19:40:35 +03:00
723a230ced Merge pull request 'fix' (#35) from master into dev
Reviewed-on: #35
2024-12-08 13:45:28 +03:00
c32bfad431 Merge pull request 'fix' (#34) from master into dev
Reviewed-on: #34
2024-12-08 13:43:33 +03:00
0f58ed101e Merge pull request 'fix' (#33) from master into dev
Reviewed-on: #33
2024-12-08 12:06:25 +03:00
aebaa7e546 Merge pull request 'fix' (#32) from master into dev
Reviewed-on: #32
2024-12-08 11:48:59 +03:00
80462d2a61 Merge pull request 'fix' (#31) from master into dev
Reviewed-on: #31
2024-12-08 11:36:31 +03:00
f0399196b5 Merge pull request 'fix' (#30) from master into dev
Reviewed-on: #30
2024-12-08 11:34:33 +03:00
7b806075c7 Merge pull request 'fix' (#29) from master into dev
Reviewed-on: #29
2024-12-08 11:26:22 +03:00
2eb13d9443 Merge pull request 'master' (#28) from master into dev
Reviewed-on: #28
2024-12-08 11:22:27 +03:00
49634845a1 Merge pull request 'Update daemons/mailbox.py' (#27) from master into dev
Reviewed-on: #27
2024-12-02 22:39:10 +03:00
e02646a1a2 Merge pull request 'fix' (#26) from master into dev
Reviewed-on: #26
2024-12-02 21:57:09 +03:00
1b7e8686e4 Merge pull request 'fix' (#24) from master into dev
Reviewed-on: #24
2024-11-30 13:30:19 +03:00
cf12a0dca8 Merge pull request 'types' (#23) from master into dev
Reviewed-on: #23
2024-11-30 12:59:01 +03:00
0a97e56539 Merge pull request 'fix' (#21) from master into dev
Reviewed-on: #21
2024-11-29 20:31:45 +03:00
a5d3bd08c1 Merge pull request 'fix' (#20) from master into dev
Reviewed-on: #20
2024-11-29 20:25:38 +03:00
ad74b8de7a Merge pull request 'fix' (#18) from master into dev
Reviewed-on: #18
2024-11-28 23:09:59 +03:00
05d9cdc7b1 Merge pull request 'fix' (#17) from master into dev
Reviewed-on: #17
2024-11-28 22:58:47 +03:00
a209246513 Merge pull request 'fix' (#15) from master into dev
Reviewed-on: #15
2024-11-27 16:18:17 +03:00
0922b5a4a4 Merge pull request 'fix' (#14) from master into dev
Reviewed-on: #14
2024-11-27 16:14:35 +03:00
2ee74e70ac Merge pull request 'fix' (#13) from master into dev
Reviewed-on: #13
2024-11-27 14:46:14 +03:00
da93092232 Merge pull request 'fix' (#12) from master into dev
Reviewed-on: #12
2024-11-27 11:20:53 +03:00
60b933496f Merge pull request 'fix' (#11) from master into dev
Reviewed-on: #11
2024-11-27 11:15:30 +03:00
82b99ae803 Merge pull request 'fix' (#10) from master into dev
Reviewed-on: #10
2024-11-27 11:12:37 +03:00
c8f65a0ebb Merge pull request 'fix' (#9) from master into dev
Reviewed-on: #9
2024-11-27 11:10:47 +03:00
6401a40f11 Merge pull request 'fix' (#8) from master into dev
Reviewed-on: #8
2024-11-27 04:32:35 +03:00
32197fd699 Merge pull request 'fix' (#7) from master into dev
Reviewed-on: #7
2024-11-27 04:26:41 +03:00
e69ee8767a Merge pull request 'fix' (#6) from master into dev
Reviewed-on: #6
2024-11-27 04:19:26 +03:00
54f7581657 Merge pull request 'fix' (#5) from master into dev
Reviewed-on: #5
2024-11-27 04:14:58 +03:00
c6a2710087 Merge pull request 'fix' (#4) from master into dev
Reviewed-on: #4
2024-11-27 04:11:15 +03:00
42fc5552ab Merge pull request 'fix' (#3) from master into dev
Reviewed-on: #3
2024-11-27 04:09:16 +03:00
499eed49e0 Merge pull request 'fix' (#2) from master into dev
Reviewed-on: #2
2024-11-27 04:07:49 +03:00
349df7eb17 Merge pull request 'req' (#1) from master into dev
Reviewed-on: #1
2024-11-27 04:06:16 +03:00
4 changed files with 52 additions and 36 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

27
utils/metrics.py Normal file
View File

@@ -0,0 +1,27 @@
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()

View File

@@ -1,12 +1,8 @@
from concurrent.futures import ThreadPoolExecutor
import datetime import datetime
import json
import os import os
import traceback
import uuid
import zoneinfo
import requests import requests
import time import time
from utils.metrics import metrics_sender
stage = os.getenv("STAGE", 'local') stage = os.getenv("STAGE", 'local')
@@ -21,24 +17,6 @@ class QueuesException(Exception):
class TasksHandlerMixin: class TasksHandlerMixin:
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.executor = ThreadPoolExecutor(max_workers=1)
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',
'queue': self.queue_name,
'success': success,
'timestamp': start.strftime("%Y-%m-%dT%H:%M:%S") + "Z",
"success": success,
"execution_time_ms": (end - start).microseconds // 1000,
"environment": stage,
})
self.executor.submit(send)
def poll(self): def poll(self):
while True: while True:
try: try:
@@ -51,25 +29,30 @@ 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:
print(f'Failed to finish task id={task["id"]}') metrics_sender.put(lambda: requests.post('http://monitoring:1237/api/v1/metrics/task', json={
self._send_metric(start, end, success) '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,
}))
@property @property
def queue_name(self): def queue_name(self):