This is an automated email from the ASF dual-hosted git repository.
youling1128 pushed a commit to branch 2.8.x
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
The following commit(s) were added to refs/heads/2.8.x by this push:
new c5453245f [#4939] fixed when consumer times out and disconnects, the
metrics_log and slow_log status statistics show 200 error (#4941)
c5453245f is described below
commit c5453245fe061bf7cf908aa25dbb174e0823565b
Author: Alex <[email protected]>
AuthorDate: Sat Oct 11 14:33:07 2025 +0800
[#4939] fixed when consumer times out and disconnects, the metrics_log and
slow_log status statistics show 200 error (#4941)
---
.../meter/invocation/AbstractInvocationMeters.java | 5 +++--
.../metrics/core/publish/PublishUtils.java | 22 ++++++++++++++++++++++
.../metrics/core/publish/SlowInvocationLogger.java | 2 +-
3 files changed, 26 insertions(+), 3 deletions(-)
diff --git
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeters.java
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeters.java
index 9491120d3..d517de170 100644
---
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeters.java
+++
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeters.java
@@ -22,6 +22,7 @@ import org.apache.servicecomb.core.Invocation;
import org.apache.servicecomb.core.event.InvocationFinishEvent;
import org.apache.servicecomb.core.event.InvocationStartEvent;
import org.apache.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx;
+import org.apache.servicecomb.metrics.core.publish.PublishUtils;
import org.apache.servicecomb.swagger.invocation.Response;
import com.netflix.spectator.api.Id;
@@ -55,7 +56,7 @@ public abstract class AbstractInvocationMeters {
.append(invocationName)
.append(invocation.getRealTransportName())
.append(invocation.getMicroserviceQualifiedName())
- .append(response.getStatusCode());
+ .append(PublishUtils.refactorStatus(invocation, response));
if (keyBuilder.length() > maxKeyLen) {
maxKeyLen = keyBuilder.length();
}
@@ -69,7 +70,7 @@ public abstract class AbstractInvocationMeters {
MeterInvocationConst.TAG_OPERATION,
invocation.getMicroserviceQualifiedName(),
MeterInvocationConst.TAG_STATUS,
- String.valueOf(response.getStatusCode()));
+ PublishUtils.refactorStatus(invocation, response));
AbstractInvocationMeter meter = createMeter(id);
SpectatorUtils.registerMeter(registry, meter);
diff --git
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/PublishUtils.java
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/PublishUtils.java
index 3196120d7..940d0f51d 100644
---
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/PublishUtils.java
+++
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/PublishUtils.java
@@ -19,16 +19,24 @@ package org.apache.servicecomb.metrics.core.publish;
import java.util.HashMap;
import java.util.Map;
+import org.apache.servicecomb.core.Invocation;
import
org.apache.servicecomb.foundation.metrics.publish.spectator.MeasurementNode;
+import
org.apache.servicecomb.foundation.vertx.http.VertxServerRequestToHttpServletRequest;
import
org.apache.servicecomb.metrics.core.meter.invocation.MeterInvocationConst;
import
org.apache.servicecomb.metrics.core.publish.model.invocation.OperationPerf;
import
org.apache.servicecomb.metrics.core.publish.model.invocation.OperationPerfGroup;
import
org.apache.servicecomb.metrics.core.publish.model.invocation.OperationPerfGroups;
import org.apache.servicecomb.metrics.core.publish.model.invocation.PerfInfo;
+import org.apache.servicecomb.swagger.invocation.Response;
import com.netflix.spectator.api.Statistic;
+import io.vertx.core.http.HttpServerResponse;
+import io.vertx.ext.web.RoutingContext;
+
public final class PublishUtils {
+ public static final String EMPTY_RESULT = "-";
+
private PublishUtils() {
}
@@ -73,4 +81,18 @@ public final class PublishUtils {
OperationPerf operationPerf = createOperationPerf(operation, statusNode);
group.addOperationPerf(operationPerf);
}
+
+ public static String refactorStatus(Invocation invocation, Response
response) {
+ if (invocation.getRequestEx() instanceof
VertxServerRequestToHttpServletRequest) {
+ RoutingContext context = ((VertxServerRequestToHttpServletRequest)
invocation.getRequestEx()).getContext();
+ if (context == null) {
+ return String.valueOf(response.getStatusCode());
+ }
+ HttpServerResponse contextResponse = context.response();
+ if (response.getStatusCode() == 200 && contextResponse.closed() &&
!contextResponse.ended()) {
+ return EMPTY_RESULT;
+ }
+ }
+ return String.valueOf(response.getStatusCode());
+ }
}
diff --git
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/SlowInvocationLogger.java
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/SlowInvocationLogger.java
index a72f56250..3faf950d3 100644
---
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/SlowInvocationLogger.java
+++
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/SlowInvocationLogger.java
@@ -102,7 +102,7 @@ public class SlowInvocationLogger {
restOperationMeta.getHttpMethod(),
restOperationMeta.getAbsolutePath(),
collectClientAddress(invocation),
- response.getStatusCode(),
+ PublishUtils.refactorStatus(invocation, response),
formatTime(stageTrace.calcTotalTime()),
formatTime(stageTrace.calcInvocationPrepareTime()),
formatTime(stageTrace.calcThreadPoolQueueTime()),