Микросервис для автоматического назначения ревьюеров на Pull Request'ы с поддержкой управления командами и пользователями.
Сервис автоматически назначает до 2 ревьюеров на PR из команды автора, позволяет выполнять переназначение ревьюеров и получать список PR'ов для конкретного пользователя.
- Автоматическое назначение до 2 активных ревьюеров из команды автора
- Переназначение ревьюеров из команды заменяемого участника
- Блокировка изменений после merge PR
- Управление командами и пользователями
- Массовая деактивация пользователей с автоматическим переназначением PR
- Статистика назначений
- Метрики Prometheus и дашборды Grafana
- Интеграционные тесты
- Нагрузочное тестирование с k6
- Язык: Go 1.21+
- HTTP Router:
github.com/go-chi/chi/v5 - ORM:
gorm.io/gorm+gorm.io/driver/postgres - База данных: PostgreSQL 15
- Logging:
log/slog - Metrics: Prometheus + Grafana
- Config:
viper - Testing:
testify,httptest - Load Testing: k6
- Linter:
golangci-lint
- Docker и Docker Compose
- Go 1.21+
# Запустите все сервисы
docker-compose up -d
# Или с помощью Makefile
make docker-upСервис будет доступен на:
- API: http://localhost:8080
- Prometheus: http://localhost:9090
- Grafana: http://localhost:3000 (admin/admin)
Полная документация API доступна в openapi.yaml.
| Метод | Путь | Описание | Auth |
|---|---|---|---|
| POST | /team/add |
Создать команду | Public |
| GET | /team/get |
Получить команду | User/Admin |
| POST | /team/deactivateUsers |
Массовая деактивация пользователей | Admin |
| Метод | Путь | Описание | Auth |
|---|---|---|---|
| POST | /users/setIsActive |
Установить статус активности | Admin |
| GET | /users/getReview |
Получить PR'ы пользователя | User/Admin |
| Метод | Путь | Описание | Auth |
|---|---|---|---|
| POST | /pullRequest/create |
Создать PR | Admin |
| POST | /pullRequest/merge |
Merge PR (идемпотентно) | Admin |
| POST | /pullRequest/reassign |
Переназначить ревьювера | Admin |
| Метод | Путь | Описание |
|---|---|---|
| GET | /health |
Проверка здоровья сервиса |
| GET | /metrics |
Метрики Prometheus |
| GET | /stats |
Статистика назначений |
# Server
PR_REVIEWER_SERVER_PORT=8080
PR_REVIEWER_SERVER_READ_TIMEOUT=10
PR_REVIEWER_SERVER_WRITE_TIMEOUT=10
# Storage
PR_REVIEWER_STORAGE_TYPE=postgres # или memory
PR_REVIEWER_STORAGE_POSTGRES_URL=<connection-string>
# Auth
PR_REVIEWER_AUTH_TYPE=static
PR_REVIEWER_AUTH_ADMIN_TOKEN=admin-secret-token
PR_REVIEWER_AUTH_USER_TOKEN=user-secret-token
# Logging
PR_REVIEWER_LOG_LEVEL=info # debug, info, warn, errorТакже поддерживается конфигурация через config.yaml:
server:
port: 8080
read_timeout: 10
write_timeout: 10
storage:
type: postgres
postgres_url: "host=localhost port=5432 user=prreviewer password=prreviewer123 dbname=prreviewer sslmode=disable"
auth:
type: static
admin_token: admin-secret-token
user_token: user-secret-token
log_level: info# Запустить все тесты
make test
# Быстрые тесты
make test-shortПосле выполнения make test откройте coverage.html в браузере.
Текущее покрытие: ~50%
# С помощью Makefile
make load-test
# Или напрямую
docker-compose run --rm k6 run /scripts/main-load-test.js --out experimental-prometheus-rwКонфигурация теста (load-testing/scripts/main-load-test.js):
- Прогрев: 30s до 10 VU
- Легкая нагрузка: 1m до 100 VU
- Основная нагрузка: 15m на 400 VU
- Остывание: 1m до 0 VU
Пороговые значения (SLI):
p(95) < 200ms- 95-й перцентиль времени ответаrate < 0.01- Доля ошибок < 1%
Тестовое окружение:
- CPU: AMD Ryzen 7 6800H
- RAM: 16 GB
- PostgreSQL: 15-alpine
Результаты:
| Метрика | Значение |
|---|---|
| Средний RPS | ~800 req/s |
| p(90) latency | 18.76ms |
| p(95) latency | 22.78ms |
| Успешность | 99.99% |
| Max VU | 400 |
Метрики нагрузочного тестирования доступны в Grafana:
- Откройте http://localhost:3000
- Перейдите в дашборд "k6 Prometheus"
- Выберите временной диапазон выполнения теста
Метрики доступны на http://localhost:9090:
pr_reviewer_http_requests_total- Количество HTTP запросовpr_reviewer_http_request_duration_seconds- Длительность HTTP запросовprocess_resident_memory_bytes- Использование памятиprocess_cpu_seconds_total- Использование CPUgo_goroutines- Количество горутин
Дашборды доступны на http://localhost:3000 (admin/admin):
-
Go Application Dashboard - метрики приложения
- HTTP Request Rate
- 95th Percentile Request Duration
- Memory Usage
- CPU Usage
- Goroutines
-
k6 Dashboard - результаты нагрузочного тестирования
- HTTP requests
- Response times
- Error rate
- Virtual Users