Skip to content

Andrey-Kugubaev/BetTest

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pipeline из двух звеньев

Python RabbitMQ Pika docker

Оглавление:


Введение

Приложение реализует pipeline из двух звеньев. Приложение А (producer) считывает информацию из файла, сохраняет их в базу данных и отправляет их в приложение B. Приложение B (receiver) принимает сообщение и формирует текущее состояние игры. Сохраняет текущее состояние в файл. Формат текущего состояния:

match_state: {

'status': 2,
'match_status': 3,
'match_time': '92:08'
}
status (0-prematch, 1-live, 2-ended, 3-failed) match_status (0-prematch, 1-first half, 2-second half, 3-ended)

match_score: {
“score”: {
“home_score”:1,
“away_score”:2
},
“period_scores”:[
{
“number”:1,
“home_score”:0,
“away_score”:1
},
{
“number”:2,
“home_score”:1,
“away_score”:1
}
]
}
score - счет за весь период
period_scores - счет по периодам,
number - порядковый номер периода (1 - 1st half, 2 - 2nd half)

Каждое обновление проверяется на валидность:

  • Относятся ли данные к текущему событию (event_id)
  • Время и счет должны быть не меньше того, что в текущем состоянии. В случае ошибки статус матча меняется на failed и игнорируются новые обновления

Инфраструктура

Python

  • Версия: 3.10

RabbitMQ Server:

  • Версия: 3.11.13-management
  • Версия выбрана для возможности просмотра интерфейса очередей через веб версию RabbitMQ
    Просмотр интерфейса очередей доступен после запуска docker-compose по адресу http://localhost:15672/

Flake8

  • Для проверки соответствия кода PEP8

Ограничения

  • Для демонстрации функционала в качестве базы данных выбрана SQLite, также ее создание и нахождение устроено в контейнере producer. При необходимости долговременного хранения записанной информации, база данных должна быть организована в отдельный контейнер (например db) с volume
  • В базу данных записываются не все поля пришедшего сообщения. Сделано это для визуального уменьшения "веса" синтаксиса сохранения в БД.
  • Вывод receiver выполнен через print в терминал. При дополнительном требовании о формате выходных данных можно поменять метод класса MatchLogger на сохранение в файл, например.

Инструкция по запуску

  1. Клонируем репозиторий:
    git clone [email protected]:Andrey-Kugubaev/BetTest.git

  2. Создаем файл .env и добавляем в него параметры:
    DB_NAME = logs_fifa.db
    DB_TABLENAME = game
    RB_CONNECTION = pika.BlockingConnection(pika.ConnectionParameters(host=RB_HOST))
    RB_HOST = rabbitmqServer
    QUEUE_NAME = fifa_logs_queue
    QUEUE_OPTS = {'durable':True}

  • файл .env необходимо добавить в директории producer и receiver
  1. Устанавливаем Docker

  2. Собираем docker-compose
    docker-compose up -d --build

  3. Останавливаем и удаляем контейнеры:
    docker-compose down -v

Автор: https://github.com/Andrey-Kugubaev

About

Pipeline из двух звеньев

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published