Введение - 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 событий в журнале, одна строка - одно событие.