@ -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 ;
@ -53,52 +54,54 @@ public class PolarisContractReporter implements ApplicationListener<ApplicationR
private final Logger LOG = LoggerFactory . getLogger ( PolarisContractReporter . class ) ;
private final ServiceModelToSwagger2Mapper swagger2Mapper ;
private final DocumentationCache documentationCache ;
private final String groupName ;
private final PolarisContractProperties polarisContractProperties ;
private final ProviderAPI providerAPI ;
private final PolarisDiscoveryProperties polarisDiscoveryProperties ;
public PolarisContractReporter ( DocumentationCache documentationCache , ServiceModelToSwagger2Mapper swagger2Mapper ,
String groupName , ProviderAPI providerAPI , PolarisDiscoveryProperties polarisDiscoveryProperties ) {
PolarisContractProperties polarisContractProperties , ProviderAPI providerAPI , PolarisDiscoveryProperties polarisDiscoveryProperties ) {
this . swagger2Mapper = swagger2Mapper ;
this . documentationCache = documentationCache ;
this . groupName = groupName ;
this . polarisContractProperties = polarisContractProperties ;
this . providerAPI = providerAPI ;
this . polarisDiscoveryProperties = polarisDiscoveryProperties ;
}
@Override
public void onApplicationEvent ( @NonNull ApplicationReadyEvent applicationReadyEvent ) {
try {
Documentation documentation = documentationCache . documentationByGroup ( groupName ) ;
Swagger swagger = swagger2Mapper . mapDocumentation ( documentation ) ;
if ( swagger ! = 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 < InterfaceDescriptor > interfaceDescriptorList = getInterfaceDescriptorFromSwagger ( swagger ) ;
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 ( swagger ) ;
LOG . debug ( "OpenApi json data: {}" , jsonValue ) ;
if ( polarisContractProperties . isReportEnabled ( ) ) {
try {
Documentation documentation = documentationCache . documentationByGroup ( polarisContractProperties . getGroup ( ) ) ;
Swagger swagger = swagger2Mapper . mapDocumentation ( documentation ) ;
if ( swagger ! = 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 < InterfaceDescriptor > interfaceDescriptorList = getInterfaceDescriptorFromSwagger ( swagger ) ;
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 ( swagger ) ;
LOG . debug ( "OpenApi json data: {}" , jsonValue ) ;
}
}
else {
LOG . warn ( "Swagger or json is null, documentationCache keys:{}, group:{}" , documentationCache . all ( )
. keySet ( ) , polarisContractProperties . getGroup ( ) ) ;
}
}
else {
LOG . warn ( "Swagger or json is null, documentationCache keys:{}, group:{}" , documentationCache . all ( )
. keySet ( ) , groupName ) ;
catch ( Throwable t ) {
LOG . error ( "Report contract failed." , t ) ;
}
}
catch ( Throwable t ) {
LOG . error ( "Report contract failed." , t ) ;
}
}
private List < InterfaceDescriptor > getInterfaceDescriptorFromSwagger ( Swagger swagger ) {