AnalyzerModule.java 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package cz.senslog.analyzer.analysis;
  2. import cz.senslog.analyzer.analysis.module.FilterHandler;
  3. import cz.senslog.analyzer.analysis.module.HandlersModule;
  4. import cz.senslog.analyzer.analysis.module.ThresholdHandler;
  5. import cz.senslog.analyzer.core.EventBusModule;
  6. import cz.senslog.analyzer.core.api.BlockingHandler;
  7. import cz.senslog.analyzer.core.EventBus;
  8. import cz.senslog.analyzer.core.api.HandlerInvoker;
  9. import cz.senslog.analyzer.domain.DoubleStatistics;
  10. import cz.senslog.analyzer.domain.Observation;
  11. import cz.senslog.analyzer.persistence.repository.StatisticsRepository;
  12. import dagger.Module;
  13. import dagger.Provides;
  14. import org.apache.logging.log4j.LogManager;
  15. import org.apache.logging.log4j.Logger;
  16. import javax.inject.Named;
  17. import java.util.List;
  18. import static cz.senslog.analyzer.core.api.HandlerInvoker.cancelInvoker;
  19. @Module(includes = {
  20. HandlersModule.class,
  21. EventBusModule.class
  22. })
  23. public class AnalyzerModule {
  24. private static final Logger logger = LogManager.getLogger(AnalyzerModule.class);
  25. @Provides @Named("statisticsAnalyzer")
  26. Analyzer provideSimpleAnalyzer (
  27. @Named("sensorFilterHandler") FilterHandler<Observation> sensorFilterHandler,
  28. @Named("sensorThresholdHandler") ThresholdHandler<Observation> sensorThresholdHandler,
  29. @Named("aggregationCollectorHandler") BlockingHandler<Observation, DoubleStatistics> aggregateCollectorHandler,
  30. @Named("groupThresholdHandler") ThresholdHandler<DoubleStatistics> groupThresholdHandler,
  31. EventBus eventBus
  32. ) {
  33. // filter & group mapping ===>> check sensor value ====>> aggregate by groups ====>> check group statistics
  34. HandlerInvoker<DoubleStatistics> groupThreshold = HandlerInvoker.create()
  35. .handler(groupThresholdHandler).nextHandlerInvoker(cancelInvoker())
  36. .eventBus(eventBus).build();
  37. HandlerInvoker<Observation> aggregateCollector = HandlerInvoker.create()
  38. .blockingHandler(aggregateCollectorHandler, eventBus::save)
  39. .nextHandlerInvoker(groupThreshold)
  40. .eventBus(eventBus).build();
  41. HandlerInvoker<Observation> sensorThreshold = HandlerInvoker.create()
  42. .handler(sensorThresholdHandler).nextHandlerInvoker(aggregateCollector)
  43. .eventBus(eventBus).build();
  44. HandlerInvoker<Observation> sensorFilter = HandlerInvoker.create()
  45. .handler(sensorFilterHandler).nextHandlerInvoker(sensorThreshold)
  46. .eventBus(eventBus).build();
  47. return new ObservationAnalyzer(sensorFilter);
  48. }
  49. }