- Груздева Анна
5130904/30105 - Ананьева Лариса
5130904/30105 - Березнева Екатерина
5130904/30105
Команде разработчиков сложно отловить баги, вызывающие не явные ошибки, а непредвиденное поведение системы. В ручных отчетах контекст зачастую недостаточен, из-за чего много времени уходит на уточнение деталей и поиск причины/механизма сбоя. В результате увеличивается количество времени необходимое для устранения багов, что замедляет процесс разработки.
Целевая нагрузка: ориентироваться на ~10 000 пользователей в сутки. Период хранения данных: 5 лет.
Пользовательские истории:
- Как менеджер продукта, я хочу просматривать список задач и фильтры по проекту, чтобы приоритизировать работу.
- Как разработчик, я хочу получать полный отчёт с информацией о сессии и вложениями, чтобы воспроизводить и исправлять баги.
- Как пользователь, я хочу отправить баг с вложением и получить подтверждение получения.
Стек: Java 21, Spring Boot, Spring Data JPA, PostgreSQL, JWT (Spring Security), frontend на TypeScript/JS. Сервис использует Gradle и запускается в Docker.
Ключевые нефункциональные требования:
- P95 latency: чтения ≤ 200 ms, записи ≤ 500 ms. Объемы трафика и хранения:
- Оценки R/W: чтения доминируют (примерно 70% чтений / 30% записей)
- Ориентировочные пики: ~100 RPS чтений, ~43 RPS записей.
- Средний размер HTTP-пакета: чтение 0.5–2 KB, запись 1–10 KB Как сервис выдержит нефункциональные требования:
- Использование индексов в базе данных для ускорения операций чтения.
- Вложения вынесены в отдельное хранилище для снижения нагрузки на БД.
- Допускается возможность шардирования и партиционирования таблиц для масштабирования.
Полную документацию API можно найти по ссылке (при запущенном проекте): API Documentation
Основные эндпоинты:
Аутентификация и регистрация:
- POST
/api/auth/login- body { username, password } → 200 { token } - POST
/api/auth/register— body { username, password } → new token. Проекты: - GET
/api/projects— получить список проектов. → 200 [{id, name}] - POST
/api/projects— создать проект. — body { name } → 201 {id, name} - PATCH
/api/users/{userId}/projects/assign/{projectId}→ 200 {id, username, role, projectIds: []} Отчеты о багах: - POST
/api/reports/widget— создать отчет о баге. — body { projectId, sessionId, title, tags: [], reportedAt, comments, userEmail, screen, currentUrl, userProvided} → 200 - GET
/api/reports/{reportId}— получить отчет о баге. → 200 { id, projectId, sessionId, title, tags: [], reportedAt, comments, userEmail, screen, currentUrl, userProvided, eventIds: [], level, status, developerName} Сессии: - POST
/api/sessions— создать сессию. — body { projectId, startTime, browser, os, deviceType, screenResolution, viewportSize, language, userAgent, ipAddress, cookiesHash, plugins: [] } → 201 { message, sessionId } - GET
/api/sessions/{sessionId}— получить сессию. → 200 { sessionId, projectId, isActive, startTime, endTime, browser, browserVersion, os, deviceType, screenResolution, viewportSize, language, userAgent, ipAddress, plugins: []} Действия пользователя: - POST
/api/events— записать действие пользователя. — body { sessionId, type, name, log, stackTrace, url, element, timestamp, metadata: {filename, lineNumber, statusCode} } → 201 - GET
/api/events/{id}— получить действие пользователя. → 200 { id, sessionId, type, name, log, stackTrace, url, element, timestamp, metadata: {filename, lineNumber, statusCode} }
Unit тесты в src/test/java (JUnit 5, Mockito).
Реализован сценарий end-to-end: аутентификация администратора → создание нового проекта → получение списка всех проектов → проверка, что созданный проект присутствует в списке (покрывает одну пользовательскую историю).
Файлы:
docker-compose.ci.yml— конфигурация Docker Compose со следующими сервисами:postgres— база данных PostgreSQL для хранения данныхbackend— Java Spring Boot приложение с REST APIdashboard— React фронтенд для административного интерфейсаwidget— React фронтенд интерфейс для отправки репортов
scripts/ci.sh— единый скрипт для сборки, запуска unit и integration тестов и старта приложения. Единая команда для сборки и тестирования:bash ./scripts/ci.sh
Чтобы встроить систему в свой сайт на все страницы добавьте следующий код в раздел вашего HTML документа:
<script src="https://EdhelielBoneflare.github.io/BugTracker/dist/bugtracker.bundle.js"></script>
<script>
BugTracker.initialize('given-project-id', {
baseUrl: 'http://localhost:8080', // текущий URL сервиса
});
</script>В репозитории добавлена одностраничная тестовая страница для ручного тестирования API: docs/index.html.
Страница доступна по адресу https://edhelielboneflare.github.io/BugTracker/.
- Соберите и запустите сервис BugTracker локально (используйте команду
bash ./scripts/ci.sh) - Откройте в браузере файл
docs/index.htmlили перейдите по ссылкеhttps://edhelielboneflare.github.io/BugTracker/ - Введите URL вашего локального сервиса BugTracker (
http://localhost:3000) - Зарегистрируйтесь в системе, используя форму регистрации (первый зарегистрированный пользователь становится администратором)
- Для тестирования системы используйте проект test-project (см. пункт 2).