diff --git a/.gitignore.ldap b/.gitignore.ldap deleted file mode 100644 index dabfea94..00000000 --- a/.gitignore.ldap +++ /dev/null @@ -1,5 +0,0 @@ -# Добавляем в .gitignore данные LDAP (чтобы не коммитить) - -# LDAP test data -backend/ldap_test_data/ -backend/ldap_test_config/ diff --git a/backend/CELERY_NEXT_STEPS.md b/backend/CELERY_NEXT_STEPS.md deleted file mode 100644 index ae799d96..00000000 --- a/backend/CELERY_NEXT_STEPS.md +++ /dev/null @@ -1,201 +0,0 @@ -# Celery Integration - Следующие шаги - -## ✅ Что уже сделано - -1. ✅ Добавлены зависимости в `requirements.txt`: - - `celery==5.5.3` - - `redis==5.2.1` - - `django-celery-beat==2.7.0` - - `django-celery-results==2.5.1` - - `flower==2.0.1` - -2. ✅ Создан файл конфигурации `eusrr_backend/celery.py` - - Настроена автоматическая регистрация задач - - Добавлен debug task для тестирования - -3. ✅ Обновлен `eusrr_backend/__init__.py` - - Автоматический импорт celery_app при запуске Django - -4. ✅ Добавлены настройки Celery в `settings.py`: - - `CELERY_BROKER_URL` - Redis как брокер сообщений - - `CELERY_RESULT_BACKEND` - Redis для хранения результатов - - Настройка роутинга задач по очередям - - Таймауты и лимиты для workers - -5. ✅ Добавлены приложения в `INSTALLED_APPS`: - - `django_celery_beat` - для периодических задач - - `django_celery_results` - для хранения результатов - -6. ✅ Созданы Celery задачи в `notifications/tasks.py`: - - `send_notification_task` - отправка одного уведомления - - `send_bulk_notifications_task` - массовая отправка - - `cleanup_old_notifications_task` - очистка старых уведомлений - - `send_digest_email_task` - email-дайджесты - -## 🔄 Следующие шаги (выполнить вручную) - -### Шаг 1: Установка зависимостей - -Запустите задачу в VS Code: -- **Pip: install requirements** - -Или вручную: -```bash -cd backend -..\.venv\Scripts\pip install -r requirements.txt -``` - -### Шаг 2: Установка и запуск Redis - -#### Вариант 1: Windows (рекомендуется Memurai) -1. Скачайте Memurai (Redis для Windows): https://www.memurai.com/ -2. Установите и запустите как службу Windows -3. Redis будет доступен на `localhost:6379` - -#### Вариант 2: Docker -```bash -docker run -d -p 6379:6379 --name redis redis:7-alpine -``` - -#### Проверка Redis: -```bash -redis-cli ping -# Должно вернуть: PONG -``` - -### Шаг 3: Применение миграций - -Запустите: -```bash -cd backend -migrate_celery.bat -``` - -Или вручную: -```bash -..\.venv\Scripts\python manage.py migrate django_celery_beat -..\.venv\Scripts\python manage.py migrate django_celery_results -``` - -### Шаг 4: Тестирование Celery Worker - -В отдельном терминале запустите worker: -```bash -cd backend -..\.venv\Scripts\celery -A eusrr_backend worker -l info --pool=solo -``` - -**Примечание**: На Windows используйте `--pool=solo` или `--pool=gevent` - -### Шаг 5: Тестирование отправки задачи - -В Django shell: -```python -..\.venv\Scripts\python manage.py shell - -from celery import current_app -current_app.send_task('eusrr_backend.debug_task') -``` - -Вы должны увидеть выполнение задачи в логах worker. - -### Шаг 6: Интеграция с NotificationService - -Обновите `notifications/services.py`: -```python -from notifications.tasks import send_notification_task, send_bulk_notifications_task - -class NotificationService: - @staticmethod - def create_notification(...): - # Вместо синхронного создания - send_notification_task.delay( - notification_type=notification_type, - user_id=user.id, - title=title, - message=message, - link=link, - sender_id=sender.id if sender else None, - metadata=metadata, - ) -``` - -### Шаг 7: Запуск Flower (мониторинг) - -```bash -cd backend -..\.venv\Scripts\celery -A eusrr_backend flower -``` - -Откройте http://localhost:5555 для просмотра статистики задач. - -### Шаг 8: Настройка периодических задач - -В Django Admin: -1. Перейдите в "Periodic Tasks" -2. Добавьте задачу для `notifications.cleanup_old_notifications` -3. Настройте интервал (например, раз в день) - -Или программно в `eusrr_backend/celery.py`: -```python -from celery.schedules import crontab - -app.conf.beat_schedule = { - 'cleanup-old-notifications': { - 'task': 'notifications.cleanup_old_notifications', - 'schedule': crontab(hour=3, minute=0), # Каждый день в 3:00 - 'args': (90,) # Удалять уведомления старше 90 дней - }, -} -``` - -Запустите beat scheduler: -```bash -..\.venv\Scripts\celery -A eusrr_backend beat -l info -``` - -## 📊 Ожидаемый результат - -**До внедрения Celery:** -- Отправка сообщения в группу с 8 участниками: ~500ms -- Блокировка API response до отправки всех уведомлений - -**После внедрения Celery:** -- Отправка сообщения: <50ms (только создание задачи) -- Уведомления обрабатываются асинхронно -- API мгновенно отвечает пользователю - -## 🔍 Отладка - -### Проверка статуса Celery -```bash -..\.venv\Scripts\celery -A eusrr_backend inspect active -..\.venv\Scripts\celery -A eusrr_backend inspect stats -``` - -### Проверка задач в очереди -```bash -..\.venv\Scripts\celery -A eusrr_backend inspect reserved -``` - -### Логи -- Worker логи: консоль где запущен worker -- Flower: http://localhost:5555 -- Django логи: стандартные логи приложения - -## 📚 Документация - -- Подробная документация: `docs/guides/CELERY_SETUP.md` -- План внедрения (5 дней): `docs/in-progress/CELERY_INTEGRATION_PLAN.md` -- Celery docs: https://docs.celeryq.dev/ - -## ⚠️ Production Deployment - -Для production: -1. Используйте Redis Cluster или Redis Sentinel -2. Запускайте несколько workers с supervisord/systemd -3. Настройте мониторинг (Flower + Prometheus) -4. Добавьте retry policies и dead letter queue -5. Настройте автоматический перезапуск workers - -См. `docs/in-progress/CELERY_INTEGRATION_PLAN.md` для деталей. diff --git a/backend/CONSOLE_DEBUG_COMMANDS.md b/backend/CONSOLE_DEBUG_COMMANDS.md deleted file mode 100644 index a9412630..00000000 --- a/backend/CONSOLE_DEBUG_COMMANDS.md +++ /dev/null @@ -1,207 +0,0 @@ -# 🔍 Команды для отладки календаря через консоль браузера - -Откройте консоль браузера (F12 → Console) и выполните эти команды: - -## 1️⃣ Проверить наличие интеграции - -```javascript -// Должно вернуть объект, а не undefined -window.calendarIntegration -``` - -**Ожидаемый результат:** -```javascript -{ - fetchEventsForVisibleCalendars: ƒ, - getVisibleCalendarIds: ƒ, - getCalendars: ƒ, - setVisibleCalendars: ƒ, - refresh: ƒ, - instances: {manager: {...}, modal: {...}, widget: {...}} -} -``` - -**Если undefined** → интеграция не инициализировалась! - ---- - -## 2️⃣ Проверить виджет календаря - -```javascript -window.calendarWidget -``` - -**Должен вернуть объект FullCalendar** - ---- - -## 3️⃣ Проверить список календарей - -```javascript -// Если интеграция работает: -window.calendarIntegration.getCalendars() - -// Должно вернуть массив календарей: -// [{id: 1, title: "Personal", color: "#0d6efd", ...}, ...] -``` - ---- - -## 4️⃣ Проверить видимые календари - -```javascript -window.calendarIntegration.getVisibleCalendarIds() - -// Должно вернуть массив ID: [1, 2, 3] -``` - ---- - -## 5️⃣ Вручную загрузить события - -```javascript -// Попробовать загрузить события для видимых календарей -const start = new Date('2026-02-01'); -const end = new Date('2026-02-28'); - -window.calendarIntegration.fetchEventsForVisibleCalendars(start, end) - .then(events => { - console.log('✅ Events loaded:', events.length); - console.table(events); - }) - .catch(err => { - console.error('❌ Error:', err); - }); -``` - ---- - -## 6️⃣ Проверить, загружен ли скрипт интеграции - -```javascript -// Проверить, есть ли в DOM скрипт -document.querySelector('script[src*="calendarWidgetIntegration"]') - -// Должен вернуть - - - - - - diff --git a/backend/test_calendar_frontend_simple.html b/backend/test_calendar_frontend_simple.html deleted file mode 100644 index 4c7b072a..00000000 --- a/backend/test_calendar_frontend_simple.html +++ /dev/null @@ -1,720 +0,0 @@ - - - - - - Calendar Frontend Test - Simple Version - - - - -
-

🧪 Calendar Frontend Test Suite (Offline Version)

- - -
-
-

🎮 Test Controls

-
- - -
-
- -
- - - - - - -
-
- - -
-
-

📊 Test Results

-
- Ready -
-
- - - - - - - - - - - - - - - -
TestStatusDurationDetails
No tests run yet
-
- - -
-
-

📅 Calendar List Demo

- -
- -
-
Loading calendars...
-
-
- - -
-
-

📝 Console Log

- -
-
-
-
- - - - diff --git a/backend/test_logging.py b/backend/test_logging.py new file mode 100644 index 00000000..80da771d --- /dev/null +++ b/backend/test_logging.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python +"""Тест модернизированной системы логирования.""" + +import os +import sys + +# Добавляем backend в путь +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'eusrr_backend.settings') + +import django +django.setup() + +import logging + +# Тестируем разные логгеры +print("=" * 70) +print("ТЕСТ МОДЕРНИЗИРОВАННОЙ СИСТЕМЫ ЛОГИРОВАНИЯ") +print("=" * 70) + +# 1. Логгер employees +print("\n1. Тест логгера 'employees':") +employees_logger = logging.getLogger('employees') +employees_logger.debug('Тестовое DEBUG сообщение') +employees_logger.info('Тестовое INFO сообщение') +employees_logger.warning('Тестовое WARNING сообщение') +employees_logger.error('Тестовое ERROR сообщение') + +# 2. Логгер security +print("\n2. Тест логгера 'employees.ldap' (security):") +ldap_logger = logging.getLogger('employees.ldap') +ldap_logger.info('LDAP аутентификация успешна', extra={'username': 'test_user'}) +ldap_logger.warning('LDAP подключение медленное', extra={'latency': '1000ms'}) + +# 3. Логгер с исключением +print("\n3. Тест логирования исключений:") +try: + result = 10 / 0 +except ZeroDivisionError: + employees_logger.exception('Тестовое исключение для демонстрации трассировки') + +# 4. Django логгер +print("\n4. Тест Django логгера:") +django_logger = logging.getLogger('django') +django_logger.info('Django логгер работает') + +print("\n" + "=" * 70) +print("✓ Все логгеры протестированы!") +print("=" * 70) + +# Проверяем созданные файлы +logs_dir = os.path.join(os.path.dirname(__file__), 'logs') +if os.path.exists(logs_dir): + log_files = [f for f in os.listdir(logs_dir) if f.endswith('.log')] + print(f"\n📁 Найдено файлов логов: {len(log_files)}") + for log_file in sorted(log_files): + file_path = os.path.join(logs_dir, log_file) + file_size = os.path.getsize(file_path) + print(f" - {log_file:20s} ({file_size:,} bytes)") +else: + print("\n⚠ Директория logs/ не найдена") + +print("\n💡 Проверьте содержимое файлов:") +print(" tail -f backend/logs/all.log") +print(" tail -f backend/logs/error.log") +print(" tail -f backend/logs/security.log") diff --git a/backend/test_reply.bat b/backend/test_reply.bat deleted file mode 100644 index 9e0b76b6..00000000 --- a/backend/test_reply.bat +++ /dev/null @@ -1,61 +0,0 @@ -@echo off -REM Скрипт для проверки функции ответа на сообщение (Windows) -REM Запускает сервер и открывает тестовую страницу - -echo. -echo 🧪 Проверка функции ответа на сообщение -echo ======================================== -echo. - -REM Проверка виртуального окружения -if not exist ".venv" ( - echo ❌ Виртуальное окружение не найдено - echo Создайте его командой: python -m venv .venv - exit /b 1 -) - -echo ✅ Виртуальное окружение найдено -echo. - -REM Проверка Python в виртуальном окружении -if exist ".venv\Scripts\python.exe" ( - .venv\Scripts\python.exe --version - echo ✅ Python найден в виртуальном окружении -) else ( - echo ❌ Python не найден в .venv\Scripts\ - exit /b 1 -) - -echo. -echo 📊 Что будет проверено: -echo 1. Контекстное меню -^> Ответить -echo 2. ChatFormManager (режим reply) -echo 3. Превью ответа в сообщениях -echo 4. Загрузка реакций (дефолтные) -echo. - -echo 🚀 Запуск Django сервера... -echo. - -REM Запуск сервера -start "Django Server" .venv\Scripts\python.exe manage.py runserver 9000 - -echo ⏳ Ожидание запуска сервера (5 сек)... -timeout /t 5 /nobreak > nul - -echo. -echo ✅ Сервер запущен! -echo. -echo 📝 Откройте в браузере: -echo http://localhost:9000/test_reply_functionality.html -echo. -echo 🌐 Или нажмите Enter чтобы открыть автоматически... -pause - -REM Открыть браузер -start http://localhost:9000/test_reply_functionality.html - -echo. -echo Закройте окно "Django Server" чтобы остановить сервер -echo. -pause diff --git a/backend/test_reply.sh b/backend/test_reply.sh deleted file mode 100644 index 24d8977f..00000000 --- a/backend/test_reply.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/bin/bash - -# Скрипт для проверки функции ответа на сообщение -# Запускает сервер и открывает тестовую страницу - -echo "🧪 Проверка функции ответа на сообщение" -echo "========================================" -echo "" - -# Проверка виртуального окружения -if [ ! -d ".venv" ]; then - echo "❌ Виртуальное окружение не найдено" - echo "Создайте его командой: python -m venv .venv" - exit 1 -fi - -echo "✅ Виртуальное окружение найдено" - -# Активация виртуального окружения (Windows) -if [ -f ".venv/Scripts/activate" ]; then - source .venv/Scripts/activate - echo "✅ Виртуальное окружение активировано" -else - echo "⚠️ Не удалось активировать виртуальное окружение" -fi - -# Проверка Python -python_version=$(python --version 2>&1) -echo "Python: $python_version" - -echo "" -echo "📊 Что будет проверено:" -echo " 1. Контекстное меню -> Ответить" -echo " 2. ChatFormManager (режим reply)" -echo " 3. Превью ответа в сообщениях" -echo " 4. Загрузка реакций (дефолтные)" -echo "" - -# Запуск сервера -echo "🚀 Запуск Django сервера..." -echo "" -python manage.py runserver 9000 & -SERVER_PID=$! - -echo "Server PID: $SERVER_PID" -echo "" -echo "⏳ Ожидание запуска сервера (5 сек)..." -sleep 5 - -echo "" -echo "✅ Сервер запущен!" -echo "" -echo "📝 Откройте в браузере:" -echo " http://localhost:9000/test_reply_functionality.html" -echo "" -echo "Нажмите Ctrl+C для остановки сервера" -echo "" - -# Ожидание завершения -wait $SERVER_PID diff --git a/backend/test_reply_functionality.html b/backend/test_reply_functionality.html deleted file mode 100644 index 644700f8..00000000 --- a/backend/test_reply_functionality.html +++ /dev/null @@ -1,344 +0,0 @@ - - - - - - Тест функции ответа на сообщение - - - - - -
-

🧪 Тест функции ответа на сообщение

- - -
-

📊 Статус загрузки реакций

-
- Проверка... -
-
- - -
-

1️⃣ Тест контекстного меню

-

Симуляция вызова функции ответа из контекстного меню

- -
-
- Иван Петров · 10:30 -
-
- Привет! Как дела с проектом? -
-
- - - -
-
- - -
-

2️⃣ Тест ChatFormManager

-

Проверка состояния формы при ответе

- -
- - -
- -
- -
- - - -
- -
- Состояние формы: -
{ "mode": "send" }
-
-
- - -
-

3️⃣ Тест превью ответа в сообщении

-

Проверка рендеринга превью при ответе на сообщение

- -
-
-
- - Мария Иванова -
-
- Давайте встретимся завтра -
-
- -
- Отлично, в какое время удобно? -
-
- - -
- - -
-

📝 Журнал событий

- -
-
-
- - - - - diff --git a/backend/test_toast_calendar.html b/backend/test_toast_calendar.html deleted file mode 100644 index e69de29b..00000000 diff --git a/backend/test_v2_autoscroll.html b/backend/test_v2_autoscroll.html deleted file mode 100644 index 94e2cfbd..00000000 --- a/backend/test_v2_autoscroll.html +++ /dev/null @@ -1,313 +0,0 @@ - - - - - - Test ChatControllerV2 - Smart Autoscroll - - - -

ChatControllerV2 - Smart Autoscroll Test

- -
- - - - - -
- -
- -
-

Результаты тестов:

-
Нажмите "Запустить все тесты"
-
- -
- - - -