我对Esper完全陌生,所以如果以下问题听起来很愚蠢,请不要拍我。
我正在向一个esper实例发送POJO事件。这个POJOS有一些属性,如下:
MyEventPOJO {
final String sourceIP;
final String destIP;
final Calendar transmissionTime;
final List<WorkingDay> WorkingDays;
List<WorkingDay>
包含一个工作日列表,指示允许主机执行某些操作。 WorkingDay
中的每一个都有一个唯一的dayName
(请参阅下面的课程说明)。
一旦找到具有MyEventPOJO
的主机的活动,就会将事件sourceIP
发送到esper。该事件在软件的另一部分中创建。在该部分中,将查询主机的WorkingDays
数据库。此信息将放入List<WorkingDay>
,然后与transmissionTime
相关联。传输时间表示跟踪主机活动的时间(活动的日期和时间)。
相关结果应该是主持人在MyEventPOJO
指定的允许时间之外有效的所有List<WorkingDay>
WorkingDay看起来像这样:
public class WorkingDay {
final String dayName;
final Calendar startTimeOfDay;
final Calendar endTimeOfDay;
.
.
.
我想创建一个过滤掉事件的语句,其中包含以下内容:
MyEventPOJO.tramissionTime
与WorkingDay.dayName
MyEventPOJO.tramissionTime
一天中的时间超出了WorkingDay.startTimeOfDay
和WorkingDay.endTimeOfDay
编辑:语句应使用10分钟长度的time_batch窗口收集与上述表达式匹配的所有MyEventPOJO
。
我感谢您给我的任何建议。提前谢谢。
祝你周末愉快,希望我能在你的帮助下解决这个问题。
答案 0 :(得分:0)
我使用脚本从日历中获取日期名称。
expression string getCalendarDayName(ts) [
getCalendarDayName(ts);
function getCalendarDayName(ts) {
return new java.text.SimpleDateFormat("EEEE").format(ts.getTime());
}
]
select * from MyEventPOJO(
workingDays.allOf(v => dayName = getCalendarDayName(transmissionTime))
and
workingDays.allOf(v => transmissionTime.before(startTimeOfDay) or transmissionTime.after(endTimeOfDay))
)