Как избежать жесткого кодирования продолжительности скользящего окна в Drools и передать временное окно в качестве аргумента.

Я начал использовать слюни неделю назад. Мне нужно рассчитать среднее значение метрики по продолжительности окна, скажем, 4 с. Приведенный ниже фрагмент кода Drools сделает эту работу.

...  over window:time(4s) ... 

Однако я хочу взять это значение в качестве входных данных для правила со значением, взятым из пользовательского интерфейса панели управления, где кто-то, скажем, клиент, может указать продолжительность окна.

Я пробовал много вариантов, в том числе приведенный ниже, но он не компилируется.

...   over window:time($SlidingWindowDuration) 

Гуглил часами, но документации по этому вопросу мало.

Любые подсказки в этом отношении будут очень полезны для меня.


person user3892842    schedule 30.07.2014    source источник


Ответы (1)


Длина скользящего окна: время не может быть установлена ​​динамически. (Я думаю, это так, потому что динамическая длина сделала бы невозможным вывод смещения истечения срока действия для автоматического удаления устаревших событий.)

Обратите внимание, что если эта длина может быть установлена ​​пользователем до запуска движка и остается постоянной после этого, вы можете вставить продолжительность в текст правила, скомпилировать на лету (только те правила, которые нужны последними). минутное редактирование) и выполнить.

Чтобы быть абсолютно динамичным, вам придется явно реализовать механизм "окна". Сделайте временную метку атрибутом события и задайте ее явно: тогда вы сможете основывать рассуждения на разнице временных меток, явно удалять старые события и вычислять среднее значение по всем оставшимся событиям, используя простое накопление CE.

person laune    schedule 31.07.2014