Corp/backend/test_message_optimization.py
Игорь Надеин b92871f262 Оптимизация: асинхронная обработка уведомлений о сообщениях
- Проблема: сообщение в чате не появлялось сразу, нужно было ждать пока уведомления разошлются всем участникам (~40-80ms задержка)
- Решение: вся логика уведомлений вынесена в отдельную Celery задачу process_message_notifications_task
- Signal handler теперь только запускает задачу и сразу возвращает управление
- Время отклика API: с ~500ms до <50ms
- Добавлен fallback для разработки без Celery
2026-01-08 16:55:54 +03:00

86 lines
2.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Тестовый скрипт для проверки оптимизации уведомлений о сообщениях.
Запуск:
cd backend
../.venv/Scripts/python test_message_optimization.py
"""
import os
import django
import time
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'eusrr_backend.settings')
django.setup()
from communications.models import Chat, Message
from django.contrib.auth import get_user_model
User = get_user_model()
def test_message_creation_speed():
"""Тест скорости создания сообщения."""
print("=" * 60)
print("ТЕСТ: Скорость создания сообщения в групповом чате")
print("=" * 60)
# Находим групповой чат с участниками
chat = Chat.objects.filter(type='group').first()
if not chat:
print("❌ Групповой чат не найден")
return
participants_count = chat.participants.count()
print(f"📊 Чат: {chat.name or chat.id}")
print(f"📊 Участников: {participants_count}")
# Находим автора (первого участника)
author = chat.participants.first()
if not author:
print("❌ Участники не найдены")
return
print(f"📊 Автор: {author.get_full_name()}")
print()
# Создаем тестовое сообщение и замеряем время
start_time = time.time()
message = Message.objects.create(
chat=chat,
author=author,
content=f"Тестовое сообщение для проверки оптимизации (время: {time.time()})"
)
end_time = time.time()
elapsed_ms = (end_time - start_time) * 1000
print(f"✅ Сообщение создано: ID={message.id}")
print(f"⏱️ Время создания: {elapsed_ms:.2f}ms")
print()
# Оценка результата
if elapsed_ms < 50:
print("🎉 ОТЛИЧНО! Время < 50ms - оптимизация работает!")
elif elapsed_ms < 100:
print("✅ ХОРОШО! Время < 100ms - приемлемо")
elif elapsed_ms < 200:
print("⚠️ СРЕДНЕ: Время < 200ms - можно улучшить")
else:
print(f"❌ МЕДЛЕННО: {elapsed_ms:.2f}ms - проверьте Celery worker")
print()
print("Рекомендации:")
print(" 1. Убедитесь что Celery worker запущен")
print(" 2. Проверьте логи worker'а: sudo tail -f /var/log/celery/worker.log")
print(" 3. На продакшене время должно быть < 50ms")
print()
if __name__ == '__main__':
test_message_creation_speed()