Created
April 17, 2018 14:40
-
-
Save sharonovd/18453608719aa26b54b76f8a66a8d32e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Алгоритм подгрузки актуальных правил | |
Ядро загружает правила из бэк-офиса и выполняет на своей стороне следующую дополнительную фильтрацию: | |
- неактивные правила отбрасываются* | |
- правила с неподходящей датой отбрасываются* | |
- правила без коммуникаций отбрасываются | |
- предикат компилируется в исполняемый луа-код и пытается запустить его на "пустом событии". если компиляция или запуск не проходит - правило отбрасывается, в лог пишется ошибка | |
Оставшиеся правила считаются эффективной конфигурацией ядра | |
Алгоритм обработки события | |
1) Процессор событий берет событие из входной очереди событий | |
2)* Процессов событий обогащает событие полями из профиля абонента и значениями вычислимых справочников* | |
3) Процессор проверяет событие по циклу против всех актуальных правил (в один проход): | |
- если правило привязано к другому типу события, оно отбрасывается | |
- если предикат правила вернул false при "подаче" в него полей обогащенного* события, оно отбрасывается | |
- если уже были подходящие правила с меньшим приоритетом, оно отбрасывается | |
- если приоритет правила равен предыдущим подходящим правилам, оно добавляется в список "подошедших правил" | |
- если приоритет правила меньше приоритета предыдущих подходящих правил, то список подошедших правил очищается, и в него добавляется новое правило | |
4) Все сообщения из цепочки сообщений для всех подошедших правил отправляются в очередь выходных сообщений* | |
Формат хранения условия | |
Предикат правила хранится в тарантуле, а так же передается между фронтендом бэкофиса, бэкендом бэкофиса и ядром в виде JSON таблицы рекурсивного (древовидного) формата: | |
узел может быть либо правилом (query-builder-rule), либо группой (query-builder-group) | |
группа имеет поля type (равное query-builder-group), logicalOperator и children (массив узлов) | |
правило имеет поля type (равный query-builder-rule) и условие query | |
условие (query) имеет поля rule (справочник), selectedOperand и value | |
значение поля rule - объект с обязательным полем id | |
значение условия (value) может быть, в зависимости от selectedOperator | |
для операторов equals/not equals/greater than/less than - объектом c обязательным полем value. Другие поля могут использоваться для отрисовки в UI, а ядром игнорируются | |
для операторов in/not in - массивом объектов c обязательным полем value. Другие поля могут использоваться для отрисовки в UI, а ядром игнорируются | |
для оператора between - объектом с обязательным полем value, которое является объектом с обязательными полями from и to. Другие поля могут использоваться для отрисовки в UI, а ядром игнорируются |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment