Введение - GerasimGerasimov/event-logger-service GitHub Wiki

Welcome to the event-logger-service wiki!

Функция сервиса

Реализует журнал событий. Записывать в БД факт возникновения событий при изменении значений битовых переменных.

Действия сервиса при запуске

При старте, event-logger-service инициализируется по конфигурационным файлам (в папке config):

  • host.json - host IP:port на котором находится сервис значений тегов Tagger (источник данных)
  • config.json позиционные обозначения подключенных устройств (U1, U2 ...) и к каким файлам описания триггеров они соответствуют
  • (в папке events) Парсит json-файлы описания триггеров, создавая шаблоны триггеров и аргументов триггеров
  • Из шаблонов создаёт ячейки триггеров и их аргументов, и привязывает аргументы к соответствующим позиционным обозначениям устройств U1, U2...
  • Для исключения ложных записей в БД при старте сервиса, все ячейки-триггеры проходят инициализацию опираясь на значения входных данных input и условия срабатывания setCondition и resetCondition

Ячейка триггера

Основной единицей сервиса, является ячейка триггера. Триггеры используются для единократной генерации события при достижении условия УСТАНОВКА (setCondition). Следующее событие может быть сгенерировано только после прохождения триггером состояния СБРОС (resetCondition). На данный момент планируется три типа:

  • FRONT - (реализована) генерирует событие по фронту сигнала, т.е. когда входное значение ячейки (input) становится больше или равно условию срабатывания setCondition. Далее, пока input не пройдёт через состояние СБРОС (resetCondition) - генерация новых событий блокируется
  • REAR - (TODO) то же что и FRONT, но логика инверсная, событий будет генерироваться по спаду сигнала
  • TOUGLE - (TODO) сочетает в себе функционал FRONT и REAR, будет генерировать события по фронту и спаду сигнала

Структура строки в таблице БД

      id INTEGER PRIMARY KEY AUTOINCREMENT,
      utime INTEGER,
      date TEXT,
      type TEXT,
      trig TEXT,
      tag TEXT,
      details TEXT

так же строка описана интерфейсом:

export interface IEvent {
  utime: number;// время в мс для быстрого поиска по числам, а не по тексту
  date: string; // время в человекочитаемом формате Feb 15 2021 23:55:03 GMT+0700
                // по этому формату можно узнать локальные настройки и вычислить локальное время
                // для ячеек utime (с числами работать быстрее чем со строками)
  type: string; // alarm/info/warning
  trig: string; // FRONT/REAR/TOUGLE
  tag: string;  // U1/RAM/Blank
  details: {    //JSON {"initialValue":"input: 1 >= setValue: 1","comment":"гашение поля","todo":""}
    initialValue: string;//значение входа и условие срабатывания в момент генерации события
    comment: string;//текстовое описание события (что произошло)
    todo: string; //рекомендация ЧТО ДЕЛАТЬ при возникновении события
  }
}

БД

Используется SQLITE3 как простая и устойчивая к пропаданию питания.
БД хранится в папке bd в виде файла database.sqlite3
Количество строк таблицы "зациклено" (TODO) на заданном значении. По умолчанию 2048 событий в журнале, одна строка - одно событие.