/** * {@inheritDoc} */ @Override protected Collection<Future<Void>> processData(DefaultData defaultData) { if (defaultData instanceof InvocationSequenceData) { InvocationSequenceData invocation = (InvocationSequenceData) defaultData; extractDataFromInvocation(invocation); } return Collections.emptyList(); }
/** * Test that {@link InvocationExtractorDataProcessor} will extract all children of an * invocation. */ @Test public void testInvocationExtractor() { AbstractDataProcessor chainedProcessor = mock(AbstractDataProcessor.class); List<AbstractDataProcessor> chainedList = new ArrayList<>(); chainedList.add(chainedProcessor); InvocationExtractorDataProcessor invocationExtractorDataProcessor = new InvocationExtractorDataProcessor(chainedList); invocationExtractorDataProcessor.setStorageWriter(storageWriter); InvocationSequenceData invocationSequenceData = new InvocationSequenceData(); List<InvocationSequenceData> children = new ArrayList<>(); InvocationSequenceData child1 = new InvocationSequenceData(new Timestamp(new Date().getTime()), 10, 10, 10); TimerData timerData = new TimerData(); child1.setTimerData(timerData); InvocationSequenceData child2 = new InvocationSequenceData(new Timestamp(new Date().getTime()), 20, 20, 20); SqlStatementData sqlStatementData = new SqlStatementData(); child2.setSqlStatementData(sqlStatementData); children.add(child1); children.add(child2); invocationSequenceData.setNestedSequences(children); assertThat(invocationExtractorDataProcessor.canBeProcessed(invocationSequenceData), is(true)); invocationExtractorDataProcessor.process(invocationSequenceData); verify(chainedProcessor, times(1)).process(timerData); verify(chainedProcessor, times(1)).process(timerData); verify(chainedProcessor, times(0)).process(child1); verify(chainedProcessor, times(0)).process(child2); }
List<AbstractDataProcessor> chainedProcessorsForExtractor = new ArrayList<>(); chainedProcessorsForExtractor.addAll(normalProcessors); InvocationExtractorDataProcessor invocationExtractorDataProcessor = new InvocationExtractorDataProcessor(chainedProcessorsForExtractor); normalProcessors.add(invocationExtractorDataProcessor);
/** * Extract data from the invocation and return it to the storage writer to process it. * * @param invocation * {@link InvocationSequenceData} */ private void extractDataFromInvocation(InvocationSequenceData invocation) { if (null != invocation.getTimerData()) { passToChainedProcessors(invocation.getTimerData()); } if (null != invocation.getSqlStatementData()) { passToChainedProcessors(invocation.getSqlStatementData()); } if (null != invocation.getExceptionSensorDataObjects()) { for (ExceptionSensorData exceptionSensorData : invocation.getExceptionSensorDataObjects()) { if (exceptionSensorData.getExceptionEvent() == ExceptionEvent.CREATED) { passToChainedProcessors(exceptionSensorData); } } } for (InvocationSequenceData child : invocation.getNestedSequences()) { extractDataFromInvocation(child); } }
List<AbstractDataProcessor> chainedProcessorsForExtractor = new ArrayList<>(); chainedProcessorsForExtractor.addAll(normalProcessors); InvocationExtractorDataProcessor invocationExtractorDataProcessor = new InvocationExtractorDataProcessor(chainedProcessorsForExtractor); normalProcessors.add(invocationExtractorDataProcessor);