Skip to content

Commit c545324

Browse files
authored
[#4939] fixed when consumer times out and disconnects, the metrics_log and slow_log status statistics show 200 error (#4941)
1 parent 32d437f commit c545324

File tree

3 files changed

+26
-3
lines changed

3 files changed

+26
-3
lines changed

metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeters.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.apache.servicecomb.core.event.InvocationFinishEvent;
2323
import org.apache.servicecomb.core.event.InvocationStartEvent;
2424
import org.apache.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx;
25+
import org.apache.servicecomb.metrics.core.publish.PublishUtils;
2526
import org.apache.servicecomb.swagger.invocation.Response;
2627

2728
import com.netflix.spectator.api.Id;
@@ -55,7 +56,7 @@ protected AbstractInvocationMeter getOrCreateMeters(Invocation invocation, Respo
5556
.append(invocationName)
5657
.append(invocation.getRealTransportName())
5758
.append(invocation.getMicroserviceQualifiedName())
58-
.append(response.getStatusCode());
59+
.append(PublishUtils.refactorStatus(invocation, response));
5960
if (keyBuilder.length() > maxKeyLen) {
6061
maxKeyLen = keyBuilder.length();
6162
}
@@ -69,7 +70,7 @@ protected AbstractInvocationMeter getOrCreateMeters(Invocation invocation, Respo
6970
MeterInvocationConst.TAG_OPERATION,
7071
invocation.getMicroserviceQualifiedName(),
7172
MeterInvocationConst.TAG_STATUS,
72-
String.valueOf(response.getStatusCode()));
73+
PublishUtils.refactorStatus(invocation, response));
7374

7475
AbstractInvocationMeter meter = createMeter(id);
7576
SpectatorUtils.registerMeter(registry, meter);

metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/PublishUtils.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,24 @@
1919
import java.util.HashMap;
2020
import java.util.Map;
2121

22+
import org.apache.servicecomb.core.Invocation;
2223
import org.apache.servicecomb.foundation.metrics.publish.spectator.MeasurementNode;
24+
import org.apache.servicecomb.foundation.vertx.http.VertxServerRequestToHttpServletRequest;
2325
import org.apache.servicecomb.metrics.core.meter.invocation.MeterInvocationConst;
2426
import org.apache.servicecomb.metrics.core.publish.model.invocation.OperationPerf;
2527
import org.apache.servicecomb.metrics.core.publish.model.invocation.OperationPerfGroup;
2628
import org.apache.servicecomb.metrics.core.publish.model.invocation.OperationPerfGroups;
2729
import org.apache.servicecomb.metrics.core.publish.model.invocation.PerfInfo;
30+
import org.apache.servicecomb.swagger.invocation.Response;
2831

2932
import com.netflix.spectator.api.Statistic;
3033

34+
import io.vertx.core.http.HttpServerResponse;
35+
import io.vertx.ext.web.RoutingContext;
36+
3137
public final class PublishUtils {
38+
public static final String EMPTY_RESULT = "-";
39+
3240
private PublishUtils() {
3341
}
3442

@@ -73,4 +81,18 @@ public static void addOperationPerfGroups(OperationPerfGroups operationPerfGroup
7381
OperationPerf operationPerf = createOperationPerf(operation, statusNode);
7482
group.addOperationPerf(operationPerf);
7583
}
84+
85+
public static String refactorStatus(Invocation invocation, Response response) {
86+
if (invocation.getRequestEx() instanceof VertxServerRequestToHttpServletRequest) {
87+
RoutingContext context = ((VertxServerRequestToHttpServletRequest) invocation.getRequestEx()).getContext();
88+
if (context == null) {
89+
return String.valueOf(response.getStatusCode());
90+
}
91+
HttpServerResponse contextResponse = context.response();
92+
if (response.getStatusCode() == 200 && contextResponse.closed() && !contextResponse.ended()) {
93+
return EMPTY_RESULT;
94+
}
95+
}
96+
return String.valueOf(response.getStatusCode());
97+
}
7698
}

metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/SlowInvocationLogger.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ private void logSlowProducer(Invocation invocation, Response response, Operation
102102
restOperationMeta.getHttpMethod(),
103103
restOperationMeta.getAbsolutePath(),
104104
collectClientAddress(invocation),
105-
response.getStatusCode(),
105+
PublishUtils.refactorStatus(invocation, response),
106106
formatTime(stageTrace.calcTotalTime()),
107107
formatTime(stageTrace.calcInvocationPrepareTime()),
108108
formatTime(stageTrace.calcThreadPoolQueueTime()),

0 commit comments

Comments
 (0)