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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user