257 lines
7.0 KiB
Markdown
257 lines
7.0 KiB
Markdown
# 🚀 Быстрый старт: Организации и Очередь задач
|
||
|
||
## 📝 Что добавлено
|
||
|
||
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
|
||
|