From 573c3359caf805740358de4e75ea4498e5c69b21 Mon Sep 17 00:00:00 2001 From: Darcy Date: Sat, 3 Apr 2021 15:42:59 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20Agent=20Plugin=20"asynchttpclient"=20not?= =?UTF-8?q?=20record=20the=20status=20code=20of=20the=20=E2=80=A6=20(#6665?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 1 + .../plugin/asynchttpclient/v2/AsyncHandlerWrapper.java | 8 +++++++- .../asynchttpclient-scenario/config/expectedData.yaml | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index ce5160ba7c..d070996015 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -29,6 +29,7 @@ Release Notes. * Fix bug that springmvn-annotation-4.x-plugin, witness class does not exist in some versions. * Add Redis command parameters to 'db.statement' field on Lettuce span UI for displaying more info * Fix NullPointerException with `ReactiveRequestHolder.getHeaders`. +* Fix bug that asynchttpclient plugin does not record the response status code #### OAP-Backend * Allow user-defined `JAVA_OPTS` in the startup script. diff --git a/apm-sniffer/apm-sdk-plugin/asynchttpclient-2.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/asynchttpclient/v2/AsyncHandlerWrapper.java b/apm-sniffer/apm-sdk-plugin/asynchttpclient-2.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/asynchttpclient/v2/AsyncHandlerWrapper.java index 0562d34fd5..c668231c05 100644 --- a/apm-sniffer/apm-sdk-plugin/asynchttpclient-2.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/asynchttpclient/v2/AsyncHandlerWrapper.java +++ b/apm-sniffer/apm-sdk-plugin/asynchttpclient-2.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/asynchttpclient/v2/AsyncHandlerWrapper.java @@ -22,6 +22,7 @@ import io.netty.handler.codec.http.HttpHeaders; import java.net.InetSocketAddress; import java.util.List; import javax.net.ssl.SSLSession; +import org.apache.skywalking.apm.agent.core.context.tag.Tags; import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan; import org.apache.skywalking.apm.agent.core.logging.api.ILog; import org.apache.skywalking.apm.agent.core.logging.api.LogManager; @@ -40,7 +41,7 @@ public class AsyncHandlerWrapper implements AsyncHandler { private final AsyncHandler userAsyncHandler; private final AbstractSpan asyncSpan; - private static ILog LOGGER = LogManager.getLogger(AsyncHandlerWrapper.class); + private static final ILog LOGGER = LogManager.getLogger(AsyncHandlerWrapper.class); public AsyncHandlerWrapper(AsyncHandler asyncHandler, AbstractSpan span) { this.userAsyncHandler = asyncHandler == null ? new AsyncCompletionHandlerBase() : asyncHandler; @@ -49,6 +50,11 @@ public class AsyncHandlerWrapper implements AsyncHandler { @Override public State onStatusReceived(final HttpResponseStatus httpResponseStatus) throws Exception { + int statusCode = httpResponseStatus.getStatusCode(); + Tags.STATUS_CODE.set(asyncSpan, String.valueOf(statusCode)); + if (statusCode >= 400) { + asyncSpan.errorOccurred(); + } return userAsyncHandler.onStatusReceived(httpResponseStatus); } diff --git a/test/plugin/scenarios/asynchttpclient-scenario/config/expectedData.yaml b/test/plugin/scenarios/asynchttpclient-scenario/config/expectedData.yaml index 1eed6c1e57..1db379fab9 100644 --- a/test/plugin/scenarios/asynchttpclient-scenario/config/expectedData.yaml +++ b/test/plugin/scenarios/asynchttpclient-scenario/config/expectedData.yaml @@ -34,6 +34,7 @@ segmentItems: tags: - {key: http.method, value: GET} - {key: url, value: 'http://localhost:8080/asynchttpclient/back'} + - {key: status_code, value: '200'} - operationName: /asynchttpclient/case operationId: 0 parentSpanId: -1 -- GitLab