Skip to content

Эмуляция программно-аппаратной системы

Notifications You must be signed in to change notification settings

robin0371/servem

Repository files navigation

Приложение "Эмулятор программно-аппаратной системы"

Что это?

Это программа - эмулятор программно-аппаратной системы, который содержит эмулятор устройств, эмулятор серверов и маршрутизирующий прокси-сервер.

Программа запускает 3 контейнера, в первом - эмуляция устройств(3 устройства), которые отправляют запросы на второй контейнер, в котором запущен proxy-сервер, он перенаправляет запросы в третий контейнер, маршрутизируя запросы на определенные серверы(по id устройства), на котором запущены 3 сервера, принимающие запросы от устройств. После принятия запроса от proxy, сервер возвращает ответ, который proxy возвращает в устройство. Причем, контейнер устройств и proxy находятся в одной виртуальной сети, а proxy и контейнер серверов в другой. Благодаря чему имитируется что запросы, проходят не только от одного контейнера к другому, но и проходят из одной виртуальной сети в другую.

Технологии

Python 3.12, Docker, Tornado

Запуск в Docker

$ cd /path/to/servem
$ docker-compose up

Расширенная информация о запускаемых в контейнерах командах

Запуск proxy, для маршрутизации

$ python proxy.py --settings=config.toml -p 7777
  • Где в:
    • --settings, указывается путь до файла настроек
    • -ht или --host, указывается хост proxy-сервера
    • -p или --port, указываются порт proxy-сервера

В команде выше, запустится сервер на порту 7777, который будет маршрутизировать запросы по схеме, настраиваемой в параметре PROXY_MAP, в config.toml

Запуск эмуляции серверов приложений

$ python server.py --settings=config.toml -sp 8080 -plp 8090 -pp 9000
  • Где в:
    • --settings, путь до файла настроек
    • -sp или --staging_port, порт сервера для разработки
    • -plp или --production_like_port, порт сервера для регрессионного тестирования
    • -pp или --production_port, порт продакшен-сервера

В команде выше, запустятся 3 локальных сервера(с приложениями для приема статусов запросов) на портах 8080, 8090 и 9000 и сервер по-умолчанию, который настраивается в config.toml

Запуск эмуляции системы устройств

$ python client.py --settings=config.toml -d terminal_0 terminal_5 terminal_25 -ht proxy -p 7777
  • Где в:
    • --settings, путь до файла настроек
    • -d или --devices_id, id устройств (ID устройства должно содержать _ и после этого символа должен быть номер устройства)
    • -ht или --host, сервер, на который устройства передают свой статус, в данном случае proxy - обращение по имени контейнера
    • -p или --port, порт, на который устройства передают свой статус

В команде выше, запустятся 3 устройства с id terminal_0, terminal_5, terminal_25. После запуска, устройства начнут периодическую отправку своего статуса на сервер proxy-сервер на порту 7777

Описание формата взаимодействия

  • Эмуляторы устройств:

    • После запуска, периодически отправляют свой статус на сервер через proxy: POST /status/

        {
            "device_id": "<идентификатор устройства, string>",
            "request_id": "<идентификатор запроса, string>",
            "status": "OK",
            "data": {
                <произвольный объект с данными>
            }
        }
      
    • Идентификаторы устройств, ip-адрес и порт сервера задаются через аргументы командной строки.

  • Прокси-сервер, маршрутизирует запросы между эмуляторами сервера, в зависимости от идентификатора устройства в теле запроса и делает это по таблице соответствия описываемой в config.toml

  • Эмулятор сервера:

    • Отвечает на все корректные по структуре запросы следующим json:

        {
            "device_id": "<идентификатор устройства, string>",
            "request_id": "<идентификатор запроса, string>",
            "result": "OK"
        }
      

About

Эмуляция программно-аппаратной системы

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published