fix scg start time err

pull/963/head
seanyu 2 years ago
parent bd2fa67910
commit c60268a21f

@ -77,7 +77,7 @@ public final class PolarisCircuitBreakerUtils {
if (Objects.nonNull(e.getFallbackInfo())) { if (Objects.nonNull(e.getFallbackInfo())) {
result.setRetCode(e.getFallbackInfo().getCode()); result.setRetCode(e.getFallbackInfo().getCode());
} }
// consumerAPI.updateServiceCallResult(result); consumerAPI.updateServiceCallResult(result);
} }
catch (Throwable ex) { catch (Throwable ex) {
LOG.error("[CircuitBreaker] report circuitbreaker call result fail ", ex); LOG.error("[CircuitBreaker] report circuitbreaker call result fail ", ex);

@ -210,11 +210,5 @@ public class RpcEnhancementAutoConfiguration {
return new EnhancedPolarisGatewayReporter(properties, context, consumerAPI, circuitBreakAPI); return new EnhancedPolarisGatewayReporter(properties, context, consumerAPI, circuitBreakAPI);
} }
@Bean
@ConditionalOnClass(name = "org.springframework.cloud.gateway.filter.GlobalFilter")
public RecordRequestStartTimeGlobalFilter recordRequestStartTimeGlobalFilter() {
return new RecordRequestStartTimeGlobalFilter();
}
} }
} }

@ -32,11 +32,12 @@ import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.Response; import org.springframework.cloud.client.loadbalancer.Response;
import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter; import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.ServerWebExchange;
import static com.tencent.cloud.rpc.enhancement.scg.RecordRequestStartTimeGlobalFilter.START_TIME; import static org.springframework.cloud.gateway.filter.RouteToRequestUrlFilter.ROUTE_TO_URL_FILTER_ORDER;
import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.GATEWAY_LOADBALANCER_RESPONSE_ATTR; import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.GATEWAY_LOADBALANCER_RESPONSE_ATTR;
/** /**
@ -44,7 +45,7 @@ import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.G
* *
* @author sean yu * @author sean yu
*/ */
public class EnhancedPolarisGatewayReporter extends AbstractPolarisReporterAdapter implements GlobalFilter { public class EnhancedPolarisGatewayReporter extends AbstractPolarisReporterAdapter implements GlobalFilter, Ordered {
private static final Logger LOG = LoggerFactory.getLogger(EnhancedPolarisGatewayReporter.class); private static final Logger LOG = LoggerFactory.getLogger(EnhancedPolarisGatewayReporter.class);
@ -71,20 +72,17 @@ public class EnhancedPolarisGatewayReporter extends AbstractPolarisReporterAdapt
if (!reportProperties.isEnabled()) { if (!reportProperties.isEnabled()) {
return chain.filter(exchange); return chain.filter(exchange);
} }
long startTime = System.currentTimeMillis();
return chain.filter(exchange) return chain.filter(exchange)
.doOnSuccess(v -> instrumentResponse(exchange, null)) .doOnSuccess(v -> instrumentResponse(exchange, null, startTime))
.doOnError(t -> instrumentResponse(exchange, t)); .doOnError(t -> instrumentResponse(exchange, t, startTime));
} }
private void instrumentResponse(ServerWebExchange exchange, Throwable t) { private void instrumentResponse(ServerWebExchange exchange, Throwable t, long startTime) {
ServerHttpResponse response = exchange.getResponse(); ServerHttpResponse response = exchange.getResponse();
ServerHttpRequest request = exchange.getRequest(); ServerHttpRequest request = exchange.getRequest();
long delay = 0L; long delay = System.currentTimeMillis() - startTime;
Long startTime = exchange.getAttribute(START_TIME);
if (startTime != null) {
delay = System.currentTimeMillis() - startTime;
}
String serviceId = null; String serviceId = null;
String targetHost = null; String targetHost = null;
Integer targetPort = null; Integer targetPort = null;
@ -124,4 +122,8 @@ public class EnhancedPolarisGatewayReporter extends AbstractPolarisReporterAdapt
circuitBreakAPI.report(resourceStat); circuitBreakAPI.report(resourceStat);
} }
@Override
public int getOrder() {
return ROUTE_TO_URL_FILTER_ORDER + 1;
}
} }

@ -1,46 +0,0 @@
/*
* Tencent is pleased to support the open source community by making Spring Cloud Tencent available.
*
* Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
*
* Licensed under the BSD 3-Clause License (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://opensource.org/licenses/BSD-3-Clause
*
* Unless required by applicable law or agreed to in writing, software distributed
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package com.tencent.cloud.rpc.enhancement.scg;
import reactor.core.publisher.Mono;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.web.server.ServerWebExchange;
/**
* RecordRequestStartTimeGlobalFilter.
*
* @author sean yu
*/
public class RecordRequestStartTimeGlobalFilter implements GlobalFilter, Ordered {
public static final String START_TIME = "START_TIME";
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
exchange.getAttributes().put(START_TIME, System.currentTimeMillis());
return chain.filter(exchange);
}
@Override
public int getOrder() {
return Ordered.HIGHEST_PRECEDENCE;
}
}
Loading…
Cancel
Save