Skip to content

Godrik0/PR-Reviewer

Repository files navigation

PR Reviewer Assignment Service

Микросервис для автоматического назначения ревьюеров на 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

# Запустите все сервисы
docker-compose up -d

# Или с помощью Makefile
make docker-up

Сервис будет доступен на:

📚 API Endpoints

Полная документация 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

Pull Requests

Метод Путь Описание 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

🧪 Тестирование

Unit и Integration тесты

# Запустить все тесты
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:

  1. Откройте http://localhost:3000
  2. Перейдите в дашборд "k6 Prometheus"
  3. Выберите временной диапазон выполнения теста

Мониторинг

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 - Использование CPU
  • go_goroutines - Количество горутин

Grafana

Дашборды доступны на http://localhost:3000 (admin/admin):

  1. Go Application Dashboard - метрики приложения

    • HTTP Request Rate
    • 95th Percentile Request Duration
    • Memory Usage
    • CPU Usage
    • Goroutines
  2. k6 Dashboard - результаты нагрузочного тестирования

    • HTTP requests
    • Response times
    • Error rate
    • Virtual Users

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published