fix
Some checks failed
Deploy Dev / Build (pull_request) Failing after 1m22s
Deploy Dev / Push (pull_request) Has been skipped
Deploy Dev / Deploy dev (pull_request) Has been skipped

This commit is contained in:
Egor Matveev
2024-12-27 12:21:08 +03:00
parent f036f521d8
commit 14592c2b8a
4 changed files with 25 additions and 33 deletions

View File

@@ -1,8 +1,13 @@
import os
import requests
import time
from queues import tasks_pb2_grpc
from queues import tasks_pb2
from google.protobuf import json_format
stage = os.getenv("STAGE", 'local')
if stage == 'local':
QUEUES_URL = 'http://localhost:1239'
else:
QUEUES_URL = 'http://queues:1239'
class QueuesException(Exception):
@@ -12,21 +17,22 @@ class QueuesException(Exception):
class TasksHandlerMixin:
def poll(self):
while True:
response: tasks_pb2.TakeResponse = self.stub.Take(tasks_pb2.TakeRequest(queue=self.queue_name))
task = response.task
response = requests.get(f'{QUEUES_URL}/api/v1/take', headers={'queue': self.queue_name}).json()
task = response.get('task')
if not task:
time.sleep(0.2)
continue
try:
payload = json_format.MessageToDict(task.payload)
self.process(payload)
self.process(task['payload'])
except Exception as exc:
print(f'Error processing message id={task.id}, payload={payload}, exc={exc}')
print(f'Error processing message id={task["id"]}, payload={task["payload"]}, exc={exc}')
continue
try:
self.stub.Finish(tasks_pb2.FinishRequest(id=task.id))
resp = requests.post(f'{QUEUES_URL}/api/v1/finish', json={'id': task['id']})
if resp.status_code != 202:
raise QueuesException
except:
print(f'Failed to finish task id={task.id}')
print(f'Failed to finish task id={task["id"]}')
@property
def queue_name(self):
@@ -35,12 +41,12 @@ class TasksHandlerMixin:
def process(self, payload):
raise NotImplemented
def set_task(stub: tasks_pb2_grpc.TasksStub, queue_name: str, payload: dict, seconds_to_execute: int, delay: int|None = None):
stub.Put(
tasks_pb2.PutRequest(
queue=queue_name,
seconds_to_execute=seconds_to_execute,
delay=delay,
payload=payload
)
)
def set_task(queue_name: str, payload: dict, seconds_to_execute: int, delay: int|None = None):
resp = requests.post(f'{QUEUES_URL}/api/v1/put', headers={'queue': queue_name}, json={
'payload': payload,
'seconds_to_execute': seconds_to_execute,
'delay': delay,
})
if resp.status_code != 202:
raise QueuesException