/** * {@inheritDoc} */ @Override public TracerLogger getTraceLogger(Class<?> clazz) { return new Slf4jTracerLogger(LoggerFactory.getLogger(clazz)); }
/** * Handles the {@link ClientRequestAdapter}. This method should be called when new client * request is created. * * @param <C> * type of carrier adapter is providing * @param requestAdapter * {@link ClientRequestAdapter} providing necessary information. * @return Created span */ public <C> SpanImpl handleAsyncRequest(AsyncClientRequestAdapter<C> requestAdapter) { SpanBuilderImpl builder = handleRequestInternal(requestAdapter); // nothing to do if builder was not created if (null == builder) { return null; } // just build the span and store it for later start SpanImpl span = builder.build(); SpanStore spanStore = new SpanStore(); spanStore.storeSpan(span); requestAdapter.getSpanStoreAdapter().setSpanStore(spanStore); // inject here as the context is created when span is started tracer.inject(span.context(), requestAdapter.getFormat(), requestAdapter.getCarrier()); return span; }
/** * {@inheritDoc} */ @Override public void beforeBody(long methodId, long sensorTypeId, Object object, Object[] parameters, RegisteredSensorConfig rsc) { if (!REF_MARKER.isMarkerSet()) { // get requestAdapter and handle ServerRequestAdapter<?> adapter = serverAdapterProvider.getServerRequestAdapter(object, parameters, rsc); SpanImpl span = serverInterceptor.handleRequest(adapter); if (null != span) { spanStack.set(span); if (LOG.isDebugEnabled()) { LOG.debug("Remote server hook before body span " + span); } } } REF_MARKER.markCall(); }
@Test public void propagationNull() { when(requestAdapter.startClientSpan()).thenReturn(true); when(requestAdapter.getPropagationType()).thenReturn(null); when(requestAdapter.getReferenceType()).thenReturn(References.CHILD_OF); SpanImpl result = interceptor.handleRequest(requestAdapter); assertThat(result, is(span)); verify(tracer).buildSpan(null, References.CHILD_OF, true); verify(tracer).inject(context, Format.Builtin.TEXT_MAP, carrier); verify(spanBuilder).doNotReport(); verify(spanBuilder).withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_CLIENT); verify(spanBuilder).start(); verify(span).context(); verifyNoMoreInteractions(tracer, spanBuilder, span); verifyZeroInteractions(context); } }
@Test public void spanNull() throws Exception { // ids long platformId = 1l; long methodId = 7l; long sensorId = 13l; // platform when(platformManager.getPlatformId()).thenReturn(platformId); // interceptor Object[] parameters = new String[] { "blah", "bla" }; doReturn(requestAdapter).when(adapterProvider).getClientRequestAdapter(object, parameters, rsc); doReturn(responseAdapter).when(adapterProvider).getClientResponseAdapter(object, parameters, result, false, rsc); when(clientInterceptor.handleRequest(requestAdapter)).thenReturn(null); // execute calls hook.beforeBody(methodId, sensorId, object, parameters, rsc); hook.firstAfterBody(methodId, sensorId, object, parameters, result, false, rsc); hook.secondAfterBody(coreService, methodId, sensorId, object, parameters, result, false, rsc); // verify timer, interceptor and adapters verify(clientInterceptor).handleRequest(requestAdapter); verify(adapterProvider).getClientRequestAdapter(object, parameters, rsc); verifyNoMoreInteractions(adapterProvider, clientInterceptor, coreService); verifyZeroInteractions(coreService); }
@Test public void spanNull() throws Exception { // ids long platformId = 1l; long methodId = 7l; long sensorId = 13l; // platform when(platformManager.getPlatformId()).thenReturn(platformId); // interceptor Object[] parameters = new String[] { "blah", "bla" }; doReturn(requestAdapter).when(adapterProvider).getServerRequestAdapter(object, parameters, rsc); doReturn(responseAdapter).when(adapterProvider).getServerResponseAdapter(object, parameters, result, false, rsc); when(serverInterceptor.handleRequest(requestAdapter)).thenReturn(null); // execute calls hook.beforeBody(methodId, sensorId, object, parameters, rsc); hook.firstAfterBody(methodId, sensorId, object, parameters, result, false, rsc); hook.secondAfterBody(coreService, methodId, sensorId, object, parameters, result, false, rsc); // verify timer, interceptor and adapters verify(serverInterceptor).handleRequest(requestAdapter); verify(adapterProvider).getServerRequestAdapter(object, parameters, rsc); verifyNoMoreInteractions(adapterProvider, serverInterceptor, coreService); verifyZeroInteractions(coreService); }
/** * Handles the {@link ClientRequestAdapter}. This method should be called when new client * request is created. * * @param <C> * type of carrier adapter is providing * @param requestAdapter * {@link ClientRequestAdapter} providing necessary information. * @return Created span */ public <C> SpanImpl handleRequest(ClientRequestAdapter<C> requestAdapter) { SpanBuilderImpl builder = handleRequestInternal(requestAdapter); // nothing to do if builder was not created if (null == builder) { return null; } // set no reporting as we will do it ourselves in case on sync requests builder.doNotReport(); // start SpanImpl span = builder.start(); // inject here as the context is created when span is started tracer.inject(span.context(), requestAdapter.getFormat(), requestAdapter.getCarrier()); return span; }
@Test public void tagsNull() { when(responseAdapter.getTags()).thenReturn(null); interceptor.handleResponse(span, responseAdapter); verify(span).finish(); verifyNoMoreInteractions(span); verifyZeroInteractions(tracer); }
@Test public void tagsNull() { when(responseAdapter.getTags()).thenReturn(null); interceptor.handleResponse(span, responseAdapter); verify(span).finish(); verifyNoMoreInteractions(span); verifyZeroInteractions(tracer); }
/** * {@inheritDoc} */ @Override public void beforeBody(long methodId, long sensorTypeId, Object object, Object[] parameters, RegisteredSensorConfig rsc) { if (!REF_MARKER.isMarkerSet()) { // get requestAdapter and handle AsyncClientRequestAdapter<?> adapter = asyncClientAdapterProvider.getAsyncClientRequestAdapter(object, parameters, rsc); if (null != adapter) { SpanImpl span = clientInterceptor.handleAsyncRequest(adapter); if (null != span) { span.setTag(ExtraTags.INSPECTT_METHOD_ID, methodId); span.setTag(ExtraTags.INSPECTT_SENSOR_ID, sensorTypeId); asyncSpanContextListener.asyncSpanContextCreated(span.context()); if (LOG.isDebugEnabled()) { LOG.debug("Remote async client hook before body span " + span); } } } } REF_MARKER.markCall(); }
/** * {@inheritDoc} */ @Override public void beforeBody(long methodId, long sensorTypeId, Object object, Object[] parameters, RegisteredSensorConfig rsc) { if (!REF_MARKER.isMarkerSet()) { // get requestAdapter and handle ClientRequestAdapter<?> adapter = clientAdapterProvider.getClientRequestAdapter(object, parameters, rsc); if (null != adapter) { SpanImpl span = clientInterceptor.handleRequest(adapter); if (null != span) { spanStack.set(span); if (LOG.isDebugEnabled()) { LOG.debug("Remote client hook before body span " + span); } } } } REF_MARKER.markCall(); }
@Test public void spanShouldNotStart() { when(requestAdapter.startClientSpan()).thenReturn(false); SpanImpl result = interceptor.handleRequest(requestAdapter); assertThat(result, is(nullValue())); }
@Test public void spanShouldNotStart() { when(requestAdapter.startClientSpan()).thenReturn(false); SpanImpl result = interceptor.handleAsyncRequest(requestAdapter); assertThat(result, is(nullValue())); verify(requestAdapter).startClientSpan(); verifyNoMoreInteractions(requestAdapter); verifyZeroInteractions(tracer); }
@Test public void spanNull() throws Exception { // ids long methodId = 7l; long sensorId = 13l; // interceptor Object[] parameters = new String[] { "blah", "bla" }; doReturn(requestAdapter).when(adapterProvider).getAsyncClientRequestAdapter(object, parameters, rsc); when(clientInterceptor.handleAsyncRequest(requestAdapter)).thenReturn(null); // execute calls hook.beforeBody(methodId, sensorId, object, parameters, rsc); hook.firstAfterBody(methodId, sensorId, object, parameters, result, false, rsc); hook.secondAfterBody(coreService, methodId, sensorId, object, parameters, result, false, rsc); // verify timer, interceptor and adapters verify(clientInterceptor).handleAsyncRequest(requestAdapter); verify(adapterProvider).getAsyncClientRequestAdapter(object, parameters, rsc); verifyNoMoreInteractions(adapterProvider, clientInterceptor); verifyZeroInteractions(coreService, asyncContextListener); }
@Test public void noRequestHandled() { SpanImpl result = interceptor.handleResponse(null, responseAdapter); assertThat(result, is(nullValue())); }
@Test public void noRequestHandled() { SpanImpl result = interceptor.handleResponse(null, responseAdapter); assertThat(result, is(nullValue())); verifyZeroInteractions(tracer, span); }
@Test public void happyPath() throws Exception { long spanId = 13L; long platformId = 17L; SpanImpl span = mock(SpanImpl.class); SpanContextImpl context = mock(SpanContextImpl.class); when(context.getId()).thenReturn(spanId); when(span.context()).thenReturn(context); when(platformManager.getPlatformId()).thenReturn(platformId); reporter.report(span); ArgumentCaptor<AbstractSpan> captor = ArgumentCaptor.forClass(AbstractSpan.class); verify(coreService).addDefaultData(captor.capture()); assertThat(captor.getValue().getPlatformIdent(), is(platformId)); assertThat(captor.getValue().getSensorTypeIdent(), is(0L)); assertThat(captor.getValue().getMethodIdent(), is(0L)); } }
@Test public void tagsNull() { when(requestAdapter.startClientSpan()).thenReturn(true); when(requestAdapter.getTags()).thenReturn(null); when(requestAdapter.getPropagationType()).thenReturn(PropagationType.HTTP); when(requestAdapter.getReferenceType()).thenReturn(References.CHILD_OF); SpanImpl result = interceptor.handleRequest(requestAdapter); assertThat(result, is(span)); verify(tracer).buildSpan(null, References.CHILD_OF, true); verify(tracer).inject(context, Format.Builtin.TEXT_MAP, carrier); verify(spanBuilder).doNotReport(); verify(spanBuilder).withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_CLIENT); verify(spanBuilder).withTag(ExtraTags.PROPAGATION_TYPE, PropagationType.HTTP.toString()); verify(spanBuilder).start(); verify(span).context(); verifyNoMoreInteractions(tracer, spanBuilder, span); verifyZeroInteractions(context); }
@Test public void happyPath() { when(responseAdapter.getTags()).thenReturn(Collections.<String, String> singletonMap(Tags.HTTP_STATUS.getKey(), "200")); SpanImpl result = interceptor.handleResponse(span, responseAdapter); assertThat(result, is(span)); verify(span).setTag(Tags.HTTP_STATUS.getKey(), "200"); verify(span).finish(); verifyNoMoreInteractions(span); verifyZeroInteractions(tracer); }
@Test public void happyPath() { when(responseAdapter.getTags()).thenReturn(Collections.<String, String> singletonMap(Tags.HTTP_STATUS.getKey(), "200")); SpanImpl result = interceptor.handleResponse(span, responseAdapter); assertThat(result, is(span)); verify(span).setTag(Tags.HTTP_STATUS.getKey(), "200"); verify(span).finish(); verifyNoMoreInteractions(span); verifyZeroInteractions(tracer); }