Skip to content

A bug tracker system in a form of a website and an embeddable JS widget

Notifications You must be signed in to change notification settings

EdhelielBoneflare/BugTracker

Repository files navigation

BugTracker

Участники

  • Груздева Анна 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 Как сервис выдержит нефункциональные требования:
  • Использование индексов в базе данных для ускорения операций чтения.
  • Вложения вынесены в отдельное хранилище для снижения нагрузки на БД.
  • Допускается возможность шардирования и партиционирования таблиц для масштабирования.

Диаграммы C4 Model

Контекст
bugtracker-Context drawio
Контейнеры
bugtracker-Container drawio

Контракты API

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

Unit тесты в src/test/java (JUnit 5, Mockito).

Интеграционное тестирование

Реализован сценарий end-to-end: аутентификация администратора → создание нового проекта → получение списка всех проектов → проверка, что созданный проект присутствует в списке (покрывает одну пользовательскую историю).

Сборка

Файлы:

  • docker-compose.ci.yml — конфигурация Docker Compose со следующими сервисами:
    • postgres — база данных PostgreSQL для хранения данных
    • backend — Java Spring Boot приложение с REST API
    • dashboard — 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>

Тестовая страница (one-pager)

В репозитории добавлена одностраничная тестовая страница для ручного тестирования API: docs/index.html.
Страница доступна по адресу https://edhelielboneflare.github.io/BugTracker/.

Использование тестовой страницы

  1. Соберите и запустите сервис BugTracker локально (используйте команду bash ./scripts/ci.sh)
  2. Откройте в браузере файл docs/index.html или перейдите по ссылке https://edhelielboneflare.github.io/BugTracker/
  3. Введите URL вашего локального сервиса BugTracker (http://localhost:3000)
  4. Зарегистрируйтесь в системе, используя форму регистрации (первый зарегистрированный пользователь становится администратором)
  5. Для тестирования системы используйте проект test-project (см. пункт 2).

About

A bug tracker system in a form of a website and an embeddable JS widget

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •