Skip to content

Commit

Permalink
feat: make it a choice to run the tasks in celery or synchronous
Browse files Browse the repository at this point in the history
  • Loading branch information
helllllllder committed Jul 26, 2023
1 parent 7e0a176 commit e3bca66
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 12 deletions.
10 changes: 3 additions & 7 deletions chats/apps/api/v1/external/rooms/viewsets.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from django.conf import settings
from django.core.exceptions import ObjectDoesNotExist, ValidationError
from django.db import IntegrityError, transaction
from django.db import IntegrityError
from django.utils import timezone
from rest_framework import status, viewsets
from rest_framework.decorators import action
Expand All @@ -15,8 +15,8 @@
from chats.apps.api.v1.external.rooms.serializers import RoomFlowSerializer
from chats.apps.api.v1.internal.rest_clients.flows_rest_client import FlowRESTClient
from chats.apps.dashboard.models import RoomMetrics
from chats.apps.dashboard.tasks import close_metrics
from chats.apps.rooms.models import Room
from chats.apps.rooms.views import close_room


def add_user_or_queue_to_room(instance, request):
Expand Down Expand Up @@ -68,11 +68,7 @@ def close(
if not settings.ACTIVATE_CALC_METRICS:
return Response(serialized_data.data, status=status.HTTP_200_OK)

transaction.on_commit(
lambda: close_metrics.apply_async(
args=[str(instance.pk)], queue=settings.METRICS_CUSTOM_QUEUE
)
)
close_room(str(instance.pk))
return Response(serialized_data.data, status=status.HTTP_200_OK)

def create(self, request, *args, **kwargs):
Expand Down
5 changes: 2 additions & 3 deletions chats/apps/api/v1/rooms/viewsets.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
)
from chats.apps.dashboard.models import RoomMetrics
from chats.apps.rooms.models import Room
from chats.celery import app as celery_app
from chats.apps.rooms.views import close_room


class RoomViewset(
Expand Down Expand Up @@ -111,8 +111,7 @@ def close(
if not settings.ACTIVATE_CALC_METRICS:
return Response(serialized_data.data, status=status.HTTP_200_OK)

close_metrics = celery_app.send_task("close_metrics", args=[str(instance.pk)])
close_metrics.wait()
close_room(str(instance.pk))
return Response(serialized_data.data, status=status.HTTP_200_OK)

def perform_create(self, serializer):
Expand Down
8 changes: 6 additions & 2 deletions chats/apps/dashboard/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@
from chats.celery import app


@app.task(name="close_metrics")
def close_metrics(room: str):
def generate_metrics(room: str):
room = Room.objects.get(pk=room)
messages_contact = (
room.messages.filter(contact__isnull=False).order_by("created_on").first()
Expand All @@ -30,3 +29,8 @@ def close_metrics(room: str):
metric_room.message_response_time = difference_time
metric_room.interaction_time = interaction_time.total_seconds()
metric_room.save()


@app.task(name="close_metrics")
def close_metrics(room: str):
generate_metrics(room)
14 changes: 14 additions & 0 deletions chats/apps/rooms/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from django.conf import settings
from django.db import transaction

from chats.apps.dashboard.tasks import close_metrics, generate_metrics


def close_room(room_pk: str):
if settings.USE_CELERY:
transaction.on_commit(
lambda: close_metrics.apply_async(
args=[room_pk], queue=settings.METRICS_CUSTOM_QUEUE
)
)
generate_metrics(room_pk)
1 change: 1 addition & 0 deletions chats/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -366,6 +366,7 @@

METRICS_CUSTOM_QUEUE = env("METRICS_CUSTOM_QUEUE", default="celery")

USE_CELERY = env.bool("USE_CELERY", default=False)
CELERY_BROKER_URL = env.str("CELERY_BROKER_URL", default=REDIS_URL)
CELERY_RESULT_BACKEND = env.str("CELERY_RESULT_BACKEND", default="django-db")
CELERY_ACCEPT_CONTENT = ["application/json"]
Expand Down

0 comments on commit e3bca66

Please sign in to comment.