Created
April 2, 2015 14:18
-
-
Save MattForshaw/7b1b81283b21bc80e86d to your computer and use it in GitHub Desktop.
Example of adding an additional subscriber to esper-demo-nuclear
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package com.cor.cep.handler; | |
| import org.slf4j.Logger; | |
| import org.slf4j.LoggerFactory; | |
| import org.springframework.beans.factory.InitializingBean; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.beans.factory.annotation.Qualifier; | |
| import org.springframework.context.annotation.Scope; | |
| import org.springframework.stereotype.Component; | |
| import com.cor.cep.event.TemperatureEvent; | |
| import com.cor.cep.subscriber.StatementSubscriber; | |
| import com.espertech.esper.client.Configuration; | |
| import com.espertech.esper.client.EPServiceProvider; | |
| import com.espertech.esper.client.EPServiceProviderManager; | |
| import com.espertech.esper.client.EPStatement; | |
| /** | |
| * This class handles incoming Temperature Events. It processes them through the EPService, to which | |
| * it has attached the 3 queries. | |
| */ | |
| @Component | |
| @Scope(value = "singleton") | |
| public class TemperatureEventHandler implements InitializingBean{ | |
| /** Logger */ | |
| private static Logger LOG = LoggerFactory.getLogger(TemperatureEventHandler.class); | |
| /** Esper service */ | |
| private EPServiceProvider epService; | |
| private EPStatement criticalEventStatement; | |
| private EPStatement warningEventStatement; | |
| private EPStatement monitorEventStatement; | |
| private EPStatement foobarEventStatement; | |
| @Autowired | |
| @Qualifier("criticalEventSubscriber") | |
| private StatementSubscriber criticalEventSubscriber; | |
| @Autowired | |
| @Qualifier("warningEventSubscriber") | |
| private StatementSubscriber warningEventSubscriber; | |
| @Autowired | |
| @Qualifier("monitorEventSubscriber") | |
| private StatementSubscriber monitorEventSubscriber; | |
| @Autowired | |
| @Qualifier("foobarEventSubscriber") | |
| private StatementSubscriber foobarEventSubscriber; | |
| /** | |
| * Configure Esper Statement(s). | |
| */ | |
| public void initService() { | |
| LOG.debug("Initializing Servcie .."); | |
| Configuration config = new Configuration(); | |
| config.addEventTypeAutoName("com.cor.cep.event"); | |
| epService = EPServiceProviderManager.getDefaultProvider(config); | |
| createCriticalTemperatureCheckExpression(); | |
| createWarningTemperatureCheckExpression(); | |
| createTemperatureMonitorExpression(); | |
| createFoobarTemperatureCheckExpression(); | |
| } | |
| /** | |
| * EPL to check for a sudden critical rise across 4 events, where the last event is 1.5x greater | |
| * than the first event. This is checking for a sudden, sustained escalating rise in the | |
| * temperature | |
| */ | |
| private void createCriticalTemperatureCheckExpression() { | |
| LOG.debug("create Critical Temperature Check Expression"); | |
| criticalEventStatement = epService.getEPAdministrator().createEPL(criticalEventSubscriber.getStatement()); | |
| criticalEventStatement.setSubscriber(criticalEventSubscriber); | |
| } | |
| /** | |
| * EPL to check for 2 consecutive Temperature events over the threshold - if matched, will alert | |
| * listener. | |
| */ | |
| private void createWarningTemperatureCheckExpression() { | |
| LOG.debug("create Warning Temperature Check Expression"); | |
| warningEventStatement = epService.getEPAdministrator().createEPL(warningEventSubscriber.getStatement()); | |
| warningEventStatement.setSubscriber(warningEventSubscriber); | |
| } | |
| /** | |
| * EPL to monitor the average temperature every 10 seconds. Will call listener on every event. | |
| */ | |
| private void createTemperatureMonitorExpression() { | |
| LOG.debug("create Timed Average Monitor"); | |
| monitorEventStatement = epService.getEPAdministrator().createEPL(monitorEventSubscriber.getStatement()); | |
| monitorEventStatement.setSubscriber(monitorEventSubscriber); | |
| } | |
| /** | |
| * EPL to check for foobar - if matched, will alert | |
| * listener. | |
| */ | |
| private void createFoobarTemperatureCheckExpression() { | |
| LOG.debug("create Foobar Temperature Check Expression"); | |
| foobarEventStatement = epService.getEPAdministrator().createEPL(foobarEventSubscriber.getStatement()); | |
| foobarEventStatement.setSubscriber(foobarEventSubscriber); | |
| } | |
| /** | |
| * Handle the incoming TemperatureEvent. | |
| */ | |
| public void handle(TemperatureEvent event) { | |
| LOG.debug(event.toString()); | |
| epService.getEPRuntime().sendEvent(event); | |
| } | |
| @Override | |
| public void afterPropertiesSet() { | |
| LOG.debug("Configuring.."); | |
| initService(); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment