/** * {@inheritDoc} */ @Override protected void processData(DefaultData defaultData, EntityManager entityManager) { IPointBuilder<DefaultData> defaultDataPointBuilder = builderMap.get(defaultData.getClass()); Collection<Builder> builders = defaultDataPointBuilder.createBuilders(defaultData); for (Builder builder : builders) { influxDbDao.insert(builder.build()); } }
/** * Default constructor. * * @param influxDbDao * {@link InfluxDBDao} * @param builders * All available influx point builders. */ @Autowired public InfluxProcessor(InfluxDBDao influxDbDao, List<IPointBuilder<DefaultData>> builders) { this.influxDbDao = influxDbDao; if (CollectionUtils.isEmpty(builders)) { builderMap = Collections.emptyMap(); } else { builderMap = new HashMap<>(); for (IPointBuilder<DefaultData> builder : builders) { for (Class<? extends DefaultData> clazz : builder.getDataClasses()) { builderMap.put(clazz, builder); } } } }
@Test public void processed() { InvocationSequenceData invocationData = new InvocationSequenceData(); when(influxDBDao.isConnected()).thenReturn(true); doReturn(Collections.singleton(InvocationSequenceData.class)).when(pointBuilder).getDataClasses(); when(pointBuilder.createBuilders(invocationData)).thenReturn(Collections.singleton(builder)); processor = new InfluxProcessor(influxDBDao, Collections.<IPointBuilder<DefaultData>> singletonList(pointBuilder)); processor.process(invocationData, entityManager); verify(influxDBDao).isConnected(); ArgumentCaptor<Point> pointCaptor = ArgumentCaptor.forClass(Point.class); verify(influxDBDao).insert(pointCaptor.capture()); assertThat(pointCaptor.getValue().lineProtocol(), is(builder.build().lineProtocol())); verifyZeroInteractions(entityManager); }
@Test public void jmxNumeric() { JmxSensorValueData data = new JmxSensorValueData(); data.setValue("1"); when(influxDBDao.isConnected()).thenReturn(true); doReturn(Collections.singleton(JmxSensorValueData.class)).when(pointBuilder).getDataClasses(); when(pointBuilder.createBuilders(data)).thenReturn(Collections.singleton(builder)); processor = new InfluxProcessor(influxDBDao, Collections.<IPointBuilder<DefaultData>> singletonList(pointBuilder)); processor.process(data, entityManager); verify(influxDBDao).isConnected(); ArgumentCaptor<Point> pointCaptor = ArgumentCaptor.forClass(Point.class); verify(influxDBDao).insert(pointCaptor.capture()); assertThat(pointCaptor.getValue().lineProtocol(), is(builder.build().lineProtocol())); verifyZeroInteractions(entityManager); }
@Test public void timerCharting() { TimerData data = new TimerData(); data.setCharting(true); when(influxDBDao.isConnected()).thenReturn(true); doReturn(Collections.singleton(TimerData.class)).when(pointBuilder).getDataClasses(); when(pointBuilder.createBuilders(data)).thenReturn(Collections.singleton(builder)); processor = new InfluxProcessor(influxDBDao, Collections.<IPointBuilder<DefaultData>> singletonList(pointBuilder)); processor.process(data, entityManager); verify(influxDBDao).isConnected(); ArgumentCaptor<Point> pointCaptor = ArgumentCaptor.forClass(Point.class); verify(influxDBDao).insert(pointCaptor.capture()); assertThat(pointCaptor.getValue().lineProtocol(), is(builder.build().lineProtocol())); verifyZeroInteractions(entityManager); }
@Test public void builderForClassDoesNotExist() { InvocationSequenceData invocationData = new InvocationSequenceData(); when(influxDBDao.isConnected()).thenReturn(true); doReturn(Collections.singleton(HttpTimerData.class)).when(pointBuilder).getDataClasses(); processor = new InfluxProcessor(influxDBDao, Collections.<IPointBuilder<DefaultData>> singletonList(pointBuilder)); processor.process(invocationData, entityManager); verify(influxDBDao).isConnected(); verify(pointBuilder).getDataClasses(); verifyNoMoreInteractions(influxDBDao, pointBuilder); verifyZeroInteractions(entityManager); }
@Test public void timerNotCharting() { TimerData data = new TimerData(); data.setCharting(false); when(influxDBDao.isConnected()).thenReturn(true); doReturn(Collections.singleton(TimerData.class)).when(pointBuilder).getDataClasses(); processor = new InfluxProcessor(influxDBDao, Collections.<IPointBuilder<DefaultData>> singletonList(pointBuilder)); processor.process(data, entityManager); verify(influxDBDao).isConnected(); verify(pointBuilder).getDataClasses(); verifyNoMoreInteractions(influxDBDao, pointBuilder); verifyZeroInteractions(entityManager); }
@Test public void jmxNotNumeric() { JmxSensorValueData data = new JmxSensorValueData(); data.setValue("string value"); when(influxDBDao.isConnected()).thenReturn(true); doReturn(Collections.singleton(JmxSensorValueData.class)).when(pointBuilder).getDataClasses(); processor = new InfluxProcessor(influxDBDao, Collections.<IPointBuilder<DefaultData>> singletonList(pointBuilder)); processor.process(data, entityManager); verify(influxDBDao).isConnected(); verify(pointBuilder).getDataClasses(); verifyNoMoreInteractions(influxDBDao, pointBuilder); verifyZeroInteractions(entityManager); }
@Test public void influxOffline() { InvocationSequenceData invocationData = new InvocationSequenceData(); when(influxDBDao.isConnected()).thenReturn(false); doReturn(Collections.singleton(InvocationSequenceData.class)).when(pointBuilder).getDataClasses(); processor = new InfluxProcessor(influxDBDao, Collections.<IPointBuilder<DefaultData>> singletonList(pointBuilder)); processor.process(invocationData, entityManager); verify(influxDBDao).isConnected(); verifyNoMoreInteractions(influxDBDao); verifyZeroInteractions(entityManager); }