/** * {@inheritDoc} */ @Override public void firstAfterBody(long methodId, long sensorTypeId, Object object, Object[] parameters, Object result, boolean exception, RegisteredSensorConfig rsc) { timeStack.push(new Double(timer.getCurrentTime())); }
/** * {@inheritDoc} */ @Override public void beforeBody(long methodId, long sensorTypeId, Object object, Object[] parameters, RegisteredSensorConfig rsc) { timeStack.push(new Double(timer.getCurrentTime())); threadLast.set(Boolean.TRUE); }
/** * {@inheritDoc} */ @Override public void beforeBody(long methodId, long sensorTypeId, Object object, Object[] parameters, RegisteredSensorConfig rsc) { timeStack.push(new Double(timer.getCurrentTime())); threadLast.set(Boolean.TRUE); }
/** * {@inheritDoc} */ @Override public void firstAfterBody(long methodId, long sensorTypeId, Object object, Object[] parameters, Object result, boolean exception, RegisteredSensorConfig rsc) { timeStack.push(new Double(timer.getCurrentTime())); }
/** * {@inheritDoc} */ @Override public void firstAfterBody(long methodId, long sensorTypeId, Object object, Object[] parameters, Object result, boolean exception, RegisteredSensorConfig rsc) { if (skip(rsc)) { return; } InvocationSequenceData invocationSequenceData = threadLocalInvocationData.get(); if (null != invocationSequenceData) { if (methodId == invocationStartId.get().longValue()) { long count = invocationStartIdCount.get().longValue(); invocationStartIdCount.set(Long.valueOf(count - 1)); if (0 == (count - 1)) { timeStack.push(new Double(timer.getCurrentTime())); } } } }
/** * {@inheritDoc} */ @Override public void beforeBody(long methodId, long sensorTypeId, Object object, Object[] parameters, RegisteredSensorConfig rsc) { timeStack.push(new Double(timer.getCurrentTime())); if (enabled) { threadCpuTimeStack.push(Long.valueOf(threadMXBean.getCurrentThreadCpuTime())); } }
/** * {@inheritDoc} */ @Override public void beforeConstructor(long methodId, long sensorTypeId, Object[] parameters, RegisteredSensorConfig rsc) { timeStack.push(new Double(timer.getCurrentTime())); if (enabled) { threadCpuTimeStack.push(Long.valueOf(threadMXBean.getCurrentThreadCpuTime())); } }
/** * {@inheritDoc} */ @Override public void firstAfterBody(long methodId, long sensorTypeId, Object object, Object[] parameters, Object result, boolean exception, RegisteredSensorConfig rsc) { timeStack.push(new Double(timer.getCurrentTime())); if (enabled) { threadCpuTimeStack.push(Long.valueOf(threadMXBean.getCurrentThreadCpuTime())); } }
/** * {@inheritDoc} */ @Override public void afterConstructor(ICoreService coreService, long methodId, long sensorTypeId, Object object, Object[] parameters, RegisteredSensorConfig rsc) { timeStack.push(new Double(timer.getCurrentTime())); if (enabled) { threadCpuTimeStack.push(Long.valueOf(threadMXBean.getCurrentThreadCpuTime())); } // just call the second after body method directly secondAfterBody(coreService, methodId, sensorTypeId, object, parameters, null, false, rsc); }
/** * {@inheritDoc} */ @Override public void firstAfterBody(long methodId, long sensorTypeId, Object object, Object[] parameters, Object result, boolean exception, RegisteredSensorConfig rsc) { // no invocation marked -> skip if (!refMarker.isMarkerSet()) { return; } // remove mark from sub call refMarker.markEndCall(); if (refMarker.matchesFirst()) { // Get the timer and store it. timeStack.push(new Double(timer.getCurrentTime())); if (threadCPUTimeEnabled) { threadCpuTimeStack.push(Long.valueOf(threadMXBean.getCurrentThreadCpuTime())); } } }
@Test public void oneRecordThatIsNotHttp() { Double firstTimerValue = 1000.453d; Double secondTimerValue = 1323.675d; Long firstCpuTimerValue = 5000L; Long secondCpuTimerValue = 6872L; when(timer.getCurrentTime()).thenReturn(firstTimerValue).thenReturn(secondTimerValue); when(threadMXBean.getCurrentThreadCpuTime()).thenReturn(firstCpuTimerValue).thenReturn(secondCpuTimerValue); when(platformManager.getPlatformId()).thenReturn(platformId); Object[] parameters = new Object[] { servletRequest, servletResponse }; httpHook.beforeBody(methodId, sensorTypeId, servlet, parameters, registeredSensorConfig); httpHook.firstAfterBody(methodId, sensorTypeId, servlet, parameters, result, false, registeredSensorConfig); httpHook.secondAfterBody(coreService, methodId, sensorTypeId, servlet, parameters, result, false, registeredSensorConfig); // Data must not be pushed! verifyNoMoreInteractions(coreService); verifyZeroInteractions(result); }
@Test public void charting() { // set up data long platformId = 1L; long methodId = 3L; long sensorTypeId = 11L; Object object = mock(Object.class); Object[] parameters = new Object[2]; Object result = mock(Object.class); Double firstTimerValue = 1000.453d; Double secondTimerValue = 1323.675d; when(timer.getCurrentTime()).thenReturn(firstTimerValue).thenReturn(secondTimerValue); when(platformManager.getPlatformId()).thenReturn(platformId); when(registeredSensorConfig.getSettings()).thenReturn(Collections.<String, Object> singletonMap("charting", Boolean.TRUE)); timerHook.beforeBody(methodId, sensorTypeId, object, parameters, registeredSensorConfig); timerHook.firstAfterBody(methodId, sensorTypeId, object, parameters, result, false, registeredSensorConfig); timerHook.secondAfterBody(coreService, methodId, sensorTypeId, object, parameters, result, false, registeredSensorConfig); ArgumentCaptor<TimerData> captor = ArgumentCaptor.forClass(TimerData.class); verify(coreService).addDefaultData(captor.capture()); TimerData timerData = captor.getValue(); assertThat(timerData.isCharting(), is(true)); }
@Test public void propertyAccessException() { // set up data long platformId = 1L; long methodId = 3L; long sensorTypeId = 11L; Object object = mock(Object.class); Object[] parameters = new Object[2]; Object result = mock(Object.class); Double firstTimerValue = 1000.453d; Double secondTimerValue = 1323.675d; when(timer.getCurrentTime()).thenReturn(firstTimerValue).thenReturn(secondTimerValue); when(platformManager.getPlatformId()).thenReturn(platformId); when(rsc.isPropertyAccess()).thenReturn(true); invocationSequenceHook.beforeBody(methodId, sensorTypeId, object, parameters, rsc); invocationSequenceHook.firstAfterBody(methodId, sensorTypeId, object, parameters, result, true, rsc); invocationSequenceHook.secondAfterBody(coreService, methodId, sensorTypeId, object, parameters, result, true, rsc); verify(rsc, times(1)).isPropertyAccess(); verify(propertyAccessor, times(1)).getParameterContentData(rsc.getPropertyAccessorList(), object, parameters, result, true); }
@Test public void propertyAccessException() { // set up data long platformId = 1L; long methodId = 3L; long sensorTypeId = 11L; Object object = mock(Object.class); Object[] parameters = new Object[2]; Object result = mock(Object.class); Double firstTimerValue = 1000.453d; Double secondTimerValue = 1323.675d; when(timer.getCurrentTime()).thenReturn(firstTimerValue).thenReturn(secondTimerValue); when(platformManager.getPlatformId()).thenReturn(platformId); when(registeredSensorConfig.isPropertyAccess()).thenReturn(true); timerHook.beforeBody(methodId, sensorTypeId, object, parameters, registeredSensorConfig); timerHook.firstAfterBody(methodId, sensorTypeId, object, parameters, result, true, registeredSensorConfig); timerHook.secondAfterBody(coreService, methodId, sensorTypeId, object, parameters, result, true, registeredSensorConfig); verify(registeredSensorConfig, times(1)).isPropertyAccess(); verify(propertyAccessor, times(1)).getParameterContentData(registeredSensorConfig.getPropertyAccessorList(), object, parameters, result, true); }
@Test public void propertyAccess() { // set up data long platformId = 1L; long methodId = 3L; long sensorTypeId = 11L; Object object = mock(Object.class); Object[] parameters = new Object[2]; Object result = mock(Object.class); Double firstTimerValue = 1000.453d; Double secondTimerValue = 1323.675d; when(timer.getCurrentTime()).thenReturn(firstTimerValue).thenReturn(secondTimerValue); when(platformManager.getPlatformId()).thenReturn(platformId); when(rsc.isPropertyAccess()).thenReturn(true); invocationSequenceHook.beforeBody(methodId, sensorTypeId, object, parameters, rsc); invocationSequenceHook.firstAfterBody(methodId, sensorTypeId, object, parameters, result, false, rsc); invocationSequenceHook.secondAfterBody(coreService, methodId, sensorTypeId, object, parameters, result, false, rsc); verify(rsc, times(1)).isPropertyAccess(); verify(propertyAccessor, times(1)).getParameterContentData(rsc.getPropertyAccessorList(), object, parameters, result, false); }
@Test public void oneRecordThatIsHttpWithoutReadingData() { Double firstTimerValue = 1000.453d; Double secondTimerValue = 1323.675d; Long firstCpuTimerValue = 5000L; Long secondCpuTimerValue = 6872L; HttpTimerData data = new HttpTimerData(null, platformId, sensorTypeId, methodId); when(timer.getCurrentTime()).thenReturn(firstTimerValue).thenReturn(secondTimerValue); when(threadMXBean.getCurrentThreadCpuTime()).thenReturn(firstCpuTimerValue).thenReturn(secondCpuTimerValue); when(platformManager.getPlatformId()).thenReturn(platformId); Object[] parameters = new Object[] { httpServletRequest, httpServletResponse }; httpHook.beforeBody(methodId, sensorTypeId, servlet, parameters, registeredSensorConfig); httpHook.firstAfterBody(methodId, sensorTypeId, servlet, parameters, result, false, registeredSensorConfig); httpHook.secondAfterBody(coreService, methodId, sensorTypeId, servlet, parameters, result, false, registeredSensorConfig); verify(coreService).addDefaultData(argThat(new HttpTimerDataVerifier(data))); verifyZeroInteractions(result); }
@Test public void oneRecordThatIsHttpCharting() { Double firstTimerValue = 1000.453d; Double secondTimerValue = 1323.675d; Long firstCpuTimerValue = 5000L; Long secondCpuTimerValue = 6872L; HttpTimerData data = new HttpTimerData(null, platformId, sensorTypeId, methodId); data.setCharting(true); when(timer.getCurrentTime()).thenReturn(firstTimerValue).thenReturn(secondTimerValue); when(threadMXBean.getCurrentThreadCpuTime()).thenReturn(firstCpuTimerValue).thenReturn(secondCpuTimerValue); when(platformManager.getPlatformId()).thenReturn(platformId); when(registeredSensorConfig.getSettings()).thenReturn(Collections.<String, Object> singletonMap("charting", Boolean.TRUE)); Object[] parameters = new Object[] { httpServletRequest, httpServletResponse }; httpHook.beforeBody(methodId, sensorTypeId, servlet, parameters, registeredSensorConfig); httpHook.firstAfterBody(methodId, sensorTypeId, servlet, parameters, result, false, registeredSensorConfig); httpHook.secondAfterBody(coreService, methodId, sensorTypeId, servlet, parameters, result, false, registeredSensorConfig); verify(coreService).addDefaultData(Matchers.argThat(new HttpTimerDataVerifier(data))); verifyZeroInteractions(result); }
@Test public void propertyAccess() { // set up data long platformId = 1L; long methodId = 3L; long sensorTypeId = 11L; Object object = mock(Object.class); Object[] parameters = new Object[2]; Object result = mock(Object.class); Double firstTimerValue = 1000.453d; Double secondTimerValue = 1323.675d; ParameterContentData parameterContentData = Mockito.mock(ParameterContentData.class); when(timer.getCurrentTime()).thenReturn(firstTimerValue).thenReturn(secondTimerValue); when(platformManager.getPlatformId()).thenReturn(platformId); when(registeredSensorConfig.isPropertyAccess()).thenReturn(true); when(propertyAccessor.getParameterContentData(registeredSensorConfig.getPropertyAccessorList(), object, parameters, result, false)).thenReturn(Collections.singletonList(parameterContentData)); timerHook.beforeBody(methodId, sensorTypeId, object, parameters, registeredSensorConfig); timerHook.firstAfterBody(methodId, sensorTypeId, object, parameters, result, false, registeredSensorConfig); timerHook.secondAfterBody(coreService, methodId, sensorTypeId, object, parameters, result, false, registeredSensorConfig); verify(registeredSensorConfig, times(1)).isPropertyAccess(); verify(propertyAccessor, times(1)).getParameterContentData(registeredSensorConfig.getPropertyAccessorList(), object, parameters, result, false); ArgumentCaptor<TimerData> captor = ArgumentCaptor.forClass(TimerData.class); verify(coreService).addDefaultData(captor.capture()); TimerData timerData = captor.getValue(); assertThat(timerData.getParameterContentData(), hasSize(1)); assertThat(timerData.getParameterContentData(), hasItem(parameterContentData)); }
when(timer.getCurrentTime()).thenReturn(firstTimerValue, secondTimerValue); when(rsc.getMethodSensors()).thenReturn(Collections.singletonList(methodSensor)); when(methodSensor.getSensorTypeConfig()).thenReturn(methodSensorTypeConfig); invocationSequenceHook.secondAfterBody(coreService, methodId, sensorTypeId, object, parameters, result, false, rsc); verify(timer, times(2)).getCurrentTime(); verifyZeroInteractions(realCoreService);
double secondTimerValue = 1323.0d; double thirdTimerValue = 1881.0d; when(timer.getCurrentTime()).thenReturn(firstTimerValue, secondTimerValue, thirdTimerValue); when(rsc.getMethodSensors()).thenReturn(Collections.<IMethodSensor> emptyList()); invocationSequenceHook.secondAfterBody(coreService, methodId1, sensorTypeId, object, parameters, result, false, rsc); verify(timer, times(3)).getCurrentTime(); ArgumentCaptor<InvocationSequenceData> captor = ArgumentCaptor.forClass(InvocationSequenceData.class); verify(coreService, times(1)).addDefaultData(captor.capture());