From 6df1d7d572c616925af177702e341bc37df6b9b8 Mon Sep 17 00:00:00 2001 From: Brandon Fergerson Date: Wed, 3 Jan 2024 18:13:43 -0600 Subject: [PATCH] fix: 400+ status codes should cause SLA fail --- CHANGES.md | 1 + .../HttpClientRequestImplHandleResponseInterceptor.java | 6 +++++- .../HttpContextHandleDispatchResponseInterceptor.java | 6 +++++- .../plugin/vertx3/HttpServerResponseImplInterceptor.java | 6 +++++- .../apache/skywalking/apm/plugin/vertx4/SWVertxTracer.java | 6 +++++- 5 files changed, 21 insertions(+), 4 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 1ec8ba392b..698de108df 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -9,6 +9,7 @@ Release Notes. * fix forkjoinpool plugin in JDK11。 * Support for tracing spring-cloud-gateway 4.x in gateway-4.x-plugin. * Fix re-transform bug when plugin enhanced class proxy parent method. +* Fix error HTTP status codes not recording as SLA failures in Vert.x plugins. #### Documentation diff --git a/apm-sniffer/apm-sdk-plugin/vertx-plugins/vertx-core-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/vertx3/HttpClientRequestImplHandleResponseInterceptor.java b/apm-sniffer/apm-sdk-plugin/vertx-plugins/vertx-core-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/vertx3/HttpClientRequestImplHandleResponseInterceptor.java index 087551d1a8..694fbdeaf5 100644 --- a/apm-sniffer/apm-sdk-plugin/vertx-plugins/vertx-core-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/vertx3/HttpClientRequestImplHandleResponseInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/vertx-plugins/vertx-core-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/vertx3/HttpClientRequestImplHandleResponseInterceptor.java @@ -40,7 +40,11 @@ public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allAr HttpClientRequestContext requestContext = (HttpClientRequestContext) objInst.getSkyWalkingDynamicField(); if (!requestContext.usingWebClient) { VertxContext context = requestContext.vertxContext; - Tags.HTTP_RESPONSE_STATUS_CODE.set(context.getSpan(), ((HttpClientResponse) allArguments[0]).statusCode()); + int statusCode = ((HttpClientResponse) allArguments[0]).statusCode(); + Tags.HTTP_RESPONSE_STATUS_CODE.set(context.getSpan(), statusCode); + if (statusCode >= 400) { + context.getSpan().errorOccurred(); + } context.getSpan().asyncFinish(); AbstractSpan span = ContextManager.createLocalSpan("#" + context.getSpan().getOperationName()); diff --git a/apm-sniffer/apm-sdk-plugin/vertx-plugins/vertx-core-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/vertx3/HttpContextHandleDispatchResponseInterceptor.java b/apm-sniffer/apm-sdk-plugin/vertx-plugins/vertx-core-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/vertx3/HttpContextHandleDispatchResponseInterceptor.java index 18e0d93422..e81a7764df 100644 --- a/apm-sniffer/apm-sdk-plugin/vertx-plugins/vertx-core-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/vertx3/HttpContextHandleDispatchResponseInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/vertx-plugins/vertx-core-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/vertx3/HttpContextHandleDispatchResponseInterceptor.java @@ -42,7 +42,11 @@ public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allAr HttpClientRequest clientRequest = httpContext.clientRequest(); VertxContext context = ((HttpClientRequestContext) ((EnhancedInstance) clientRequest) .getSkyWalkingDynamicField()).vertxContext; - Tags.HTTP_RESPONSE_STATUS_CODE.set(context.getSpan(), httpContext.clientResponse().statusCode()); + int statusCode = httpContext.clientResponse().statusCode(); + Tags.HTTP_RESPONSE_STATUS_CODE.set(context.getSpan(), statusCode); + if (statusCode >= 400) { + context.getSpan().errorOccurred(); + } context.getSpan().asyncFinish(); AbstractSpan span = ContextManager.createLocalSpan("#" + context.getSpan().getOperationName()); diff --git a/apm-sniffer/apm-sdk-plugin/vertx-plugins/vertx-core-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/vertx3/HttpServerResponseImplInterceptor.java b/apm-sniffer/apm-sdk-plugin/vertx-plugins/vertx-core-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/vertx3/HttpServerResponseImplInterceptor.java index 0cb0aaa6bd..c8e8112b53 100644 --- a/apm-sniffer/apm-sdk-plugin/vertx-plugins/vertx-core-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/vertx3/HttpServerResponseImplInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/vertx-plugins/vertx-core-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/vertx3/HttpServerResponseImplInterceptor.java @@ -43,7 +43,11 @@ public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allAr if (VertxContext.VERTX_VERSION < 36 && allArguments[0] instanceof ByteBuf || VertxContext.VERTX_VERSION >= 36 && VertxContext.VERTX_VERSION <= 37 || allArguments.length == 2) { VertxContext context = (VertxContext) objInst.getSkyWalkingDynamicField(); - Tags.HTTP_RESPONSE_STATUS_CODE.set(context.getSpan(), ((HttpServerResponse) objInst).getStatusCode()); + int statusCode = ((HttpServerResponse) objInst).getStatusCode(); + Tags.HTTP_RESPONSE_STATUS_CODE.set(context.getSpan(), statusCode); + if (statusCode >= 400) { + context.getSpan().errorOccurred(); + } context.getSpan().asyncFinish(); } } diff --git a/apm-sniffer/apm-sdk-plugin/vertx-plugins/vertx-core-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/vertx4/SWVertxTracer.java b/apm-sniffer/apm-sdk-plugin/vertx-plugins/vertx-core-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/vertx4/SWVertxTracer.java index b05c3ea53b..977b51be08 100644 --- a/apm-sniffer/apm-sdk-plugin/vertx-plugins/vertx-core-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/vertx4/SWVertxTracer.java +++ b/apm-sniffer/apm-sdk-plugin/vertx-plugins/vertx-core-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/vertx4/SWVertxTracer.java @@ -88,7 +88,11 @@ public void sendResponse(Context context, R response, AbstractSpan payload, } if (response instanceof HttpResponse) { - Tags.HTTP_RESPONSE_STATUS_CODE.set(payload, ((HttpResponse) response).statusCode()); + int statusCode = ((HttpResponse) response).statusCode(); + Tags.HTTP_RESPONSE_STATUS_CODE.set(payload, statusCode); + if (statusCode >= 400) { + payload.errorOccurred(); + } } payload.asyncFinish(); }