@Override protected void doHandleResponseAndErrorTagging( @NotNull Span span, @Nullable REQ request, @Nullable RES response, @Nullable Throwable error, @NotNull HttpTagAndSpanNamingAdapter<REQ, RES> adapter ) { putTagIfValueIsNotBlank(span, KnownOpenTracingTags.HTTP_STATUS, adapter.getResponseHttpStatus(response)); if (error != null || StringUtils.isNotBlank(adapter.getErrorResponseTagValue(response))) { // OpenTracing doesn't expect you to pass messages with the error tag, just error=true. // So we don't need to do anything with the given error Throwable or returned // getErrorResponseTagValue(), other than have them trigger adding the error=true tag. span.putTag(KnownOpenTracingTags.ERROR, "true"); } } }
@Override protected void doHandleResponseAndErrorTagging( @NotNull Span span, @Nullable REQ request, @Nullable RES response, @Nullable Throwable error, @NotNull HttpTagAndSpanNamingAdapter<REQ, RES> adapter ) { // Now that we have both request and response, we'll re-try to get the route. putTagIfValueIsNotBlank(span, KnownZipkinTags.HTTP_ROUTE, adapter.getRequestUriPathTemplate(request, response)); putTagIfValueIsNotBlank(span, KnownZipkinTags.HTTP_STATUS_CODE, adapter.getResponseHttpStatus(response)); // For error tagging, we'll defer to the error Throwable if it's not null. if (error != null) { String message = error.getMessage(); if (message == null) { message = error.getClass().getSimpleName(); } addErrorTagToSpan(span, message); } else { // The error Throwable was null, so we'll see if the adapter thinks this is an error response. String errorTagValue = adapter.getErrorResponseTagValue(response); if (StringUtils.isNotBlank(errorTagValue)) { addErrorTagToSpan(span, errorTagValue); } } }
@DataProvider(value = { "null | null", "0 | null", "100 | null", "200 | null", "300 | null", "399 | null", "400 | 400", "499 | 499", "500 | 500", "599 | 599", "999 | 999", }, splitBy = "\\|") @Test public void getErrorResponseTagValue_works_as_expected(Integer responseStatusCode, String expectedReturnVal) { // given doReturn(responseStatusCode).when(implSpy).getResponseHttpStatus(anyObject()); // when // Null response object makes no difference - it's entirely dependent on what getResponseHttpStatus() returns. String resultForNonNullResponseObj = implSpy.getErrorResponseTagValue(new Object()); String resultForNullResponseObj = implSpy.getErrorResponseTagValue(null); // then assertThat(resultForNonNullResponseObj).isEqualTo(expectedReturnVal); assertThat(resultForNullResponseObj).isEqualTo(expectedReturnVal); }
doReturn(adapterHttpStatus).when(adapterMock).getResponseHttpStatus(anyObject()); doReturn(scenario.adapterErrorTagValue).when(adapterMock).getErrorResponseTagValue(anyObject()); verify(adapterMock).getErrorResponseTagValue(responseMock); verify(adapterMock, never()).getErrorResponseTagValue(anyObject());
doReturn(adapterRoute).when(adapterMock).getRequestUriPathTemplate(anyObject(), anyObject()); doReturn(scenario.adapterErrorTagValue).when(adapterMock).getErrorResponseTagValue(anyObject()); verify(adapterMock).getErrorResponseTagValue(responseMock); verify(adapterMock, never()).getErrorResponseTagValue(anyObject());