@@ -292,7 +292,6 @@ CELERY_BEAT_SCHEDULE = { 'task': 'payments.tasks.send_low_balance_message', 'schedule': crontab(0, 8), }, - 'dump_messages_errors': {'task': 'messages.tasks.dump_messages_errors', 'schedule': crontab(0)}, } CACHES = { @@ -0,0 +1,16 @@ +# Generated by Django 5.0.11 on 2025-10-02 14:42 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('msgs', '0008_alter_messageerror_message'), + ] + + operations = [ + migrations.DeleteModel( + name='MessageError', + ), + ] @@ -1,3 +1,2 @@ from .message import Message, message_file_upload -from .message_error import MessageError from .store import BaseStore, SingleStore, MultipleStore @@ -1,18 +0,0 @@ -from django.db import models -from django.utils.translation import gettext_lazy as _ - -from core.models import BaseModel -from .message import Message - - -class MessageError(BaseModel): - message = models.OneToOneField(Message, on_delete=models.DO_NOTHING, verbose_name=_('Message'), related_name='message_error') - detail = models.TextField(verbose_name=_('Detail')) - stacktrace = models.TextField(null=True, blank=True, verbose_name='Stack Trace') - - class Meta: - verbose_name = _('Message error') - verbose_name_plural = _('Message errors') - - def __str__(self) -> str: - return f'{self.detail[:50]}' @@ -2,9 +2,7 @@ from django.contrib import admin from django.urls import reverse from django.utils.html import format_html -from messages.models import MessageError, Message -from tools.chats.models import Chat -from tools.media.models import Gallery +from messages.models import Message @admin.register(Message) @@ -29,27 +27,3 @@ class MessageAdmin(admin.ModelAdmin): url = reverse(f'admin:{c_obj._meta.app_label}_{c_obj._meta.model_name}_change', args=[c_obj.pk]) return format_html('{}', url, str(c_obj)) return '-' - - -@admin.register(MessageError) -class MessageErrorAdmin(admin.ModelAdmin): - list_per_page = 20 - readonly_fields = ('detail', 'stacktrace') - list_display = ('pk', 'message_link', 'short_detail') - search_fields = ('detail', 'stacktrace',) - raw_id_fields = ('message',) - - @admin.display(description='Сообщение') - def message_link(self, obj: MessageError): - if msg_id := obj.message_id: - url = reverse('admin:msgs_message_change', args=[msg_id]) - return format_html('{}', url, f'Сообщение {str(msg_id)[:8]}...') - return '-' - - @admin.display(description='Подробности') - def short_detail(self, obj: MessageError): - return obj.detail[:50] - - def get_queryset(self, request): - queryset = super().get_queryset(request) - return queryset.select_related('message') @@ -1,15 +0,0 @@ -import json - -from django.core.cache import cache - -from celery import shared_task - -from .models import MessageError - - -@shared_task -def dump_messages_errors(): - pipe = cache.client.get_client().pipeline() - pipe.lrange('message_errors', 0, -1) - pipe.ltrim('message_errors', 1, 0) - MessageError.objects.bulk_create([MessageError(**json.loads(data)) for data in pipe.execute()[0]]) @@ -1,10 +1,6 @@ -import json - from django.urls import path -from django.core.cache import cache from .apis import MessageAPIView, MessagesAPIView -from .models import Message def make_messages_urls(appname: str): @@ -20,11 +16,3 @@ def make_messages_urls(appname: str): name='message', ), ] - -def push_message_error(message: Message, err: str, stacktrace: str) -> None: - err_data = { - 'message_id': str(message.uid), - 'detail': err, - 'stacktrace': stacktrace - } - cache.client.get_client().rpush('message_errors', json.dumps(err_data)) @@ -1,6 +1,5 @@ import logging import sys -import traceback from django.utils.translation import gettext_lazy as _ from drf_spectacular.utils import OpenApiParameter, extend_schema @@ -20,7 +19,6 @@ from rest_framework.views import APIView from messages.models import Message from messages.serializers import MessageSerializer -from messages.utils import push_message_error from ml_model.exceptions import DeploymentDisabled, TemplateNotFound, TemplateUnknownException, \ FileExtensionNotSupported, ExceededContextLengthError from ml_model.services.base import SimpleService @@ -176,7 +174,6 @@ class MessagesAPIView(APIView): if isinstance(exc, InsufficientBalance): return Response({'detail': f'{exc}'}, status=HTTP_402_PAYMENT_REQUIRED) logger.exception(exc) - push_message_error(input_message, str(exc), traceback.format_exc()) return Response( { 'detail': _( @@ -1,6 +1,5 @@ import logging import sys -import traceback from drf_spectacular.utils import OpenApiParameter, extend_schema from rest_framework.permissions import IsAuthenticated @@ -10,7 +9,6 @@ from rest_framework.views import APIView from messages.models import Message from messages.serializers import MessageSerializer -from messages.utils import push_message_error from ml_model.models import NeuronModel from ml_model.services.base import SimpleService from payments.exceptions.insufficient_balance import InsufficientBalance @@ -152,7 +150,6 @@ class MediaAPIView(APIView): input_message.save() if isinstance(exc, InsufficientBalance): return Response({'detail': f'{exc}'}, status=HTTP_402_PAYMENT_REQUIRED) - push_message_error(input_message, str(exc), traceback.format_exc()) return Response(f'Error: {exc}', status=400) return Response(MessageSerializer(output_messages, many=True).data, 201) else: