Add organization and task queue features

- Introduced new models for `Organization` and `ReviewTask` to manage organizations and review tasks.
- Implemented API endpoints for CRUD operations on organizations and tasks, including scanning organizations for repositories and PRs.
- Developed a background worker for sequential processing of review tasks with priority handling and automatic retries.
- Created frontend components for managing organizations and monitoring task queues, including real-time updates and filtering options.
- Added comprehensive documentation for organization features and quick start guides.
- Fixed UI issues and improved navigation for better user experience.
This commit is contained in:
Primakov Alexandr Alexandrovich
2025-10-13 00:10:04 +03:00
parent 70889421ea
commit 6ae2d0d8ec
18 changed files with 2725 additions and 3 deletions
+256
View File
@@ -0,0 +1,256 @@
# 🚀 Быстрый старт: Организации и Очередь задач
## 📝 Что добавлено
1. **Организации** - добавление целых организаций (Gitea/GitHub/Bitbucket)
2. **Автосканирование** - поиск всех репозиториев и PR в организации
3. **Очередь задач** - последовательная обработка review (по одному)
4. **Мониторинг** - отслеживание состояния очереди и worker'а
---
## ⚡ Быстрый старт
### 1. Запустить проект
```bash
# Windows
start.bat
# Linux/Mac
./start.sh
```
### 2. Добавить организацию
1. Открыть http://localhost:8000
2. Перейти в раздел **🏢 Организации**
3. Нажать **➕ Добавить организацию**
4. Заполнить:
- **Название**: `inno-js`
- **Платформа**: `Gitea`
- **Base URL**: `https://git.bro-js.ru`
- **API токен**: (опционально, если не указан - используется master токен)
5. Нажать **Создать**
### 3. Сканировать организацию
1. Найти добавленную организацию
2. Нажать **🔍 Сканировать**
3. Подтвердить
**Результат:**
```
✅ Сканирование завершено!
📦 Репозиториев найдено: 15
➕ Репозиториев добавлено: 3
🔀 PR найдено: 8
📝 Задач создано: 8
```
### 4. Мониторинг очереди
1. Перейти в раздел **📝 Очередь задач**
2. Увидите:
- 🚀 **Worker активен** - статус worker'а
- **Статистика** - всего/ожидает/выполняется/завершено/ошибок
- **Список задач** - каждая задача с PR и статусом
### 5. Наблюдать за работой
Worker автоматически:
1. Берет следующую задачу из очереди
2. Запускает AI review для PR
3. Публикует комментарии
4. Переходит к следующей задаче
**Важно:** Обрабатывается только 1 задача одновременно! ⚡
---
## 🔧 Настройка master токенов
Если не хотите указывать токен для каждой организации:
### backend/.env
```env
# Master tokens (опциональные)
MASTER_GITEA_TOKEN=your_gitea_token_here
MASTER_GITHUB_TOKEN=your_github_token_here
MASTER_BITBUCKET_TOKEN=your_bitbucket_token_here
```
При создании организации просто оставьте поле "API токен" пустым.
---
## 📊 API Endpoints
### Организации
```bash
# Получить список
GET /api/organizations
# Создать
POST /api/organizations
{
"name": "inno-js",
"platform": "gitea",
"base_url": "https://git.bro-js.ru",
"api_token": "optional_token"
}
# Сканировать
POST /api/organizations/{id}/scan
```
### Очередь задач
```bash
# Получить список задач
GET /api/tasks
GET /api/tasks?status=pending
# Статус worker'а
GET /api/tasks/worker/status
# Повторить задачу
POST /api/tasks/{id}/retry
# Удалить задачу
DELETE /api/tasks/{id}
```
---
## 🎯 Как это работает
### 1. Сканирование организации
```
1. Fetch /orgs/{name}/repos → Получить все репозитории
2. For each repo:
- Проверить существует ли в БД
- Если нет → добавить
- Fetch /repos/{owner}/{repo}/pulls?state=open
- For each PR:
- Проверить существует ли в БД
- Если нет → добавить
- Создать ReviewTask(status=pending)
```
### 2. Worker обработки
```python
while True:
# Проверить есть ли in_progress задача
if has_in_progress_task():
wait(10 seconds)
continue
# Взять следующую pending задачу (по приоритету)
task = get_next_pending_task()
if not task:
wait(10 seconds)
continue
# Отметить как in_progress
task.status = "in_progress"
# Выполнить review
try:
run_ai_review(task.pull_request)
task.status = "completed"
except Exception as e:
task.retry_count += 1
if task.retry_count >= 3:
task.status = "failed"
else:
task.status = "pending" # retry
# Подождать 10 секунд перед следующей
wait(10 seconds)
```
### 3. Гарантии
**Только 1 review одновременно**
**Приоритеты**: HIGH → NORMAL → LOW
**Автоматический retry** (до 3 попыток)
**FIFO** при равном приоритете
---
## 🐛 Troubleshooting
### Worker не обрабатывает задачи
```bash
# Проверить статус
curl http://localhost:8000/api/tasks/worker/status
# Должно быть:
{"running": true, "current_task_id": null, "poll_interval": 10}
```
### Задача застряла в "in_progress"
```bash
# Вручную сбросить через API
POST /api/tasks/{id}/retry
```
### Все задачи failed
Проверить:
1. ✅ Ollama запущена (`ollama list`)
2. ✅ Модель скачана (`ollama pull mistral:7b`)
3. ✅ API токены правильные
4. ✅ Репозитории доступны
---
## 📈 Мониторинг
### Frontend UI
- **🏢 Организации** - управление организациями, сканирование
- **📝 Очередь задач** - мониторинг задач, статус worker'а
- **🔍 Reviews** - результаты review, комментарии
### Логи
```bash
# Backend логи (Windows)
# Смотреть в консоли где запущен start.bat
# Backend логи (Linux/systemd)
journalctl -u ai-review -f
```
---
## ✅ Готово!
Теперь вы можете:
1. ➕ Добавлять организации
2. 🔍 Сканировать репозитории и PR
3. 📝 Следить за очередью задач
4. 🤖 AI автоматически проводит review
5. 💬 Комментарии публикуются в PR
**Один клик** → Все репозитории и PR организации в review! 🚀
---
## 📚 Подробная документация
- [ORGANIZATION_FEATURE.md](ORGANIZATION_FEATURE.md) - Полная документация
- [README.md](README.md) - Общая информация о проекте
- [API Docs](http://localhost:8000/docs) - Swagger UI