Skip to content

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FactBuffer Project

FactBuffer – это система на Go для буферизации и последовательной отправки данных ("фактов") на внешний API. Проект демонстрирует, как можно принять большое количество записей (до 1000 в минуту), аккумулировать их в памяти и затем отправлять по одной, соблюдая строгий порядок. Если запись находится в буфере более 5 минут, она считается устаревшей и отбрасывается.

Особенности

  • Буферизация данных: Прием большого объема входящих фактов и их хранение в памяти.
  • Последовательная обработка: Факты отправляются на сервер строго по очереди.
  • Защита от устаревания: Факты, находящиеся в буфере более 5 минут, отбрасываются.
  • Обработка ошибок: Если при отправке возникает ошибка или сервер возвращает код, отличный от 200, факт пропускается.
  • Логирование: Подробные логи для отслеживания каждого шага обработки.

Структура проекта

Проект организован по стандартной схеме с разделением на слои:

myproject/ 
├── cmd/
│	└──main.go
│			
├── internal/ 
│ 	└── factbuffer/ 	
│ 		└── factbuffer.go
|		└── factbuffer_test.go
├── Makefile
└── go.mod
  • cmd/main.go – содержит функцию main(), которая инициализирует буфер, генерирует тестовые факты и останавливает буфер после их обработки.
  • internal/factbuffer/factbuffer.go – содержит всю бизнес-логику: структуры Fact и FactBuffer, а также функции NewFactBuffer(), AddFact(), startWorker() и Stop().
  • internal/factbuffer/factbuffer_test.go – содержит тесты, проверяющие, что факты корректно отправляются и что устаревшие факты не отправляются.
  • Makefile – содержит цели для сборки, запуска, тестирования и очистки проекта.

Установка

  1. Клонируйте репозиторий:

    git clone https://github.com/fatkheev/queue_facts.git
  2. Инициализируйте и скачайте зависимости:

    go mod tidy
    
  3. Запустите программу:

    make run
    

Использование

Программа выполнит следующие шаги:

  • Создаст буфер, рассчитанный на хранение до 5000 фактов (это примерно 5 минут при 1000 фактов в минуту).
  • Сгенерирует 10 тестовых фактов.
  • Добавит факты в буфер, где они будут храниться до отправки.
  • Последовательно отправит каждый факт на API по адресу https://development.kpi-drive.ru/_api/facts/save_fact.
  • Выведет в консоль подробные логи каждого шага обработки.

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

В проекте написаны тесты для проверки работы буфера:

  • TestFactBuffer_Success: Проверяет, что все добавленные факты успешно отправляются на сервер.
  • TestFactBuffer_Expired: Проверяет, что устаревшие факты (находящиеся в очереди более 5 минут) не отправляются.

Запустите тесты командой:

make test

Make-команды

В корне проекта находится файл Makefile с следующими целями:

  • build: Собирает проект и создаёт бинарный файл в папке bin.
  • run: Собирает и запускает приложение.
  • test: Запускает все тесты в проекте.
  • clean: Удаляет сгенерированные файлы (папку bin).

Пример использования Make-команд:

Сборка проекта

make build

Запуск проекта

make run

Запуск тестов

make test

Очистка сгенерированных файлов

make clean

Проверка данных через Postman

Чтобы проверить, что факты успешно сохранены на сервере, можно использовать Postman для отправки запроса к API получения фактов:

  • Метод: POST
  • URL: https://development.kpi-drive.ru/_api/indicators/get_facts
  • Headers:
    • Content-Type: application/x-www-form-urlencoded
    • Authorization: Bearer
  • Body (x-www-form-urlencoded):
    • period_start=2024-12-01
    • period_end=2024-12-31
    • period_key=month
    • indicator_to_mo_id=227373 После отправки запроса в Postman вы увидите список фактов, сохранённых на сервере.

Конфигурация

  • API Endpoint и Bearer Token: Текущие значения захардкожены в файле internal/factbuffer/factbuffer.go (константы apiURL и bearerToken). При необходимости их можно изменить.
  • Размер буфера: Размер очереди установлен в cmd/main.go при создании буфера NewFactBuffer(5000). Это значение можно настроить в зависимости от ожидаемой нагрузки.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages