2016-08-12 3 views
0

У меня вопрос об использовании предложения вывода в сочетании с именованным окном, шаблонами и вставкой в ​​оператор. Моя цель - обнаружить отсутствие события, сохранить его в именованном окне, и когда события начнут появляться снова, выберите и удалите строку и используйте ее как индикатор «онлайн» (см. Esper - detect event after absence) Я как-то хочу быть в состоянии ограничить скорость событий, когда в течение короткого периода времени происходит несколько автономных онлайн-событий (отключить ложные срабатывания). Я думал, что предложение вывода может помочь здесь, но когда я использую это в вставке в оператор, никакие события не хранятся в именованном окне. Это правильный подход или есть другой способ ограничить события в этом сценарии?Предложение выхода esper с именованными окнами

Это мой код в Esper EPL онлайн:

create schema MonitorStats(id string, time string, host string, alert string); 

create window MonitorWindow.win:keepall() as select id, alert, time, host from MonitorStats; 

insert into MonitorWindow select a.id as id, 'offline' as alert, a.time as time, a.host as host from pattern 
[every a=MonitorStats(id='1234') -> (timer:interval(25 sec) and not MonitorStats(id=a.id))]; 

on pattern[every b=MonitorStats(id='1234') -> (timer:interval(25 sec) and MonitorStats(id=b.id))] 
select and delete b.id as id, 'online' as alert, b.time as time, b.host as host from MonitorWindow as win 
where win.id = b.id; 

ответ

0

Вы можете вставить выходные события в другой поток и использовать «выход первого каждый».

insert into DetectedStream select ....; 
select * from DetectedStream output first every 10 seconds; 
+0

Спасибо за предложение. Я добавил свои онлайн-заявления EPL. В вашем примере я все еще получаю несколько «онлайн» выходов. Есть ли способ упростить приведенные выше утверждения и использовать первое предложение вывода для событий «офлайн» и «онлайн»? – user5526698

+0

по шаблону [...] вставить в DetectedStream select and delete ....; выберите * из файла DetectedStream сначала каждые 10 секунд; (послушайте последнее заявление) – goodie

+0

Спасибо, но с таким подходом я получаю первое «офлайн-событие» из DetectedStream, но не первое «офлайн» - «онлайн» пару событий? Как мне это достичь? – user5526698