From 947c0d8fb025f04cd0e35ae519f7e10feb4e7ba4 Mon Sep 17 00:00:00 2001 From: Haotian Zhang <928016560@qq.com> Date: Tue, 26 Sep 2023 20:10:42 +0800 Subject: [PATCH] feat:add swagger report switch. (#1150) --- CHANGELOG.md | 1 + .../contract/PolarisContractReporter.java | 75 ++++++++++--------- .../contract/config/ContractProperties.java | 4 + .../config/PolarisContractProperties.java | 14 ++++ .../PolarisSwaggerAutoConfiguration.java | 2 +- ...itional-spring-configuration-metadata.json | 6 ++ .../src/main/resources/bootstrap.yml | 2 + 7 files changed, 67 insertions(+), 37 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 00916be0..c37db1f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,3 +7,4 @@ - [refactor:optimize the order and condition matching of service registration automatic configuration.](https://github.com/Tencent/spring-cloud-tencent/pull/1131) - [feat:support service contract reporting.](https://github.com/Tencent/spring-cloud-tencent/pull/1141) - [feat: support log path configuration parameters,](https://github.com/Tencent/spring-cloud-tencent/pull/1142) +- [feat:add swagger report switch.](https://github.com/Tencent/spring-cloud-tencent/pull/1150) diff --git a/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/PolarisContractReporter.java b/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/PolarisContractReporter.java index 8d4da499..bee9704f 100644 --- a/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/PolarisContractReporter.java +++ b/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/PolarisContractReporter.java @@ -24,6 +24,7 @@ import java.util.Map; import com.tencent.cloud.common.util.JacksonUtils; import com.tencent.cloud.polaris.PolarisDiscoveryProperties; +import com.tencent.cloud.polaris.contract.config.PolarisContractProperties; import com.tencent.polaris.api.core.ProviderAPI; import com.tencent.polaris.api.plugin.server.InterfaceDescriptor; import com.tencent.polaris.api.plugin.server.ReportServiceContractRequest; @@ -55,7 +56,7 @@ public class PolarisContractReporter implements ApplicationListener interfaceDescriptorList = getInterfaceDescriptorFromSwagger(openAPI); - request.setInterfaceDescriptors(interfaceDescriptorList); - ReportServiceContractResponse response = providerAPI.reportServiceContract(request); - LOG.info("Service contract [Namespace: {}. Name: {}. Service: {}. Protocol:{}. Version: {}. API counter: {}] is reported.", - request.getNamespace(), request.getName(), request.getService(), request.getProtocol(), - request.getVersion(), request.getInterfaceDescriptors().size()); - if (LOG.isDebugEnabled()) { - String jsonValue = JacksonUtils.serialize2Json(openAPI); - LOG.debug("OpenApi json data: {}", jsonValue); + if (polarisContractProperties.isReportEnabled()) { + try { + AbstractOpenApiResource openApiResource = null; + if (multipleOpenApiWebMvcResource != null) { + openApiResource = OpenApiWebMvcUtil.getOpenApiResourceOrThrow(multipleOpenApiWebMvcResource, polarisContractProperties.getGroup()); + } + else if (multipleOpenApiWebFluxResource != null) { + openApiResource = OpenApiWebFluxUtil.getOpenApiResourceOrThrow(multipleOpenApiWebFluxResource, polarisContractProperties.getGroup()); + } + OpenAPI openAPI = null; + if (openApiResource != null) { + openAPI = AbstractOpenApiResourceUtil.getOpenApi(openApiResource); + } + if (openAPI != null) { + ReportServiceContractRequest request = new ReportServiceContractRequest(); + request.setName(polarisDiscoveryProperties.getService()); + request.setNamespace(polarisDiscoveryProperties.getNamespace()); + request.setService(polarisDiscoveryProperties.getService()); + request.setProtocol("http"); + request.setVersion(polarisDiscoveryProperties.getVersion()); + List interfaceDescriptorList = getInterfaceDescriptorFromSwagger(openAPI); + request.setInterfaceDescriptors(interfaceDescriptorList); + ReportServiceContractResponse response = providerAPI.reportServiceContract(request); + LOG.info("Service contract [Namespace: {}. Name: {}. Service: {}. Protocol:{}. Version: {}. API counter: {}] is reported.", + request.getNamespace(), request.getName(), request.getService(), request.getProtocol(), + request.getVersion(), request.getInterfaceDescriptors().size()); + if (LOG.isDebugEnabled()) { + String jsonValue = JacksonUtils.serialize2Json(openAPI); + LOG.debug("OpenApi json data: {}", jsonValue); + } + } + else { + LOG.warn("OpenAPI or json is null, group:{}", polarisContractProperties.getGroup()); } } - else { - LOG.warn("OpenAPI or json is null, group:{}", groupName); + catch (Throwable t) { + LOG.error("Report contract failed.", t); } } - catch (Throwable t) { - LOG.error("Report contract failed.", t); - } } private List getInterfaceDescriptorFromSwagger(OpenAPI openAPI) { diff --git a/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/config/ContractProperties.java b/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/config/ContractProperties.java index 3e915f5d..7a34c836 100644 --- a/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/config/ContractProperties.java +++ b/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/config/ContractProperties.java @@ -47,4 +47,8 @@ public interface ContractProperties { boolean isExposure(); void setExposure(boolean exposure); + + boolean isReportEnabled(); + + void setReportEnabled(boolean reportEnabled); } diff --git a/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/config/PolarisContractProperties.java b/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/config/PolarisContractProperties.java index 68681ae3..2b43226a 100644 --- a/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/config/PolarisContractProperties.java +++ b/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/config/PolarisContractProperties.java @@ -21,6 +21,7 @@ import java.util.Objects; import javax.annotation.Nullable; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; /** @@ -53,6 +54,9 @@ public class PolarisContractProperties implements ContractProperties { private boolean exposure = true; + @Value("${spring.cloud.polaris.contract.report.enabled:true}") + private boolean reportEnabled = true; + public PolarisContractProperties(@Nullable ExtendedContractProperties extendContractProperties) { this.extendContractProperties = extendContractProperties; } @@ -134,4 +138,14 @@ public class PolarisContractProperties implements ContractProperties { public void setExposure(boolean exposure) { this.exposure = exposure; } + + @Override + public boolean isReportEnabled() { + return reportEnabled; + } + + @Override + public void setReportEnabled(boolean reportEnabled) { + this.reportEnabled = reportEnabled; + } } diff --git a/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/config/PolarisSwaggerAutoConfiguration.java b/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/config/PolarisSwaggerAutoConfiguration.java index c9c05b8f..e0af4daf 100644 --- a/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/config/PolarisSwaggerAutoConfiguration.java +++ b/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/config/PolarisSwaggerAutoConfiguration.java @@ -100,7 +100,7 @@ public class PolarisSwaggerAutoConfiguration { PolarisContractProperties polarisContractProperties, PolarisSDKContextManager polarisSDKContextManager, PolarisDiscoveryProperties polarisDiscoveryProperties) { return new PolarisContractReporter(multipleOpenApiWebMvcResource, multipleOpenApiWebFluxResource, - polarisContractProperties.getGroup(), polarisSDKContextManager.getProviderAPI(), polarisDiscoveryProperties); + polarisContractProperties, polarisSDKContextManager.getProviderAPI(), polarisDiscoveryProperties); } @Bean diff --git a/spring-cloud-starter-tencent-polaris-contract/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-cloud-starter-tencent-polaris-contract/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 4e5e4b72..0ef87807 100644 --- a/spring-cloud-starter-tencent-polaris-contract/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/spring-cloud-starter-tencent-polaris-contract/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -35,6 +35,12 @@ "type": "java.lang.Boolean", "defaultValue": "true", "description": "Enable polaris contract exposure or not." + }, + { + "name": "spring.cloud.polaris.contract.report.enabled", + "type": "java.lang.Boolean", + "defaultValue": "true", + "description": "Enable polaris contract report or not." } ] } diff --git a/spring-cloud-tencent-examples/polaris-discovery-example/discovery-caller-service/src/main/resources/bootstrap.yml b/spring-cloud-tencent-examples/polaris-discovery-example/discovery-caller-service/src/main/resources/bootstrap.yml index bcd78ef7..f75a5c4a 100644 --- a/spring-cloud-tencent-examples/polaris-discovery-example/discovery-caller-service/src/main/resources/bootstrap.yml +++ b/spring-cloud-tencent-examples/polaris-discovery-example/discovery-caller-service/src/main/resources/bootstrap.yml @@ -24,6 +24,8 @@ spring: health-check-url: /discovery/service/caller/healthCheck contract: exposure: true + report: + enabled: true stat: enabled: true port: 28081