Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.60 KB | None | 0 0
  1. ТЗ по вебсервису.
  2.  
  3. Нужно разработать веб-сервис для регистрации и управления устройствами. Предпочтительные языки - Python,PHP, наличие фреймворков опционально. База данных - MySQL, сервер - Apache2. Веб-сервис должен быть минималистичен с возможностью быстро дописывать функционал самостоятельно. Задание принимается в виде набора скриптов, которые мы самостоятельно ставим на свою виртуалку.
  4.  
  5. Все текстовые поля и конфиги должны лежать централизованно для возможности быстро изменить то или иное поле или имя страницы или протокол. Должны быть проверки на валидность запросов и типов данных.
  6.  
  7. MySQL:
  8. БД: имя по умолчанию: reactor
  9.  
  10. reactors: Главная таблица - список устройств со следующими полями:
  11. ID: primary key auto-increment
  12. update_timestamp - datetime
  13. MAC_primary - МАК-адрес устройства, уникален
  14. MAC_monit - МАК-адрес модуля мониторинга
  15. Slave_firmware_ok - True, False, default NULL
  16. Slave_SPI_ok - True, False, default NULL
  17. Working_ok - True, False, default NULL
  18. Working_total_speed - int32
  19.  
  20. openvpn_keys:
  21. ID - primary key auto-increment
  22. ReacID - = привязка к reactors.ID, неуникальна
  23. Value - text
  24.  
  25. boards:
  26. ID - primary key auto-increment
  27. update_timestamp - datetime
  28. ReacID - = привязка к reactors.ID, неуникальна
  29. BoardTestSpeed - int32
  30. ChipsTestSpeed - int32
  31. Status_ok - True, False, default NULL
  32.  
  33. logs:
  34. ID - primary key auto-increment
  35. update_timestamp - datetime
  36. ReacID - = привязка к reactors.ID, неуникальна
  37. script_log - longtext
  38. master_log - longtext
  39. debug_log - longtext
  40.  
  41.  
  42. Web:
  43. Страницы глобально делятся на те, что взаимодействуют с пользователем и на те, с которыми взаимодействуют устройства. Вторые имеют префикс "r_" и не должны иметь HTML-кода, возвращая устройствам только код ошибки.
  44.  
  45.  
  46. Нужно сделать страницу /list_reactors, показывающую содержимое mysql-таблицы reactors c возможностью сортировки по полям.
  47. Поле MAC_monit должно быть выпадающим списком, данные для которого берутся из внешнего bash-скрипта.
  48. bash-скрипт возвращает данные в формате tsv:
  49. Port 1\tAA:BB:CC:DD:EE:FF\n
  50. Port 2\tGG:HH:II:JJ:KK:LL\n
  51. Port 3.... и т. д.
  52. Варианты выбора должны выглядеть как "Port 1 AA:BB:CC:DD:EE:FF", в поле должен записываться второй столбец (AA:BB:CC:DD:EE:FF)
  53. Внизу таблицы должна быть кнопка Update, обновляющая в MySQL MAC-адреса в столбце MAC-monit.
  54. При наличии совпадающих MAC_monit выводить на экран предупреждение и подсвечивать совпадающие адреса в таблице.
  55.  
  56. Нужно сделать страницу /r_reactor_update, позволяющую устройствам регистрироваться в таблице. При первом обращении устройства к странице создаётся новая запись с данными MAC_primary и текущим временем в update_timestamp.
  57. Устройства обращаются к странице с помощью GET-запросов, которые могут слаться поодиночке или комбинироваться. Переменные:
  58. mac_addr (пример: GET /reactor_update?mac_addr=AA:BB:CC:DD:EE:FF) - обязательное поле. Может быть единственным. В таком случае, просто создаётся запись в таблице (при её отсутствии) и обновляется update_timestamp.
  59. slave_firmware_ok (пример: GET /reactor_update?mac_addr=AA:BB:CC:DD:EE:FF&slave_firmware_ok=true)
  60. slave_spi_ok (пример: GET /reactor_update?mac_addr=AA:BB:CC:DD:EE:FF&slave_spi_ok=true)
  61. working_ok (пример: аналогично)
  62. working_total_speed (пример: аналогично).
  63. При входящем запросе от устройства обновляются соответствующие поля и update_timestamp в таблице reactors. Скрипт возвращает текст "OK" или "Error" с пояснениями, почему не удалось
  64.  
  65. Нужно сделать страницу /list_openvpn_keys, показывающую содержимое mysql-таблицы openvpn_keys c возможностью сортировки по полям и возможностью добавлять/удалять/модифицировать ключи с привязкой их к reactors.ID
  66. По клику на ReacID должен быть переход на /list_reactors с подсвеченным рядом (пример: ссылка /list_reactors#10)
  67.  
  68. Нужно сделать страницу /r_keys_add, позволяющую устройствам добавлять новые ключи с помощью POST-запроса. Скрипт возвращает текст "OK" или "Error" с пояснениями, почему не удалось
  69. Пример: POST /keys_add?mac_addr=AA:BB:CC:DD:EE:FF
  70. -- BEGIN PUBLIC KEY --
  71. ...
  72. -- END_PUBLIC_KEY
  73. Ответ: "OK"
  74.  
  75.  
  76. Нужно сделать страницу /list_logs, показывающую содержимое mysql-таблицы logs c возможностью сортировки по ID,update_timestamp,ReacID и удалять лишние записи. Поля *_log должны быть показаны компактно, с возможностью развернуть всё поле в отдельное окно.
  77. По клику на ReacID должен быть переход на /list_reactors с подсвеченным рядом (пример: ссылка /list_reactors#10)
  78.  
  79. Нужно сделать страницу /logs_add_update, позволяющую устройствам добавлять новые логи с помощью POST-запроса. Скрипт возвращает текст "OK <ID>" или "Error" с пояснениями, почему не удалось. ID - номер добавленной записи.
  80. Тип добавляемого лога указывается в URL в переменной logtype.
  81. Если в URL присутствует переменная logid, то следует обновить запись с соответствующим ID.
  82. Пример:
  83. POST /r_logs_add_update?logtype=script_log
  84. DATA
  85. ...
  86. DATA
  87. Ответ: "OK 15" Поле добавлено с ID=15
  88.  
  89. POST /r_logs_add_update?logtype=master_log&logid=15
  90. DATA
  91. ...
  92. DATA
  93. Ответ: "OK 15" Поле обновлено с ID=15
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement