Skip to content

Repository files navigation

Эмулятор сервиса контроля перевозки грузов

Введение

Написание эмулятора является способом проверки профессиональных компетенций разработчика в технологиях: REST API, HTTP, Kafka, PostgreSQL, Json/XML, полученных в результате прохождения курса.

Моделируется процесс получения потоков данных из разных источников в Kafka сбор их в приложении с БД и выдачу их через API внешней системе. Примером из реальной жизни служит мониторинг состояния контейнеров в процессе перевозки и сохранения результатов мониторинга в историю. Моделируется работа датчиков температуры, влажности, ударного воздействия.

Состоит из четырех модулей:

  1. собственно эмулятора:
  2. брокера сообщений Kafka;
  3. процессора с базой данных PostgreSQL;
  4. WEB API для отдачи результатов мониторинга по Id датчика, типу датчика с разбиением на страницы.

Эмулятор

Для работы эмулятора нужны следующие входные параметры (загружаются из в виде файла конфигурации JSON или XML). Структура может быть произвольной на усмотрения исполнителя, например:

  1. количество контейнеров X (int);
  2. дата и время начала эмуляции $T_0$ (datetime);
  3. максимальный сдвиг по времени контейнера t, (секунд, decimal);
  4. шаг дискретизации записи d (секунд, decimal);
  5. количество шагов эмуляции значений n (int)4
  6. параметры:
    1. параметр 1:
      1. id (int);
      2. имя параметра $P_1$ (varchar 255);
      3. среднее значение $mP_1$ (decimal);
      4. максимальный разброс $dP_1$ (из какого интервала брать случайное значение, decimal).
    2. параметр 2:
      1. id;
      2. имя параметра;
      3. среднее значение;
      4. максимальный разброс.
    3. и т.д.
  7. временной интервал отправки сообщений в sensor-request-manager $T_k$ (время формирования JSON для отправки, cекунд, int).

Алгоритм эмуляции

  1. С момента $Т_0$ для каждого контейнера, для каждого шага (0, n), соответствующего частоте дискретизации рассчитываются значения Т (времени снятия значений датчиков), равные для каждого контейнера $T_0$ + $0d$ + случайное значение(0,t), $T_0$ + $1d$ +случайное значение(0,t) … $T_0$ + $n*d$ +случайное значение(0,t).
  2. Для каждого значения времени эмулируются значения параметров $P_1$ = $mP_1$ + Случ( $-dP_1$ , $dP_1$ ), $P_2$ = $mP_2$ + Случ( $-dP_2$ ; $dP_2$ )… и т.д.
  3. Для каждого интервала времени от ( $T_0$ , $T_0 + 1T_k$ ) до ( $Т_0 + mT_k$ , $T_0 + (m + 1) * T_k$ ) формируется JSON или XML файл, содержащий эмулированные данные (пример):
    1. Контейнер 1
      1. Время снятия ( $T_0$ + случ(0,t))
        1. Значение параметра 1
        2. Значение параметра 2
        3. Значение параметра 3
      2. ...
      3. Время снятия ( $T_1$ )
        1. Значение параметра 1
        2. Значение параметра 2
        3. Значение параметра 3
      4. ...
      5. Время снятия ( $T_n$ )
    2. Контейнер 2
      1. Время снятия $Т_0$
        1. Значение параметра 1
        2. Значение параметра 2
        3. Значение параметра 3
    3. ...
    4. Контейнер X
      1. ...
      2. Время снятия ( $T_n$ ).
  4. Записанный файл отправляется методом POST в API sensor-request-manager $T_k$ секунд.

Sensor-request-manager

При получении на URL API файла от модуля эмулятора файл переправляется сообщением в брокер сообщений Kafka.

Controller

Принимает данные из Kafka и помещает в БД PostgreSQL с сохранением структуры эмулированного файла.

WEB-API

По запросу методом GET забирает данные из БД и предоставляет внешнему сервису с разбивкой по страницам.

НазначениеПолучить эмулированные значения датчиков по контейнерам и временам с разбивкой по страницам
МетодGET
URI{Настраиваемый параметр}

Запрос

Параметры запроса

АтрибутТип данныхОбязательностьУсловие на значениеПример значенияПримечание
time_afterintдаДолжно быть меньше time_to6745Начало интервала для вывода по времени
time_tointдаДолжно быть больше time_after8967Конец интервала для вывода по времени
string_for_pageintда20Количество строк на странице

Заголовки запроса

ЗаголовокНазначениеПример значения
AuthorizationТокен для авторизацииjiji23rn32in4i43

Ответ

Атрибуты ответа

АтрибутТип данныхОбязательностьУсловие на значениеПример значенияПримечание
pageintда-1Номер страницы
containerintда-1Номер контейнера
timedecimalда-23,57Время для эмулированного значения
par_namevarchar(255)да-temperatureИмя параметра
par_valuedecimalда-30,25Значение параметра

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages