Giter Club home page Giter Club logo

rfab's Introduction

Хранение данных

  • Интерфейс пользователя конкретной площадки (plant) отражает содержимое модели данных интферфейса (state), хранящейся в Redis в виде JSON структуры. Название ключа по которому хранятся эти данные: rfab:plant:<plid>, где <plid> - идентификатор площадки. Модель на фронтенде автоматически синхронизируется с моделью интерфейса в базе.

Кроме того, для каждой площадки в Redis накапливается, хранится и обновляется, по мере получения от ядра, дополнительная информация. Она передаётся на фронтенд и отображаются в интерфейсе только по запросу пользователя. Это статистика по каждой полке и дополнительные данные об устройствах в слотах:

  • Статистика по полкам хранится в хешах, доступных по ключу rfab:jbodstat:<plid>, по каждой площадке отдельно. В качестве названий полей используются индексы полок.

  • Дополнительные данные об устройствах в слотах храняться также в отдельных хешах по каждой площадке, доступных по ключам rfab:dutinfo:<plid>. Названиями полей хеша являются строки вида jbod_idx:slot_idx, где bod_idx - индекс полки, slot_idx - индекс слота.

Изменение данных

Получение данных от ядра системы для формирования и обновления моделей интерфейсов предполагается для каждой площадки отдельно, по каналам Redis, c названиями rfab:update:<plid>. Сообщения в формате JSON вида {"type": "тип данных", "data": "содержимое"} обрабатываются следующим образом, в зависимости от значения поля type:

  • state - Установка состояния интерфейса, полное обновление. Поле data должно содержать полную модель состояния интерфейса, которая будет сохранена в Redis по ключу rfab:plant:<plid>, перезаписав ранее хранившуюся там модель, если таковая была. Пример содержимого поля data можно получить здесь http://fab.rlab.ru:9000/docs#/default/getPlant_plant__plid__get после ввода идентификатора площадки (тестовый = 1) и отправки запроса. После получения данных этого типа, помимо обновление информации в базе, происходит обновление модели на фронтенде.

  • update - Частичное обновление состояния интерфейса. Поле data должно содержать JSON структуру, аналогичную модели данных интерфейса, но содержащую только ту информацию, которой требуется перезаписать соответствующие части модели. Пример сообщения с обновлением номера "wwn1" у полки с индексом "0": {"type": "update", "data": { "jbods": { "0": {"wwn1": "11111111111"}}}}. Результатом такого сообщения также будет обновление модели и в базе и на фронтенде.

  • jbodstat - Полное обновление (перезапись) в Redis статистики для полок, информация для которых присутствует в поле "data". Например, обновление статистики для полки с индексом "1": { "type": "jbodstat", "data": {"1": "Some jbod statistic"}}. Эти данные на фронтенд в автоматическом режиме не передаются.

  • dutinfo - Полное обновление (перезапись) в Redis дополнительной информации об устройствах в слотах, информация о которых присутствует в поле "data". Например, обновление статистики для слота с индексом "3" в полке с индексом "1": { "type": "dutinfo", "data": {"1": { "3": "Some hard drive information"}}}. Эти данные на фронтенд в автоматическом режиме также не передаются.

Передача действий с фронтенда

Взаимодействие пользователя с элементами управления порождает сообщения, направляемые в канал rfab:action:<plid> в формате {"action": "тип действия", "data": "содержимое"}. На данный момент реализованы следующие типы:

  • chosentest - Выбор теста. В поле data передаётся номер теста.

  • abort - Прекращение теста. В поле data в виде ассоциативного массива JSON передаётся индекс jbod и индексы слотов. Пример: {"action": "reset", "data": {"0": [4, 11, 12]}}. В данном случае передаются индексы слотов "4", "11", "12", находящихся в полке с индексом "0".

  • reset - Сброс слота. Формат поля data аналогичен abort.

Каналы журналирования и вывод ошибок

  • rfab:err
  • rfab:log

Redis

  • Стандартный порт 6379
  • Установить значение ключа set <имя_ключа> 'строка, новое значение ключа'
  • Считать значение ключа get <имя_ключа>
  • Подписаться на канал subscribe <имя канала>
  • Отправить в канал publish <имя канала> 'строка для отправки'

Дополнительные примеры обновления и установки состояния интерфейса

{"type": "update", "data": {"name": "Relaible drives IIInc.", "jbods": {"1": {"state":1,"descr":"ASCII substring of unreasonably indeterminate length","slots":{"0":{"idx":0,"state":3,"status":"Some new status information","scode":1,"progress":8173,"mdl":"1111111111111111111","sn":"2222222222222","itf":1,"link":"700200","grade":1}}}}}}

{"type": "state","data": {"name":"Relaible drives Inc.","testoptions":{"1":"Proper test","2":"Solid test","3":"Precise test"},"chosentest":1,"jbods":{"0":{"idx":0,"wwn0":"d78349CE8cEC0B06","wwn1":"97aeEdFf5c6b4bEb","sasaddr":"7249bCEA9EB4B5C9","mdl":"JBMD165FSL","sn":"0Ed0f16D","fw":"2.5.3","state":1,"descr":"ASCII string of reasonably indeterminate length","slots":{"0":{"idx":0,"state":3,"status":"Some status information","scode":1,"progress":8173,"mdl":"MDYJWC81452273502395496404","sn":"0eeA3B3Bedaa328E88C0","itf":1,"link":"100500","grade":1},"1":{"idx":1,"state":3,"status":"Some status information","scode":1,"progress":8342,"mdl":"MDKQDM81942482392560070384","sn":"061b9e88d6f71fDbfCfD","itf":1,"link":"100500","grade":1},"2":{"idx":2,"state":3,"status":"Some status information","scode":1,"progress":6757,"mdl":"MDWWFW01432111199019671529","sn":"ec3dA29fF7DD1eE93AD3","itf":1,"link":"100500","grade":1},"3":{"idx":3,"state":3,"status":"Some status information","scode":1,"progress":8541,"mdl":"MDVDBJ71180341079693407656","sn":"cD32d14fE2cF3f941D89","itf":1,"link":"100500","grade":1},"4":{"idx":4,"state":3,"status":"Some status information","scode":1,"progress":4812,"mdl":"MDRXXE17470786929054561432","sn":"2572E5cf86876ECaEcdf","itf":1,"link":"100500","grade":1},"5":{"idx":5,"state":3,"status":"Some status information","scode":1,"progress":7154,"mdl":"MDZZDL44738531438380934889","sn":"De2A8AF473FB89e7eba4","itf":1,"link":"100500","grade":1}}},"1":{"idx":1,"wwn0":"bCB3ed3afe3792a1","wwn1":"56FFf7CaaFC0BeaF","sasaddr":"cF9De39E6eA4cbe6","mdl":"JBMD679CPU","sn":"31dF4058","fw":"0.0.5","state":1,"descr":"ASCII string of reasonably indeterminate length","slots":{"0":{"idx":0,"state":3,"status":"Some status information","scode":1,"progress":8013,"mdl":"MDMRHV75261097233364887179","sn":"16C1bc4EFC0fC435D2dD","itf":1,"link":"100500","grade":1},"1":{"idx":1,"state":3,"status":"Some status information","scode":1,"progress":9757,"mdl":"MDWVLB47110444233359900976","sn":"13D8dbd329fBe841b8fA","itf":1,"link":"100500","grade":1},"2":{"idx":2,"state":3,"status":"Some status information","scode":1,"progress":6336,"mdl":"MDTOBJ40556208791675178469","sn":"EACEf4f9DE10f1D1CC7A","itf":1,"link":"100500","grade":1},"3":{"idx":3,"state":3,"status":"Some status information","scode":1,"progress":9889,"mdl":"MDMFGD14140327235699520176","sn":"a2bF313e9243aE3Ab3b0","itf":1,"link":"100500","grade":1},"4":{"idx":4,"state":3,"status":"Some status information","scode":1,"progress":3901,"mdl":"MDXPNH75058258999509691698","sn":"4aAC3cf4A6eF495Fb66f","itf":1,"link":"100500","grade":1},"5":{"idx":5,"state":3,"status":"Some status information","scode":1,"progress":5974,"mdl":"MDMDIM57064247568351302700","sn":"aC357cEaC0e9cAA80850","itf":1,"link":"100500","grade":1}}}}}}

rfab's People

Contributors

0gk avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.