Search code examples
espernesper

How do I specify time when using timestamps from a file?


Is it possible in Esper to manage timestamp from an input. The file I use looks like this:

143 Sat Sep 12 14:43:05 CEST 2009
149 Sat Sep 12 14:43:06 CEST 2009
149 Sat Sep 12 14:43:09 CEST 2009
143 Sat Sep 12 14:43:10 CEST 2009
149 Sat Sep 12 14:43:12 CEST 2009
143 Sat Sep 12 14:43:15 CEST 2009
149 Sat Sep 12 14:43:15 CEST 2009
149 Sat Sep 12 14:43:18 CEST 2009
143 Sat Sep 12 14:43:20 CEST 2009
149 Sat Sep 12 14:43:21 CEST 2009

How do configure Esper so it is possible to use the

select * from Timer.win:time_batch(5 sec)

such that I get results like this:

143 Sat Sep 12 14:43:05 CEST 2009
149 Sat Sep 12 14:43:06 CEST 2009
149 Sat Sep 12 14:43:09 CEST 2009
143 Sat Sep 12 14:43:10 CEST 2009

EDIT:

config.getEngineDefaults().getThreading().setInternalTimerEnabled(false);

runtime.sendEvent(new CurrentTimeEvent(0));
engine.getEPAdministrator().createEPL("create context NineToFive start (0, 9, *, *, *) end (0, 17, *, *, *)");

Then I parse my dataset and send events like the answer below said:

long eventTime = userByDate.get(i).getSdf().getTime();

runtime.sendEvent(new CurrentTimeSpanEvent( eventTime ));
runtime.sendEvent(new Event());

Solution

  • Steps are, get an engine instance from EPServiceProviderManager that uses external timer:

    Configuration config = new Configuration();
    config.getEngineDefaults().getThreading().setInternalTimerEnabled(false);
    EPServiceProvider epService = EPServiceProviderManager.getDefaultProvider(config);
    

    After you have an engine instance, call this. This sets the start time to zero.

    epService.getEPRuntime().sendEvent(new CurrentTimeEvent(0));
    

    Then create your EPL statement.

    Then, for each line, parse the date, parse the event data, advance time, and send the event like this:

    long eventTime = parseDate(...);
    SomeEvent someEvent = parseEvent(...);
    epService.getEPRuntime().sendEvent(new CurrentTimeSpanEvent(eventTime));
    epService.getEPRuntime().sendEvent(someEvent);