Esper:选择List中所有对象的指定属性

时间:2017-03-17 13:23:46

标签: sql time calendar esper

我对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.tramissionTimeWorkingDay.dayName
  • 的日期名称相同
  • MyEventPOJO.tramissionTime一天中的时间超出了WorkingDay.startTimeOfDayWorkingDay.endTimeOfDay
  • 的范围

编辑:语句应使用10分钟长度的time_batch窗口收集与上述表达式匹配的所有MyEventPOJO

我感谢您给我的任何建议。提前谢谢。

祝你周末愉快,希望我能在你的帮助下解决这个问题。

1 个答案:

答案 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))
)