Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ТЗ по вебсервису.
- Нужно разработать веб-сервис для регистрации и управления устройствами. Предпочтительные языки - Python,PHP, наличие фреймворков опционально. База данных - MySQL, сервер - Apache2. Веб-сервис должен быть минималистичен с возможностью быстро дописывать функционал самостоятельно. Задание принимается в виде набора скриптов, которые мы самостоятельно ставим на свою виртуалку.
- Все текстовые поля и конфиги должны лежать централизованно для возможности быстро изменить то или иное поле или имя страницы или протокол. Должны быть проверки на валидность запросов и типов данных.
- MySQL:
- БД: имя по умолчанию: reactor
- reactors: Главная таблица - список устройств со следующими полями:
- ID: primary key auto-increment
- update_timestamp - datetime
- MAC_primary - МАК-адрес устройства, уникален
- MAC_monit - МАК-адрес модуля мониторинга
- Slave_firmware_ok - True, False, default NULL
- Slave_SPI_ok - True, False, default NULL
- Working_ok - True, False, default NULL
- Working_total_speed - int32
- openvpn_keys:
- ID - primary key auto-increment
- ReacID - = привязка к reactors.ID, неуникальна
- Value - text
- boards:
- ID - primary key auto-increment
- update_timestamp - datetime
- ReacID - = привязка к reactors.ID, неуникальна
- BoardTestSpeed - int32
- ChipsTestSpeed - int32
- Status_ok - True, False, default NULL
- logs:
- ID - primary key auto-increment
- update_timestamp - datetime
- ReacID - = привязка к reactors.ID, неуникальна
- script_log - longtext
- master_log - longtext
- debug_log - longtext
- Web:
- Страницы глобально делятся на те, что взаимодействуют с пользователем и на те, с которыми взаимодействуют устройства. Вторые имеют префикс "r_" и не должны иметь HTML-кода, возвращая устройствам только код ошибки.
- Нужно сделать страницу /list_reactors, показывающую содержимое mysql-таблицы reactors c возможностью сортировки по полям.
- Поле MAC_monit должно быть выпадающим списком, данные для которого берутся из внешнего bash-скрипта.
- bash-скрипт возвращает данные в формате tsv:
- Port 1\tAA:BB:CC:DD:EE:FF\n
- Port 2\tGG:HH:II:JJ:KK:LL\n
- Port 3.... и т. д.
- Варианты выбора должны выглядеть как "Port 1 AA:BB:CC:DD:EE:FF", в поле должен записываться второй столбец (AA:BB:CC:DD:EE:FF)
- Внизу таблицы должна быть кнопка Update, обновляющая в MySQL MAC-адреса в столбце MAC-monit.
- При наличии совпадающих MAC_monit выводить на экран предупреждение и подсвечивать совпадающие адреса в таблице.
- Нужно сделать страницу /r_reactor_update, позволяющую устройствам регистрироваться в таблице. При первом обращении устройства к странице создаётся новая запись с данными MAC_primary и текущим временем в update_timestamp.
- Устройства обращаются к странице с помощью GET-запросов, которые могут слаться поодиночке или комбинироваться. Переменные:
- mac_addr (пример: GET /reactor_update?mac_addr=AA:BB:CC:DD:EE:FF) - обязательное поле. Может быть единственным. В таком случае, просто создаётся запись в таблице (при её отсутствии) и обновляется update_timestamp.
- slave_firmware_ok (пример: GET /reactor_update?mac_addr=AA:BB:CC:DD:EE:FF&slave_firmware_ok=true)
- slave_spi_ok (пример: GET /reactor_update?mac_addr=AA:BB:CC:DD:EE:FF&slave_spi_ok=true)
- working_ok (пример: аналогично)
- working_total_speed (пример: аналогично).
- При входящем запросе от устройства обновляются соответствующие поля и update_timestamp в таблице reactors. Скрипт возвращает текст "OK" или "Error" с пояснениями, почему не удалось
- Нужно сделать страницу /list_openvpn_keys, показывающую содержимое mysql-таблицы openvpn_keys c возможностью сортировки по полям и возможностью добавлять/удалять/модифицировать ключи с привязкой их к reactors.ID
- По клику на ReacID должен быть переход на /list_reactors с подсвеченным рядом (пример: ссылка /list_reactors#10)
- Нужно сделать страницу /r_keys_add, позволяющую устройствам добавлять новые ключи с помощью POST-запроса. Скрипт возвращает текст "OK" или "Error" с пояснениями, почему не удалось
- Пример: POST /keys_add?mac_addr=AA:BB:CC:DD:EE:FF
- -- BEGIN PUBLIC KEY --
- ...
- -- END_PUBLIC_KEY
- Ответ: "OK"
- Нужно сделать страницу /list_logs, показывающую содержимое mysql-таблицы logs c возможностью сортировки по ID,update_timestamp,ReacID и удалять лишние записи. Поля *_log должны быть показаны компактно, с возможностью развернуть всё поле в отдельное окно.
- По клику на ReacID должен быть переход на /list_reactors с подсвеченным рядом (пример: ссылка /list_reactors#10)
- Нужно сделать страницу /logs_add_update, позволяющую устройствам добавлять новые логи с помощью POST-запроса. Скрипт возвращает текст "OK <ID>" или "Error" с пояснениями, почему не удалось. ID - номер добавленной записи.
- Тип добавляемого лога указывается в URL в переменной logtype.
- Если в URL присутствует переменная logid, то следует обновить запись с соответствующим ID.
- Пример:
- POST /r_logs_add_update?logtype=script_log
- DATA
- ...
- DATA
- Ответ: "OK 15" Поле добавлено с ID=15
- POST /r_logs_add_update?logtype=master_log&logid=15
- DATA
- ...
- DATA
- Ответ: "OK 15" Поле обновлено с ID=15
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement