Full Code of alibaba/Sentinel for AI

1.8 38b4619a8c4a cached
1604 files
5.1 MB
1.5M tokens
8206 symbols
1 requests
Download .txt
Showing preview only (5,871K chars total). Download the full file or copy to clipboard to get everything.
Repository: alibaba/Sentinel
Branch: 1.8
Commit: 38b4619a8c4a
Files: 1604
Total size: 5.1 MB

Directory structure:
gitextract_7y3y0mhf/

├── .codecov.yml
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── feature_request.md
│   ├── ISSUE_TEMPLATE.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   └── workflows/
│       ├── ci.yml
│       ├── codeql-analysis.yml
│       └── document-lint.yml
├── .gitignore
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── SECURITY.md
├── doc/
│   ├── README.md
│   └── awesome-sentinel.md
├── pom.xml
├── sentinel-adapter/
│   ├── pom.xml
│   ├── sentinel-apache-dubbo-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── adapter/
│   │       │   │                       └── dubbo/
│   │       │   │                           ├── BaseSentinelDubboFilter.java
│   │       │   │                           ├── DubboAppContextFilter.java
│   │       │   │                           ├── DubboUtils.java
│   │       │   │                           ├── SentinelDubboConsumerFilter.java
│   │       │   │                           ├── SentinelDubboProviderFilter.java
│   │       │   │                           ├── config/
│   │       │   │                           │   └── DubboAdapterGlobalConfig.java
│   │       │   │                           ├── fallback/
│   │       │   │                           │   ├── DefaultDubboFallback.java
│   │       │   │                           │   ├── DubboFallback.java
│   │       │   │                           │   └── DubboFallbackRegistry.java
│   │       │   │                           └── origin/
│   │       │   │                               ├── DefaultDubboOriginParser.java
│   │       │   │                               └── DubboOriginParser.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── dubbo/
│   │       │               └── org.apache.dubbo.rpc.Filter
│   │       └── test/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   ├── BaseTest.java
│   │           │                   ├── DubboTestUtil.java
│   │           │                   └── adapter/
│   │           │                       └── dubbo/
│   │           │                           ├── AbstractTimeBasedTest.java
│   │           │                           ├── DubboAppContextFilterTest.java
│   │           │                           ├── DubboUtilsTest.java
│   │           │                           ├── SentinelDubboConsumerFilterTest.java
│   │           │                           ├── SentinelDubboProviderFilterTest.java
│   │           │                           ├── fallback/
│   │           │                           │   └── DubboFallbackRegistryTest.java
│   │           │                           ├── origin/
│   │           │                           │   └── DubboOriginRegistryTest.java
│   │           │                           └── provider/
│   │           │                               ├── DemoService.java
│   │           │                               └── impl/
│   │           │                                   └── DemoServiceImpl.java
│   │           └── resources/
│   │               ├── spring-dubbo-consumer-filter.xml
│   │               └── spring-dubbo-provider-filter.xml
│   ├── sentinel-apache-dubbo3-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── adapter/
│   │       │   │                       └── dubbo3/
│   │       │   │                           ├── BaseSentinelDubboFilter.java
│   │       │   │                           ├── DubboAppContextFilter.java
│   │       │   │                           ├── DubboUtils.java
│   │       │   │                           ├── SentinelDubboConsumerFilter.java
│   │       │   │                           ├── SentinelDubboProviderFilter.java
│   │       │   │                           ├── config/
│   │       │   │                           │   └── DubboAdapterGlobalConfig.java
│   │       │   │                           ├── fallback/
│   │       │   │                           │   ├── DefaultDubboFallback.java
│   │       │   │                           │   ├── DubboFallback.java
│   │       │   │                           │   └── DubboFallbackRegistry.java
│   │       │   │                           └── origin/
│   │       │   │                               ├── DefaultDubboOriginParser.java
│   │       │   │                               └── DubboOriginParser.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── dubbo/
│   │       │               ├── org.apache.dubbo.rpc.Filter
│   │       │               └── org.apache.dubbo.rpc.cluster.filter.ClusterFilter
│   │       └── test/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   ├── BaseTest.java
│   │           │                   ├── DubboTestUtil.java
│   │           │                   └── adapter/
│   │           │                       └── dubbo3/
│   │           │                           ├── AbstractTimeBasedTest.java
│   │           │                           ├── DubboAppContextFilterTest.java
│   │           │                           ├── DubboUtilsTest.java
│   │           │                           ├── SentinelDubboConsumerFilterTest.java
│   │           │                           ├── SentinelDubboProviderFilterTest.java
│   │           │                           ├── SentinelFilterTest.java
│   │           │                           ├── fallback/
│   │           │                           │   └── DubboFallbackRegistryTest.java
│   │           │                           ├── origin/
│   │           │                           │   └── DubboOriginRegistryTest.java
│   │           │                           └── provider/
│   │           │                               ├── DemoService.java
│   │           │                               └── impl/
│   │           │                                   └── DemoServiceImpl.java
│   │           └── resources/
│   │               ├── spring-dubbo-consumer-filter.xml
│   │               └── spring-dubbo-provider-filter.xml
│   ├── sentinel-apache-httpclient-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── adapter/
│   │       │                           └── apache/
│   │       │                               └── httpclient/
│   │       │                                   ├── SentinelApacheHttpClientBuilder.java
│   │       │                                   ├── config/
│   │       │                                   │   └── SentinelApacheHttpClientConfig.java
│   │       │                                   ├── extractor/
│   │       │                                   │   ├── ApacheHttpClientResourceExtractor.java
│   │       │                                   │   └── DefaultApacheHttpClientResourceExtractor.java
│   │       │                                   └── fallback/
│   │       │                                       ├── ApacheHttpClientFallback.java
│   │       │                                       └── DefaultApacheHttpClientFallback.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── adapter/
│   │                                   └── apache/
│   │                                       └── httpclient/
│   │                                           ├── SentinelApacheHttpClientTest.java
│   │                                           ├── app/
│   │                                           │   ├── TestApplication.java
│   │                                           │   └── controller/
│   │                                           │       └── TestController.java
│   │                                           ├── config/
│   │                                           │   └── SentinelApacheHttpClientConfigTest.java
│   │                                           └── fallback/
│   │                                               └── ApacheHttpClientFallbackTest.java
│   ├── sentinel-api-gateway-adapter-common/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── adapter/
│   │       │   │                       └── gateway/
│   │       │   │                           └── common/
│   │       │   │                               ├── SentinelGatewayConstants.java
│   │       │   │                               ├── api/
│   │       │   │                               │   ├── ApiDefinition.java
│   │       │   │                               │   ├── ApiDefinitionChangeObserver.java
│   │       │   │                               │   ├── ApiPathPredicateItem.java
│   │       │   │                               │   ├── ApiPredicateGroupItem.java
│   │       │   │                               │   ├── ApiPredicateItem.java
│   │       │   │                               │   ├── GatewayApiDefinitionManager.java
│   │       │   │                               │   └── matcher/
│   │       │   │                               │       └── AbstractApiMatcher.java
│   │       │   │                               ├── command/
│   │       │   │                               │   ├── GetGatewayApiDefinitionGroupCommandHandler.java
│   │       │   │                               │   ├── GetGatewayRuleCommandHandler.java
│   │       │   │                               │   ├── UpdateGatewayApiDefinitionGroupCommandHandler.java
│   │       │   │                               │   └── UpdateGatewayRuleCommandHandler.java
│   │       │   │                               ├── param/
│   │       │   │                               │   ├── ConfigurableRequestItemParser.java
│   │       │   │                               │   ├── GatewayParamParser.java
│   │       │   │                               │   ├── GatewayRegexCache.java
│   │       │   │                               │   └── RequestItemParser.java
│   │       │   │                               ├── rule/
│   │       │   │                               │   ├── GatewayFlowRule.java
│   │       │   │                               │   ├── GatewayParamFlowItem.java
│   │       │   │                               │   ├── GatewayRuleConverter.java
│   │       │   │                               │   └── GatewayRuleManager.java
│   │       │   │                               └── slot/
│   │       │   │                                   ├── GatewayFlowSlot.java
│   │       │   │                                   └── GatewaySlotChainBuilder.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               ├── com.alibaba.csp.sentinel.command.CommandHandler
│   │       │               └── com.alibaba.csp.sentinel.slotchain.ProcessorSlot
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── adapter/
│   │                                   └── gateway/
│   │                                       └── common/
│   │                                           ├── api/
│   │                                           │   └── GatewayApiDefinitionManagerTest.java
│   │                                           ├── param/
│   │                                           │   ├── GatewayParamParserTest.java
│   │                                           │   └── GatewayRegexCacheTest.java
│   │                                           └── rule/
│   │                                               ├── GatewayRuleConverterTest.java
│   │                                               └── GatewayRuleManagerTest.java
│   ├── sentinel-dubbo-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── adapter/
│   │       │   │                       └── dubbo/
│   │       │   │                           ├── AbstractDubboFilter.java
│   │       │   │                           ├── DubboAdapterGlobalConfig.java
│   │       │   │                           ├── DubboAppContextFilter.java
│   │       │   │                           ├── DubboUtils.java
│   │       │   │                           ├── SentinelDubboConsumerFilter.java
│   │       │   │                           ├── SentinelDubboProviderFilter.java
│   │       │   │                           ├── fallback/
│   │       │   │                           │   ├── DefaultDubboFallback.java
│   │       │   │                           │   ├── DubboFallback.java
│   │       │   │                           │   └── DubboFallbackRegistry.java
│   │       │   │                           └── origin/
│   │       │   │                               ├── DefaultDubboOriginParser.java
│   │       │   │                               └── DubboOriginParser.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── dubbo/
│   │       │               └── com.alibaba.dubbo.rpc.Filter
│   │       └── test/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   ├── BaseTest.java
│   │           │                   └── adapter/
│   │           │                       └── dubbo/
│   │           │                           ├── AbstractDubboFilterTest.java
│   │           │                           ├── DubboAppContextFilterTest.java
│   │           │                           ├── DubboUtilsTest.java
│   │           │                           ├── SentinelDubboConsumerFilterTest.java
│   │           │                           ├── SentinelDubboProviderFilterTest.java
│   │           │                           ├── fallback/
│   │           │                           │   └── DubboFallbackRegistryTest.java
│   │           │                           ├── origin/
│   │           │                           │   └── DubboOriginRegistryTest.java
│   │           │                           └── provider/
│   │           │                               ├── DemoService.java
│   │           │                               └── impl/
│   │           │                                   └── DemoServiceImpl.java
│   │           └── resources/
│   │               ├── spring-dubbo-consumer-filter.xml
│   │               └── spring-dubbo-provider-filter.xml
│   ├── sentinel-grpc-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── adapter/
│   │       │                           └── grpc/
│   │       │                               ├── SentinelGrpcClientInterceptor.java
│   │       │                               └── SentinelGrpcServerInterceptor.java
│   │       └── test/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── adapter/
│   │           │                       └── grpc/
│   │           │                           ├── FooServiceClient.java
│   │           │                           ├── FooServiceImpl.java
│   │           │                           ├── GrpcTestServer.java
│   │           │                           ├── SentinelGrpcClientInterceptorTest.java
│   │           │                           └── SentinelGrpcServerInterceptorTest.java
│   │           └── proto/
│   │               └── example.proto
│   ├── sentinel-jax-rs-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── adapter/
│   │       │                           └── jaxrs/
│   │       │                               ├── SentinelJaxRsClientTemplate.java
│   │       │                               ├── SentinelJaxRsProviderFilter.java
│   │       │                               ├── config/
│   │       │                               │   └── SentinelJaxRsConfig.java
│   │       │                               ├── exception/
│   │       │                               │   └── DefaultExceptionMapper.java
│   │       │                               ├── fallback/
│   │       │                               │   ├── DefaultSentinelJaxRsFallback.java
│   │       │                               │   └── SentinelJaxRsFallback.java
│   │       │                               ├── future/
│   │       │                               │   └── FutureWrapper.java
│   │       │                               └── request/
│   │       │                                   ├── DefaultRequestOriginParser.java
│   │       │                                   ├── DefaultResourceNameParser.java
│   │       │                                   ├── RequestOriginParser.java
│   │       │                                   └── ResourceNameParser.java
│   │       └── test/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── adapter/
│   │           │                       └── jaxrs/
│   │           │                           ├── ClientFilterTest.java
│   │           │                           ├── ProviderFilterTest.java
│   │           │                           ├── TestApplication.java
│   │           │                           └── TestResource.java
│   │           └── resources/
│   │               ├── application-client.yml
│   │               └── application-provider.yml
│   ├── sentinel-motan-adapter/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── adapter/
│   │           │                       └── motan/
│   │           │                           ├── MotanUtils.java
│   │           │                           ├── SentinelMotanConsumerFilter.java
│   │           │                           ├── SentinelMotanProviderFilter.java
│   │           │                           ├── config/
│   │           │                           │   └── MotanAdapterGlobalConfig.java
│   │           │                           └── fallback/
│   │           │                               ├── DefaultMotanFallback.java
│   │           │                               └── MotanFallback.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       └── com.weibo.api.motan.filter.Filter
│   ├── sentinel-okhttp-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── adapter/
│   │       │                           └── okhttp/
│   │       │                               ├── SentinelOkHttpConfig.java
│   │       │                               ├── SentinelOkHttpInterceptor.java
│   │       │                               ├── extractor/
│   │       │                               │   ├── DefaultOkHttpResourceExtractor.java
│   │       │                               │   └── OkHttpResourceExtractor.java
│   │       │                               └── fallback/
│   │       │                                   ├── DefaultOkHttpFallback.java
│   │       │                                   └── OkHttpFallback.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── adapter/
│   │                                   └── okhttp/
│   │                                       ├── SentinelOkHttpInterceptorTest.java
│   │                                       ├── app/
│   │                                       │   ├── TestApplication.java
│   │                                       │   └── controller/
│   │                                       │       └── TestController.java
│   │                                       ├── config/
│   │                                       │   └── SentinelOkHttpConfigTest.java
│   │                                       ├── extractor/
│   │                                       │   └── OkHttpResourceExtractorTest.java
│   │                                       └── fallback/
│   │                                           └── OkHttpFallbackTest.java
│   ├── sentinel-quarkus-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   ├── sentinel-annotation-quarkus-adapter-deployment/
│   │   │   ├── pom.xml
│   │   │   └── src/
│   │   │       ├── main/
│   │   │       │   └── java/
│   │   │       │       └── com/
│   │   │       │           └── alibaba/
│   │   │       │               └── csp/
│   │   │       │                   └── sentinel/
│   │   │       │                       └── adapter/
│   │   │       │                           └── quarkus/
│   │   │       │                               └── annotation/
│   │   │       │                                   └── deployment/
│   │   │       │                                       └── SentinelAnnotationQuarkusAdapterProcessor.java
│   │   │       └── test/
│   │   │           └── java/
│   │   │               └── com/
│   │   │                   └── alibaba/
│   │   │                       └── csp/
│   │   │                           └── sentinel/
│   │   │                               └── adapter/
│   │   │                                   └── quarkus/
│   │   │                                       └── annotation/
│   │   │                                           └── deployment/
│   │   │                                               ├── FooService.java
│   │   │                                               ├── FooUtil.java
│   │   │                                               └── SentinelAnnotationQuarkusAdapterTest.java
│   │   ├── sentinel-annotation-quarkus-adapter-runtime/
│   │   │   ├── pom.xml
│   │   │   └── src/
│   │   │       └── main/
│   │   │           └── resources/
│   │   │               └── META-INF/
│   │   │                   └── quarkus-extension.yaml
│   │   ├── sentinel-jax-rs-quarkus-adapter-deployment/
│   │   │   ├── pom.xml
│   │   │   └── src/
│   │   │       ├── main/
│   │   │       │   └── java/
│   │   │       │       └── com/
│   │   │       │           └── alibaba/
│   │   │       │               └── csp/
│   │   │       │                   └── sentinel/
│   │   │       │                       └── adapter/
│   │   │       │                           └── quarkus/
│   │   │       │                               └── jaxrs/
│   │   │       │                                   └── deployment/
│   │   │       │                                       └── SentinelJaxRsQuarkusAdapterProcessor.java
│   │   │       └── test/
│   │   │           └── java/
│   │   │               └── com/
│   │   │                   └── alibaba/
│   │   │                       └── csp/
│   │   │                           └── sentinel/
│   │   │                               └── adapter/
│   │   │                                   └── quarkus/
│   │   │                                       └── jaxrs/
│   │   │                                           └── deployment/
│   │   │                                               ├── SentinelJaxRsQuarkusAdapterTest.java
│   │   │                                               └── TestResource.java
│   │   ├── sentinel-jax-rs-quarkus-adapter-runtime/
│   │   │   ├── pom.xml
│   │   │   └── src/
│   │   │       └── main/
│   │   │           └── resources/
│   │   │               └── META-INF/
│   │   │                   ├── quarkus-extension.yaml
│   │   │                   └── services/
│   │   │                       └── javax.ws.rs.ext.Providers
│   │   ├── sentinel-native-image-quarkus-adapter-deployment/
│   │   │   ├── pom.xml
│   │   │   └── src/
│   │   │       └── main/
│   │   │           └── java/
│   │   │               └── com/
│   │   │                   └── alibaba/
│   │   │                       └── csp/
│   │   │                           └── sentinel/
│   │   │                               └── adapter/
│   │   │                                   └── quarkus/
│   │   │                                       └── nativeimage/
│   │   │                                           └── SentinelNativeImageProcessor.java
│   │   └── sentinel-native-image-quarkus-adapter-runtime/
│   │       ├── pom.xml
│   │       └── src/
│   │           └── main/
│   │               ├── java/
│   │               │   └── com/
│   │               │       └── alibaba/
│   │               │           └── csp/
│   │               │               └── sentinel/
│   │               │                   └── adapter/
│   │               │                       └── quarkus/
│   │               │                           └── nativeimage/
│   │               │                               └── SentinelRecorder.java
│   │               └── resources/
│   │                   └── META-INF/
│   │                       └── quarkus-extension.yaml
│   ├── sentinel-reactor-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── adapter/
│   │       │                           └── reactor/
│   │       │                               ├── ContextConfig.java
│   │       │                               ├── EntryConfig.java
│   │       │                               ├── FluxSentinelOperator.java
│   │       │                               ├── InheritableBaseSubscriber.java
│   │       │                               ├── MonoSentinelOperator.java
│   │       │                               ├── ReactorSphU.java
│   │       │                               ├── SentinelReactorConstants.java
│   │       │                               ├── SentinelReactorSubscriber.java
│   │       │                               └── SentinelReactorTransformer.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── adapter/
│   │                                   └── reactor/
│   │                                       ├── FluxSentinelOperatorTestIntegrationTest.java
│   │                                       ├── MonoSentinelOperatorIntegrationTest.java
│   │                                       └── ReactorSphUTest.java
│   ├── sentinel-sofa-rpc-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── adapter/
│   │       │   │                       └── sofa/
│   │       │   │                           └── rpc/
│   │       │   │                               ├── AbstractSofaRpcFilter.java
│   │       │   │                               ├── SentinelConstants.java
│   │       │   │                               ├── SentinelSofaRpcConsumerFilter.java
│   │       │   │                               ├── SentinelSofaRpcProviderFilter.java
│   │       │   │                               ├── SofaRpcUtils.java
│   │       │   │                               └── fallback/
│   │       │   │                                   ├── DefaultSofaRpcFallback.java
│   │       │   │                                   ├── SofaRpcFallback.java
│   │       │   │                                   └── SofaRpcFallbackRegistry.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               └── sofa-rpc/
│   │       │                   └── com.alipay.sofa.rpc.filter.Filter
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── adapter/
│   │                                   └── sofa/
│   │                                       └── rpc/
│   │                                           ├── AbstractSofaRpcFilterTest.java
│   │                                           ├── BaseTest.java
│   │                                           ├── SentinelSofaRpcConsumerFilterTest.java
│   │                                           ├── SentinelSofaRpcProviderFilterTest.java
│   │                                           ├── SofaRpcUtilsTest.java
│   │                                           ├── fallback/
│   │                                           │   ├── DefaultSofaRpcFallbackTest.java
│   │                                           │   └── SofaRpcFallbackRegistryTest.java
│   │                                           └── service/
│   │                                               ├── DemoService.java
│   │                                               └── impl/
│   │                                                   └── DemoServiceImpl.java
│   ├── sentinel-spring-cloud-gateway-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── adapter/
│   │       │   │                       └── gateway/
│   │       │   │                           └── sc/
│   │       │   │                               ├── SentinelGatewayFilter.java
│   │       │   │                               ├── ServerWebExchangeItemParser.java
│   │       │   │                               ├── api/
│   │       │   │                               │   ├── GatewayApiMatcherManager.java
│   │       │   │                               │   ├── SpringCloudGatewayApiDefinitionChangeObserver.java
│   │       │   │                               │   └── matcher/
│   │       │   │                               │       └── WebExchangeApiMatcher.java
│   │       │   │                               ├── callback/
│   │       │   │                               │   ├── BlockRequestHandler.java
│   │       │   │                               │   ├── DefaultBlockRequestHandler.java
│   │       │   │                               │   ├── GatewayCallbackManager.java
│   │       │   │                               │   └── RedirectBlockRequestHandler.java
│   │       │   │                               ├── exception/
│   │       │   │                               │   └── SentinelGatewayBlockExceptionHandler.java
│   │       │   │                               └── route/
│   │       │   │                                   ├── AntRoutePathMatcher.java
│   │       │   │                                   ├── RegexRoutePathMatcher.java
│   │       │   │                                   └── RouteMatchers.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               └── com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinitionChangeObserver
│   │       └── test/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── adapter/
│   │           │                       └── gateway/
│   │           │                           └── sc/
│   │           │                               ├── SentinelGatewayFilterTest.java
│   │           │                               └── SpringCloudGatewayParamParserTest.java
│   │           └── resources/
│   │               └── mockito-extensions/
│   │                   └── org.mockito.plugins.MockMaker
│   ├── sentinel-spring-cloud-gateway-v6x-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── adapter/
│   │       │   │                       └── gateway/
│   │       │   │                           └── sc/
│   │       │   │                               ├── SentinelGatewayFilter.java
│   │       │   │                               ├── ServerWebExchangeItemParser.java
│   │       │   │                               ├── api/
│   │       │   │                               │   ├── GatewayApiMatcherManager.java
│   │       │   │                               │   ├── SpringCloudGatewayApiDefinitionChangeObserver.java
│   │       │   │                               │   └── matcher/
│   │       │   │                               │       └── WebExchangeApiMatcher.java
│   │       │   │                               ├── callback/
│   │       │   │                               │   ├── BlockRequestHandler.java
│   │       │   │                               │   ├── DefaultBlockRequestHandler.java
│   │       │   │                               │   ├── GatewayCallbackManager.java
│   │       │   │                               │   └── RedirectBlockRequestHandler.java
│   │       │   │                               ├── exception/
│   │       │   │                               │   └── SentinelGatewayBlockExceptionHandler.java
│   │       │   │                               └── route/
│   │       │   │                                   ├── AntRoutePathMatcher.java
│   │       │   │                                   ├── RegexRoutePathMatcher.java
│   │       │   │                                   └── RouteMatchers.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               └── com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinitionChangeObserver
│   │       └── test/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── adapter/
│   │           │                       └── gateway/
│   │           │                           └── sc/
│   │           │                               ├── SentinelGatewayFilterTest.java
│   │           │                               └── SpringCloudGatewayParamParserTest.java
│   │           └── resources/
│   │               └── mockito-extensions/
│   │                   └── org.mockito.plugins.MockMaker
│   ├── sentinel-spring-restclient-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── adapter/
│   │       │                           └── spring/
│   │       │                               └── restclient/
│   │       │                                   ├── SentinelRestClientConfig.java
│   │       │                                   ├── SentinelRestClientInterceptor.java
│   │       │                                   ├── extractor/
│   │       │                                   │   ├── DefaultRestClientResourceExtractor.java
│   │       │                                   │   └── RestClientResourceExtractor.java
│   │       │                                   └── fallback/
│   │       │                                       ├── DefaultRestClientFallback.java
│   │       │                                       └── RestClientFallback.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── adapter/
│   │                                   └── spring/
│   │                                       └── restclient/
│   │                                           ├── ManualTest.java
│   │                                           ├── SentinelRestClientConfigTest.java
│   │                                           ├── SentinelRestClientInterceptorSimpleTest.java
│   │                                           ├── app/
│   │                                           │   ├── TestApplication.java
│   │                                           │   └── TestController.java
│   │                                           ├── extractor/
│   │                                           │   └── DefaultRestClientResourceExtractorTest.java
│   │                                           └── fallback/
│   │                                               └── DefaultRestClientFallbackTest.java
│   ├── sentinel-spring-webflux-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── adapter/
│   │       │                           └── spring/
│   │       │                               └── webflux/
│   │       │                                   ├── SentinelWebFluxFilter.java
│   │       │                                   ├── callback/
│   │       │                                   │   ├── BlockRequestHandler.java
│   │       │                                   │   ├── DefaultBlockRequestHandler.java
│   │       │                                   │   └── WebFluxCallbackManager.java
│   │       │                                   └── exception/
│   │       │                                       └── SentinelBlockExceptionHandler.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── adapter/
│   │                                   └── spring/
│   │                                       └── webflux/
│   │                                           ├── SentinelWebFluxIntegrationTest.java
│   │                                           └── test/
│   │                                               ├── WebFluxTestApplication.java
│   │                                               ├── WebFluxTestConfig.java
│   │                                               ├── WebFluxTestController.java
│   │                                               └── WebFluxTestRouter.java
│   ├── sentinel-spring-webmvc-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── adapter/
│   │       │                           └── spring/
│   │       │                               └── webmvc/
│   │       │                                   ├── AbstractSentinelInterceptor.java
│   │       │                                   ├── SentinelExceptionAware.java
│   │       │                                   ├── SentinelWebInterceptor.java
│   │       │                                   ├── SentinelWebTotalInterceptor.java
│   │       │                                   ├── callback/
│   │       │                                   │   ├── BlockExceptionHandler.java
│   │       │                                   │   ├── DefaultBlockExceptionHandler.java
│   │       │                                   │   ├── RequestOriginParser.java
│   │       │                                   │   └── UrlCleaner.java
│   │       │                                   └── config/
│   │       │                                       ├── BaseWebMvcConfig.java
│   │       │                                       ├── SentinelWebMvcConfig.java
│   │       │                                       └── SentinelWebMvcTotalConfig.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── adapter/
│   │                                   └── spring/
│   │                                       └── webmvc/
│   │                                           ├── ResultWrapper.java
│   │                                           ├── SentinelSpringMvcIntegrationTest.java
│   │                                           ├── SentinelWebInterceptorTest.java
│   │                                           ├── TestApplication.java
│   │                                           ├── config/
│   │                                           │   ├── InterceptorConfig.java
│   │                                           │   └── SentinelSpringMvcBlockHandlerConfig.java
│   │                                           ├── controller/
│   │                                           │   └── TestController.java
│   │                                           └── exception/
│   │                                               └── BizException.java
│   ├── sentinel-spring-webmvc-v6x-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── adapter/
│   │       │                           └── spring/
│   │       │                               └── webmvc_v6x/
│   │       │                                   ├── AbstractSentinelInterceptor.java
│   │       │                                   ├── SentinelWebInterceptor.java
│   │       │                                   ├── SentinelWebPrefixInterceptor.java
│   │       │                                   ├── SentinelWebTotalInterceptor.java
│   │       │                                   ├── callback/
│   │       │                                   │   ├── BlockExceptionHandler.java
│   │       │                                   │   ├── DefaultBlockExceptionHandler.java
│   │       │                                   │   └── RequestOriginParser.java
│   │       │                                   └── config/
│   │       │                                       ├── BaseWebMvcConfig.java
│   │       │                                       ├── SentinelPreWebMvcConfig.java
│   │       │                                       ├── SentinelWebMvcConfig.java
│   │       │                                       ├── SentinelWebMvcTotalConfig.java
│   │       │                                       └── WebServletLocalConfig.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── adapter/
│   │                                   └── spring/
│   │                                       └── webmvc_v6x/
│   │                                           ├── ResultWrapper.java
│   │                                           ├── SentinelSpringMvcIntegrationTest.java
│   │                                           ├── SentinelWebInterceptorHttpMethodPrefixTest.java
│   │                                           ├── SentinelWebInterceptorTest.java
│   │                                           ├── TestApplication.java
│   │                                           ├── callback/
│   │                                           │   └── DefaultBlockExceptionHandlerTest.java
│   │                                           ├── config/
│   │                                           │   ├── InterceptorConfig.java
│   │                                           │   └── SentinelSpringMvcBlockHandlerConfig.java
│   │                                           └── controller/
│   │                                               └── TestController.java
│   ├── sentinel-web-adapter-common/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── adapter/
│   │                                   └── web/
│   │                                       └── common/
│   │                                           └── UrlCleaner.java
│   ├── sentinel-web-servlet/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── adapter/
│   │       │                           └── servlet/
│   │       │                               ├── CommonFilter.java
│   │       │                               ├── CommonTotalFilter.java
│   │       │                               ├── callback/
│   │       │                               │   ├── DefaultUrlBlockHandler.java
│   │       │                               │   ├── DefaultUrlCleaner.java
│   │       │                               │   ├── RequestOriginParser.java
│   │       │                               │   ├── UrlBlockHandler.java
│   │       │                               │   ├── UrlCleaner.java
│   │       │                               │   └── WebCallbackManager.java
│   │       │                               ├── config/
│   │       │                               │   └── WebServletConfig.java
│   │       │                               └── util/
│   │       │                                   └── FilterUtil.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── adapter/
│   │                                   ├── servlet/
│   │                                   │   ├── CommonFilterTest.java
│   │                                   │   ├── FilterConfig.java
│   │                                   │   ├── TestApplication.java
│   │                                   │   └── TestController.java
│   │                                   ├── servletcontext/
│   │                                   │   ├── CommonFilterContextTest.java
│   │                                   │   ├── FilterContextConfig.java
│   │                                   │   ├── TestContextApplication.java
│   │                                   │   └── TestContextController.java
│   │                                   └── servletmethod/
│   │                                       ├── CommonFilterMethodTest.java
│   │                                       ├── FilterMethodConfig.java
│   │                                       ├── TestApplication.java
│   │                                       └── TestMethodController.java
│   ├── sentinel-zuul-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── adapter/
│   │       │   │                       └── gateway/
│   │       │   │                           └── zuul/
│   │       │   │                               ├── RequestContextItemParser.java
│   │       │   │                               ├── api/
│   │       │   │                               │   ├── ZuulApiDefinitionChangeObserver.java
│   │       │   │                               │   ├── ZuulGatewayApiMatcherManager.java
│   │       │   │                               │   ├── matcher/
│   │       │   │                               │   │   └── RequestContextApiMatcher.java
│   │       │   │                               │   └── route/
│   │       │   │                               │       ├── PrefixRoutePathMatcher.java
│   │       │   │                               │       ├── RegexRoutePathMatcher.java
│   │       │   │                               │       └── ZuulRouteMatchers.java
│   │       │   │                               ├── callback/
│   │       │   │                               │   ├── DefaultRequestOriginParser.java
│   │       │   │                               │   ├── RequestOriginParser.java
│   │       │   │                               │   └── ZuulGatewayCallbackManager.java
│   │       │   │                               ├── constants/
│   │       │   │                               │   └── ZuulConstant.java
│   │       │   │                               ├── fallback/
│   │       │   │                               │   ├── BlockResponse.java
│   │       │   │                               │   ├── DefaultBlockFallbackProvider.java
│   │       │   │                               │   ├── ZuulBlockFallbackManager.java
│   │       │   │                               │   └── ZuulBlockFallbackProvider.java
│   │       │   │                               └── filters/
│   │       │   │                                   ├── EntryHolder.java
│   │       │   │                                   ├── SentinelEntryUtils.java
│   │       │   │                                   ├── SentinelZuulErrorFilter.java
│   │       │   │                                   ├── SentinelZuulPostFilter.java
│   │       │   │                                   └── SentinelZuulPreFilter.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               └── com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinitionChangeObserver
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── adapter/
│   │                                   └── gateway/
│   │                                       └── zuul/
│   │                                           ├── fallback/
│   │                                           │   ├── ZuulBlockFallbackManagerTest.java
│   │                                           │   └── ZuulBlockFallbackProviderTest.java
│   │                                           ├── filters/
│   │                                           │   ├── SentinelZuulErrorFilterTest.java
│   │                                           │   ├── SentinelZuulPostFilterTest.java
│   │                                           │   └── SentinelZuulPreFilterTest.java
│   │                                           └── route/
│   │                                               └── SentinelZuulRouteTest.java
│   └── sentinel-zuul2-adapter/
│       ├── README.md
│       ├── pom.xml
│       └── src/
│           ├── main/
│           │   ├── java/
│           │   │   └── com/
│           │   │       └── alibaba/
│           │   │           └── csp/
│           │   │               └── sentinel/
│           │   │                   └── adapter/
│           │   │                       └── gateway/
│           │   │                           └── zuul2/
│           │   │                               ├── HttpRequestMessageItemParser.java
│           │   │                               ├── api/
│           │   │                               │   ├── ZuulApiDefinitionChangeObserver.java
│           │   │                               │   ├── ZuulGatewayApiMatcherManager.java
│           │   │                               │   ├── matcher/
│           │   │                               │   │   └── HttpRequestMessageApiMatcher.java
│           │   │                               │   └── route/
│           │   │                               │       ├── PrefixRoutePathMatcher.java
│           │   │                               │       ├── RegexRoutePathMatcher.java
│           │   │                               │       └── ZuulRouteMatchers.java
│           │   │                               ├── constants/
│           │   │                               │   └── SentinelZuul2Constants.java
│           │   │                               ├── fallback/
│           │   │                               │   ├── BlockResponse.java
│           │   │                               │   ├── DefaultBlockFallbackProvider.java
│           │   │                               │   ├── ZuulBlockFallbackManager.java
│           │   │                               │   └── ZuulBlockFallbackProvider.java
│           │   │                               └── filters/
│           │   │                                   ├── EntryHolder.java
│           │   │                                   ├── endpoint/
│           │   │                                   │   └── SentinelZuulEndpoint.java
│           │   │                                   ├── inbound/
│           │   │                                   │   └── SentinelZuulInboundFilter.java
│           │   │                                   └── outbound/
│           │   │                                       └── SentinelZuulOutboundFilter.java
│           │   └── resources/
│           │       └── META-INF/
│           │           └── services/
│           │               └── com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinitionChangeObserver
│           └── test/
│               └── java/
│                   └── com/
│                       └── alibaba/
│                           └── csp/
│                               └── sentinel/
│                                   └── adapter/
│                                       └── gateway/
│                                           └── zuul2/
│                                               └── fallback/
│                                                   ├── ZuulBlockFallbackManagerTest.java
│                                                   └── ZuulBlockFallbackProviderTest.java
├── sentinel-benchmark/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── com/
│                   └── alibaba/
│                       └── csp/
│                           └── sentinel/
│                               └── benchmark/
│                                   └── SentinelEntryBenchmark.java
├── sentinel-cluster/
│   ├── README.md
│   ├── pom.xml
│   ├── sentinel-cluster-client-default/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   ├── cluster/
│   │       │   │                   │   └── client/
│   │       │   │                   │       ├── ClientConstants.java
│   │       │   │                   │       ├── DefaultClusterTokenClient.java
│   │       │   │                   │       ├── NettyTransportClient.java
│   │       │   │                   │       ├── codec/
│   │       │   │                   │       │   ├── ClientEntityCodecProvider.java
│   │       │   │                   │       │   ├── DefaultRequestEntityWriter.java
│   │       │   │                   │       │   ├── DefaultResponseEntityDecoder.java
│   │       │   │                   │       │   ├── data/
│   │       │   │                   │       │   │   ├── FlowRequestDataWriter.java
│   │       │   │                   │       │   │   ├── FlowResponseDataDecoder.java
│   │       │   │                   │       │   │   ├── ParamFlowRequestDataWriter.java
│   │       │   │                   │       │   │   ├── PingRequestDataWriter.java
│   │       │   │                   │       │   │   └── PingResponseDataDecoder.java
│   │       │   │                   │       │   ├── netty/
│   │       │   │                   │       │   │   ├── NettyRequestEncoder.java
│   │       │   │                   │       │   │   └── NettyResponseDecoder.java
│   │       │   │                   │       │   └── registry/
│   │       │   │                   │       │       ├── RequestDataWriterRegistry.java
│   │       │   │                   │       │       └── ResponseDataDecodeRegistry.java
│   │       │   │                   │       ├── config/
│   │       │   │                   │       │   ├── ClusterClientAssignConfig.java
│   │       │   │                   │       │   ├── ClusterClientConfig.java
│   │       │   │                   │       │   ├── ClusterClientConfigManager.java
│   │       │   │                   │       │   ├── ClusterClientStartUpConfig.java
│   │       │   │                   │       │   └── ServerChangeObserver.java
│   │       │   │                   │       ├── handler/
│   │       │   │                   │       │   ├── TokenClientHandler.java
│   │       │   │                   │       │   └── TokenClientPromiseHolder.java
│   │       │   │                   │       └── init/
│   │       │   │                   │           └── DefaultClusterClientInitFunc.java
│   │       │   │                   └── command/
│   │       │   │                       ├── entity/
│   │       │   │                       │   └── ClusterClientStateEntity.java
│   │       │   │                       └── handler/
│   │       │   │                           ├── FetchClusterClientConfigHandler.java
│   │       │   │                           └── ModifyClusterClientConfigHandler.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               ├── com.alibaba.csp.sentinel.cluster.client.ClusterTokenClient
│   │       │               ├── com.alibaba.csp.sentinel.cluster.codec.request.RequestEntityWriter
│   │       │               ├── com.alibaba.csp.sentinel.cluster.codec.response.ResponseEntityDecoder
│   │       │               ├── com.alibaba.csp.sentinel.command.CommandHandler
│   │       │               └── com.alibaba.csp.sentinel.init.InitFunc
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── cluster/
│   │                                   └── client/
│   │                                       └── codec/
│   │                                           └── data/
│   │                                               ├── FlowResponseDataDecoderTest.java
│   │                                               ├── ParamFlowRequestDataWriterTest.java
│   │                                               └── PingResponseDataDecoderTest.java
│   ├── sentinel-cluster-common-default/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── cluster/
│   │                                   ├── ClusterConstants.java
│   │                                   ├── ClusterErrorMessages.java
│   │                                   ├── ClusterTransportClient.java
│   │                                   ├── annotation/
│   │                                   │   └── RequestType.java
│   │                                   ├── codec/
│   │                                   │   ├── EntityDecoder.java
│   │                                   │   ├── EntityWriter.java
│   │                                   │   ├── request/
│   │                                   │   │   ├── RequestEntityDecoder.java
│   │                                   │   │   └── RequestEntityWriter.java
│   │                                   │   └── response/
│   │                                   │       ├── ResponseEntityDecoder.java
│   │                                   │       └── ResponseEntityWriter.java
│   │                                   ├── exception/
│   │                                   │   └── SentinelClusterException.java
│   │                                   ├── registry/
│   │                                   │   └── ConfigSupplierRegistry.java
│   │                                   ├── request/
│   │                                   │   ├── ClusterRequest.java
│   │                                   │   ├── Request.java
│   │                                   │   └── data/
│   │                                   │       ├── FlowRequestData.java
│   │                                   │       └── ParamFlowRequestData.java
│   │                                   └── response/
│   │                                       ├── ClusterResponse.java
│   │                                       ├── Response.java
│   │                                       └── data/
│   │                                           └── FlowTokenResponseData.java
│   ├── sentinel-cluster-server-default/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── cluster/
│   │       │   │                       ├── flow/
│   │       │   │                       │   ├── ClusterFlowChecker.java
│   │       │   │                       │   ├── ClusterParamFlowChecker.java
│   │       │   │                       │   ├── ConcurrentClusterFlowChecker.java
│   │       │   │                       │   ├── DefaultTokenService.java
│   │       │   │                       │   ├── rule/
│   │       │   │                       │   │   ├── ClusterFlowRuleManager.java
│   │       │   │                       │   │   ├── ClusterParamFlowRuleManager.java
│   │       │   │                       │   │   └── NamespaceFlowProperty.java
│   │       │   │                       │   └── statistic/
│   │       │   │                       │       ├── ClusterMetricNode.java
│   │       │   │                       │       ├── ClusterMetricNodeGenerator.java
│   │       │   │                       │       ├── ClusterMetricStatistics.java
│   │       │   │                       │       ├── ClusterParamMetricStatistics.java
│   │       │   │                       │       ├── concurrent/
│   │       │   │                       │       │   ├── ClusterConcurrentCheckerLogListener.java
│   │       │   │                       │       │   ├── CurrentConcurrencyManager.java
│   │       │   │                       │       │   ├── TokenCacheNode.java
│   │       │   │                       │       │   ├── TokenCacheNodeManager.java
│   │       │   │                       │       │   └── expire/
│   │       │   │                       │       │       ├── ExpireStrategy.java
│   │       │   │                       │       │       └── RegularExpireStrategy.java
│   │       │   │                       │       ├── data/
│   │       │   │                       │       │   ├── ClusterFlowEvent.java
│   │       │   │                       │       │   └── ClusterMetricBucket.java
│   │       │   │                       │       ├── limit/
│   │       │   │                       │       │   ├── GlobalRequestLimiter.java
│   │       │   │                       │       │   └── RequestLimiter.java
│   │       │   │                       │       └── metric/
│   │       │   │                       │           ├── ClusterMetric.java
│   │       │   │                       │           ├── ClusterMetricLeapArray.java
│   │       │   │                       │           ├── ClusterParamMetric.java
│   │       │   │                       │           └── ClusterParameterLeapArray.java
│   │       │   │                       └── server/
│   │       │   │                           ├── DefaultEmbeddedTokenServer.java
│   │       │   │                           ├── NettyTransportServer.java
│   │       │   │                           ├── SentinelDefaultTokenServer.java
│   │       │   │                           ├── ServerConstants.java
│   │       │   │                           ├── TokenServiceProvider.java
│   │       │   │                           ├── codec/
│   │       │   │                           │   ├── DefaultRequestEntityDecoder.java
│   │       │   │                           │   ├── DefaultResponseEntityWriter.java
│   │       │   │                           │   ├── ServerEntityCodecProvider.java
│   │       │   │                           │   ├── data/
│   │       │   │                           │   │   ├── FlowRequestDataDecoder.java
│   │       │   │                           │   │   ├── FlowResponseDataWriter.java
│   │       │   │                           │   │   ├── ParamFlowRequestDataDecoder.java
│   │       │   │                           │   │   ├── PingRequestDataDecoder.java
│   │       │   │                           │   │   └── PingResponseDataWriter.java
│   │       │   │                           │   ├── netty/
│   │       │   │                           │   │   ├── NettyRequestDecoder.java
│   │       │   │                           │   │   └── NettyResponseEncoder.java
│   │       │   │                           │   └── registry/
│   │       │   │                           │       ├── RequestDataDecodeRegistry.java
│   │       │   │                           │       └── ResponseDataWriterRegistry.java
│   │       │   │                           ├── command/
│   │       │   │                           │   └── handler/
│   │       │   │                           │       ├── FetchClusterFlowRulesCommandHandler.java
│   │       │   │                           │       ├── FetchClusterMetricCommandHandler.java
│   │       │   │                           │       ├── FetchClusterParamFlowRulesCommandHandler.java
│   │       │   │                           │       ├── FetchClusterServerConfigHandler.java
│   │       │   │                           │       ├── FetchClusterServerInfoCommandHandler.java
│   │       │   │                           │       ├── ModifyClusterFlowRulesCommandHandler.java
│   │       │   │                           │       ├── ModifyClusterParamFlowRulesCommandHandler.java
│   │       │   │                           │       ├── ModifyClusterServerFlowConfigHandler.java
│   │       │   │                           │       ├── ModifyClusterServerTransportConfigHandler.java
│   │       │   │                           │       └── ModifyServerNamespaceSetHandler.java
│   │       │   │                           ├── config/
│   │       │   │                           │   ├── ClusterServerConfigManager.java
│   │       │   │                           │   ├── ServerFlowConfig.java
│   │       │   │                           │   ├── ServerTransportConfig.java
│   │       │   │                           │   └── ServerTransportConfigObserver.java
│   │       │   │                           ├── connection/
│   │       │   │                           │   ├── Connection.java
│   │       │   │                           │   ├── ConnectionDescriptor.java
│   │       │   │                           │   ├── ConnectionGroup.java
│   │       │   │                           │   ├── ConnectionManager.java
│   │       │   │                           │   ├── ConnectionPool.java
│   │       │   │                           │   ├── NettyConnection.java
│   │       │   │                           │   └── ScanIdleConnectionTask.java
│   │       │   │                           ├── handler/
│   │       │   │                           │   └── TokenServerHandler.java
│   │       │   │                           ├── init/
│   │       │   │                           │   └── DefaultClusterServerInitFunc.java
│   │       │   │                           ├── log/
│   │       │   │                           │   └── ClusterServerStatLogUtil.java
│   │       │   │                           ├── processor/
│   │       │   │                           │   ├── FlowRequestProcessor.java
│   │       │   │                           │   ├── ParamFlowRequestProcessor.java
│   │       │   │                           │   ├── RequestProcessor.java
│   │       │   │                           │   └── RequestProcessorProvider.java
│   │       │   │                           └── util/
│   │       │   │                               └── ClusterRuleUtil.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               ├── com.alibaba.csp.sentinel.cluster.TokenService
│   │       │               ├── com.alibaba.csp.sentinel.cluster.codec.request.RequestEntityDecoder
│   │       │               ├── com.alibaba.csp.sentinel.cluster.codec.response.ResponseEntityWriter
│   │       │               ├── com.alibaba.csp.sentinel.cluster.server.EmbeddedClusterTokenServer
│   │       │               ├── com.alibaba.csp.sentinel.cluster.server.processor.RequestProcessor
│   │       │               ├── com.alibaba.csp.sentinel.command.CommandHandler
│   │       │               └── com.alibaba.csp.sentinel.init.InitFunc
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── cluster/
│   │                                   ├── AbstractTimeBasedTest.java
│   │                                   ├── ClusterFlowTestUtil.java
│   │                                   ├── flow/
│   │                                   │   ├── ClusterFlowCheckerTest.java
│   │                                   │   ├── ConcurrentClusterFlowCheckerTest.java
│   │                                   │   └── statistic/
│   │                                   │       ├── concurrent/
│   │                                   │       │   ├── CurrentConcurrencyManagerTest.java
│   │                                   │       │   └── TokenCacheNodeManagerTest.java
│   │                                   │       ├── limit/
│   │                                   │       │   ├── GlobalRequestLimiterTest.java
│   │                                   │       │   └── RequestLimiterTest.java
│   │                                   │       └── metric/
│   │                                   │           ├── ClusterMetricTest.java
│   │                                   │           └── ClusterParamMetricTest.java
│   │                                   └── server/
│   │                                       ├── AbstractTimeBasedTest.java
│   │                                       ├── codec/
│   │                                       │   └── data/
│   │                                       │       └── PingResponseDataWriterTest.java
│   │                                       ├── config/
│   │                                       │   └── ClusterServerConfigManagerTest.java
│   │                                       └── connection/
│   │                                           ├── ConnectionGroupTest.java
│   │                                           └── ConnectionManagerTest.java
│   └── sentinel-cluster-server-envoy-rls/
│       ├── Dockerfile
│       ├── README.md
│       ├── pom.xml
│       ├── sample/
│       │   └── k8s/
│       │       ├── README.md
│       │       ├── envoy-legacy-v2-api.yml
│       │       ├── envoy-v3-api.yml
│       │       └── sentinel-rls.yml
│       └── src/
│           ├── main/
│           │   ├── java/
│           │   │   └── com/
│           │   │       └── alibaba/
│           │   │           └── csp/
│           │   │               └── sentinel/
│           │   │                   └── cluster/
│           │   │                       └── server/
│           │   │                           └── envoy/
│           │   │                               └── rls/
│           │   │                                   ├── SentinelEnvoyRlsConstants.java
│           │   │                                   ├── SentinelEnvoyRlsServer.java
│           │   │                                   ├── SentinelEnvoyRlsServiceImpl.java
│           │   │                                   ├── SentinelRlsGrpcServer.java
│           │   │                                   ├── datasource/
│           │   │                                   │   └── EnvoyRlsRuleDataSourceService.java
│           │   │                                   ├── flow/
│           │   │                                   │   └── SimpleClusterFlowChecker.java
│           │   │                                   ├── log/
│           │   │                                   │   └── RlsAccessLogger.java
│           │   │                                   ├── rule/
│           │   │                                   │   ├── EnvoyRlsRule.java
│           │   │                                   │   ├── EnvoyRlsRuleManager.java
│           │   │                                   │   └── EnvoySentinelRuleConverter.java
│           │   │                                   └── service/
│           │   │                                       └── v3/
│           │   │                                           └── SentinelEnvoyRlsServiceImpl.java
│           │   └── proto/
│           │       ├── envoy/
│           │       │   ├── api/
│           │       │   │   └── v2/
│           │       │   │       ├── core/
│           │       │   │       │   └── base.proto
│           │       │   │       └── ratelimit/
│           │       │   │           └── ratelimit.proto
│           │       │   ├── config/
│           │       │   │   └── core/
│           │       │   │       └── v3/
│           │       │   │           └── base.proto
│           │       │   ├── extensions/
│           │       │   │   └── common/
│           │       │   │       └── ratelimit/
│           │       │   │           └── v3/
│           │       │   │               └── ratelimit.proto
│           │       │   ├── service/
│           │       │   │   └── ratelimit/
│           │       │   │       ├── v2/
│           │       │   │       │   └── rls.proto
│           │       │   │       └── v3/
│           │       │   │           └── rls.proto
│           │       │   └── type/
│           │       │       └── v3/
│           │       │           └── ratelimit_unit.proto
│           │       ├── udpa/
│           │       │   └── annotations/
│           │       │       ├── BUILD
│           │       │       ├── migrate.proto
│           │       │       ├── security.proto
│           │       │       ├── sensitive.proto
│           │       │       ├── status.proto
│           │       │       └── versioning.proto
│           │       └── validate/
│           │           └── validate.proto
│           └── test/
│               └── java/
│                   └── com/
│                       └── alibaba/
│                           └── csp/
│                               └── sentinel/
│                                   └── cluster/
│                                       └── server/
│                                           └── envoy/
│                                               └── rls/
│                                                   ├── SentinelEnvoyRlsServiceImplTest.java
│                                                   ├── rule/
│                                                   │   └── EnvoySentinelRuleConverterTest.java
│                                                   └── service/
│                                                       └── v3/
│                                                           └── SentinelEnvoyRlsServiceImplTest.java
├── sentinel-core/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── alibaba/
│       │   │           └── csp/
│       │   │               └── sentinel/
│       │   │                   ├── AsyncEntry.java
│       │   │                   ├── Constants.java
│       │   │                   ├── CtEntry.java
│       │   │                   ├── CtSph.java
│       │   │                   ├── Entry.java
│       │   │                   ├── EntryType.java
│       │   │                   ├── Env.java
│       │   │                   ├── ErrorEntryFreeException.java
│       │   │                   ├── ResourceTypeConstants.java
│       │   │                   ├── Sph.java
│       │   │                   ├── SphO.java
│       │   │                   ├── SphResourceTypeSupport.java
│       │   │                   ├── SphU.java
│       │   │                   ├── Tracer.java
│       │   │                   ├── annotation/
│       │   │                   │   └── SentinelResource.java
│       │   │                   ├── cluster/
│       │   │                   │   ├── ClusterStateManager.java
│       │   │                   │   ├── TokenResult.java
│       │   │                   │   ├── TokenResultStatus.java
│       │   │                   │   ├── TokenServerDescriptor.java
│       │   │                   │   ├── TokenService.java
│       │   │                   │   ├── client/
│       │   │                   │   │   ├── ClusterTokenClient.java
│       │   │                   │   │   └── TokenClientProvider.java
│       │   │                   │   ├── log/
│       │   │                   │   │   ├── ClusterClientStatLogUtil.java
│       │   │                   │   │   └── ClusterStatLogUtil.java
│       │   │                   │   └── server/
│       │   │                   │       ├── ClusterTokenServer.java
│       │   │                   │       ├── EmbeddedClusterTokenServer.java
│       │   │                   │       └── EmbeddedClusterTokenServerProvider.java
│       │   │                   ├── concurrent/
│       │   │                   │   └── NamedThreadFactory.java
│       │   │                   ├── config/
│       │   │                   │   ├── SentinelConfig.java
│       │   │                   │   └── SentinelConfigLoader.java
│       │   │                   ├── context/
│       │   │                   │   ├── Context.java
│       │   │                   │   ├── ContextNameDefineException.java
│       │   │                   │   ├── ContextUtil.java
│       │   │                   │   └── NullContext.java
│       │   │                   ├── eagleeye/
│       │   │                   │   ├── BaseLoggerBuilder.java
│       │   │                   │   ├── EagleEye.java
│       │   │                   │   ├── EagleEyeAppender.java
│       │   │                   │   ├── EagleEyeCoreUtils.java
│       │   │                   │   ├── EagleEyeLogDaemon.java
│       │   │                   │   ├── EagleEyeRollingFileAppender.java
│       │   │                   │   ├── FastDateFormat.java
│       │   │                   │   ├── StatEntry.java
│       │   │                   │   ├── StatEntryFunc.java
│       │   │                   │   ├── StatLogController.java
│       │   │                   │   ├── StatLogger.java
│       │   │                   │   ├── StatLoggerBuilder.java
│       │   │                   │   ├── StatRollingData.java
│       │   │                   │   ├── SyncAppender.java
│       │   │                   │   └── TokenBucket.java
│       │   │                   ├── init/
│       │   │                   │   ├── InitExecutor.java
│       │   │                   │   ├── InitFunc.java
│       │   │                   │   └── InitOrder.java
│       │   │                   ├── log/
│       │   │                   │   ├── LogBase.java
│       │   │                   │   ├── LogConfigLoader.java
│       │   │                   │   ├── LogTarget.java
│       │   │                   │   ├── Logger.java
│       │   │                   │   ├── LoggerSpiProvider.java
│       │   │                   │   ├── RecordLog.java
│       │   │                   │   └── jul/
│       │   │                   │       ├── BaseJulLogger.java
│       │   │                   │       ├── ConsoleHandler.java
│       │   │                   │       ├── CspFormatter.java
│       │   │                   │       ├── DateFileLogHandler.java
│       │   │                   │       ├── FormattingTuple.java
│       │   │                   │       ├── JavaLoggingAdapter.java
│       │   │                   │       ├── Level.java
│       │   │                   │       └── MessageFormatter.java
│       │   │                   ├── metric/
│       │   │                   │   └── extension/
│       │   │                   │       ├── AdvancedMetricExtension.java
│       │   │                   │       ├── MetricCallbackInit.java
│       │   │                   │       ├── MetricExtension.java
│       │   │                   │       ├── MetricExtensionProvider.java
│       │   │                   │       └── callback/
│       │   │                   │           ├── MetricEntryCallback.java
│       │   │                   │           └── MetricExitCallback.java
│       │   │                   ├── node/
│       │   │                   │   ├── ClusterNode.java
│       │   │                   │   ├── DefaultNode.java
│       │   │                   │   ├── EntranceNode.java
│       │   │                   │   ├── IntervalProperty.java
│       │   │                   │   ├── Node.java
│       │   │                   │   ├── NodeBuilder.java
│       │   │                   │   ├── OccupySupport.java
│       │   │                   │   ├── OccupyTimeoutProperty.java
│       │   │                   │   ├── SampleCountProperty.java
│       │   │                   │   ├── StatisticNode.java
│       │   │                   │   └── metric/
│       │   │                   │       ├── MetricNode.java
│       │   │                   │       ├── MetricSearcher.java
│       │   │                   │       ├── MetricTimerListener.java
│       │   │                   │       ├── MetricWriter.java
│       │   │                   │       └── MetricsReader.java
│       │   │                   ├── property/
│       │   │                   │   ├── DynamicSentinelProperty.java
│       │   │                   │   ├── NoOpSentinelProperty.java
│       │   │                   │   ├── PropertyListener.java
│       │   │                   │   ├── SentinelProperty.java
│       │   │                   │   └── SimplePropertyListener.java
│       │   │                   ├── slotchain/
│       │   │                   │   ├── AbstractLinkedProcessorSlot.java
│       │   │                   │   ├── DefaultProcessorSlotChain.java
│       │   │                   │   ├── MethodResourceWrapper.java
│       │   │                   │   ├── ProcessorSlot.java
│       │   │                   │   ├── ProcessorSlotChain.java
│       │   │                   │   ├── ProcessorSlotEntryCallback.java
│       │   │                   │   ├── ProcessorSlotExitCallback.java
│       │   │                   │   ├── ResourceWrapper.java
│       │   │                   │   ├── SlotChainBuilder.java
│       │   │                   │   ├── SlotChainProvider.java
│       │   │                   │   └── StringResourceWrapper.java
│       │   │                   ├── slots/
│       │   │                   │   ├── DefaultSlotChainBuilder.java
│       │   │                   │   ├── block/
│       │   │                   │   │   ├── AbstractRule.java
│       │   │                   │   │   ├── BlockException.java
│       │   │                   │   │   ├── ClusterRuleConstant.java
│       │   │                   │   │   ├── Rule.java
│       │   │                   │   │   ├── RuleConstant.java
│       │   │                   │   │   ├── RuleManager.java
│       │   │                   │   │   ├── SentinelRpcException.java
│       │   │                   │   │   ├── authority/
│       │   │                   │   │   │   ├── AuthorityException.java
│       │   │                   │   │   │   ├── AuthorityRule.java
│       │   │                   │   │   │   ├── AuthorityRuleChecker.java
│       │   │                   │   │   │   ├── AuthorityRuleManager.java
│       │   │                   │   │   │   └── AuthoritySlot.java
│       │   │                   │   │   ├── degrade/
│       │   │                   │   │   │   ├── DefaultCircuitBreakerRuleManager.java
│       │   │                   │   │   │   ├── DefaultCircuitBreakerSlot.java
│       │   │                   │   │   │   ├── DegradeException.java
│       │   │                   │   │   │   ├── DegradeRule.java
│       │   │                   │   │   │   ├── DegradeRuleManager.java
│       │   │                   │   │   │   ├── DegradeSlot.java
│       │   │                   │   │   │   └── circuitbreaker/
│       │   │                   │   │   │       ├── AbstractCircuitBreaker.java
│       │   │                   │   │   │       ├── CircuitBreaker.java
│       │   │                   │   │   │       ├── CircuitBreakerStateChangeObserver.java
│       │   │                   │   │   │       ├── CircuitBreakerStrategy.java
│       │   │                   │   │   │       ├── EventObserverRegistry.java
│       │   │                   │   │   │       ├── ExceptionCircuitBreaker.java
│       │   │                   │   │   │       └── ResponseTimeCircuitBreaker.java
│       │   │                   │   │   └── flow/
│       │   │                   │   │       ├── ClusterFlowConfig.java
│       │   │                   │   │       ├── ColdFactorProperty.java
│       │   │                   │   │       ├── FlowException.java
│       │   │                   │   │       ├── FlowRule.java
│       │   │                   │   │       ├── FlowRuleChecker.java
│       │   │                   │   │       ├── FlowRuleComparator.java
│       │   │                   │   │       ├── FlowRuleManager.java
│       │   │                   │   │       ├── FlowRuleUtil.java
│       │   │                   │   │       ├── FlowSlot.java
│       │   │                   │   │       ├── PriorityWaitException.java
│       │   │                   │   │       ├── TrafficShapingController.java
│       │   │                   │   │       ├── controller/
│       │   │                   │   │       │   ├── DefaultController.java
│       │   │                   │   │       │   ├── ThrottlingController.java
│       │   │                   │   │       │   ├── WarmUpController.java
│       │   │                   │   │       │   └── WarmUpRateLimiterController.java
│       │   │                   │   │       └── tokenbucket/
│       │   │                   │   │           ├── AbstractTokenBucket.java
│       │   │                   │   │           ├── DefaultTokenBucket.java
│       │   │                   │   │           ├── StrictTokenBucket.java
│       │   │                   │   │           └── TokenBucket.java
│       │   │                   │   ├── clusterbuilder/
│       │   │                   │   │   └── ClusterBuilderSlot.java
│       │   │                   │   ├── logger/
│       │   │                   │   │   ├── EagleEyeLogUtil.java
│       │   │                   │   │   └── LogSlot.java
│       │   │                   │   ├── nodeselector/
│       │   │                   │   │   └── NodeSelectorSlot.java
│       │   │                   │   ├── statistic/
│       │   │                   │   │   ├── MetricEvent.java
│       │   │                   │   │   ├── StatisticSlot.java
│       │   │                   │   │   ├── StatisticSlotCallbackRegistry.java
│       │   │                   │   │   ├── base/
│       │   │                   │   │   │   ├── LeapArray.java
│       │   │                   │   │   │   ├── UnaryLeapArray.java
│       │   │                   │   │   │   └── WindowWrap.java
│       │   │                   │   │   ├── data/
│       │   │                   │   │   │   └── MetricBucket.java
│       │   │                   │   │   └── metric/
│       │   │                   │   │       ├── ArrayMetric.java
│       │   │                   │   │       ├── BucketLeapArray.java
│       │   │                   │   │       ├── DebugSupport.java
│       │   │                   │   │       ├── Metric.java
│       │   │                   │   │       └── occupy/
│       │   │                   │   │           ├── FutureBucketLeapArray.java
│       │   │                   │   │           └── OccupiableBucketLeapArray.java
│       │   │                   │   └── system/
│       │   │                   │       ├── SystemBlockException.java
│       │   │                   │       ├── SystemRule.java
│       │   │                   │       ├── SystemRuleManager.java
│       │   │                   │       ├── SystemSlot.java
│       │   │                   │       └── SystemStatusListener.java
│       │   │                   ├── spi/
│       │   │                   │   ├── Spi.java
│       │   │                   │   ├── SpiLoader.java
│       │   │                   │   └── SpiLoaderException.java
│       │   │                   └── util/
│       │   │                       ├── AppNameUtil.java
│       │   │                       ├── AssertUtil.java
│       │   │                       ├── ConfigUtil.java
│       │   │                       ├── HostNameUtil.java
│       │   │                       ├── IdUtil.java
│       │   │                       ├── MethodUtil.java
│       │   │                       ├── PidUtil.java
│       │   │                       ├── StringUtil.java
│       │   │                       ├── TimeUtil.java
│       │   │                       ├── VersionUtil.java
│       │   │                       └── function/
│       │   │                           ├── BiConsumer.java
│       │   │                           ├── Consumer.java
│       │   │                           ├── Function.java
│       │   │                           ├── Predicate.java
│       │   │                           ├── Supplier.java
│       │   │                           └── Tuple2.java
│       │   └── resources/
│       │       └── META-INF/
│       │           └── services/
│       │               ├── com.alibaba.csp.sentinel.init.InitFunc
│       │               ├── com.alibaba.csp.sentinel.slotchain.ProcessorSlot
│       │               └── com.alibaba.csp.sentinel.slotchain.SlotChainBuilder
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── alibaba/
│           │           └── csp/
│           │               └── sentinel/
│           │                   ├── AsyncEntryIntegrationTest.java
│           │                   ├── AsyncEntryTest.java
│           │                   ├── ConfigPropertyHelper.java
│           │                   ├── CtEntryTest.java
│           │                   ├── CtSphTest.java
│           │                   ├── EntryTest.java
│           │                   ├── RecordLogTest.java
│           │                   ├── SphOTest.java
│           │                   ├── SphUTest.java
│           │                   ├── TracerTest.java
│           │                   ├── config/
│           │                   │   └── SentinelConfigTest.java
│           │                   ├── context/
│           │                   │   ├── ContextTest.java
│           │                   │   └── ContextTestUtil.java
│           │                   ├── eagleeye/
│           │                   │   ├── EagleEyeCoreUtilsTest.java
│           │                   │   └── TokenBucketTest.java
│           │                   ├── log/
│           │                   │   ├── LogBaseTest.java
│           │                   │   └── jul/
│           │                   │       └── ConsoleHandlerTest.java
│           │                   ├── metric/
│           │                   │   └── extension/
│           │                   │       └── callback/
│           │                   │           ├── FakeAdvancedMetricExtension.java
│           │                   │           ├── FakeMetricExtension.java
│           │                   │           ├── MetricEntryCallbackTest.java
│           │                   │           └── MetricExitCallbackTest.java
│           │                   ├── node/
│           │                   │   ├── ClusterNodeTest.java
│           │                   │   ├── StatisticNodeTest.java
│           │                   │   └── metric/
│           │                   │       ├── MetricNodeTest.java
│           │                   │       └── MetricWriterTest.java
│           │                   ├── slots/
│           │                   │   ├── DefaultSlotChainBuilderTest.java
│           │                   │   ├── block/
│           │                   │   │   ├── RuleManagerTest.java
│           │                   │   │   ├── authority/
│           │                   │   │   │   ├── AuthorityPartialIntegrationTest.java
│           │                   │   │   │   ├── AuthorityRuleCheckerTest.java
│           │                   │   │   │   ├── AuthorityRuleManagerTest.java
│           │                   │   │   │   └── AuthoritySlotTest.java
│           │                   │   │   ├── degrade/
│           │                   │   │   │   ├── CircuitBreakingIntegrationTest.java
│           │                   │   │   │   ├── DefaultCircuitBreakerRuleManagerTest.java
│           │                   │   │   │   ├── DefaultCircuitBreakerSlotTest.java
│           │                   │   │   │   ├── DegradePartialIntegrationTest.java
│           │                   │   │   │   ├── DegradeRuleManagerTest.java
│           │                   │   │   │   ├── DegradeRuleTest.java
│           │                   │   │   │   └── circuitbreaker/
│           │                   │   │   │       ├── ExceptionCircuitBreakerTest.java
│           │                   │   │   │       └── ResponseTimeCircuitBreakerTest.java
│           │                   │   │   ├── flow/
│           │                   │   │   │   ├── FlowPartialIntegrationTest.java
│           │                   │   │   │   ├── FlowRuleCheckerTest.java
│           │                   │   │   │   ├── FlowRuleComparatorTest.java
│           │                   │   │   │   ├── FlowRuleManagerTest.java
│           │                   │   │   │   ├── FlowSlotTest.java
│           │                   │   │   │   ├── controller/
│           │                   │   │   │   │   ├── DefaultControllerTest.java
│           │                   │   │   │   │   ├── ThrottlingControllerTest.java
│           │                   │   │   │   │   ├── WarmUpControllerTest.java
│           │                   │   │   │   │   └── WarmUpRateLimiterControllerTest.java
│           │                   │   │   │   └── tokenbucket/
│           │                   │   │   │       └── TokenBucketTest.java
│           │                   │   │   └── system/
│           │                   │   │       ├── SystemGuardIntegrationTest.java
│           │                   │   │       └── SystemRuleTest.java
│           │                   │   ├── clusterbuilder/
│           │                   │   │   └── ClusterNodeBuilderTest.java
│           │                   │   ├── logger/
│           │                   │   │   └── EagleEyeLogUtilTest.java
│           │                   │   ├── nodeselector/
│           │                   │   │   └── NodeSelectorTest.java
│           │                   │   ├── statistic/
│           │                   │   │   ├── base/
│           │                   │   │   │   └── LeapArrayTest.java
│           │                   │   │   └── metric/
│           │                   │   │       ├── ArrayMetricTest.java
│           │                   │   │       ├── BucketLeapArrayTest.java
│           │                   │   │       ├── FutureBucketLeapArrayTest.java
│           │                   │   │       └── OccupiableBucketLeapArrayTest.java
│           │                   │   └── system/
│           │                   │       └── SystemRuleManagerTest.java
│           │                   ├── spi/
│           │                   │   ├── SpiLoaderTest.java
│           │                   │   ├── TestFiveProvider.java
│           │                   │   ├── TestFourProvider.java
│           │                   │   ├── TestInterface.java
│           │                   │   ├── TestNoProviderInterface.java
│           │                   │   ├── TestNoSpiFileInterface.java
│           │                   │   ├── TestOneProvider.java
│           │                   │   ├── TestThreeProvider.java
│           │                   │   └── TestTwoProvider.java
│           │                   ├── test/
│           │                   │   └── AbstractTimeBasedTest.java
│           │                   └── util/
│           │                       ├── ConfigUtilTest.java
│           │                       ├── IdUtilTest.java
│           │                       ├── MethodUtilTest.java
│           │                       ├── StringUtilTest.java
│           │                       ├── TimeUtilTest.java
│           │                       ├── VersionUtilTest.java
│           │                       └── function/
│           │                           └── Tuple2Test.java
│           └── resources/
│               └── META-INF/
│                   └── services/
│                       ├── com.alibaba.csp.sentinel.spi.TestInterface
│                       └── com.alibaba.csp.sentinel.spi.TestNoProviderInterface
├── sentinel-dashboard/
│   ├── Dockerfile
│   ├── README.md
│   ├── Sentinel_Dashboard_Feature.md
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── alibaba/
│       │   │           └── csp/
│       │   │               └── sentinel/
│       │   │                   └── dashboard/
│       │   │                       ├── DashboardApplication.java
│       │   │                       ├── auth/
│       │   │                       │   ├── AuthAction.java
│       │   │                       │   ├── AuthService.java
│       │   │                       │   ├── AuthorizationInterceptor.java
│       │   │                       │   ├── DefaultAuthorizationInterceptor.java
│       │   │                       │   ├── DefaultLoginAuthenticationFilter.java
│       │   │                       │   ├── FakeAuthServiceImpl.java
│       │   │                       │   ├── LoginAuthenticationFilter.java
│       │   │                       │   └── SimpleWebAuthServiceImpl.java
│       │   │                       ├── client/
│       │   │                       │   ├── CommandFailedException.java
│       │   │                       │   ├── CommandNotFoundException.java
│       │   │                       │   └── SentinelApiClient.java
│       │   │                       ├── config/
│       │   │                       │   ├── AuthConfiguration.java
│       │   │                       │   ├── AuthProperties.java
│       │   │                       │   ├── DashboardConfig.java
│       │   │                       │   └── WebConfig.java
│       │   │                       ├── controller/
│       │   │                       │   ├── AppController.java
│       │   │                       │   ├── AuthController.java
│       │   │                       │   ├── AuthorityRuleController.java
│       │   │                       │   ├── DegradeController.java
│       │   │                       │   ├── DemoController.java
│       │   │                       │   ├── FlowControllerV1.java
│       │   │                       │   ├── MachineRegistryController.java
│       │   │                       │   ├── MetricController.java
│       │   │                       │   ├── ParamFlowRuleController.java
│       │   │                       │   ├── ResourceController.java
│       │   │                       │   ├── SystemController.java
│       │   │                       │   ├── VersionController.java
│       │   │                       │   ├── cluster/
│       │   │                       │   │   ├── ClusterAssignController.java
│       │   │                       │   │   └── ClusterConfigController.java
│       │   │                       │   ├── gateway/
│       │   │                       │   │   ├── GatewayApiController.java
│       │   │                       │   │   └── GatewayFlowRuleController.java
│       │   │                       │   └── v2/
│       │   │                       │       └── FlowControllerV2.java
│       │   │                       ├── datasource/
│       │   │                       │   └── entity/
│       │   │                       │       ├── ApplicationEntity.java
│       │   │                       │       ├── MachineEntity.java
│       │   │                       │       ├── MetricEntity.java
│       │   │                       │       ├── MetricPositionEntity.java
│       │   │                       │       ├── SentinelVersion.java
│       │   │                       │       ├── gateway/
│       │   │                       │       │   ├── ApiDefinitionEntity.java
│       │   │                       │       │   ├── ApiPredicateItemEntity.java
│       │   │                       │       │   ├── GatewayFlowRuleEntity.java
│       │   │                       │       │   └── GatewayParamFlowItemEntity.java
│       │   │                       │       └── rule/
│       │   │                       │           ├── AbstractRuleEntity.java
│       │   │                       │           ├── AuthorityRuleEntity.java
│       │   │                       │           ├── DegradeRuleEntity.java
│       │   │                       │           ├── FlowRuleEntity.java
│       │   │                       │           ├── ParamFlowRuleEntity.java
│       │   │                       │           ├── RuleEntity.java
│       │   │                       │           └── SystemRuleEntity.java
│       │   │                       ├── discovery/
│       │   │                       │   ├── AppInfo.java
│       │   │                       │   ├── AppManagement.java
│       │   │                       │   ├── MachineDiscovery.java
│       │   │                       │   ├── MachineInfo.java
│       │   │                       │   └── SimpleMachineDiscovery.java
│       │   │                       ├── domain/
│       │   │                       │   ├── ResourceTreeNode.java
│       │   │                       │   ├── Result.java
│       │   │                       │   ├── cluster/
│       │   │                       │   │   ├── ClusterAppAssignResultVO.java
│       │   │                       │   │   ├── ClusterAppFullAssignRequest.java
│       │   │                       │   │   ├── ClusterAppSingleServerAssignRequest.java
│       │   │                       │   │   ├── ClusterClientInfoVO.java
│       │   │                       │   │   ├── ClusterGroupEntity.java
│       │   │                       │   │   ├── ClusterStateSingleVO.java
│       │   │                       │   │   ├── ConnectionDescriptorVO.java
│       │   │                       │   │   ├── ConnectionGroupVO.java
│       │   │                       │   │   ├── config/
│       │   │                       │   │   │   ├── ClusterClientConfig.java
│       │   │                       │   │   │   ├── ServerFlowConfig.java
│       │   │                       │   │   │   └── ServerTransportConfig.java
│       │   │                       │   │   ├── request/
│       │   │                       │   │   │   ├── ClusterAppAssignMap.java
│       │   │                       │   │   │   ├── ClusterClientModifyRequest.java
│       │   │                       │   │   │   ├── ClusterModifyRequest.java
│       │   │                       │   │   │   └── ClusterServerModifyRequest.java
│       │   │                       │   │   └── state/
│       │   │                       │   │       ├── AppClusterClientStateWrapVO.java
│       │   │                       │   │       ├── AppClusterServerStateWrapVO.java
│       │   │                       │   │       ├── ClusterClientStateVO.java
│       │   │                       │   │       ├── ClusterRequestLimitVO.java
│       │   │                       │   │       ├── ClusterServerStateVO.java
│       │   │                       │   │       ├── ClusterStateSimpleEntity.java
│       │   │                       │   │       ├── ClusterUniversalStatePairVO.java
│       │   │                       │   │       └── ClusterUniversalStateVO.java
│       │   │                       │   └── vo/
│       │   │                       │       ├── MachineInfoVo.java
│       │   │                       │       ├── MetricVo.java
│       │   │                       │       ├── ResourceVo.java
│       │   │                       │       └── gateway/
│       │   │                       │           ├── api/
│       │   │                       │           │   ├── AddApiReqVo.java
│       │   │                       │           │   ├── ApiPredicateItemVo.java
│       │   │                       │           │   └── UpdateApiReqVo.java
│       │   │                       │           └── rule/
│       │   │                       │               ├── AddFlowRuleReqVo.java
│       │   │                       │               ├── GatewayParamFlowItemVo.java
│       │   │                       │               └── UpdateFlowRuleReqVo.java
│       │   │                       ├── metric/
│       │   │                       │   └── MetricFetcher.java
│       │   │                       ├── repository/
│       │   │                       │   ├── gateway/
│       │   │                       │   │   ├── InMemApiDefinitionStore.java
│       │   │                       │   │   └── InMemGatewayFlowRuleStore.java
│       │   │                       │   ├── metric/
│       │   │                       │   │   ├── InMemoryMetricsRepository.java
│       │   │                       │   │   └── MetricsRepository.java
│       │   │                       │   └── rule/
│       │   │                       │       ├── InMemAuthorityRuleStore.java
│       │   │                       │       ├── InMemDegradeRuleStore.java
│       │   │                       │       ├── InMemFlowRuleStore.java
│       │   │                       │       ├── InMemParamFlowRuleStore.java
│       │   │                       │       ├── InMemSystemRuleStore.java
│       │   │                       │       ├── InMemoryRuleRepositoryAdapter.java
│       │   │                       │       └── RuleRepository.java
│       │   │                       ├── rule/
│       │   │                       │   ├── DynamicRuleProvider.java
│       │   │                       │   ├── DynamicRulePublisher.java
│       │   │                       │   ├── FlowRuleApiProvider.java
│       │   │                       │   └── FlowRuleApiPublisher.java
│       │   │                       ├── service/
│       │   │                       │   ├── ClusterAssignService.java
│       │   │                       │   ├── ClusterAssignServiceImpl.java
│       │   │                       │   └── ClusterConfigService.java
│       │   │                       └── util/
│       │   │                           ├── AsyncUtils.java
│       │   │                           ├── ClusterEntityUtils.java
│       │   │                           ├── MachineUtils.java
│       │   │                           └── VersionUtils.java
│       │   ├── resources/
│       │   │   └── application.properties
│       │   └── webapp/
│       │       └── resources/
│       │           ├── .gitignore
│       │           ├── .jshintrc
│       │           ├── README.md
│       │           ├── README_zh.md
│       │           ├── app/
│       │           │   ├── scripts/
│       │           │   │   ├── app.js
│       │           │   │   ├── controllers/
│       │           │   │   │   ├── authority.js
│       │           │   │   │   ├── cluster_app_assign_manage.js
│       │           │   │   │   ├── cluster_app_server_list.js
│       │           │   │   │   ├── cluster_app_server_manage.js
│       │           │   │   │   ├── cluster_app_server_monitor.js
│       │           │   │   │   ├── cluster_app_token_client_list.js
│       │           │   │   │   ├── cluster_single.js
│       │           │   │   │   ├── degrade.js
│       │           │   │   │   ├── flow_v1.js
│       │           │   │   │   ├── flow_v2.js
│       │           │   │   │   ├── gateway/
│       │           │   │   │   │   ├── api.js
│       │           │   │   │   │   ├── flow.js
│       │           │   │   │   │   └── identity.js
│       │           │   │   │   ├── home.js
│       │           │   │   │   ├── identity.js
│       │           │   │   │   ├── login.js
│       │           │   │   │   ├── machine.js
│       │           │   │   │   ├── main.js
│       │           │   │   │   ├── metric.js
│       │           │   │   │   ├── param_flow.js
│       │           │   │   │   └── system.js
│       │           │   │   ├── directives/
│       │           │   │   │   ├── header/
│       │           │   │   │   │   ├── header.html
│       │           │   │   │   │   └── header.js
│       │           │   │   │   └── sidebar/
│       │           │   │   │       ├── sidebar-search/
│       │           │   │   │       │   ├── sidebar-search.html
│       │           │   │   │       │   └── sidebar-search.js
│       │           │   │   │       ├── sidebar.html
│       │           │   │   │       └── sidebar.js
│       │           │   │   ├── filters/
│       │           │   │   │   └── filters.js
│       │           │   │   ├── libs/
│       │           │   │   │   └── treeTable.js
│       │           │   │   └── services/
│       │           │   │       ├── appservice.js
│       │           │   │       ├── auth_service.js
│       │           │   │       ├── authority_service.js
│       │           │   │       ├── cluster_state_service.js
│       │           │   │       ├── degrade_service.js
│       │           │   │       ├── flow_service_v1.js
│       │           │   │       ├── flow_service_v2.js
│       │           │   │       ├── gateway/
│       │           │   │       │   ├── api_service.js
│       │           │   │       │   └── flow_service.js
│       │           │   │       ├── identityservice.js
│       │           │   │       ├── machineservice.js
│       │           │   │       ├── metricservice.js
│       │           │   │       ├── param_flow_service.js
│       │           │   │       ├── systemservice.js
│       │           │   │       └── version_service.js
│       │           │   ├── styles/
│       │           │   │   ├── main.css
│       │           │   │   ├── page.css
│       │           │   │   └── timeline.css
│       │           │   └── views/
│       │           │       ├── authority.html
│       │           │       ├── cluster/
│       │           │       │   ├── client.html
│       │           │       │   └── server.html
│       │           │       ├── cluster_app_assign_manage.html
│       │           │       ├── cluster_app_client_list.html
│       │           │       ├── cluster_app_server_list.html
│       │           │       ├── cluster_app_server_overview.html
│       │           │       ├── cluster_single_config.html
│       │           │       ├── dashboard/
│       │           │       │   ├── home.html
│       │           │       │   └── main.html
│       │           │       ├── degrade.html
│       │           │       ├── dialog/
│       │           │       │   ├── authority-rule-dialog.html
│       │           │       │   ├── cluster/
│       │           │       │   │   ├── cluster-client-config-dialog.html
│       │           │       │   │   ├── cluster-server-assign-dialog.html
│       │           │       │   │   └── cluster-server-connection-detail-dialog.html
│       │           │       │   ├── confirm-dialog.html
│       │           │       │   ├── degrade-rule-dialog.html
│       │           │       │   ├── flow-rule-dialog.html
│       │           │       │   ├── gateway/
│       │           │       │   │   ├── api-dialog.html
│       │           │       │   │   └── flow-rule-dialog.html
│       │           │       │   ├── param-flow-rule-dialog.html
│       │           │       │   └── system-rule-dialog.html
│       │           │       ├── flow_v1.html
│       │           │       ├── flow_v2.html
│       │           │       ├── gateway/
│       │           │       │   ├── api.html
│       │           │       │   ├── flow.html
│       │           │       │   └── identity.html
│       │           │       ├── identity.html
│       │           │       ├── login.html
│       │           │       ├── machine.html
│       │           │       ├── metric.html
│       │           │       ├── pagination.tpl.html
│       │           │       ├── param_flow.html
│       │           │       └── system.html
│       │           ├── dist/
│       │           │   ├── css/
│       │           │   │   └── app.css
│       │           │   └── js/
│       │           │       ├── app.js
│       │           │       └── app.vendor.js
│       │           ├── gulpfile.js
│       │           ├── index.htm
│       │           ├── index_dev.htm
│       │           ├── license-stat.csv
│       │           └── package.json
│       └── test/
│           └── java/
│               └── com/
│                   └── alibaba/
│                       └── csp/
│                           └── sentinel/
│                               └── dashboard/
│                                   ├── client/
│                                   │   └── SentinelApiClientTest.java
│                                   ├── config/
│                                   │   ├── DashboardConfigTest.java
│                                   │   └── NoAuthConfigurationTest.java
│                                   ├── controller/
│                                   │   └── gateway/
│                                   │       ├── GatewayApiControllerTest.java
│                                   │       └── GatewayFlowRuleControllerTest.java
│                                   ├── datasource/
│                                   │   └── entity/
│                                   │       ├── JsonSerializeTest.java
│                                   │       └── SentinelVersionTest.java
│                                   ├── discovery/
│                                   │   ├── AppInfoTest.java
│                                   │   └── MachineInfoTest.java
│                                   ├── repository/
│                                   │   └── metric/
│                                   │       └── InMemoryMetricsRepositoryTest.java
│                                   ├── rule/
│                                   │   ├── apollo/
│                                   │   │   ├── ApolloConfig.java
│                                   │   │   ├── ApolloConfigUtil.java
│                                   │   │   ├── FlowRuleApolloProvider.java
│                                   │   │   └── FlowRuleApolloPublisher.java
│                                   │   ├── nacos/
│                                   │   │   ├── FlowRuleNacosProvider.java
│                                   │   │   ├── FlowRuleNacosPublisher.java
│                                   │   │   ├── NacosConfig.java
│                                   │   │   └── NacosConfigUtil.java
│                                   │   └── zookeeper/
│                                   │       ├── FlowRuleZookeeperProvider.java
│                                   │       ├── FlowRuleZookeeperPublisher.java
│                                   │       ├── ZookeeperConfig.java
│                                   │       └── ZookeeperConfigUtil.java
│                                   └── util/
│                                       └── VersionUtilsTest.java
├── sentinel-demo/
│   ├── README.md
│   ├── pom.xml
│   ├── sentinel-demo-annotation-cdi-interceptor/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── annotation/
│   │           │                           └── cdi/
│   │           │                               └── interceptor/
│   │           │                                   ├── DemoApplication.java
│   │           │                                   ├── ExceptionUtil.java
│   │           │                                   ├── TestService.java
│   │           │                                   └── TestServiceImpl.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── beans.xml
│   ├── sentinel-demo-annotation-spring-aop/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── annotation/
│   │           │                           └── aop/
│   │           │                               ├── DemoApplication.java
│   │           │                               ├── config/
│   │           │                               │   └── AopConfiguration.java
│   │           │                               ├── controller/
│   │           │                               │   └── DemoController.java
│   │           │                               └── service/
│   │           │                                   ├── ExceptionUtil.java
│   │           │                                   ├── TestService.java
│   │           │                                   └── TestServiceImpl.java
│   │           └── resources/
│   │               └── application.properties
│   ├── sentinel-demo-apache-dubbo/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── demo/
│   │                                   └── apache/
│   │                                       └── dubbo/
│   │                                           ├── FooConsumerBootstrap.java
│   │                                           ├── FooConsumerExceptionDegradeBootstrap.java
│   │                                           ├── FooProviderBootstrap.java
│   │                                           ├── FooService.java
│   │                                           ├── consumer/
│   │                                           │   ├── ConsumerConfiguration.java
│   │                                           │   └── FooServiceConsumer.java
│   │                                           └── provider/
│   │                                               ├── FooServiceImpl.java
│   │                                               └── ProviderConfiguration.java
│   ├── sentinel-demo-apache-httpclient/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── apache/
│   │           │                           └── httpclient/
│   │           │                               ├── ApacheHttpClientDemoApplication.java
│   │           │                               └── controller/
│   │           │                                   └── ApacheHttpClientTestController.java
│   │           └── resources/
│   │               └── application.properties
│   ├── sentinel-demo-apollo-datasource/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── datasource/
│   │           │                           └── apollo/
│   │           │                               ├── ApolloDataSourceDemo.java
│   │           │                               └── FlowQpsRunner.java
│   │           └── resources/
│   │               └── log4j2.xml
│   ├── sentinel-demo-basic/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── demo/
│   │                                   ├── AsyncEntryDemo.java
│   │                                   ├── authority/
│   │                                   │   └── AuthorityDemo.java
│   │                                   ├── degrade/
│   │                                   │   ├── ExceptionRatioCircuitBreakerDemo.java
│   │                                   │   └── SlowRatioCircuitBreakerDemo.java
│   │                                   ├── flow/
│   │                                   │   ├── FlowQpsDemo.java
│   │                                   │   ├── FlowQpsRegexDemo.java
│   │                                   │   ├── FlowThreadDemo.java
│   │                                   │   ├── PaceFlowDemo.java
│   │                                   │   ├── WarmUpFlowDemo.java
│   │                                   │   └── WarmUpRateLimiterFlowDemo.java
│   │                                   └── system/
│   │                                       └── SystemGuardDemo.java
│   ├── sentinel-demo-cluster/
│   │   ├── pom.xml
│   │   ├── sentinel-demo-cluster-embedded/
│   │   │   ├── README.md
│   │   │   ├── pom.xml
│   │   │   └── src/
│   │   │       └── main/
│   │   │           ├── java/
│   │   │           │   └── com/
│   │   │           │       └── alibaba/
│   │   │           │           └── csp/
│   │   │           │               └── sentinel/
│   │   │           │                   └── demo/
│   │   │           │                       └── cluster/
│   │   │           │                           ├── DemoConstants.java
│   │   │           │                           ├── app/
│   │   │           │                           │   ├── ClusterDemoApplication.java
│   │   │           │                           │   ├── config/
│   │   │           │                           │   │   └── AopConfig.java
│   │   │           │                           │   ├── controller/
│   │   │           │                           │   │   └── ClusterDemoController.java
│   │   │           │                           │   └── service/
│   │   │           │                           │       └── DemoService.java
│   │   │           │                           ├── entity/
│   │   │           │                           │   └── ClusterGroupEntity.java
│   │   │           │                           └── init/
│   │   │           │                               └── DemoClusterInitFunc.java
│   │   │           └── resources/
│   │   │               └── META-INF/
│   │   │                   └── services/
│   │   │                       └── com.alibaba.csp.sentinel.init.InitFunc
│   │   └── sentinel-demo-cluster-server-alone/
│   │       ├── pom.xml
│   │       └── src/
│   │           └── main/
│   │               ├── java/
│   │               │   └── com/
│   │               │       └── alibaba/
│   │               │           └── csp/
│   │               │               └── sentinel/
│   │               │                   └── demo/
│   │               │                       └── cluster/
│   │               │                           ├── ClusterServerDemo.java
│   │               │                           ├── DemoConstants.java
│   │               │                           └── init/
│   │               │                               └── DemoClusterServerInitFunc.java
│   │               └── resources/
│   │                   └── META-INF/
│   │                       └── services/
│   │                           └── com.alibaba.csp.sentinel.init.InitFunc
│   ├── sentinel-demo-command-handler/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── commandhandler/
│   │           │                           ├── CommandDemo.java
│   │           │                           ├── EchoCommandHandler.java
│   │           │                           └── interceptor/
│   │           │                               ├── AllCommandHandlerInterceptor.java
│   │           │                               └── EchoCommandHandlerInterceptor.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       ├── com.alibaba.csp.sentinel.command.CommandHandler
│   │                       └── com.alibaba.csp.sentinel.command.CommandHandlerInterceptor
│   ├── sentinel-demo-dubbo/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── demo/
│   │                                   └── dubbo/
│   │                                       ├── FooService.java
│   │                                       ├── consumer/
│   │                                       │   ├── ConsumerConfiguration.java
│   │                                       │   └── FooServiceConsumer.java
│   │                                       ├── demo1/
│   │                                       │   ├── FooConsumerBootstrap.java
│   │                                       │   ├── FooProviderBootstrap.java
│   │                                       │   ├── FooServiceImpl.java
│   │                                       │   └── ProviderConfiguration.java
│   │                                       └── demo2/
│   │                                           ├── FooConsumerBootstrap.java
│   │                                           ├── FooProviderBootstrap.java
│   │                                           ├── FooServiceImpl.java
│   │                                           └── ProviderConfiguration.java
│   ├── sentinel-demo-dynamic-file-rule/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── file/
│   │           │                           └── rule/
│   │           │                               ├── FileDataSourceDemo.java
│   │           │                               ├── FileDataSourceInit.java
│   │           │                               ├── FlowQpsRunner.java
│   │           │                               └── JarFileDataSourceDemo.java
│   │           └── resources/
│   │               ├── DegradeRule.json
│   │               ├── FlowRule.json
│   │               └── SystemRule.json
│   ├── sentinel-demo-etcd-datasource/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── demo/
│   │                                   └── datasource/
│   │                                       └── etcd/
│   │                                           ├── EtcdConfigSender.java
│   │                                           └── EtcdDataSourceDemo.java
│   ├── sentinel-demo-jax-rs/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── jaxrs/
│   │           │                           ├── CustomExceptionMapper.java
│   │           │                           ├── HelloEntity.java
│   │           │                           ├── HelloResource.java
│   │           │                           ├── JaxRsClientDemo.java
│   │           │                           ├── JaxRsDemoApplication.java
│   │           │                           └── SentinelJaxRsConfig.java
│   │           └── resources/
│   │               └── application.properties
│   ├── sentinel-demo-log-logback/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── demo/
│   │       │   │                       └── log/
│   │       │   │                           └── logback/
│   │       │   │                               ├── CommandCenterLogLoggerImpl.java
│   │       │   │                               └── RecordLogLoggerImpl.java
│   │       │   └── resources/
│   │       │       ├── META-INF/
│   │       │       │   └── services/
│   │       │       │       └── com.alibaba.csp.sentinel.log.Logger
│   │       │       └── logback.xml
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── demo/
│   │                                   └── log/
│   │                                       └── logback/
│   │                                           ├── CommandCenterLogTest.java
│   │                                           └── RecordLogTest.java
│   ├── sentinel-demo-motan/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── motan/
│   │           │                           ├── SentinelMotanConsumerService.java
│   │           │                           ├── SentinelMotanProviderService.java
│   │           │                           └── service/
│   │           │                               ├── MotanDemoService.java
│   │           │                               └── impl/
│   │           │                                   └── MotanDemoServiceImpl.java
│   │           └── resources/
│   │               └── sentinel.properties
│   ├── sentinel-demo-nacos-datasource/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── demo/
│   │                                   └── datasource/
│   │                                       └── nacos/
│   │                                           ├── FlowQpsRunner.java
│   │                                           ├── NacosConfigSender.java
│   │                                           └── NacosDataSourceDemo.java
│   ├── sentinel-demo-okhttp/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── okhttp/
│   │           │                           ├── OkHttpDemoApplication.java
│   │           │                           └── controller/
│   │           │                               └── OkHttpTestController.java
│   │           └── resources/
│   │               └── application.properties
│   ├── sentinel-demo-parameter-flow-control/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── demo/
│   │                                   └── flow/
│   │                                       └── param/
│   │                                           ├── ParamFlowQpsDemo.java
│   │                                           └── ParamFlowQpsRunner.java
│   ├── sentinel-demo-quarkus/
│   │   ├── .dockerignore
│   │   ├── .gitignore
│   │   ├── .mvn/
│   │   │   └── wrapper/
│   │   │       ├── MavenWrapperDownloader.java
│   │   │       ├── maven-wrapper.jar
│   │   │       └── maven-wrapper.properties
│   │   ├── README.md
│   │   ├── build-native.sh
│   │   ├── build.sh
│   │   ├── mvnw
│   │   ├── mvnw.cmd
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── docker/
│   │       │   │   ├── Dockerfile.jvm
│   │       │   │   └── Dockerfile.native
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── demo/
│   │       │   │                       └── quarkus/
│   │       │   │                           ├── AppLifecycleBean.java
│   │       │   │                           ├── CustomExceptionMapper.java
│   │       │   │                           ├── GreetingFallback.java
│   │       │   │                           ├── GreetingResource.java
│   │       │   │                           └── GreetingService.java
│   │       │   └── resources/
│   │       │       ├── META-INF/
│   │       │       │   └── resources/
│   │       │       │       └── index.html
│   │       │       └── application.properties
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── demo/
│   │                                   └── quarkus/
│   │                                       ├── GreetingResourceTest.java
│   │                                       └── NativeGreetingResourceIT.java
│   ├── sentinel-demo-rocketmq/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── demo/
│   │                                   └── rocketmq/
│   │                                       ├── Constants.java
│   │                                       ├── PullConsumerDemo.java
│   │                                       └── SyncProducer.java
│   ├── sentinel-demo-servlet/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── servlet/
│   │           │                           ├── config/
│   │           │                           │   └── SentinelConfig.java
│   │           │                           └── controller/
│   │           │                               └── DefaultServlet.java
│   │           ├── resources/
│   │           │   └── sentinel.properties
│   │           └── webapp/
│   │               └── WEB-INF/
│   │                   └── web.xml
│   ├── sentinel-demo-slot-spi/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── slot/
│   │           │                           ├── DemoApplication.java
│   │           │                           └── DemoSlot.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       └── com.alibaba.csp.sentinel.slotchain.ProcessorSlot
│   ├── sentinel-demo-slotchain-spi/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── slotchain/
│   │           │                           ├── DemoDegradeRuleApplication.java
│   │           │                           ├── DemoFlowRuleApplication.java
│   │           │                           └── DemoSlotChainBuilder.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       └── com.alibaba.csp.sentinel.slotchain.SlotChainBuilder
│   ├── sentinel-demo-sofa-rpc/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── sofa/
│   │           │                           └── rpc/
│   │           │                               ├── DemoConsumer.java
│   │           │                               ├── DemoProvider.java
│   │           │                               └── service/
│   │           │                                   ├── DemoService.java
│   │           │                                   └── impl/
│   │           │                                       └── DemoServiceImpl.java
│   │           └── resources/
│   │               ├── log4j.xml
│   │               └── sofa-rpc/
│   │                   └── rpc-config.json
│   ├── sentinel-demo-spring-cloud-gateway/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── spring/
│   │           │                           └── sc/
│   │           │                               └── gateway/
│   │           │                                   ├── GatewayConfiguration.java
│   │           │                                   └── GatewayDemoApplication.java
│   │           └── resources/
│   │               └── application.yml
│   ├── sentinel-demo-spring-webflux/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── spring/
│   │           │                           └── webflux/
│   │           │                               ├── WebFluxDemoApplication.java
│   │           │                               ├── config/
│   │           │                               │   ├── RedisConfig.java
│   │           │                               │   └── WebFluxConfig.java
│   │           │                               ├── controller/
│   │           │                               │   ├── BazController.java
│   │           │                               │   └── FooController.java
│   │           │                               └── service/
│   │           │                                   ├── BazService.java
│   │           │                                   └── FooService.java
│   │           └── resources/
│   │               └── application.properties
│   ├── sentinel-demo-spring-webmvc/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── spring/
│   │           │                           └── webmvc/
│   │           │                               ├── WebMvcDemoApplication.java
│   │           │                               ├── config/
│   │           │                               │   ├── InterceptorConfig.java
│   │           │                               │   └── SentinelSpringMvcBlockHandlerConfig.java
│   │           │                               ├── controller/
│   │           │                               │   └── WebMvcTestController.java
│   │           │                               └── vo/
│   │           │                                   └── ResultWrapper.java
│   │           └── resources/
│   │               └── application.properties
│   ├── sentinel-demo-transport-spring-mvc/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── transport/
│   │           │                           └── springmvc/
│   │           │                               └── TransportSpringMvcDemoApplication.java
│   │           └── resources/
│   │               └── application.properties
│   ├── sentinel-demo-zookeeper-datasource/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── demo/
│   │                                   └── datasource/
│   │                                       └── zookeeper/
│   │                                           ├── ZookeeperConfigSender.java
│   │                                           └── ZookeeperDataSourceDemo.java
│   ├── sentinel-demo-zuul-gateway/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── zuul/
│   │           │                           └── gateway/
│   │           │                               ├── GatewayRuleConfig.java
│   │           │                               ├── ZuulConfig.java
│   │           │                               └── ZuulGatewayDemoApplication.java
│   │           └── resources/
│   │               └── application.yml
│   └── sentinel-demo-zuul2-gateway/
│       ├── pom.xml
│       └── src/
│           └── main/
│               ├── java/
│               │   └── com/
│               │       └── alibaba/
│               │           └── csp/
│               │               └── sentinel/
│               │                   └── demo/
│               │                       └── zuul2/
│               │                           └── gateway/
│               │                               ├── FiltersRegisteringService.java
│               │                               ├── GatewayRuleConfig.java
│               │                               ├── SampleServerStartup.java
│               │                               ├── ZuulBootstrap.java
│               │                               ├── ZuulClasspathFiltersModule.java
│               │                               ├── ZuulSampleModule.java
│               │                               └── filters/
│               │                                   ├── NotFoundEndpoint.java
│               │                                   └── Route.java
│               └── resources/
│                   ├── application.properties
│                   └── log4j.properties
├── sentinel-extension/
│   ├── README.md
│   ├── pom.xml
│   ├── sentinel-annotation-aspectj/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── annotation/
│   │       │                           └── aspectj/
│   │       │                               ├── AbstractSentinelAspectSupport.java
│   │       │                               ├── MethodWrapper.java
│   │       │                               ├── ResourceMetadataRegistry.java
│   │       │                               └── SentinelResourceAspect.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── annotation/
│   │                                   └── aspectj/
│   │                                       ├── AbstractSentinelAspectSupportTest.java
│   │                                       ├── MethodWrapperTest.java
│   │                                       ├── ResourceMetadataRegistryTest.java
│   │                                       └── integration/
│   │                                           ├── SentinelAnnotationIntegrationTest.java
│   │                                           ├── config/
│   │                                           │   └── AopTestConfig.java
│   │                                           └── service/
│   │                                               ├── BarService.java
│   │                                               ├── FooService.java
│   │                                               ├── FooUtil.java
│   │                                               └── GlobalFallback.java
│   ├── sentinel-annotation-cdi-interceptor/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── annotation/
│   │       │   │                       └── cdi/
│   │       │   │                           └── interceptor/
│   │       │   │                               ├── AbstractSentinelInterceptorSupport.java
│   │       │   │                               ├── MethodWrapper.java
│   │       │   │                               ├── ResourceMetadataRegistry.java
│   │       │   │                               ├── SentinelResourceBinding.java
│   │       │   │                               └── SentinelResourceInterceptor.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── beans.xml
│   │       └── test/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── annotation/
│   │           │                       └── cdi/
│   │           │                           └── interceptor/
│   │           │                               ├── AbstractSentinelInterceptorSupportTest.java
│   │           │                               ├── MethodWrapperTest.java
│   │           │                               ├── ResourceMetadataRegistryTest.java
│   │           │                               └── integration/
│   │           │                                   ├── SentinelAnnotationInterceptorIntegrationTest.java
│   │           │                                   └── service/
│   │           │                                       ├── FooService.java
│   │           │                                       └── FooUtil.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── beans.xml
│   ├── sentinel-datasource-apollo/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── datasource/
│   │                                   └── apollo/
│   │                                       └── ApolloDataSource.java
│   ├── sentinel-datasource-consul/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── datasource/
│   │       │                           └── consul/
│   │       │                               └── ConsulDataSource.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── datasource/
│   │                                   └── consul/
│   │                                       └── ConsulDataSourceTest.java
│   ├── sentinel-datasource-etcd/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── datasource/
│   │       │                           └── etcd/
│   │       │                               ├── EtcdConfig.java
│   │       │                               └── EtcdDataSource.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── datasource/
│   │                                   └── etcd/
│   │                                       └── EtcdDataSourceTest.java
│   ├── sentinel-datasource-eureka/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── datasource/
│   │       │                           └── eureka/
│   │       │                               └── EurekaDataSource.java
│   │       └── test/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── datasource/
│   │           │                       └── eureka/
│   │           │                           ├── EurekaDataSourceTest.java
│   │           │                           └── SimpleSpringApplication.java
│   │           └── resources/
│   │               └── application.yml
│   ├── sentinel-datasource-extension/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── datasource/
│   │                                   ├── AbstractDataSource.java
│   │                                   ├── AutoRefreshDataSource.java
│   │                                   ├── Converter.java
│   │                                   ├── EmptyDataSource.java
│   │                                   ├── FileInJarReadableDataSource.java
│   │                                   ├── FileRefreshableDataSource.java
│   │                                   ├── FileWritableDataSource.java
│   │                                   ├── ReadableDataSource.java
│   │                                   └── WritableDataSource.java
│   ├── sentinel-datasource-nacos/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── datasource/
│   │                                   └── nacos/
│   │                                       └── NacosDataSource.java
│   ├── sentinel-datasource-redis/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── datasource/
│   │       │                           └── redis/
│   │       │                               ├── RedisDataSource.java
│   │       │                               └── config/
│   │       │                                   ├── RedisConnectionConfig.java
│   │       │                                   └── RedisHostAndPort.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── datasource/
│   │                                   └── redis/
│   │                                       ├── ClusterModeRedisDataSourceTest.java
│   │                                       ├── RedisConnectionConfigTest.java
│   │                                       ├── SentinelModeRedisDataSourceTest.java
│   │                                       └── StandaloneRedisDataSourceTest.java
│   ├── sentinel-datasource-spring-cloud-config/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── datasource/
│   │       │   │                       └── spring/
│   │       │   │                           └── cloud/
│   │       │   │                               └── config/
│   │       │   │                                   ├── SentinelRuleLocator.java
│   │       │   │                                   ├── SentinelRuleStorage.java
│   │       │   │                                   ├── SpringCloudConfigDataSource.java
│   │       │   │                                   └── config/
│   │       │   │                                       └── DataSourceBootstrapConfiguration.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── spring.factories
│   │       └── test/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── datasource/
│   │           │                       └── spring/
│   │           │                           └── cloud/
│   │           │                               └── config/
│   │           │                                   ├── SimpleSpringApplication.java
│   │           │                                   ├── client/
│   │           │                                   │   └── ConfigClient.java
│   │           │                                   ├── server/
│   │           │                                   │   └── ConfigServer.java
│   │           │                                   └── test/
│   │           │                                       ├── SentinelRuleLocatorTests.java
│   │           │                                       └── SpringCouldDataSourceTest.java
│   │           └── resources/
│   │               ├── bootstrap.yml
│   │               ├── config-client-application.properties
│   │               └── config-server-application.properties
│   ├── sentinel-datasource-zookeeper/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── datasource/
│   │       │                           └── zookeeper/
│   │       │                               └── ZookeeperDataSource.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── datasource/
│   │                                   └── zookeeper/
│   │                                       └── ZookeeperDataSourceTest.java
│   ├── sentinel-metric-exporter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── metric/
│   │       │   │                       ├── MetricExporterInit.java
│   │       │   │                       ├── collector/
│   │       │   │                       │   └── MetricCollector.java
│   │       │   │                       └── exporter/
│   │       │   │                           ├── MetricExporter.java
│   │       │   │                           └── jmx/
│   │       │   │                               ├── JMXMetricExporter.java
│   │       │   │                               ├── MBeanRegistry.java
│   │       │   │                               ├── MetricBean.java
│   │       │   │                               ├── MetricBeanWriter.java
│   │       │   │                               └── MetricMXBean.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               └── com.alibaba.csp.sentinel.init.InitFunc
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── cps/
│   │                           └── sentinel/
│   │                               └── metric/
│   │                                   └── exporter/
│   │                                       ├── MBeanRegistryTest.java
│   │                                       └── MetricBeanWriterTest.java
│   ├── sentinel-parameter-flow-control/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   ├── command/
│   │       │   │                   │   └── handler/
│   │       │   │                   │       ├── GetParamFlowRulesCommandHandler.java
│   │       │   │                   │       └── ModifyParamFlowRulesCommandHandler.java
│   │       │   │                   ├── init/
│   │       │   │                   │   └── ParamFlowStatisticSlotCallbackInit.java
│   │       │   │                   └── slots/
│   │       │   │                       ├── HotParamSlotChainBuilder.java
│   │       │   │                       ├── block/
│   │       │   │                       │   └── flow/
│   │       │   │                       │       └── param/
│   │       │   │                       │           ├── ParamFlowArgument.java
│   │       │   │                       │           ├── ParamFlowChecker.java
│   │       │   │                       │           ├── ParamFlowClusterConfig.java
│   │       │   │                       │           ├── ParamFlowException.java
│   │       │   │                       │           ├── ParamFlowItem.java
│   │       │   │                       │           ├── ParamFlowRule.java
│   │       │   │                       │           ├── ParamFlowRuleManager.java
│   │       │   │                       │           ├── ParamFlowRuleUtil.java
│   │       │   │                       │           ├── ParamFlowSlot.java
│   │       │   │                       │           ├── ParameterMetric.java
│   │       │   │                       │           ├── ParameterMetricStorage.java
│   │       │   │                       │           ├── RollingParamEvent.java
│   │       │   │                       │           └── TokenUpdateStatus.java
│   │       │   │                       └── statistic/
│   │       │   │                           ├── ParamFlowStatisticEntryCallback.java
│   │       │   │                           ├── ParamFlowStatisticExitCallback.java
│   │       │   │                           ├── cache/
│   │       │   │                           │   ├── CacheMap.java
│   │       │   │                           │   └── ConcurrentLinkedHashMapWrapper.java
│   │       │   │                           └── data/
│   │       │   │                               └── ParamMapBucket.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               ├── com.alibaba.csp.sentinel.command.CommandHandler
│   │       │               ├── com.alibaba.csp.sentinel.init.InitFunc
│   │       │               └── com.alibaba.csp.sentinel.slotchain.ProcessorSlot
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               ├── block/
│   │                               │   └── flow/
│   │                               │       └── param/
│   │                               │           └── AbstractTimeBasedTest.java
│   │                               └── slots/
│   │                                   ├── block/
│   │                                   │   └── flow/
│   │                                   │       └── param/
│   │                                   │           ├── ParamFlowCheckerTest.java
│   │                                   │           ├── ParamFlowDefaultCheckerTest.java
│   │                                   │           ├── ParamFlowPartialIntegrationTest.java
│   │                                   │           ├── ParamFlowRuleManagerTest.java
│   │                                   │           ├── ParamFlowRuleUtilTest.java
│   │                                   │           ├── ParamFlowSlotTest.java
│   │                                   │           ├── ParamFlowThrottleRateLimitingCheckerTest.java
│   │                                   │           ├── ParameterMetricStorageTest.java
│   │                                   │           └── ParameterMetricTest.java
│   │                                   └── statistic/
│   │                                       └── data/
│   │                                           └── ParamMapBucketTest.java
│   └── sentinel-prometheus-metric-exporter/
│       ├── README.md
│       ├── pom.xml
│       └── src/
│           ├── main/
│           │   ├── java/
│           │   │   └── com/
│           │   │       └── alibaba/
│           │   │           └── csp/
│           │   │               └── sentinel/
│           │   │                   └── metric/
│           │   │                       └── prom/
│           │   │                           ├── MetricConstants.java
│           │   │                           ├── PromExporterInit.java
│           │   │                           ├── collector/
│           │   │                           │   └── SentinelCollector.java
│           │   │                           ├── config/
│           │   │                           │   └── PrometheusGlobalConfig.java
│           │   │                           └── types/
│           │   │                               └── GaugeMetricFamily.java
│           │   └── resources/
│           │       └── META-INF/
│           │           └── services/
│           │               └── com.alibaba.csp.sentinel.init.InitFunc
│           └── test/
│               └── java/
│                   └── com/
│                       └── alibaba/
│                           └── csp/
│                               └── sentinel/
│                                   └── metric/
│                                       └── prom/
│                                           ├── collector/
│                                           │   └── SentinelCollectorTest.java
│                                           └── types/
│                                               └── GaugeMetricFamilyTest.java
├── sentinel-logging/
│   ├── pom.xml
│   └── sentinel-logging-slf4j/
│       ├── README.md
│       ├── pom.xml
│       └── src/
│           ├── main/
│           │   ├── java/
│           │   │   └── com/
│           │   │       └── alibaba/
│           │   │           └── csp/
│           │   │               └── sentinel/
│           │   │                   └── logging/
│           │   │                       └── slf4j/
│           │   │                           ├── CommandCenterLogLogger.java
│           │   │                           └── RecordLogLogger.java
│           │   └── resources/
│           │       └── META-INF/
│           │           └── services/
│           │               └── com.alibaba.csp.sentinel.log.Logger
│           └── test/
│               └── java/
│                   └── com/
│                       └── alibaba/
│                           └── csp/
│                               └── sentinel/
│                                   └── logging/
│                                       └── slf4j/
│                                           ├── AbstraceSlf4jLogTest.java
│                                           ├── CommandCenterLogTest.java
│                                           └── RecordLogTest.java
├── sentinel-transport/
│   ├── README.md
│   ├── pom.xml
│   ├── sentinel-transport-common/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   ├── command/
│   │       │   │                   │   ├── CommandCenterProvider.java
│   │       │   │                   │   ├── CommandConstants.java
│   │       │   │                   │   ├── CommandHandler.java
│   │       │   │                   │   ├── CommandHandlerInterceptor.java
│   │       │   │                   │   ├── CommandHandlerProvider.java
│   │       │   │                   │   ├── CommandRequest.java
│   │       │   │                   │   ├── CommandRequestExecution.java
│   │       │   │                   │   ├── CommandResponse.java
│   │       │   │                   │   ├── annotation/
│   │       │   │                   │   │   └── CommandMapping.java
│   │       │   │                   │   ├── handler/
│   │       │   │                   │   │   ├── ApiCommandHandler.java
│   │       │   │                   │   │   ├── BasicInfoCommandHandler.java
│   │       │   │                   │   │   ├── FetchActiveRuleCommandHandler.java
│   │       │   │                   │   │   ├── FetchClusterNodeByIdCommandHandler.java
│   │       │   │                   │   │   ├── FetchClusterNodeHumanCommandHandler.java
│   │       │   │                   │   │   ├── FetchJsonTreeCommandHandler.java
│   │       │   │                   │   │   ├── FetchOriginCommandHandler.java
│   │       │   │                   │   │   ├── FetchSimpleClusterNodeCommandHandler.java
│   │       │   │                   │   │   ├── FetchSystemStatusCommandHandler.java
│   │       │   │                   │   │   ├── FetchTreeCommandHandler.java
│   │       │   │                   │   │   ├── InterceptingCommandHandler.java
│   │       │   │                   │   │   ├── ModifyRulesCommandHandler.java
│   │       │   │                   │   │   ├── OnOffGetCommandHandler.java
│   │       │   │                   │   │   ├── OnOffSetCommandHandler.java
│   │       │   │                   │   │   ├── SendMetricCommandHandler.java
│   │       │   │                   │   │   ├── VersionCommandHandler.java
│   │       │   │                   │   │   └── cluster/
│   │       │   │                   │   │       ├── FetchClusterModeCommandHandler.java
│   │       │   │                   │   │       └── ModifyClusterModeCommandHandler.java
│   │       │   │                   │   └── vo/
│   │       │   │                   │       └── NodeVo.java
│   │       │   │                   ├── heartbeat/
│   │       │   │                   │   └── HeartbeatSenderProvider.java
│   │       │   │                   └── transport/
│   │       │   │                       ├── CommandCenter.java
│   │       │   │                       ├── HeartbeatSender.java
│   │       │   │                       ├── client/
│   │       │   │                       │   └── CommandClient.java
│   │       │   │                       ├── config/
│   │       │   │                       │   └── TransportConfig.java
│   │       │   │                       ├── endpoint/
│   │       │   │                       │   ├── Endpoint.java
│   │       │   │                       │   └── Protocol.java
│   │       │   │                       ├── init/
│   │       │   │                       │   ├── CommandCenterInitFunc.java
│   │       │   │                       │   └── HeartbeatSenderInitFunc.java
│   │       │   │                       ├── log/
│   │       │   │                       │   └── CommandCenterLog.java
│   │       │   │                       ├── ssl/
│   │       │   │                       │   └── SslFactory.java
│   │       │   │                       └── util/
│   │       │   │                           ├── HttpCommandUtils.java
│   │       │   │                           └── WritableDataSourceRegistry.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               ├── com.alibaba.csp.sentinel.command.CommandHandler
│   │       │               └── com.alibaba.csp.sentinel.init.InitFunc
│   │       └── test/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── transport/
│   │           │                       ├── command/
│   │           │                       │   ├── GetRulesCommandHandlerInterceptor.java
│   │           │                       │   └── InterceptingCommandHandlerTest.java
│   │           │                       ├── config/
│   │           │                       │   └── TransportConfigTest.java
│   │           │                       ├── endpoint/
│   │           │                       │   └── EndpointTest.java
│   │           │                       └── init/
│   │           │                           └── HeartbeatSenderInitFuncTest.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       └── com.alibaba.csp.sentinel.command.CommandHandlerInterceptor
│   ├── sentinel-transport-netty-http/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── transport/
│   │       │   │                       ├── command/
│   │       │   │                       │   ├── NettyHttpCommandCenter.java
│   │       │   │                       │   ├── codec/
│   │       │   │                       │   │   ├── CodecRegistry.java
│   │       │   │                       │   │   ├── Decoder.java
│   │       │   │                       │   │   ├── DefaultCodecs.java
│   │       │   │                       │   │   ├── Encoder.java
│   │       │   │                       │   │   ├── StringDecoder.java
│   │       │   │                       │   │   └── StringEncoder.java
│   │       │   │                       │   └── netty/
│   │       │   │                       │       ├── HttpServer.java
│   │       │   │                       │       ├── HttpServerHandler.java
│   │       │   │                       │       └── HttpServerInitializer.java
│   │       │   │                       └── heartbeat/
│   │       │   │                           ├── HttpHeartbeatSender.java
│   │       │   │                           └── client/
│   │       │   │                               └── HttpClientsFactory.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               ├── com.alibaba.csp.sentinel.transport.CommandCenter
│   │       │               └── com.alibaba.csp.sentinel.transport.HeartbeatSender
│   │       └── test/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── transport/
│   │           │                       └── command/
│   │           │                           ├── handler/
│   │           │                           │   └── MultipleSlashNameCommandTestHandler.java
│   │           │                           └── netty/
│   │           │                               ├── HttpServerHandlerTest.java
│   │           │                               ├── HttpServerInitializerTest.java
│   │           │                               └── HttpServerTest.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       └── com.alibaba.csp.sentinel.command.CommandHandler
│   ├── sentinel-transport-simple-http/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── transport/
│   │       │   │                       ├── command/
│   │       │   │                       │   ├── SimpleHttpCommandCenter.java
│   │       │   │                       │   ├── exception/
│   │       │   │                       │   │   └── RequestException.java
│   │       │   │                       │   └── http/
│   │       │   │                       │       ├── HttpEventTask.java
│   │       │   │                       │       └── StatusCode.java
│   │       │   │                       └── heartbeat/
│   │       │   │                           ├── HeartbeatMessage.java
│   │       │   │                           ├── SimpleHttpHeartbeatSender.java
│   │       │   │                           └── client/
│   │       │   │                               ├── SimpleHttpClient.java
│   │       │   │                               ├── SimpleHttpRequest.java
│   │       │   │                               ├── SimpleHttpResponse.java
│   │       │   │                               ├── SimpleHttpResponseParser.java
│   │       │   │                               └── SocketFactory.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               ├── com.alibaba.csp.sentinel.transport.CommandCenter
│   │       │               └── com.alibaba.csp.sentinel.transport.HeartbeatSender
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── transport/
│   │                                   └── command/
│   │                                       └── http/
│   │                                           ├── CommandCenterTest.java
│   │                                           └── HttpEventTaskTest.java
│   └── sentinel-transport-spring-mvc/
│       ├── pom.xml
│       └── src/
│           └── main/
│               ├── java/
│               │   └── com/
│               │       └── alibaba/
│               │           └── csp/
│               │               └── sentinel/
│               │                   └── transport/
│               │                       ├── command/
│               │                       │   ├── SentinelApiHandler.java
│               │                       │   ├── SentinelApiHandlerAdapter.java
│               │                       │   ├── SentinelApiHandlerMapping.java
│               │                       │   ├── SpringMvcHttpCommandCenter.java
│               │                       │   └── http/
│               │                       │       └── StatusCode.java
│               │                       └── heartbeat/
│               │                           ├── SpringMvcHttpHeartbeatSender.java
│               │                           └── client/
│               │                               └── HttpClientsFactory.java
│               └── resources/
│                   └── META-INF/
│                       └── services/
│                           ├── com.alibaba.csp.sentinel.transport.CommandCenter
│                           └── com.alibaba.csp.sentinel.transport.HeartbeatSender
└── toolchains-example.xml

================================================
FILE CONTENTS
================================================

================================================
FILE: .codecov.yml
================================================
ignore:
  - "sentinel-demo/.*"
  - "sentinel-dashboard/.*"
  - "sentinel-benchmark/.*"
  - "sentinel-transport/.*"
  - "sentinel-core/src/main/java/com/alibaba/csp/sentinel/eagleeye/*"
comment:                  # this is a top-level key
  layout: " condensed_header, diff, condensed_files, components, condensed_footer"
  behavior: default
  require_changes: false  # if true: only post the comment if coverage changes
  require_base: false        # [true :: must have a base report to post]
  require_head: true       # [true :: must have a head report to post]
  hide_project_coverage: false # [true :: only show coverage on the git diff]
component_management:
  individual_components:
    - component_id: sentinel-adapter  # this is an identifier that should not be changed
      name: sentinel-adapter  # this is a display name, and can be changed freely
      paths:
        - sentinel-adapter
    - component_id: sentinel-cluster
      name: sentinel-cluster
      paths:
        - sentinel-cluster
    - component_id: sentinel-core
      name: sentinel-core
      paths:
        - sentinel-core
    - component_id: sentinel-extension
      name: sentinel-extension
      paths:
        - sentinel-extension
    - component_id: sentinel-logging
      name: sentinel-logging
      paths:
        - sentinel-logging
coverage:
  status:
    project:
      default:
        target: auto
        threshold: 0.5%
        base: auto
    patch:
      default:
        target: 60%
        threshold: 1%
        base: auto

================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: "[BUG] "
labels: ''
assignees: ''

---

<!-- Here is for bug reports ONLY! 

If you're looking for help, please check our mail list and the Gitter room.

Please try to use English to describe your issue, or at least provide a snippet of English translation.

Security problem: 如果您发现 Sentinel 项目中存在安全问题,请通过 [ASRC(Alibaba Security Response Center 阿里安全响应中心)](https://security.alibaba.com/) 告知我们,请不要直接提公开 issue.
-->

## Issue Description

Type: *bug report*

### Describe what happened


### Describe what you expected to happen


### How to reproduce it (as minimally and precisely as possible)

1. 
2. 
3. 

### Tell us your environment


### Anything else we need to know?


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''

---

<!-- Here is for bug reports and feature requests ONLY! 

If you're looking for help, please check our mail list and the Gitter room.

Please try to use English to describe your issue, or at least provide a snippet of English translation.
-->

## Issue Description

Type: *feature request*

### Describe what feature you want

### Describe your initial design (if present)

### Additional context

Add any other context or screenshots about the feature request here.


================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
<!-- Here is for bug reports and feature requests ONLY! 

If you're looking for help, please check our mail list and the Gitter room.

Please try to use English to describe your issue, or at least provide a snippet of English translation.
-->

## Issue Description

Type: *bug report* or *feature request*

### Describe what happened (or what feature you want)


### Describe what you expected to happen


### How to reproduce it (as minimally and precisely as possible)

1. 
2. 
3. 

### Tell us your environment


### Anything else we need to know?





================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!--  Thanks for submitting a pull request! Here are some tips for you:
1. Please make sure you have read and understood the contributing guidelines: https://github.com/alibaba/Sentinel/blob/master/CONTRIBUTING.md
2. Please make sure the PR has a corresponding issue.
-->

### Describe what this PR does / why we need it


### Does this pull request fix one issue?

<!--If that, add "Fixes #xxxx" below in the next line. For example, Fixes #15. Otherwise, add "NONE" -->

### Describe how you did it


### Describe how to verify it


### Special notes for reviews


================================================
FILE: .github/workflows/ci.yml
================================================
name: Sentinel CI

on:
  push:
    branches:
      - '*'
  pull_request:
    branches:
      - master
      - "1.8"
      - "2.0"

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        java: [8, 11, 17, 21]
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Setup Java for test
        uses: actions/setup-java@v4
        with:
          java-version: ${{ matrix.java }}
          distribution: 'temurin'
          cache: 'maven'

      - name: Setup Java for mvn
        uses: actions/setup-java@v4
        with:
          java-version: 17
          distribution: 'temurin'

      - name: Maven Test With Spring 6.x
        run: mvn --batch-mode test -Dsurefire.jdk-toolchain-version=${{ matrix.java }}
        if: ${{ matrix.java >= 17 }}

      - name: Maven Test Without Spring 6.x
        run: mvn --batch-mode test -Dsurefire.jdk-toolchain-version=${{ matrix.java }} -Dskip.spring.v6x.test=true
        if: ${{ matrix.java < 17 }}

      - name: Build with Maven
        run: mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -V -DminimumPriority=1

      - name: Upload coverage reports to Codecov
        uses: codecov/codecov-action@v4.0.1
        with:
          token: ${{ secrets.CODECOV_TOKEN }}

================================================
FILE: .github/workflows/codeql-analysis.yml
================================================
name: "CodeQL"

on:
  push:
    branches:
      - master
      - "1.8"
      - "2.0"
  pull_request:
    branches:
      - master
      - "1.8"
      - "2.0"
  schedule:
    - cron: '00 09 * * 3'

jobs:
  analyze:
    name: Analyze
    runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
    permissions:
      actions: read
      contents: read
      security-events: write

    strategy:
      fail-fast: false
      matrix:
        language: [ 'java' ]
        # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
        # Use only 'java' to analyze code written in Java, Kotlin or both
        # Use only 'javascript' to analyze code written in JavaScript, TypeScript or both
        # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support

    steps:
    - name: Checkout repository
      uses: actions/checkout@v4

    # Initializes the CodeQL tools for scanning.
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v2
      with:
        languages: ${{ matrix.language }}
        # If you wish to specify custom queries, you can do so here or in a config file.
        # By default, queries listed here will override any specified in a config file.
        # Prefix the list here with "+" to use these queries and those in the config file.

        # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
        # queries: security-extended,security-and-quality

    - name: Setup Java
      uses: actions/setup-java@v4
      with:
        java-version: 17
        distribution: 'temurin'
        cache: 'maven'

    # Autobuild attempts to build any compiled languages  (C/C++, C#, Go, or Java).
    # If this step fails, then you should remove it and run the build manually (see below)
    - name: Autobuild
      uses: github/codeql-action/autobuild@v2

    - name: Perform CodeQL Analysis
      uses: github/codeql-action/analyze@v2
      with:
        category: "/language:${{matrix.language}}"


================================================
FILE: .github/workflows/document-lint.yml
================================================
name: document-lint

on:
  push:
    branches:
      - '*'
  pull_request:
    branches:
      - master
      - "1.8"
      - "2.0"

jobs:
  document-lint:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - run: npm install -g markdownlint-cli

      - name: use markdownlint-cli to lint markdown file
        run: |
          find ./ -name "*.md" | grep -v vendor | grep -v commandline | grep -v .github | grep -v swagger | grep -v api | \
          xargs markdownlint --disable MD010 MD013 MD024 MD029 MD033 MD036 --


================================================
FILE: .gitignore
================================================
# IntelliJ project files
.idea/
*.iml
out
gen

# Visual Studio Code
.history/

# Maven
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
!/.mvn/wrapper/maven-wrapper.jar

# Eclipse
.classpath
.settings/
.project
bin/

# System related
*.DS_Store
Thumbs.db

# flattened pom file
.flattened-pom.xml
node_modules/


================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct

## Our Pledge

In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, gender identity and expression, level of experience,
education, socio-economic status, nationality, personal appearance, race,
religion, or sexual identity and orientation.

## Our Standards

Examples of behavior that contributes to creating a positive environment
include:

* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members

Examples of unacceptable behavior by participants include:

* The use of sexualized language or imagery and unwelcome sexual attention or
  advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
  address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
  professional setting

## Our Responsibilities

Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.

Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.

## Scope

This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at <sentinel@linux.alibaba.com>. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.

Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at [https://www.contributor-covenant.org/version/1/4/code-of-conduct.html](https://www.contributor-covenant.org/version/1/4/code-of-conduct.html)

[homepage]: https://www.contributor-covenant.org


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to Sentinel

Welcome to Sentinel! This document is a guideline about how to contribute to Sentinel.
If you find something incorrect or missing, please leave comments / suggestions.

## Before you get started

### Code of Conduct

Please make sure to read and observe our [Code of Conduct](./CODE_OF_CONDUCT.md).

### Setting up your development environment

You should have JDK 17 or later installed in your system.

### How to run test

1. add `~/.m2/toolchains.xml`, to define JDK and path. See [toolcahinas-example.xml](./toolchains-example.xml).
2. With JDK 17 as your default JDK, you could specify the JDK version to run test,

i.e. Run test at JDK 8:

```bash
mvn test -Dsurefire.jdk-toolchain-version=8
```

## Contributing

We are always very happy to have contributions, whether for typo fix, bug fix or big new features.
Please do not ever hesitate to ask a question or send a pull request.

We strongly value documentation and integration with other projects.
We are very glad to accept improvements for these aspects.

### GitHub workflow

We use the `master` branch as the development branch, which indicates that this is a unstable branch.

Here are the workflow for contributors:

1. Fork to your own
2. Clone fork to local repository
3. Create a new branch and work on it
4. Keep your branch in sync
5. Commit your changes (make sure your commit message concise)
6. Push your commits to your forked repository
7. Create a pull request

Please follow [the pull request template](./.github/PULL_REQUEST_TEMPLATE.md).
Please make sure the PR has a corresponding issue.

After creating a PR, one or more reviewers will be assigned to the pull request.
The reviewers will review the code.

Before merging a PR, squash any fix review feedback, typo, merged, and rebased sorts of commits.
The final commit message should be clear and concise.

### Open an issue / PR

We use [GitHub Issues](https://github.com/alibaba/Sentinel/issues) and [Pull Requests](https://github.com/alibaba/Sentinel/pulls) for trackers.

If you find a typo in document, find a bug in code, or want new features, or want to give suggestions,
you can [open an issue on GitHub](https://github.com/alibaba/Sentinel/issues/new) to report it.
Please follow the guideline message in the issue template.

If you want to contribute, please follow the [contribution workflow](#github-workflow) and create a new pull request.
If your PR contains large changes, e.g. component refactor or new components, please write detailed documents
about its design and usage.

Note that a single PR should not be too large. If heavy changes are required, it's better to separate the changes
to a few individual PRs.

### Code review

All code should be well reviewed by one or more committers. Some principles:

- Readability: Important code should be well-documented. Comply with our code style.
- Elegance: New functions, classes or components should be well designed.
- Testability: Important code should be well-tested (high unit test coverage).

## Community

### Contact us

#### Mailing list

If you have any questions or advice, please contact <sentinel@linux.alibaba.com>.

#### Gitter

Our Gitter room: [https://gitter.im/alibaba/Sentinel](https://gitter.im/alibaba/Sentinel).


================================================
FILE: LICENSE
================================================
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   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.


================================================
FILE: README.md
================================================
# Sentinel: The Sentinel of Your Microservices

<img src="https://user-images.githubusercontent.com/9434884/43697219-3cb4ef3a-9975-11e8-9a9c-73f4f537442d.png" alt="Sentinel Logo" width="50%">

[![Sentinel CI](https://github.com/alibaba/Sentinel/actions/workflows/ci.yml/badge.svg)](https://github.com/alibaba/Sentinel/actions/workflows/ci.yml)
[![Codecov](https://codecov.io/gh/alibaba/Sentinel/branch/master/graph/badge.svg)](https://codecov.io/gh/alibaba/Sentinel)
[![Maven Central](https://img.shields.io/maven-central/v/com.alibaba.csp/sentinel-core.svg?label=Maven%20Central)](https://search.maven.org/search?q=g:com.alibaba.csp%20AND%20a:sentinel-core)
[![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html)
[![Gitter](https://badges.gitter.im/alibaba/Sentinel.svg)](https://gitter.im/alibaba/Sentinel)
[![Leaderboard](https://img.shields.io/badge/Sentinel-Check%20Your%20Contribution-orange)](https://opensource.alibaba.com/contribution_leaderboard/details?projectValue=sentinel)

## Introduction

As distributed systems become increasingly popular, the reliability between services is becoming more important than ever before.
Sentinel takes "flow" as breakthrough point, and works on multiple fields including **flow control**, **traffic shaping**,
**concurrency limiting**, **circuit breaking** and **system adaptive overload protection**,
to guarantee reliability and resilience for microservices.

Sentinel has the following features:

- **Rich applicable scenarios**: Sentinel has been wildly used in Alibaba, and has covered almost all the core-scenarios in Double-11 (11.11) Shopping Festivals in the past 10 years, such as “Second Kill” which needs to limit burst flow traffic to meet the system capacity, message peak clipping and valley fills, circuit breaking for unreliable downstream services, cluster flow control, etc.
- **Real-time monitoring**: Sentinel also provides real-time monitoring ability. You can see the runtime information of a single machine in real-time, and the aggregated runtime info of a cluster with less than 500 nodes.
- **Widespread open-source ecosystem**: Sentinel provides out-of-box integrations with commonly-used frameworks and libraries such as Spring Cloud, gRPC, Apache Dubbo and Quarkus. You can easily use Sentinel by simply add the adapter dependency to your services.
- **Polyglot support**: Sentinel has provided native support for Java, [Go](https://github.com/alibaba/sentinel-golang), [C++](https://github.com/alibaba/sentinel-cpp) and [Rust](https://github.com/sentinel-group/sentinel-rust).
- **Various SPI extensions**: Sentinel provides easy-to-use SPI extension interfaces that allow you to quickly customize your logic, for example, custom rule management, adapting data sources, and so on.

Features overview:

![features-of-sentinel](./doc/image/sentinel-features-overview-en.png)

The community is also working on **the specification of traffic governance and fault-tolerance**.
Please refer to [OpenSergo](https://opensergo.io/) for details.

## Documentation

See the [Sentinel Website](https://sentinelguard.io/) for the official website of Sentinel.

See the [中文文档](https://sentinelguard.io/zh-cn/docs/introduction.html) for document in Chinese.

See the [Wiki](https://github.com/alibaba/Sentinel/wiki) for full documentation, examples, blog posts, operational details and other information.

Sentinel provides integration modules for various open-source frameworks
(e.g. Spring Cloud, Apache Dubbo, gRPC, Quarkus, Spring WebFlux, Reactor) and service mesh.
You can refer to [the document](https://sentinelguard.io/en-us/docs/open-source-framework-integrations.html) for more information.

If you are using Sentinel, please [**leave a comment here**](https://github.com/alibaba/Sentinel/issues/18) to tell us your scenario to make Sentinel better.
It's also encouraged to add the link of your blog post, tutorial, demo or customized components to [**Awesome Sentinel**](./doc/awesome-sentinel.md).

## Ecosystem Landscape

![ecosystem-landscape](./doc/image/sentinel-opensource-eco-landscape-en.png)

## Quick Start

Below is a simple demo that guides new users to use Sentinel in just 3 steps. It also shows how to monitor this demo using the dashboard.

### 1. Add Dependency

**Note:** Sentinel requires JDK 1.8 or later.

If you're using Maven, just add the following dependency in `pom.xml`.

```xml
<!-- replace here with the latest version -->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-core</artifactId>
    <version>1.8.9</version>
</dependency>
```

If not, you can download JAR in [Maven Center Repository](https://mvnrepository.com/artifact/com.alibaba.csp/sentinel-core).

### 2. Define Resource

Wrap your code snippet via Sentinel API: `SphU.entry(resourceName)`.
In below example, it is `System.out.println("hello world");`:

```java
try (Entry entry = SphU.entry("HelloWorld")) {
    // Your business logic here.
    System.out.println("hello world");
} catch (BlockException e) {
    // Handle rejected request.
    e.printStackTrace();
}
// try-with-resources auto exit
```

So far the code modification is done. We've also provided [annotation support module](https://github.com/alibaba/Sentinel/blob/master/sentinel-extension/sentinel-annotation-aspectj/README.md) to define resource easier.

### 3. Define Rules

If we want to limit the access times of the resource, we can **set rules to the resource**.
The following code defines a rule that limits access to the resource to 20 times per second at the maximum.

```java
List<FlowRule> rules = new ArrayList<>();
FlowRule rule = new FlowRule();
rule.setResource("HelloWorld");
// set limit qps to 20
rule.setCount(20);
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
rules.add(rule);
FlowRuleManager.loadRules(rules);
```

For more information, please refer to [How To Use](https://sentinelguard.io/en-us/docs/basic-api-resource-rule.html).

### 4. Check the Result

After running the demo for a while, you can see the following records in `~/logs/csp/${appName}-metrics.log.{date}` (When using the default `DateFileLogHandler`).

```plaintext
|--timestamp-|------date time----|-resource-|p |block|s |e|rt  |occupied
1529998904000|2018-06-26 15:41:44|HelloWorld|20|0    |20|0|0   |0
1529998905000|2018-06-26 15:41:45|HelloWorld|20|5579 |20|0|728 |0
1529998906000|2018-06-26 15:41:46|HelloWorld|20|15698|20|0|0   |0
1529998907000|2018-06-26 15:41:47|HelloWorld|20|19262|20|0|0   |0
1529998908000|2018-06-26 15:41:48|HelloWorld|20|19502|20|0|0   |0
1529998909000|2018-06-26 15:41:49|HelloWorld|20|18386|20|0|0   |0

p stands for incoming request, block for blocked by rules, s for success handled by Sentinel, e for exception count, rt for average response time (ms), occupied stands for occupiedPassQps since 1.5.0 which enable us booking more than 1 shot when entering.
```

This shows that the demo can print "hello world" 20 times per second.

More examples and information can be found in the [How To Use](https://sentinelguard.io/en-us/docs/basic-api-resource-rule.html) section.

The working principles of Sentinel can be found in [How it works](https://sentinelguard.io/en-us/docs/basic-implementation.html) section.

Samples can be found in the [sentinel-demo](https://github.com/alibaba/Sentinel/tree/master/sentinel-demo) module.

### 5. Start Dashboard

> Note: Java 8 is required for building or running the dashboard.

Sentinel also provides a simple dashboard application, on which you can monitor the clients and configure the rules in real time.

![dashboard](https://user-images.githubusercontent.com/9434884/55449295-84866d80-55fd-11e9-94e5-d3441f4a2b63.png)

For details please refer to [Dashboard](https://github.com/alibaba/Sentinel/wiki/Dashboard).

## Trouble Shooting and Logs

Sentinel will generate logs for troubleshooting and real-time monitoring.
All the information can be found in [logs](https://sentinelguard.io/en-us/docs/logs.html).

## Bugs and Feedback

For bug report, questions and discussions please submit [GitHub Issues](https://github.com/alibaba/sentinel/issues).

Contact us via [Gitter](https://gitter.im/alibaba/Sentinel) or [Email](mailto:sentinel@linux.alibaba.com).

## Contributing

Contributions are always welcomed! Please refer to [CONTRIBUTING](./CONTRIBUTING.md) for detailed guidelines.

You can start with the issues labeled with [`good first issue`](https://github.com/alibaba/Sentinel/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22).

## Enterprise Service

If you need Sentinel enterprise service support (Sentinel 企业版), or purchase cloud product services,
you can join the discussion by the DingTalk group (34754806). It can also be directly activated
and used through the [microservice engine (MSE 微服务引擎) provided by Alibaba Cloud](https://cn.aliyun.com/product/aliware/mse?spm=sentinel-github.index.0.0.0).

## Credits

Thanks [Guava](https://github.com/google/guava), which provides some inspiration on rate limiting.

And thanks for all [contributors](https://github.com/alibaba/Sentinel/graphs/contributors) of Sentinel!

## Who is using

These are only part of the companies using Sentinel, for reference only.
If you are using Sentinel, please [add your company here](https://github.com/alibaba/Sentinel/issues/18) to tell us your scenario to make Sentinel better :)

![Alibaba Group](https://docs.alibabagroup.com/assets2/images/en/global/logo_header.png)
![AntFin](https://user-images.githubusercontent.com/9434884/90598732-30961c00-e226-11ea-8c86-0b1d7f7875c7.png)
![Taiping Renshou](http://www.cntaiping.com/tplresource/cms/www/taiping/img/home_new/tp_logo_img.png)
![拼多多](http://cdn.pinduoduo.com/assets/img/pdd_logo_v3.png)
![爱奇艺](https://user-images.githubusercontent.com/9434884/90598445-a51c8b00-e225-11ea-9327-3543525f3f2a.png)
![Shunfeng Technology](https://user-images.githubusercontent.com/9434884/48463502-2f48eb80-e817-11e8-984f-2f9b1b789e2d.png)
![二维火](https://user-images.githubusercontent.com/9434884/49358468-bc43de00-f70d-11e8-97fe-0bf05865f29f.png)
![Mandao](https://user-images.githubusercontent.com/9434884/48463559-6cad7900-e817-11e8-87e4-42952b074837.png)
![文轩在线](http://static.winxuancdn.com/css/v2/images/logo.png)
![客如云](https://www.keruyun.com/static/krynew/images/logo.png)
![亲宝宝](https://stlib.qbb6.com/wclt/img/home_hd/version1/title_logo.png)
![金汇金融](https://res.jinhui365.com/r/images/logo2.png?v=1.527)
![闪电购](http://cdn.52shangou.com/shandianbang/official-source/3.1.1/build/images/logo.png)


================================================
FILE: SECURITY.md
================================================
# Security Policy

## Reporting a security issue

If you think the bug you found is likely to make Sentinel-based applications vulnerable to an attack, please do not use
our public issue tracker but report it to [ASRC(Alibaba Security Response Center)](https://security.alibaba.com/).


================================================
FILE: doc/README.md
================================================
# Sentinel related documents

- [Awesome Sentinel](./awesome-sentinel.md)


================================================
FILE: doc/awesome-sentinel.md
================================================
# Awesome Sentinel

[![Awesome](https://awesome.re/badge-flat.svg)](https://awesome.re)

A curated list of awesome things (e.g. samples, third-party extensions, blog posts) for [Sentinel](https://github.com/alibaba/Sentinel).

If you want your component to appear here, feel free to submit a pull request to this repository to add it.
You can refer to the [awesome contribution guidelines](https://github.com/sentinel-group/sentinel-awesome/blob/master/CONTRIBUTING.md).

You can also add to [sentinel-group/sentinel-awesome](https://github.com/sentinel-group/sentinel-awesome).

## Contents

- [Presentations](#presentations)
- [Tutorials](#tutorialssamples)
- [Demos](../demos)
- [Extensions / Integrations](#extensions--integrations)
- [Blog Posts](#blog-posts)

## Presentations

- Sentinel 1.6.0 网关流控新特性介绍-Eric Zhao (Dubbo Tech Day-201905-Beijing): [PDF](https://github.com/sentinel-group/sentinel-awesome/blob/master/slides/Sentinel%201.6.0%20网关流控新特性介绍-Eric%20Zhao-DTED-201905.pdf)
- Sentinel 微服务流控降级实践-Eric Zhao (Dubbo Tech Day-201907-Shenzhen): [PDF](https://github.com/sentinel-group/sentinel-awesome/blob/master/slides/Sentinel%20微服务流控降级实践-Eric%20Zhao-DTED-201907.pdf)
- Sentinel 1.7.0 新特性展望-Eric Zhao (Dubbo Tech Day-201910-Chengdu): [PDF](https://github.com/sentinel-group/sentinel-awesome/blob/master/slides/Sentinel%201.7.0%20新特性展望-Eric%20Zhao-DTED-201910.pdf)
- 《微服务容易挂?Sentinel Go 让微服务稳如磐石》-Eric Zhao (Spring Cloud Alibaba Meetup 1205 杭州站): [PDF](https://github.com/sentinel-group/sentinel-awesome/blob/master/slides/SCA%20Meetup%20Hangzhou-20201205-Sentinel%20Go-Eric%20Zhao.pdf)
- Sentinel 2.0 流量治理全面升级-Eric Zhao (2022中间件开发者大会): [PDF](https://github.com/mse-group/Slides/blob/main/中间件开发者大会/10%20-%20赵奕豪(宿何)%20-Sentinel%202.0%20流量治理全面升级.pdf)

## Tutorials/Samples

- [Sentinel Guides](https://github.com/sentinel-group/sentinel-guides)

## Polyglot Support

- <img alt="Sentinel Go" src="https://raw.githubusercontent.com/sentinel-group/sentinel-awesome/master/sentinel_favicon.ico" title="Sentinel official" height="16px"> [Sentinel Go](https://github.com/alibaba/sentinel-golang)
- <img alt="Sentinel C++" src="https://raw.githubusercontent.com/sentinel-group/sentinel-awesome/master/sentinel_favicon.ico" title="Sentinel official" height="16px"> [Sentinel C++](https://github.com/alibaba/sentinel-cpp)
- <img alt="Sentinel Rust" src="https://raw.githubusercontent.com/sentinel-group/sentinel-awesome/master/sentinel_favicon.ico" title="Sentinel official" height="16px"> [Sentinel Rust](https://github.com/sentinel-group/sentinel-rust)

## Extensions / Integrations

- [sentinel-support](https://github.com/cdfive/sentinel-support): A support project for convenient Sentinel integration including properties file configuration, ActiveMQ integration and a JdbcDataSource implementation by [cdfive](https://github.com/cdfive)
- [Sentinel dashboard multi-data-source adapter](https://github.com/finefuture/sentinel-dashboard-X): Sentinel dashboard multi-data-source adapter has integrated Apollo and Nacos configuration center for bidirectional modification persistence. Implemented by [finefuture](https://github.com/finefuture)
- [Sentinel Rule Annotation Support](https://github.com/code1986/sentinel-lib): A third-party library that supports configuring flow rule and degrade rule using annotation. Implemented by [code1986](https://github.com/code1986)
- [sentinel-pigeon-adapter](https://github.com/wchswchs/sentinel-pigeon): A RPC framework Pigeon adapter for Sentinel including provider and invoker rate limiting implementation by [wchswchs](https://github.com/wchswchs)

## Blog Posts

- [Sentinel 为 Dubbo 服务保驾护航](https://dubbo.apache.org/zh/blog/2018/07/27/sentinel-为-dubbo-服务保驾护航) by [Eric Zhao](https://github.com/sczyh30)
- [在生产环境中使用 Sentinel 控制台](https://github.com/alibaba/Sentinel/wiki/在生产环境中使用-Sentinel) by [Eric Zhao](https://github.com/sczyh30)
- [Sentinel 与 Hystrix 的对比](https://sentinelguard.io/zh-cn/blog/sentinel-vs-hystrix.html) by [Eric Zhao](https://github.com/sczyh30)
- [Guideline: 从 Hystrix 迁移到 Sentinel](https://sentinelguard.io/zh-cn/blog/guideline-migrate-from-hystrix-to-sentinel.html) by [Eric Zhao](https://github.com/sczyh30)
- [Sentinel 控制台监控数据持久化【MySQL】](https://www.cnblogs.com/cdfive2018/p/9838577.html) by [cdfive](https://github.com/cdfive)
- [Sentinel 控制台监控数据持久化【InfluxDB】](https://www.cnblogs.com/cdfive2018/p/9914838.html) by [cdfive](https://github.com/cdfive)
- [Sentinel 控制台监控数据持久化【Apollo】](https://blog.csdn.net/caodegao/article/details/100009618) by [cookiejoo](https://github.com/cookiejoo)
- [Sentinel一体化监控解决方案 CrateDB + Grafana](https://blog.csdn.net/huyong1990/article/details/82392386) by [Young Hu](https://github.com/YoungHu)
- Sentinel 源码解析系列 by [houyi](https://github.com/all4you)
  - [Sentinel 原理-全解析](https://mp.weixin.qq.com/s/7_pCkamNv0269e5l9_Wz7w)
  - [Sentinel 原理-调用链](https://mp.weixin.qq.com/s/UEzwD22YC6jpp02foNSXnw)
  - [Sentinel 原理-滑动窗口](https://mp.weixin.qq.com/s/B1_7Kb_CxeKEAv43kdCWOA)
  - [Sentinel 实战-限流](https://mp.weixin.qq.com/s/rjyU37Dm-sxNln7GUD8tOw)
  - [Sentinel 实战-控制台](https://mp.weixin.qq.com/s/23EDFHMXLwsDqw-4O5dR5A)
  - [Sentinel 实战-规则持久化](https://mp.weixin.qq.com/s/twMFiBfRawKLR-1-N-f1yw)
- Sentinel 学习笔记 by [ro9er](https://github.com/ro9er)
  - [Sentinel 学习笔记(1)-- 流量统计代码解析](https://www.jianshu.com/p/7936d7a57924)
  - [Sentinel 学习笔记(2)-- 流量控制代码分析](https://www.jianshu.com/p/938709e94e43)
  - [Sentinel 学习笔记(3)-- 上下文统计Node建立分析](https://www.jianshu.com/p/cfdf525248c1)
- [大流量下的服务质量治理 Dubbo Sentinel 初涉](https://mp.weixin.qq.com/s/ergr_siI07VwwSRPFgsLvQ) by [RyuGrade](https://github.com/RyuGrade)
- Sentinel 深入浅出系列 by [shxz130](https://github.com/shxz130)
  - [Sentinel 深入浅出之原理篇 SlotChain](https://www.jianshu.com/p/a7a405de3a12)
  - [Sentinel 深入浅出之原理篇 Context初始化 & Entry初始化](https://www.jianshu.com/p/e39ac47cd893)
  - [Sentinel 深入浅出之原理篇 NodeSelectorSlot](https://www.jianshu.com/p/9a380ba188ab)
  - [Sentinel 深入浅出之原理篇 ClusterBuilderSlot](https://www.jianshu.com/p/0b0b5d8888a2)
  - [Sentinel 深入浅出之原理篇 StatisticSlot&滑动窗口](https://www.jianshu.com/p/9620298fd15a)
  - [Sentinel 深入浅出之原理篇 SystemSlot](https://www.jianshu.com/p/bfad1b7d0cde)
  - [Sentinel 深入浅出之原理篇 AuthoritySlot](https://www.jianshu.com/p/c5312c2242b3)
  - [Sentinel 深入浅出之原理篇 FlowSlot](https://www.jianshu.com/p/53218d0d273e)
  - [Sentinel 深入浅出之原理篇 DegradeSlot](https://www.jianshu.com/p/e910d4840e4a)
- [Alibaba Sentinel RESTful 接口流控处理优化](https://www.jianshu.com/p/96f5980d9798) by [luanlouis](https://github.com/luanlouis)
- [Sentinel 控制台前端开发环境搭建](https://www.cnblogs.com/cdfive2018/p/11084001.html) by [cdfive](https://github.com/cdfive)
- [Sentinel 如何接入 OpenTracing](https://juejin.im/post/5de32fe46fb9a071a828feeb) by [Zhang Shun](https://github.com/ZShUn)
- [阿里 Sentinel 源码解析](https://www.javadoop.com/post/sentinel) by [Javadoop](https://www.javadoop.com)
- [阿里巴巴开源限流降级神器 Sentinel 大规模生产级应用实践](https://mp.weixin.qq.com/s/AjHCUmygTr78yo9yMxMEyg) by 步崖
- [Introduction to Alibaba Sentinel](https://www.baeldung.com/java-sentinel-intro) by [Amit Bhave](https://github.com/Amitbhave)
- [Sentinel Go 毫秒级统计数据结构揭秘](https://sentinelguard.io/zh-cn/blog/sentinel-go-internal-data-structure.html) by [Binbin Zhang](https://github.com/binbin0325)


================================================
FILE: pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-parent</artifactId>
    <version>${revision}</version>
    <packaging>pom</packaging>

    <name>${project.artifactId}</name>
    <description>The parent project of Sentinel</description>
    <url>https://github.com/alibaba/Sentinel</url>
    <licenses>
        <license>
            <name>Apache License, Version 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0</url>
            <distribution>repo</distribution>
        </license>
    </licenses>
    <scm>
        <url>https://github.com/alibaba/Sentinel</url>
        <connection>scm:git:https://github.com/alibaba/Sentinel.git</connection>
        <developerConnection>scm:git:https://github.com/alibaba/Sentinel.git</developerConnection>
    </scm>
    <developers>
        <developer>
            <name>The Sentinel Project Contributors</name>
            <email>sentinel-dev@linux.alibaba.com</email>
            <url>https://github.com/alibaba/Sentinel</url>
        </developer>
    </developers>
    <organization>
        <name>Alibaba Group</name>
        <url>https://github.com/alibaba</url>
    </organization>
    <issueManagement>
        <system>github</system>
        <url>https://github.com/alibaba/Sentinel/issues</url>
    </issueManagement>

    <properties>
        <revision>1.8.9</revision>
        <!-- Compile libs -->
        <fastjson.version>1.2.83_noneautotype</fastjson.version>
        <javax.annotation-api.version>1.3.2</javax.annotation-api.version>

        <!-- Test libs -->
        <junit.version>4.12</junit.version>
        <mockito.version>4.11.0</mockito.version>
        <byte-buddy.version>1.14.10</byte-buddy.version>
        <assertj.version>3.12.1</assertj.version>
        <awaitility.version>3.1.5</awaitility.version>

        <!-- Build -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.source.version>1.8</java.source.version>
        <java.target.version>1.8</java.target.version>
        <java.encoding>UTF-8</java.encoding>
        <maven.compiler.version>3.12.0</maven.compiler.version>
        <maven.surefire.version>3.2.5</maven.surefire.version>
        <maven.source.version>3.0.1</maven.source.version>
        <maven.javadoc.version>3.0.1</maven.javadoc.version>
        <maven.deploy.version>2.8.2</maven.deploy.version>
        <maven.gpg.version>1.6</maven.gpg.version>
        <maven.jacoco.version>0.8.11</maven.jacoco.version>
        <maven.jar.version>3.3.0</maven.jar.version>
        <maven.pmd.version>3.8</maven.pmd.version>
    </properties>

    <modules>
        <module>sentinel-core</module>
        <module>sentinel-extension</module>
        <module>sentinel-transport</module>
        <module>sentinel-adapter</module>
        <module>sentinel-cluster</module>
        <module>sentinel-logging</module>

        <module>sentinel-dashboard</module>

        <module>sentinel-demo</module>
        <module>sentinel-benchmark</module>

    </modules>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.csp</groupId>
                <artifactId>sentinel-core</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.csp</groupId>
                <artifactId>sentinel-extension</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.csp</groupId>
                <artifactId>sentinel-annotation-aspectj</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.csp</groupId>
                <artifactId>sentinel-annotation-cdi-interceptor</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.csp</groupId>
                <artifactId>sentinel-parameter-flow-control</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.csp</groupId>
                <artifactId>sentinel-datasource-extension</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.csp</groupId>
                <artifactId>sentinel-datasource-nacos</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.csp</groupId>
                <artifactId>sentinel-datasource-zookeeper</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.csp</groupId>
                <artifactId>sentinel-datasource-apollo</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.csp</groupId>
                <artifactId>sentinel-datasource-etcd</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.csp</groupId>
                <artifactId>sentinel-transport-simple-http</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.csp</groupId>
                <artifactId>sentinel-transport-netty-http</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.csp</groupId>
                <artifactId>sentinel-transport-spring-mvc</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.csp</groupId>
                <artifactId>sentinel-transport-common</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.csp</groupId>
                <artifactId>sentinel-cluster-common-default</artifactId>
                <version>${project.version}</version>
            </dependency>

            <dependency>
                <groupId>com.alibaba.csp</groupId>
                <artifactId>sentinel-web-adapter-common</artifactId>
                <version>${project.version}</version>
            </dependency>

            <dependency>
                <groupId>com.alibaba.csp</groupId>
                <artifactId>sentinel-adapter</artifactId>
                <version>${project.version}</version>
            </dependency>
            
            <dependency>
                <groupId>com.alibaba.csp</groupId>
                <artifactId>sentinel-metric-exporter</artifactId>
                <version>${project.version}</version>
            </dependency>
            
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>${fastjson.version}</version>
            </dependency>

            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.mockito</groupId>
                <artifactId>mockito-core</artifactId>
                <version>${mockito.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.mockito</groupId>
                <artifactId>mockito-inline</artifactId>
                <version>${mockito.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>net.bytebuddy</groupId>
                <artifactId>byte-buddy</artifactId>
                <version>${byte-buddy.version}</version>
            </dependency>
            <dependency>
                <groupId>net.bytebuddy</groupId>
                <artifactId>byte-buddy-agent</artifactId>
                <version>${byte-buddy.version}</version>
            </dependency>
            <dependency>
                <groupId>org.assertj</groupId>
                <artifactId>assertj-core</artifactId>
                <version>${assertj.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.awaitility</groupId>
                <artifactId>awaitility</artifactId>
                <version>${awaitility.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.hamcrest</groupId>
                <artifactId>java-hamcrest</artifactId>
                <version>2.0.0.0</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>flatten-maven-plugin</artifactId>
                <version>1.7.3</version>
                <configuration>
                    <updatePomFile>true</updatePomFile>
                    <flattenMode>resolveCiFriendliesOnly</flattenMode>
                </configuration>
                <executions>
                    <execution>
                        <id>flatten</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>flatten</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>flatten.clean</id>
                        <phase>clean</phase>
                        <goals>
                            <goal>clean</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-pmd-plugin</artifactId>
                <version>${maven.pmd.version}</version>
                <configuration>
                    <sourceEncoding>${project.build.sourceEncoding}</sourceEncoding>
                    <minimumPriority>1</minimumPriority>
                    <excludeRoots>
                        <excludeRoot>com/alibaba/csp/sentinel/benchmark</excludeRoot>
                    </excludeRoots>
                    <excludes>
                        <exclude>**/*_jmhTest.java</exclude>
                    </excludes>
                    <printFailingErrors>true</printFailingErrors>
                    <rulesets>
                        <ruleset>rulesets/java/ali-comment.xml</ruleset>
                        <ruleset>rulesets/java/ali-concurrent.xml</ruleset>
                        <ruleset>rulesets/java/ali-constant.xml</ruleset>
                        <ruleset>rulesets/java/ali-exception.xml</ruleset>
                        <ruleset>rulesets/java/ali-flowcontrol.xml</ruleset>
                        <ruleset>rulesets/java/ali-naming.xml</ruleset>
                        <ruleset>rulesets/java/ali-oop.xml</ruleset>
                        <ruleset>rulesets/java/ali-orm.xml</ruleset>
                        <ruleset>rulesets/java/ali-other.xml</ruleset>
                        <ruleset>rulesets/java/ali-set.xml</ruleset>
                    </rulesets>
                </configuration>
                <executions>
                    <execution>
                        <phase>verify</phase>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>com.alibaba.p3c</groupId>
                        <artifactId>p3c-pmd</artifactId>
                        <version>1.3.6</version>
                    </dependency>
                </dependencies>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven.compiler.version}</version>
                <executions>
                    <execution>
                        <id>default-compile</id>
                        <configuration>
                            <release>17</release>
                        </configuration>
                    </execution>
                    <execution>
                        <id>base-compile</id>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                        <configuration>
                            <excludes>
                                <exclude>module-info.java</exclude>
                            </excludes>
                        </configuration>
                    </execution>
                </executions>
                <configuration>
                    <release>8</release>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${maven.surefire.version}</version>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>${maven.jacoco.version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>report</id>
                        <phase>test</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>${maven.surefire.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>${maven.jar.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-gpg-plugin</artifactId>
                    <version>${maven.gpg.version}</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

    <profiles>
        <profile>
            <id>central</id>
            <build>
                <plugins>
                    <!-- Source -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                        <version>${maven.source.version}</version>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>jar-no-fork</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <!-- Javadoc -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <version>${maven.javadoc.version}</version>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                                <configuration>
                                    <locale>en_US</locale>
                                    <encoding>UTF-8</encoding>
                                    <charset>UTF-8</charset>
                                    <doclint>none</doclint>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <!-- GPG -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-gpg-plugin</artifactId>
                        <version>${maven.gpg.version}</version>
                        <executions>
                            <execution>
                                <phase>verify</phase>
                                <goals>
                                    <goal>sign</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <!-- central -->
                    <plugin>
                        <groupId>org.sonatype.central</groupId>
                        <artifactId>central-publishing-maven-plugin</artifactId>
                        <version>0.8.0</version>
                        <extensions>true</extensions>
                        <configuration>
                            <publishingServerId>central</publishingServerId>
                            <!--参考官方文档以及实际验证,目前仅支持精确匹配-->
                            <excludeArtifacts>
                                <excludeArtifact>sentinel-benchmark</excludeArtifact>
                                <excludeArtifact>sentinel-dashboard</excludeArtifact>
                                <excludeArtifact>sentinel-demo</excludeArtifact>
                                <excludeArtifact>sentinel-demo-basic</excludeArtifact>
                                <excludeArtifact>sentinel-demo-dynamic-file-rule</excludeArtifact>
                                <excludeArtifact>sentinel-demo-rocketmq</excludeArtifact>
                                <excludeArtifact>sentinel-demo-dubbo</excludeArtifact>
                                <excludeArtifact>sentinel-demo-nacos-datasource</excludeArtifact>
                                <excludeArtifact>sentinel-demo-zookeeper-datasource</excludeArtifact>
                                <excludeArtifact>sentinel-demo-apollo-datasource</excludeArtifact>
                                <excludeArtifact>sentinel-demo-annotation-spring-aop</excludeArtifact>
                                <excludeArtifact>sentinel-demo-parameter-flow-control</excludeArtifact>
                                <excludeArtifact>sentinel-demo-slot-spi</excludeArtifact>
                                <excludeArtifact>sentinel-demo-slotchain-spi</excludeArtifact>
                                <excludeArtifact>sentinel-demo-cluster</excludeArtifact>
                                <excludeArtifact>sentinel-demo-cluster-embedded</excludeArtifact>
                                <excludeArtifact>sentinel-demo-cluster-server-alone</excludeArtifact>
                                <excludeArtifact>sentinel-demo-command-handler</excludeArtifact>
                                <excludeArtifact>sentinel-demo-spring-webflux</excludeArtifact>
                                <excludeArtifact>sentinel-demo-apache-dubbo</excludeArtifact>
                                <excludeArtifact>sentinel-demo-apache-httpclient</excludeArtifact>
                                <excludeArtifact>sentinel-demo-sofa-rpc</excludeArtifact>
                                <excludeArtifact>sentinel-demo-spring-cloud-gateway</excludeArtifact>
                                <excludeArtifact>sentinel-demo-zuul-gateway</excludeArtifact>
                                <excludeArtifact>sentinel-demo-etcd-datasource</excludeArtifact>
                                <excludeArtifact>sentinel-demo-spring-webmvc</excludeArtifact>
                                <excludeArtifact>sentinel-demo-zuul2-gateway</excludeArtifact>
                                <excludeArtifact>sentinel-demo-log-logback</excludeArtifact>
                                <excludeArtifact>sentinel-demo-okhttp</excludeArtifact>
                                <excludeArtifact>sentinel-demo-jax-rs</excludeArtifact>
                                <excludeArtifact>sentinel-demo-quarkus</excludeArtifact>
                                <excludeArtifact>sentinel-demo-annotation-cdi-interceptor</excludeArtifact>
                                <excludeArtifact>sentinel-demo-motan</excludeArtifact>
                                <excludeArtifact>sentinel-demo-transport-spring-mvc</excludeArtifact>
                                <excludeArtifact>sentinel-demo-servlet</excludeArtifact>
                            </excludeArtifacts>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
            <distributionManagement>
                <snapshotRepository>
                    <id>central</id>
                    <url>https://central.sonatype.com/repository/maven-snapshots/</url>
                </snapshotRepository>
                <repository>
                    <id>central</id>
                    <url>https://central.sonatype.org/service/local/staging/deploy/maven2/</url>
                </repository>
            </distributionManagement>
        </profile>
        <profile>
            <id>custom-test-runtime-version</id>
            <activation>
                <property>
                    <name>surefire.jdk-toolchain-version</name>
                </property>
            </activation>
            <build>
                <pluginManagement>
                    <plugins>
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-surefire-plugin</artifactId>
                            <version>${maven.surefire.version}</version>
                            <configuration>
                                <jdkToolchain>
                                    <version>${surefire.jdk-toolchain-version}</version>
                                </jdkToolchain>
                            </configuration>
                        </plugin>
                    </plugins>
                </pluginManagement>
            </build>
        </profile>
    </profiles>

</project>


================================================
FILE: sentinel-adapter/pom.xml
================================================
<?xml version="1.0" encoding="utf-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.alibaba.csp</groupId>
        <artifactId>sentinel-parent</artifactId>
        <version>${revision}</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <artifactId>sentinel-adapter</artifactId>
    <packaging>pom</packaging>
    <name>sentinel-adapter</name>
    <description>The adapters of Sentinel</description>

    <modules>
        <module>sentinel-web-servlet</module>
        <module>sentinel-dubbo-adapter</module>
        <module>sentinel-apache-dubbo-adapter</module>
        <module>sentinel-apache-dubbo3-adapter</module>
        <module>sentinel-apache-httpclient-adapter</module>
        <module>sentinel-sofa-rpc-adapter</module>
        <module>sentinel-grpc-adapter</module>
        <module>sentinel-zuul-adapter</module>
        <module>sentinel-reactor-adapter</module>
        <module>sentinel-spring-webflux-adapter</module>
        <module>sentinel-api-gateway-adapter-common</module>
        <module>sentinel-spring-cloud-gateway-adapter</module>
        <module>sentinel-spring-cloud-gateway-v6x-adapter</module>
        <module>sentinel-web-adapter-common</module>
        <module>sentinel-spring-webmvc-adapter</module>
        <module>sentinel-spring-webmvc-v6x-adapter</module>
        <module>sentinel-zuul2-adapter</module>
        <module>sentinel-okhttp-adapter</module>
        <module>sentinel-spring-restclient-adapter</module>
        <module>sentinel-jax-rs-adapter</module>
        <module>sentinel-quarkus-adapter</module>
        <module>sentinel-motan-adapter</module>
    </modules>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.csp</groupId>
                <artifactId>sentinel-core</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.csp</groupId>
                <artifactId>sentinel-extension</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.csp</groupId>
                <artifactId>sentinel-web-servlet</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.csp</groupId>
                <artifactId>sentinel-reactor-adapter</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.csp</groupId>
                <artifactId>sentinel-api-gateway-adapter-common</artifactId>
                <version>${project.version}</version>
            </dependency>

            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.mockito</groupId>
                <artifactId>mockito-core</artifactId>
                <version>${mockito.version}</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>


================================================
FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/README.md
================================================
# Sentinel Apache Dubbo Adapter (for 2.7.x+)

> Note: 中文文档请见[此处](https://sentinelguard.io/zh-cn/docs/open-source-framework-integrations.html)。

Sentinel Dubbo Adapter provides service consumer filter and provider filter
for [Apache Dubbo](https://dubbo.apache.org/en/) services.

**Note: This adapter only supports Apache Dubbo 2.7.x and above.** For legacy `com.alibaba:dubbo` 2.6.x,
please use `sentinel-dubbo-adapter` module instead.

To use Sentinel Dubbo Adapter, you can simply add the following dependency to your `pom.xml`:

```xml
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-apache-dubbo-adapter</artifactId>
    <version>x.y.z</version>
</dependency>
```

The Sentinel filters are **enabled by default**. Once you add the dependency,
the Dubbo services and methods will become protected resources in Sentinel,
which can leverage Sentinel's flow control and guard ability when rules are configured.
Demos can be found in [sentinel-demo-apache-dubbo](https://github.com/alibaba/Sentinel/tree/master/sentinel-demo/sentinel-demo-apache-dubbo).

If you don't want the filters enabled, you can manually disable them. For example:

```xml
<dubbo:consumer filter="-sentinel.dubbo.consumer.filter"/>

<dubbo:provider filter="-sentinel.dubbo.provider.filter"/>
```

For more details of Dubbo filter, see [Dubbo filter documentation](https://cn.dubbo.apache.org/en/overview/mannual/java-sdk/tasks/extensibility/filter/).

## Dubbo resources

The resource for Dubbo services has two granularities: service interface and service method.

- Service interface: resourceName format is `interfaceName`, e.g. `com.alibaba.csp.sentinel.demo.dubbo.FooService`
- Service method: resourceName format is `interfaceName:methodSignature`, e.g. `com.alibaba.csp.sentinel.demo.dubbo.FooService:sayHello(java.lang.String)`

## Flow control based on caller

In many circumstances, it's also significant to control traffic flow based on the **caller**.
For example, assuming that there are two services A and B, both of them initiate remote call requests to the service provider.
If we want to limit the calls from service B only, we can set the `limitApp` of flow rule as the identifier of service B (e.g. service name).

Sentinel Dubbo Adapter will automatically resolve the Dubbo consumer's *application name* as the caller's name (`origin`),
and will bring the caller's name when doing resource protection.
If `limitApp` of flow rules is not configured (`default`), flow control will take effects on all callers.
If `limitApp` of a flow rule is configured with a caller, then the corresponding flow rule will only take effect on the specific caller.

> Note: Earlier Dubbo 2.7.x consumer does not provide its Dubbo application name when doing RPC,
> so developers should manually put the application name into *attachment* at consumer side,
> then extract it at provider side. Sentinel Dubbo Adapter has implemented a filter (`DubboAppContextFilter`)
> where consumer can carry application name information to provider automatically.
> If the consumer does not use Sentinel Dubbo Adapter but requires flow control based on caller,
> developers can manually put the application name into attachment with the key `dubboApplication`.
>
> Since 1.8.0, the adapter provides support for customizing origin parsing logic. You may register your own `DubboOriginParser`
> implementation to `DubboAdapterGlobalConfig`.

## Global fallback

Sentinel Dubbo Adapter supports global fallback configuration.
The global fallback will handle exceptions and give replacement result when blocked by
flow control, degrade or system load protection. You can implement your own `DubboFallback` interface
and then register to `DubboAdapterGlobalConfig`.
If no fallback is configured, Sentinel will wrap the `BlockException` as the fallback result.

Besides, we can also leverage [Dubbo mock mechanism](http://dubbo.apache.org/en-us/docs/user/demos/local-mock.html) to provide fallback implementation of degraded Dubbo services.


================================================
FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <groupId>com.alibaba.csp</groupId>
        <artifactId>sentinel-adapter</artifactId>
        <version>${revision}</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <name>${project.groupId}:${project.artifactId}</name>

    <artifactId>sentinel-apache-dubbo-adapter</artifactId>
    <packaging>jar</packaging>

    <properties>
        <java.source.version>1.8</java.source.version>
        <java.target.version>1.8</java.target.version>
        <apache.dubbo.version>2.7.13</apache.dubbo.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>${apache.dubbo.version}</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-inline</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

================================================
FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/BaseSentinelDubboFilter.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.alibaba.csp.sentinel.adapter.dubbo;


import org.apache.dubbo.rpc.Filter;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;

/**
 * Base class of the {@link SentinelDubboProviderFilter} and {@link SentinelDubboConsumerFilter}.
 *
 * @author Zechao Zheng
 */
public abstract class BaseSentinelDubboFilter implements Filter {


    /**
     * Get method name of dubbo rpc
     *
     * @param invoker
     * @param invocation
     * @return
     */
    abstract String getMethodName(Invoker invoker, Invocation invocation, String prefix);

    /**
     * Get interface name of dubbo rpc
     *
     * @param invoker
     * @return
     */
    abstract String getInterfaceName(Invoker invoker, String prefix);


}


================================================
FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/DubboAppContextFilter.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.alibaba.csp.sentinel.adapter.dubbo;

import org.apache.dubbo.common.constants.CommonConstants;
import org.apache.dubbo.common.extension.Activate;
import org.apache.dubbo.rpc.Filter;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.Result;
import org.apache.dubbo.rpc.RpcContext;
import org.apache.dubbo.rpc.RpcException;

import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER;

/**
 * Puts current consumer's application name in the attachment of each invocation.
 *
 * @author Eric Zhao
 */
@Activate(group = CONSUMER)
public class DubboAppContextFilter implements Filter {

    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
        String application = invoker.getUrl().getParameter(CommonConstants.APPLICATION_KEY);
        if (application != null) {
            RpcContext.getContext().setAttachment(DubboUtils.SENTINEL_DUBBO_APPLICATION_KEY, application);
        }
        return invoker.invoke(invocation);
    }
}


================================================
FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/DubboUtils.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.alibaba.csp.sentinel.adapter.dubbo;

import com.alibaba.csp.sentinel.adapter.dubbo.config.DubboAdapterGlobalConfig;
import com.alibaba.csp.sentinel.util.StringUtil;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;

/**
 * @author Eric Zhao
 */
public final class DubboUtils {

    public static final String SENTINEL_DUBBO_APPLICATION_KEY = "dubboApplication";

    public static String getApplication(Invocation invocation, String defaultValue) {
        if (invocation == null || invocation.getAttachments() == null) {
            throw new IllegalArgumentException("Bad invocation instance");
        }
        return invocation.getAttachment(SENTINEL_DUBBO_APPLICATION_KEY, defaultValue);
    }

    public static String getMethodResourceName(Invoker<?> invoker, Invocation invocation){
        return getMethodResourceName(invoker, invocation, false);
    }

    public static String getMethodResourceName(Invoker<?> invoker, Invocation invocation, Boolean useGroupAndVersion) {
        StringBuilder buf = new StringBuilder(64);
        String interfaceResource = useGroupAndVersion ? invoker.getUrl().getColonSeparatedKey() : invoker.getInterface().getName();
        buf.append(interfaceResource)
            .append(":")
            .append(invocation.getMethodName())
            .append("(");
        boolean isFirst = true;
        for (Class<?> clazz : invocation.getParameterTypes()) {
            if (!isFirst) {
                buf.append(",");
            }
            buf.append(clazz.getName());
            isFirst = false;
        }
        buf.append(")");
        return buf.toString();
    }

    public static String getMethodResourceName(Invoker<?> invoker, Invocation invocation, String prefix) {
        if (StringUtil.isNotBlank(prefix)) {
            return new StringBuilder(64)
                    .append(prefix)
                    .append(getMethodResourceName(invoker, invocation, DubboAdapterGlobalConfig.getDubboInterfaceGroupAndVersionEnabled()))
                    .toString();
        } else {
            return getMethodResourceName(invoker, invocation, DubboAdapterGlobalConfig.getDubboInterfaceGroupAndVersionEnabled());
        }
    }


    public static String getInterfaceName(Invoker invoker) {
        return getInterfaceName(invoker, false);
    }

    public static String getInterfaceName(Invoker<?> invoker, Boolean useGroupAndVersion) {
        StringBuilder buf = new StringBuilder(64);
        return useGroupAndVersion ? invoker.getUrl().getColonSeparatedKey() : invoker.getInterface().getName();
    }

    public static String getInterfaceName(Invoker<?> invoker, String prefix) {
        if (StringUtil.isNotBlank(prefix)) {
            return new StringBuilder(64)
                    .append(prefix)
                    .append(getInterfaceName(invoker, DubboAdapterGlobalConfig.getDubboInterfaceGroupAndVersionEnabled()))
                    .toString();
        } else {
            return getInterfaceName(invoker, DubboAdapterGlobalConfig.getDubboInterfaceGroupAndVersionEnabled());
        }
    }


    private DubboUtils() {
    }
}


================================================
FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/SentinelDubboConsumerFilter.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.alibaba.csp.sentinel.adapter.dubbo;

import com.alibaba.csp.sentinel.*;
import com.alibaba.csp.sentinel.adapter.dubbo.config.DubboAdapterGlobalConfig;
import com.alibaba.csp.sentinel.log.RecordLog;
import com.alibaba.csp.sentinel.slots.block.BlockException;

import org.apache.dubbo.common.extension.Activate;
import org.apache.dubbo.rpc.*;
import org.apache.dubbo.rpc.support.RpcUtils;

import java.util.LinkedList;
import java.util.Optional;
import java.util.function.BiConsumer;

import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER;

/**
 * <p>Dubbo service consumer filter for Sentinel. Auto activated by default.</p>
 * <p>
 * If you want to disable the consumer filter, you can configure:
 * <pre>
 * &lt;dubbo:consumer filter="-sentinel.dubbo.consumer.filter"/&gt;
 * </pre>
 *
 * @author Carpenter Lee
 * @author Eric Zhao
 * @author Lin Liang
 */
@Activate(group = CONSUMER)
public class SentinelDubboConsumerFilter extends BaseSentinelDubboFilter {

    public SentinelDubboConsumerFilter() {
        RecordLog.info("Sentinel Apache Dubbo consumer filter initialized");
    }

    @Override
    String getMethodName(Invoker invoker, Invocation invocation, String prefix) {
        return DubboUtils.getMethodResourceName(invoker, invocation, prefix);
    }

    @Override
    String getInterfaceName(Invoker invoker, String prefix) {
        return DubboUtils.getInterfaceName(invoker, prefix);
    }

    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
        InvokeMode invokeMode = RpcUtils.getInvokeMode(invoker.getUrl(), invocation);
        if (InvokeMode.SYNC == invokeMode) {
            return syncInvoke(invoker, invocation);
        } else {
            return asyncInvoke(invoker, invocation);
        }
    }

    private Result syncInvoke(Invoker<?> invoker, Invocation invocation) {
        Entry interfaceEntry = null;
        Entry methodEntry = null;
        String prefix = DubboAdapterGlobalConfig.getDubboConsumerResNamePrefixKey();
        String interfaceResourceName = getInterfaceName(invoker, prefix);
        String methodResourceName = getMethodName(invoker, invocation, prefix);
        try {
            interfaceEntry = SphU.entry(interfaceResourceName, ResourceTypeConstants.COMMON_RPC, EntryType.OUT);
            methodEntry = SphU.entry(methodResourceName, ResourceTypeConstants.COMMON_RPC, EntryType.OUT,
                invocation.getArguments());
            Result result = invoker.invoke(invocation);
            if (result.hasException()) {
                Tracer.traceEntry(result.getException(), interfaceEntry);
                Tracer.traceEntry(result.getException(), methodEntry);
            }
            return result;
        } catch (BlockException e) {
            return DubboAdapterGlobalConfig.getConsumerFallback().handle(invoker, invocation, e);
        } catch (RpcException e) {
            Tracer.traceEntry(e, interfaceEntry);
            Tracer.traceEntry(e, methodEntry);
            throw e;
        } finally {
            if (methodEntry != null) {
                methodEntry.exit(1, invocation.getArguments());
            }
            if (interfaceEntry != null) {
                interfaceEntry.exit();
            }
        }
    }

    private Result asyncInvoke(Invoker<?> invoker, Invocation invocation) {
        LinkedList<EntryHolder> queue = new LinkedList<>();
        String prefix = DubboAdapterGlobalConfig.getDubboConsumerResNamePrefixKey();
        String interfaceResourceName = getInterfaceName(invoker, prefix);
        String methodResourceName = getMethodName(invoker, invocation, prefix);
        try {
            queue.push(new EntryHolder(
                SphU.asyncEntry(interfaceResourceName, ResourceTypeConstants.COMMON_RPC, EntryType.OUT), null));
            queue.push(new EntryHolder(
                SphU.asyncEntry(methodResourceName, ResourceTypeConstants.COMMON_RPC,
                    EntryType.OUT, 1, invocation.getArguments()), invocation.getArguments()));
            Result result = invoker.invoke(invocation);
            result.whenCompleteWithContext((r, throwable) -> {
                Throwable error = throwable;
                if (error == null) {
                    error = Optional.ofNullable(r).map(Result::getException).orElse(null);
                }
                while (!queue.isEmpty()) {
                    EntryHolder holder = queue.pop();
                    Tracer.traceEntry(error, holder.entry);
                    exitEntry(holder);
                }
            });
            return result;
        } catch (BlockException e) {
            while (!queue.isEmpty()) {
                exitEntry(queue.pop());
            }
            return DubboAdapterGlobalConfig.getConsumerFallback().handle(invoker, invocation, e);
        }
    }

    static class EntryHolder {

        final private Entry entry;
        final private Object[] params;

        public EntryHolder(Entry entry, Object[] params) {
            this.entry = entry;
            this.params = params;
        }
    }

    private void exitEntry(EntryHolder holder) {
        if (holder.params != null) {
            holder.entry.exit(1, holder.params);
        } else {
            holder.entry.exit();
        }
    }
}


================================================
FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/SentinelDubboProviderFilter.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.alibaba.csp.sentinel.adapter.dubbo;

import com.alibaba.csp.sentinel.*;
import com.alibaba.csp.sentinel.adapter.dubbo.config.DubboAdapterGlobalConfig;
import com.alibaba.csp.sentinel.context.ContextUtil;
import com.alibaba.csp.sentinel.log.RecordLog;
import com.alibaba.csp.sentinel.slots.block.BlockException;

import org.apache.dubbo.common.extension.Activate;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.Result;
import org.apache.dubbo.rpc.RpcException;

import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER;

/**
 * <p>Apache Dubbo service provider filter that enables integration with Sentinel. Auto activated by default.</p>
 * <p>Note: this only works for Apache Dubbo 2.7.x or above version.</p>
 * <p>
 * If you want to disable the provider filter, you can configure:
 * <pre>
 * &lt;dubbo:provider filter="-sentinel.dubbo.provider.filter"/&gt;
 * </pre>
 *
 * @author Carpenter Lee
 * @author Eric Zhao
 */
@Activate(group = PROVIDER)
public class SentinelDubboProviderFilter extends BaseSentinelDubboFilter {

    public SentinelDubboProviderFilter() {
        RecordLog.info("Sentinel Apache Dubbo provider filter initialized");
    }

    @Override
    String getMethodName(Invoker invoker, Invocation invocation, String prefix) {
        return DubboUtils.getMethodResourceName(invoker, invocation, prefix);
    }

    @Override
    String getInterfaceName(Invoker invoker, String prefix) {
        return DubboUtils.getInterfaceName(invoker, prefix);
    }

    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
        // Get origin caller.
        String origin = DubboAdapterGlobalConfig.getOriginParser().parse(invoker, invocation);
        if (null == origin) {
            origin = "";
        }
        Entry interfaceEntry = null;
        Entry methodEntry = null;
        String prefix = DubboAdapterGlobalConfig.getDubboProviderResNamePrefixKey();
        String interfaceResourceName = getInterfaceName(invoker, prefix);
        String methodResourceName = getMethodName(invoker, invocation, prefix);
        try {
            // Only need to create entrance context at provider side, as context will take effect
            // at entrance of invocation chain only (for inbound traffic).
            ContextUtil.enter(methodResourceName, origin);
            interfaceEntry = SphU.entry(interfaceResourceName, ResourceTypeConstants.COMMON_RPC, EntryType.IN);
            methodEntry = SphU.entry(methodResourceName, ResourceTypeConstants.COMMON_RPC, EntryType.IN,
                invocation.getArguments());
            Result result = invoker.invoke(invocation);
            if (result.hasException()) {
                Tracer.traceEntry(result.getException(), interfaceEntry);
                Tracer.traceEntry(result.getException(), methodEntry);
            }
            return result;
        } catch (BlockException e) {
            return DubboAdapterGlobalConfig.getProviderFallback().handle(invoker, invocation, e);
        } catch (RpcException e) {
            Tracer.traceEntry(e, interfaceEntry);
            Tracer.traceEntry(e, methodEntry);
            throw e;
        } finally {
            if (methodEntry != null) {
                methodEntry.exit(1, invocation.getArguments());
            }
            if (interfaceEntry != null) {
                interfaceEntry.exit();
            }
            ContextUtil.exit();
        }
    }

}



================================================
FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/config/DubboAdapterGlobalConfig.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.alibaba.csp.sentinel.adapter.dubbo.config;

import com.alibaba.csp.sentinel.adapter.dubbo.fallback.DefaultDubboFallback;
import com.alibaba.csp.sentinel.adapter.dubbo.fallback.DubboFallback;
import com.alibaba.csp.sentinel.adapter.dubbo.origin.DefaultDubboOriginParser;
import com.alibaba.csp.sentinel.adapter.dubbo.origin.DubboOriginParser;
import com.alibaba.csp.sentinel.config.SentinelConfig;
import com.alibaba.csp.sentinel.util.AssertUtil;
import com.alibaba.csp.sentinel.util.StringUtil;

/**
 * <p>
 * Responsible for dubbo service provider, consumer attribute configuration
 * </p>
 *
 * @author lianglin
 * @since 1.7.0
 */
public final class DubboAdapterGlobalConfig {

    private static final String TRUE_STR = "true";

    public static final String DUBBO_RES_NAME_WITH_PREFIX_KEY = "csp.sentinel.dubbo.resource.use.prefix";
    public static final String DUBBO_PROVIDER_RES_NAME_PREFIX_KEY = "csp.sentinel.dubbo.resource.provider.prefix";
    public static final String DUBBO_CONSUMER_RES_NAME_PREFIX_KEY = "csp.sentinel.dubbo.resource.consumer.prefix";

    private static final String DEFAULT_DUBBO_PROVIDER_PREFIX = "dubbo:provider:";
    private static final String DEFAULT_DUBBO_CONSUMER_PREFIX = "dubbo:consumer:";

    public static final String DUBBO_INTERFACE_GROUP_VERSION_ENABLED = "csp.sentinel.dubbo.interface.group.version.enabled";

    private static volatile DubboFallback consumerFallback = new DefaultDubboFallback();
    private static volatile DubboFallback providerFallback = new DefaultDubboFallback();
    private static volatile DubboOriginParser originParser = new DefaultDubboOriginParser();

    public static boolean isUsePrefix() {
        return TRUE_STR.equalsIgnoreCase(SentinelConfig.getConfig(DUBBO_RES_NAME_WITH_PREFIX_KEY));
    }

    public static String getDubboProviderResNamePrefixKey() {
        if (isUsePrefix()) {
            String config = SentinelConfig.getConfig(DUBBO_PROVIDER_RES_NAME_PREFIX_KEY);
            return StringUtil.isNotBlank(config) ? config : DEFAULT_DUBBO_PROVIDER_PREFIX;
        }
        return null;
    }

    public static String getDubboConsumerResNamePrefixKey() {
        if (isUsePrefix()) {
            String config = SentinelConfig.getConfig(DUBBO_CONSUMER_RES_NAME_PREFIX_KEY);
            return StringUtil.isNotBlank(config) ? config : DEFAULT_DUBBO_CONSUMER_PREFIX;
        }
        return null;
    }

    public static Boolean getDubboInterfaceGroupAndVersionEnabled() {
        return TRUE_STR.equalsIgnoreCase(SentinelConfig.getConfig(DUBBO_INTERFACE_GROUP_VERSION_ENABLED));
    }

    public static DubboFallback getConsumerFallback() {
        return consumerFallback;
    }

    public static void setConsumerFallback(DubboFallback consumerFallback) {
        AssertUtil.notNull(consumerFallback, "consumerFallback cannot be null");
        DubboAdapterGlobalConfig.consumerFallback = consumerFallback;
    }

    public static DubboFallback getProviderFallback() {
        return providerFallback;
    }

    public static void setProviderFallback(DubboFallback providerFallback) {
        AssertUtil.notNull(providerFallback, "providerFallback cannot be null");
        DubboAdapterGlobalConfig.providerFallback = providerFallback;
    }

    /**
     * Get the origin parser of Dubbo adapter.
     *
     * @return the origin parser
     * @since 1.8.0
     */
    public static DubboOriginParser getOriginParser() {
        return originParser;
    }

    /**
     * Set the origin parser of Dubbo adapter.
     *
     * @param originParser the origin parser
     * @since 1.8.0
     */
    public static void setOriginParser(DubboOriginParser originParser) {
        AssertUtil.notNull(originParser, "originParser cannot be null");
        DubboAdapterGlobalConfig.originParser = originParser;
    }

    private DubboAdapterGlobalConfig() {}

}


================================================
FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/fallback/DefaultDubboFallback.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.alibaba.csp.sentinel.adapter.dubbo.fallback;

import com.alibaba.csp.sentinel.slots.block.BlockException;

import org.apache.dubbo.rpc.AsyncRpcResult;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.Result;

/**
 * @author Eric Zhao
 */
public class DefaultDubboFallback implements DubboFallback {

    @Override
    public Result handle(Invoker<?> invoker, Invocation invocation, BlockException ex) {
        // Just wrap the exception.
        return AsyncRpcResult.newDefaultAsyncResult(ex.toRuntimeException(), invocation);
    }
}


================================================
FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/fallback/DubboFallback.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.alibaba.csp.sentinel.adapter.dubbo.fallback;

import com.alibaba.csp.sentinel.slots.block.BlockException;

import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.Result;

/**
 * Fallback handler for Dubbo services.
 *
 * @author Eric Zhao
 */
@FunctionalInterface
public interface DubboFallback {

    /**
     * Handle the block exception and provide fallback result.
     *
     * @param invoker Dubbo invoker
     * @param invocation Dubbo invocation
     * @param ex block exception
     * @return fallback result
     */
    Result handle(Invoker<?> invoker, Invocation invocation, BlockException ex);
}


================================================
FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/fallback/DubboFallbackRegistry.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.alibaba.csp.sentinel.adapter.dubbo.fallback;

import com.alibaba.csp.sentinel.adapter.dubbo.config.DubboAdapterGlobalConfig;

/**
 * <p>Global fallback registry for Dubbo.</p>
 *
 * @author Eric Zhao
 * @deprecated use {@link DubboAdapterGlobalConfig} instead since 1.8.0.
 */
@Deprecated
public final class DubboFallbackRegistry {

    public static DubboFallback getConsumerFallback() {
        return DubboAdapterGlobalConfig.getConsumerFallback();
    }

    public static void setConsumerFallback(DubboFallback consumerFallback) {
        DubboAdapterGlobalConfig.setConsumerFallback(consumerFallback);
    }

    public static DubboFallback getProviderFallback() {
        return DubboAdapterGlobalConfig.getProviderFallback();
    }

    public static void setProviderFallback(DubboFallback providerFallback) {
        DubboAdapterGlobalConfig.setProviderFallback(providerFallback);
    }

    private DubboFallbackRegistry() {}
}


================================================
FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/origin/DefaultDubboOriginParser.java
================================================
/*
 * Copyright 1999-2020 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.alibaba.csp.sentinel.adapter.dubbo.origin;

import com.alibaba.csp.sentinel.adapter.dubbo.DubboUtils;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;

/**
 * Default Dubbo origin parser.
 *
 * @author jingzian
 */
public class DefaultDubboOriginParser implements DubboOriginParser {

    @Override
    public String parse(Invoker<?> invoker, Invocation invocation) {
        return DubboUtils.getApplication(invocation, "");
    }

}


================================================
FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/origin/DubboOriginParser.java
================================================
/*
 * Copyright 1999-2020 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.alibaba.csp.sentinel.adapter.dubbo.origin;

import com.alibaba.csp.sentinel.context.Context;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;

/**
 * Customized origin parser for Dubbo provider filter.{@link Context#getOrigin()}
 *
 * @author jingzian
 */
public interface DubboOriginParser {

    /**
     * Parses the origin (caller) from Dubbo invocation.
     *
     * @param invoker    Dubbo invoker
     * @param invocation Dubbo invocation
     * @return the parsed origin
     */
    String parse(Invoker<?> invoker, Invocation invocation);

}


================================================
FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter
================================================
sentinel.dubbo.provider.filter=com.alibaba.csp.sentinel.adapter.dubbo.SentinelDubboProviderFilter
sentinel.dubbo.consumer.filter=com.alibaba.csp.sentinel.adapter.dubbo.SentinelDubboConsumerFilter
dubbo.application.context.name.filter=com.alibaba.csp.sentinel.adapter.dubbo.DubboAppContextFilter


================================================
FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/BaseTest.java
================================================
/*
 * Copyright 1999-2024 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.alibaba.csp.sentinel;

import com.alibaba.csp.sentinel.adapter.dubbo.AbstractTimeBasedTest;
import com.alibaba.csp.sentinel.adapter.dubbo.config.DubboAdapterGlobalConfig;
import com.alibaba.csp.sentinel.adapter.dubbo.fallback.DefaultDubboFallback;
import com.alibaba.csp.sentinel.config.SentinelConfig;
import com.alibaba.csp.sentinel.context.ContextUtil;
import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRuleManager;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
import com.alibaba.csp.sentinel.slots.clusterbuilder.ClusterBuilderSlot;
import org.apache.dubbo.rpc.RpcContext;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;

/**
 * Base test class, provide common methods for subClass
 * The package is same as CtSph, to call CtSph.resetChainMap() method for test
 * <p>
 * Note: Only for test. DO NOT USE IN PRODUCTION!
 *
 * @author cdfive
 * @author lianglin
 */
public class BaseTest extends AbstractTimeBasedTest {


    /**
     * Clean up resources for context, clusterNodeMap, processorSlotChainMap
     */
    public void cleanUpAll() {
        try {
            clearDubboContext();
            cleanUpCstContext();
        } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
            e.printStackTrace();
        }
    }

    private void cleanUpCstContext() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        ClusterBuilderSlot.getClusterNodeMap().clear();
        CtSph.resetChainMap();
        Method method = ContextUtil.class.getDeclaredMethod("resetContextMap");
        method.setAccessible(true);
        method.invoke(null, null);
        ContextUtil.exit();
        FlowRuleManager.loadRules(new ArrayList<>());
        DegradeRuleManager.loadRules(new ArrayList<>());
    }

    private void clearDubboContext() {
        SentinelConfig.setConfig("csp.sentinel.dubbo.resource.use.prefix", "false");
        SentinelConfig.setConfig(DubboAdapterGlobalConfig.DUBBO_PROVIDER_RES_NAME_PREFIX_KEY, "");
        SentinelConfig.setConfig(DubboAdapterGlobalConfig.DUBBO_CONSUMER_RES_NAME_PREFIX_KEY, "");
        SentinelConfig.setConfig(DubboAdapterGlobalConfig.DUBBO_INTERFACE_GROUP_VERSION_ENABLED, "false");
        DubboAdapterGlobalConfig.setConsumerFallback(new DefaultDubboFallback());
        RpcContext.removeContext();

    }
}

================================================
FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/DubboTestUtil.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.alibaba.csp.sentinel;

import com.alibaba.csp.sentinel.adapter.dubbo.provider.DemoService;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.constants.CommonConstants;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;

import java.lang.reflect.Method;

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

/**
 * @author lianglin
 */
public class DubboTestUtil {


    public static Class<?> DEFAULT_TEST_SERVICE = DemoService.class;
    public static Method DEFAULT_TEST_METHOD_ONE = DEFAULT_TEST_SERVICE.getMethods()[0];
    public static Method DEFAULT_TEST_METHOD_TWO = DEFAULT_TEST_SERVICE.getMethods()[1];

    public static Invoker getMockInvoker(URL url, Class<?> cls) {
        Invoker invoker = mock(Invoker.class);
        when(invoker.getUrl()).thenReturn(url);
        when(invoker.getInterface()).thenReturn(cls);
        return invoker;
    }

    public static Invoker getDefaultMockInvoker() {
        return getMockInvoker(getDefaultTestURL(), DEFAULT_TEST_SERVICE);
    }

    public static Invocation getMockInvocation(Method method) {
        Invocation invocation = mock(Invocation.class);
        when(invocation.getMethodName()).thenReturn(method.getName());
        when(invocation.getParameterTypes()).thenReturn(method.getParameterTypes());
        return invocation;
    }

    public static Invocation getDefaultMockInvocationOne() {
        Invocation invocation = mock(Invocation.class);
        when(invocation.getMethodName()).thenReturn(DEFAULT_TEST_METHOD_ONE.getName());
        when(invocation.getParameterTypes()).thenReturn(DEFAULT_TEST_METHOD_ONE.getParameterTypes());
        return invocation;
    }

    public static Invocation getDefaultMockInvocationTwo() {
        Invocation invocation = mock(Invocation.class);
        when(invocation.getMethodName()).thenReturn(DEFAULT_TEST_METHOD_TWO.getName());
        when(invocation.getParameterTypes()).thenReturn(DEFAULT_TEST_METHOD_TWO.getParameterTypes());
        return invocation;
    }

    public static URL getDefaultTestURL() {
        URL url = URL.valueOf("dubbo://127.0.0.1:2181")
                .addParameter(CommonConstants.VERSION_KEY, "1.0.0")
                .addParameter(CommonConstants.GROUP_KEY, "grp1")
                .addParameter(CommonConstants.INTERFACE_KEY, DEFAULT_TEST_SERVICE.getName());
        return url;
    }


}


================================================
FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/AbstractTimeBasedTest.java
================================================
/*
 * Copyright 1999-2024 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.alibaba.csp.sentinel.adapter.dubbo;

import com.alibaba.csp.sentinel.util.TimeUtil;
import org.mockito.MockedStatic;
import org.mockito.Mockito;

public abstract class AbstractTimeBasedTest {

    private long currentMillis = 0;

    public MockedStatic<TimeUtil> mockTimeUtil() {
        MockedStatic<TimeUtil> mocked = Mockito.mockStatic(TimeUtil.class);
        mocked.when(TimeUtil::currentTimeMillis).thenReturn(currentMillis);
        return mocked;
    }

    protected final void useActualTime(MockedStatic<TimeUtil> mocked) {
        mocked.when(TimeUtil::currentTimeMillis).thenCallRealMethod();
    }

    protected final void setCurrentMillis(MockedStatic<TimeUtil> mocked, long cur) {
        currentMillis = cur;
        mocked.when(TimeUtil::currentTimeMillis).thenReturn(currentMillis);
    }

    protected final void sleep(MockedStatic<TimeUtil> mocked, long timeInMs) {
        currentMillis += timeInMs;
        mocked.when(TimeUtil::currentTimeMillis).thenReturn(currentMillis);
    }

    protected final void sleepSecond(MockedStatic<TimeUtil> mocked, long timeSec) {
        sleep(mocked, timeSec * 1000);
    }
}


================================================
FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/DubboAppContextFilterTest.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.alibaba.csp.sentinel.adapter.dubbo;

import com.alibaba.csp.sentinel.BaseTest;

import org.apache.dubbo.common.URL;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.RpcContext;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import static org.junit.Assert.*;
import static org.mockito.Mockito.*;

/**
 * @author cdfive
 */
public class DubboAppContextFilterTest extends BaseTest {

    private DubboAppContextFilter filter = new DubboAppContextFilter();

    @Before
    public void setUp() {
        cleanUpAll();
    }

    @After
    public void cleanUp() {
        cleanUpAll();
    }

    @Test
    public void testInvokeApplicationKey() {
        Invoker invoker = mock(Invoker.class);
        Invocation invocation = mock(Invocation.class);
        URL url = URL.valueOf("test://test:111/test?application=serviceA");
        when(invoker.getUrl()).thenReturn(url);

        filter.invoke(invoker, invocation);
        verify(invoker).invoke(invocation);

        String application = RpcContext.getContext().getAttachment(DubboUtils.SENTINEL_DUBBO_APPLICATION_KEY);
        assertEquals("serviceA", application);
    }

    @Test
    public void testInvokeNullApplicationKey() {
        Invoker invoker = mock(Invoker.class);
        Invocation invocation = mock(Invocation.class);
        URL url = URL.valueOf("test://test:111/test?application=");
        when(invoker.getUrl()).thenReturn(url);

        filter.invoke(invoker, invocation);
        verify(invoker).invoke(invocation);

        String application = RpcContext.getContext().getAttachment(DubboUtils.SENTINEL_DUBBO_APPLICATION_KEY);
        assertEquals(application, "");
    }
}


================================================
FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/DubboUtilsTest.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.alibaba.csp.sentinel.adapter.dubbo;

import com.alibaba.csp.sentinel.adapter.dubbo.config.DubboAdapterGlobalConfig;
import com.alibaba.csp.sentinel.adapter.dubbo.provider.DemoService;
import com.alibaba.csp.sentinel.config.SentinelConfig;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.constants.CommonConstants;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.lang.reflect.Method;
import java.util.HashMap;

import static com.alibaba.csp.sentinel.adapter.dubbo.config.DubboAdapterGlobalConfig.DUBBO_INTERFACE_GROUP_VERSION_ENABLED;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.*;

/**
 * @author cdfive
 */
public class DubboUtilsTest {

    @Before
    public void setUp() {
        SentinelConfig.setConfig("csp.sentinel.dubbo.resource.use.prefix", "true");
        SentinelConfig.setConfig(DubboAdapterGlobalConfig.DUBBO_PROVIDER_RES_NAME_PREFIX_KEY, "");
        SentinelConfig.setConfig(DubboAdapterGlobalConfig.DUBBO_CONSUMER_RES_NAME_PREFIX_KEY, "");
        SentinelConfig.setConfig(DUBBO_INTERFACE_GROUP_VERSION_ENABLED, "false");
    }


    @After
    public void tearDown() {
        SentinelConfig.setConfig("csp.sentinel.dubbo.resource.use.prefix", "false");
        SentinelConfig.setConfig(DubboAdapterGlobalConfig.DUBBO_PROVIDER_RES_NAME_PREFIX_KEY, "");
        SentinelConfig.setConfig(DubboAdapterGlobalConfig.DUBBO_CONSUMER_RES_NAME_PREFIX_KEY, "");
        SentinelConfig.setConfig(DUBBO_INTERFACE_GROUP_VERSION_ENABLED, "false");
    }


    @Test
    public void testGetApplication() {
        Invocation invocation = mock(Invocation.class);
        when(invocation.getAttachments()).thenReturn(new HashMap<>());
        when(invocation.getAttachment(DubboUtils.SENTINEL_DUBBO_APPLICATION_KEY, ""))
                .thenReturn("consumerA");

        String application = DubboUtils.getApplication(invocation, "");
        verify(invocation).getAttachment(DubboUtils.SENTINEL_DUBBO_APPLICATION_KEY, "");

        assertEquals("consumerA", application);
    }

    @Test(expected = IllegalArgumentException.class)
    public void testGetApplicationNoAttachments() {
        Invocation invocation = mock(Invocation.class);
        when(invocation.getAttachments()).thenReturn(null);
        when(invocation.getAttachment(DubboUtils.SENTINEL_DUBBO_APPLICATION_KEY, ""))
                .thenReturn("consumerA");

        DubboUtils.getApplication(invocation, "");

        fail("No attachments in invocation, IllegalArgumentException should be thrown!");
    }

    @Test
    public void testGetResourceName() throws NoSuchMethodException {
        Invoker invoker = mock(Invoker.class);
        when(invoker.getInterface()).thenReturn(DemoService.class);

        Invocation invocation = mock(Invocation.class);
        Method method = DemoService.class.getDeclaredMethod("sayHello", String.class, int.class);
        when(invocation.getMethodName()).thenReturn(method.getName());
        when(invocation.getParameterTypes()).thenReturn(method.getParameterTypes());

        String resourceName = DubboUtils.getMethodResourceName(invoker, invocation);

        assertEquals("com.alibaba.csp.sentinel.adapter.dubbo.provider.DemoService:sayHello(java.lang.String,int)", resourceName);

    }

    @Test
    public void testGetResourceNameWithGroupAndVersion() throws NoSuchMethodException {
        Invoker invoker = mock(Invoker.class);
        URL url = URL.valueOf("dubbo://127.0.0.1:2181")
                .addParameter(CommonConstants.VERSION_KEY, "1.0.0")
                .addParameter(CommonConstants.GROUP_KEY, "grp1")
                .addParameter(CommonConstants.INTERFACE_KEY, DemoService.class.getName());
        when(invoker.getUrl()).thenReturn(url);
        when(invoker.getInterface()).thenReturn(DemoService.class);

        Invocation invocation = mock(Invocation.class);
        Method method = DemoService.class.getDeclaredMethod("sayHello", String.class, int.class);
        when(invocation.getMethodName()).thenReturn(method.getName());
        when(invocation.getParameterTypes()).thenReturn(method.getParameterTypes());

        String resourceNameUseGroupAndVersion = DubboUtils.getMethodResourceName(invoker, invocation, true);

        assertEquals("com.alibaba.csp.sentinel.adapter.dubbo.provider.DemoService:1.0.0:grp1:sayHello(java.lang.String,int)", resourceNameUseGroupAndVersion);
    }


    @Test
    public void testGetResourceNameWithPrefix() throws NoSuchMethodException {
        Invoker invoker = mock(Invoker.class);
        when(invoker.getInterface()).thenReturn(DemoService.class);

        Invocation invocation = mock(Invocation.class);
        Method method = DemoService.class.getDeclaredMethod("sayHello", String.class, int.class);
        when(invocation.getMethodName()).thenReturn(method.getName());
        when(invocation.getParameterTypes()).thenReturn(method.getParameterTypes());

        //test with default prefix
        String resourceName = DubboUtils.getMethodResourceName(invoker, invocation, DubboAdapterGlobalConfig.getDubboProviderResNamePrefixKey());
        assertEquals("dubbo:provider:com.alibaba.csp.sentinel.adapter.dubbo.provider.DemoService:sayHello(java.lang.String,int)", resourceName);
        resourceName = DubboUtils.getMethodResourceName(invoker, invocation, DubboAdapterGlobalConfig.getDubboConsumerResNamePrefixKey());
        assertEquals("dubbo:consumer:com.alibaba.csp.sentinel.adapter.dubbo.provider.DemoService:sayHello(java.lang.String,int)", resourceName);


        //test with custom prefix
        SentinelConfig.setConfig(DubboAdapterGlobalConfig.DUBBO_PROVIDER_RES_NAME_PREFIX_KEY, "my:dubbo:provider:");
        SentinelConfig.setConfig(DubboAdapterGlobalConfig.DUBBO_CONSUMER_RES_NAME_PREFIX_KEY, "my:dubbo:consumer:");
        resourceName = DubboUtils.getMethodResourceName(invoker, invocation, DubboAdapterGlobalConfig.getDubboProviderResNamePrefixKey());
        assertEquals("my:dubbo:provider:com.alibaba.csp.sentinel.adapter.dubbo.provider.DemoService:sayHello(java.lang.String,int)", resourceName);
        resourceName = DubboUtils.getMethodResourceName(invoker, invocation, DubboAdapterGlobalConfig.getDubboConsumerResNamePrefixKey());
        assertEquals("my:dubbo:consumer:com.alibaba.csp.sentinel.adapter.dubbo.provider.DemoService:sayHello(java.lang.String,int)", resourceName);

    }

    @Test
    public void testGetInterfaceName() {

        URL url = URL.valueOf("dubbo://127.0.0.1:2181")
                .addParameter(CommonConstants.VERSION_KEY, "1.0.0")
                .addParameter(CommonConstants.GROUP_KEY, "grp1")
                .addParameter(CommonConstants.INTERFACE_KEY, DemoService.class.getName());
        Invoker invoker = mock(Invoker.class);
        when(invoker.getUrl()).thenReturn(url);
        when(invoker.getInterface()).thenReturn(DemoService.class);

        SentinelConfig.setConfig(DUBBO_INTERFACE_GROUP_VERSION_ENABLED, "false");
        assertEquals("com.alibaba.csp.sentinel.adapter.dubbo.provider.DemoService", DubboUtils.getInterfaceName(invoker));

    }

    @Test
    public void testGetInterfaceNameWithGroupAndVersion() throws NoSuchMethodException {

        URL url = URL.valueOf("dubbo://127.0.0.1:2181")
                .addParameter(CommonConstants.VERSION_KEY, "1.0.0")
                .addParameter(CommonConstants.GROUP_KEY, "grp1")
                .addParameter(CommonConstants.INTERFACE_KEY, DemoService.class.getName());
        Invoker invoker = mock(Invoker.class);
        when(invoker.getUrl()).thenReturn(url);
        when(invoker.getInterface()).thenReturn(DemoService.class);

        SentinelConfig.setConfig(DUBBO_INTERFACE_GROUP_VERSION_ENABLED, "true");
        assertEquals("com.alibaba.csp.sentinel.adapter.dubbo.provider.DemoService:1.0.0:grp1", DubboUtils.getInterfaceName(invoker, true));
    }

    @Test
    public void testGetInterfaceNameWithPrefix() throws NoSuchMethodException {
        URL url = URL.valueOf("dubbo://127.0.0.1:2181")
                .addParameter(CommonConstants.VERSION_KEY, "1.0.0")
                .addParameter(CommonConstants.GROUP_KEY, "grp1")
                .addParameter(CommonConstants.INTERFACE_KEY, DemoService.class.getName());
        Invoker invoker = mock(Invoker.class);
        when(invoker.getUrl()).thenReturn(url);
        when(invoker.getInterface()).thenReturn(DemoService.class);


        //test with default prefix
        String resourceName = DubboUtils.getInterfaceName(invoker, DubboAdapterGlobalConfig.getDubboProviderResNamePrefixKey());
        assertEquals("dubbo:provider:com.alibaba.csp.sentinel.adapter.dubbo.provider.DemoService", resourceName);
        resourceName = DubboUtils.getInterfaceName(invoker, DubboAdapterGlobalConfig.getDubboConsumerResNamePrefixKey());
        assertEquals("dubbo:consumer:com.alibaba.csp.sentinel.adapter.dubbo.provider.DemoService", resourceName);


        //test with custom prefix
        SentinelConfig.setConfig(DubboAdapterGlobalConfig.DUBBO_PROVIDER_RES_NAME_PREFIX_KEY, "my:dubbo:provider:");
        SentinelConfig.setConfig(DubboAdapterGlobalConfig.DUBBO_CONSUMER_RES_NAME_PREFIX_KEY, "my:dubbo:consumer:");
        resourceName = DubboUtils.getInterfaceName(invoker, DubboAdapterGlobalConfig.getDubboProviderResNamePrefixKey());
        assertEquals("my:dubbo:provider:com.alibaba.csp.sentinel.adapter.dubbo.provider.DemoService", resourceName);
        resourceName = DubboUtils.getInterfaceName(invoker, DubboAdapterGlobalConfig.getDubboConsumerResNamePrefixKey());
        assertEquals("my:dubbo:consumer:com.alibaba.csp.sentinel.adapter.dubbo.provider.DemoService", resourceName);

    }
}

================================================
FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/SentinelDubboConsumerFilterTest.java
================================================
/*
 * Copyright 1999-2024 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.alibaba.csp.sentinel.adapter.dubbo;

import com.alibaba.csp.sentinel.BaseTest;
import com.alibaba.csp.sentinel.DubboTestUtil;
import com.alibaba.csp.sentinel.Entry;
import com.alibaba.csp.sentinel.EntryType;
import com.alibaba.csp.sentinel.adapter.dubbo.config.DubboAdapterGlobalConfig;
import com.alibaba.csp.sentinel.adapter.dubbo.fallback.DubboFallback;
import com.alibaba.csp.sentinel.adapter.dubbo.fallback.DubboFallbackRegistry;
import com.alibaba.csp.sentinel.context.Context;
import com.alibaba.csp.sentinel.context.ContextUtil;
import com.alibaba.csp.sentinel.node.ClusterNode;
import com.alibaba.csp.sentinel.node.DefaultNode;
import com.alibaba.csp.sentinel.node.Node;
import com.alibaba.csp.sentinel.node.StatisticNode;
import com.alibaba.csp.sentinel.slotchain.ResourceWrapper;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule;
import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRuleManager;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;

import com.alibaba.csp.sentinel.util.TimeUtil;
import org.apache.dubbo.rpc.*;
import org.apache.dubbo.rpc.support.RpcUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.MockedStatic;
import org.mockito.junit.MockitoJUnitRunner;

import java.util.*;

import static com.alibaba.csp.sentinel.slots.block.RuleConstant.DEGRADE_GRADE_EXCEPTION_RATIO;
import static org.apache.dubbo.rpc.Constants.ASYNC_KEY;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;

/**
 * @author cdfive
 * @author lianglin
 */
@RunWith(MockitoJUnitRunner.class)
public class SentinelDubboConsumerFilterTest extends BaseTest {

    private final SentinelDubboConsumerFilter consumerFilter = new SentinelDubboConsumerFilter();

    @Before
    public void setUp() {
        cleanUpAll();
        initFallback();
    }

    @After
    public void destroy() {
        cleanUpAll();
    }

    @Test
    public void testInterfaceLevelFollowControlAsync() throws InterruptedException {

        Invoker invoker = DubboTestUtil.getDefaultMockInvoker();
        Invocation invocation = DubboTestUtil.getDefaultMockInvocationOne();

        when(invocation.getAttachment(ASYNC_KEY)).thenReturn(Boolean.TRUE.toString());
        initFlowRule(DubboUtils.getInterfaceName(invoker));

        Result result1 = invokeDubboRpc(false, invoker, invocation);
        assertEquals("normal", result1.getValue());

        // should fallback because the qps > 1
        Result result2 = invokeDubboRpc(false, invoker, invocation);
        assertEquals("fallback", result2.getValue());

        // sleeping 1000 ms to reset qps
        Thread.sleep(1000);
        Result result3 = invokeDubboRpc(false, invoker, invocation);
        assertEquals("normal", result3.getValue());

        verifyInvocationStructureForCallFinish(invoker, invocation);
    }

    @Test
    public void testDegradeAsync() throws InterruptedException {
        try (MockedStatic<TimeUtil> mocked = super.mockTimeUtil()) {
            setCurrentMillis(mocked, 1740000000000L);

            Invocation invocation = DubboTestUtil.getDefaultMockInvocationOne();
            Invoker invoker = DubboTestUtil.getDefaultMockInvoker();

            when(invocation.getAttachment(ASYNC_KEY)).thenReturn(Boolean.TRUE.toString());
            initDegradeRule(DubboUtils.getInterfaceName(invoker));

            Result result = invokeDubboRpc(false, invoker, invocation);
            verifyInvocationStructureForCallFinish(invoker, invocation);
            assertEquals("normal", result.getValue());

            // inc the clusterNode's exception to trigger the fallback
            for (int i = 0; i < 5; i++) {
                invokeDubboRpc(true, invoker, invocation);
                verifyInvocationStructureForCallFinish(invoker, invocation);
            }

            Result result2 = invokeDubboRpc(false, invoker, invocation);
            assertEquals("fallback", result2.getValue());

            // sleeping 1000 ms to reset exception
            sleep(mocked, 1000);
            Result result3 = invokeDubboRpc(false, invoker, invocation);
            assertEquals("normal", result3.getValue());

            Context context = ContextUtil.getContext();
            assertNull(context);
        }
    }

    @Test
    public void testDegradeSync() {
        try (MockedStatic<TimeUtil> mocked = super.mockTimeUtil()) {
            setCurrentMillis(mocked, 1740000000000L);

            Invocation invocation = DubboTestUtil.getDefaultMockInvocationOne();
            Invoker invoker = DubboTestUtil.getDefaultMockInvoker();
            initDegradeRule(DubboUtils.getInterfaceName(invoker));

            Result result = invokeDubboRpc(false, invoker, invocation);
            verifyInvocationStructureForCallFinish(invoker, invocation);
            assertEquals("normal", result.getValue());

            // inc the clusterNode's exception to trigger the fallback
            for (int i = 0; i < 5; i++) {
                invokeDubboRpc(true, invoker, invocation);
                verifyInvocationStructureForCallFinish(invoker, invocation);
            }

            Result result2 = invokeDubboRpc(false, invoker, invocation);
            assertEquals("fallback", result2.getValue());

            // sleeping 1000 ms to reset exception
            sleep(mocked, 1000);
            Result result3 = invokeDubboRpc(false, invoker, invocation);
            assertEquals("normal", result3.getValue());

            Context context = ContextUtil.getContext();
            assertNull(context);
        }
    }

    @Test
    public void testMethodFlowControlAsync() {

        Invocation invocation = DubboTestUtil.getDefaultMockInvocationOne();
        Invoker invoker = DubboTestUtil.getDefaultMockInvoker();

        when(invocation.getAttachment(ASYNC_KEY)).thenReturn(Boolean.TRUE.toString());
        initFlowRule(consumerFilter.getMethodName(invoker, invocation, null));
        invokeDubboRpc(false, invoker, invocation);
        invokeDubboRpc(false, invoker, invocation);

        Invocation invocation2 = DubboTestUtil.getDefaultMockInvocationTwo();
        Result result2 = invokeDubboRpc(false, invoker, invocation2);
        verifyInvocationStructureForCallFinish(invoker, invocation2);
        assertEquals("normal", result2.getValue());

        // the method of invocation should be blocked
        Result fallback = invokeDubboRpc(false, invoker, invocation);
        assertEquals("fallback", fallback.getValue());
        verifyInvocationStructureForCallFinish(invoker, invocation);

    }

    @Test
    public void testInvokeAsync() {

        Invocation invocation = DubboTestUtil.getDefaultMockInvocationOne();
        Invoker invoker = DubboTestUtil.getDefaultMockInvoker();

        when(invocation.getAttachment(ASYNC_KEY)).thenReturn(Boolean.TRUE.toString());
        final Result result = mock(Result.class);
        when(invoker.invoke(invocation)).thenAnswer(invocationOnMock -> {
            verifyInvocationStructureForAsyncCall(invoker, invocation);
            return result;
        });
        consumerFilter.invoke(invoker, invocation);
        verify(invoker).invoke(invocation);

        Context context = ContextUtil.getContext();
        assertNotNull(context);
    }

    @Test
    public void testInvokeSync() {

        Invocation invocation = DubboTestUtil.getDefaultMockInvocationOne();
        Invoker invoker = DubboTestUtil.getDefaultMockInvoker();

        final Result result = mock(Result.class);
        when(result.hasException()).thenReturn(false);
        when(invoker.invoke(invocation)).thenAnswer(invocationOnMock -> {
            verifyInvocationStructure(invoker, invocation);
            return result;
        });

        consumerFilter.invoke(invoker, invocation);
        verify(invoker).invoke(invocation);

        Context context = ContextUtil.getContext();
        assertNull(context);
    }

    /**
     * Simply verify invocation structure in memory:
     * EntranceNode(defaultContextName)
     * --InterfaceNode(interfaceName)
     * ----MethodNode(resourceName)
     */
    private void verifyInvocationStructure(Invoker invoker, Invocation invocation) {
        Context context = ContextUtil.getContext();
        assertNotNull(context);
        // As not call ContextUtil.enter(resourceName, application) in SentinelDubboConsumerFilter, use default context
        // In actual project, a consumer is usually also a provider, the context will be created by
        //SentinelDubboProviderFilter
        // If consumer is on the top of Dubbo RPC invocation chain, use default context
        String resourceName = consumerFilter.getMethodName(invoker, invocation, null);
        assertEquals(com.alibaba.csp.sentinel.Constants.CONTEXT_DEFAULT_NAME, context.getName());
        assertEquals("", context.getOrigin());

        DefaultNode entranceNode = context.getEntranceNode();
        ResourceWrapper entranceResource = entranceNode.getId();

        assertEquals(com.alibaba.csp.sentinel.Constants.CONTEXT_DEFAULT_NAME, entranceResource.getName());
        assertSame(EntryType.IN, entranceResource.getEntryType());

        // As SphU.entry(interfaceName, EntryType.OUT);
        Set<Node> childList = entranceNode.getChildList();
        assertEquals(1, childList.size());
        DefaultNode interfaceNode = getNode(DubboUtils.getInterfaceName(invoker), entranceNode);
        ResourceWrapper interfaceResource = interfaceNode.getId();

        assertEquals(DubboUtils.getInterfaceName(invoker), interfaceResource.getName());
        assertSame(EntryType.OUT, interfaceResource.getEntryType());

        // As SphU.entry(resourceName, EntryType.OUT);
        childList = interfaceNode.getChildList();
        assertEquals(1, childList.size());
        DefaultNode methodNode = getNode(resourceName, entranceNode);
        ResourceWrapper methodResource = methodNode.getId();
        assertEquals(resourceName, methodResource.getName());
        assertSame(EntryType.OUT, methodResource.getEntryType());

        // Verify curEntry
        Entry curEntry = context.getCurEntry();
        assertSame(methodNode, curEntry.getCurNode());
        assertSame(interfaceNode, curEntry.getLastNode());
        assertNull(curEntry.getOriginNode());// As context origin is not "", no originNode should be created in curEntry

        // Verify clusterNode
        ClusterNode methodClusterNode = methodNode.getClusterNode();
        ClusterNode interfaceClusterNode = interfaceNode.getClusterNode();
        assertNotSame(methodClusterNode,
            interfaceClusterNode);// Different resource->Different ProcessorSlot->Different ClusterNode

        // As context origin is "", the StatisticNode should not be created in originCountMap of ClusterNode
        Map<String, StatisticNode> methodOriginCountMap = methodClusterNode.getOriginCountMap();
        assertEquals(0, methodOriginCountMap.size());

        Map<String, StatisticNode> interfaceOriginCountMap = interfaceClusterNode.getOriginCountMap();
        assertEquals(0, interfaceOriginCountMap.size());
    }

    private void verifyInvocationStructureForAsyncCall(Invoker invoker, Invocation invocation) {
        Context context = ContextUtil.getContext();
        assertNotNull(context);

        // As not call ContextUtil.enter(resourceName, application) in SentinelDubboConsumerFilter, use default context
        // In actual project, a consumer is usually also a provider, the context will be created by
        //SentinelDubboProviderFilter
        // If consumer is on the top of Dubbo RPC invocation chain, use default context
        String resourceName = consumerFilter.getMethodName(invoker, invocation, null);
        assertEquals(com.alibaba.csp.sentinel.Constants.CONTEXT_DEFAULT_NAME, context.getName());
        assertEquals("", context.getOrigin());

        DefaultNode entranceNode = context.getEntranceNode();
        ResourceWrapper entranceResource = entranceNode.getId();
        assertEquals(com.alibaba.csp.sentinel.Constants.CONTEXT_DEFAULT_NAME, entranceResource.getName());
        assertSame(EntryType.IN, entranceResource.getEntryType());

        // As SphU.entry(interfaceName, EntryType.OUT);
        Set<Node> childList = entranceNode.getChildList();
        assertEquals(2, childList.size());
        DefaultNode interfaceNode = getNode(DubboUtils.getInterfaceName(invoker), entranceNode);
        ResourceWrapper interfaceResource = interfaceNode.getId();
        assertEquals(DubboUtils.getInterfaceName(invoker), interfaceResource.getName());
        assertSame(EntryType.OUT, interfaceResource.getEntryType());

        // As SphU.entry(resourceName, EntryType.OUT);
        childList = interfaceNode.getChildList();
        assertEquals(0, childList.size());
        DefaultNode methodNode = getNode(resourceName, entranceNode);
        ResourceWrapper methodResource = methodNode.getId();
        assertEquals(resourceName, methodResource.getName());
        assertSame(EntryType.OUT, methodResource.getEntryType());

        // Verify curEntry
        // nothing will bind to local context when use the AsyncEntry
        Entry curEntry = context.getCurEntry();
        assertNull(curEntry);

        // Verify clusterNode
        ClusterNode methodClusterNode = methodNode.getClusterNode();
        ClusterNode interfaceClusterNode = interfaceNode.getClusterNode();
        assertNotSame(methodClusterNode,
            interfaceClusterNode);// Different resource->Different ProcessorSlot->Different ClusterNode

        // As context origin is "", the StatisticNode should not be created in originCountMap of ClusterNode
        Map<String, StatisticNode> methodOriginCountMap = methodClusterNode.getOriginCountMap();
        assertEquals(0, methodOriginCountMap.size());

        Map<String, StatisticNode> interfaceOriginCountMap = interfaceClusterNode.getOriginCountMap();
        assertEquals(0, interfaceOriginCountMap.size());
    }

    private void verifyInvocationStructureForCallFinish(Invoker invoker, Invocation invocation) {
        Context context = ContextUtil.getContext();
        assertNull(context);
        String methodResourceName = consumerFilter.getMethodName(invoker, invocation, null);
        Entry[] entries = (Entry[]) RpcContext.getContext().get(methodResourceName);
        assertNull(entries);
    }

    private DefaultNode getNode(String resourceName, DefaultNode root) {

        Queue<DefaultNode> queue = new LinkedList<>();
        queue.offer(root);
        while (!queue.isEmpty()) {
            DefaultNode temp = queue.poll();
            if (temp.getId().getName().equals(resourceName)) {
                return temp;
            }
            for (Node node : temp.getChildList()) {
                queue.offer((DefaultNode) node);
            }
        }
        return null;
    }

    private void initFlowRule(String resource) {
        FlowRule flowRule = new FlowRule(resource);
        flowRule.setCount(1);
        flowRule.setGrade(RuleConstant.FLOW_GRADE_QPS);
        List<FlowRule> flowRules = new ArrayList<>();
        flowRules.add(flowRule);
        FlowRuleManager.loadRules(flowRules);
    }

    private void initDegradeRule(String resource) {
        DegradeRule degradeRule = new DegradeRule(resource)
            .setCount(0.5)
            .setGrade(DEGRADE_GRADE_EXCEPTION_RATIO);
        List<DegradeRule> degradeRules = new ArrayList<>();
        degradeRules.add(degradeRule);
        degradeRule.setTimeWindow(1);
        DegradeRuleManager.loadRules(degradeRules);
    }

    private void initFallback() {
        DubboAdapterGlobalConfig.setConsumerFallback((invoker, invocation, ex) -> {
            // boolean async = RpcUtils.isAsync(invoker.getUrl(), invocation);
            return AsyncRpcResult.newDefaultAsyncResult("fallback", invocation);
        });
    }

    private Result invokeDubboRpc(boolean exception, Invoker invoker, Invocation invocation) {
        Result result = null;
        InvokeMode invokeMode = RpcUtils.getInvokeMode(invoker.getUrl(), invocation);
        if (InvokeMode.SYNC == invokeMode) {
            result = exception ? new AppResponse(new Exception("error")) : new AppResponse("normal");
        } else {
            result = exception ? AsyncRpcResult.newDefaultAsyncResult(new Exception("error"), invocation)
                : AsyncRpcResult.newDefaultAsyncResult("normal", invocation);
        }
        when(invoker.invoke(invocation)).thenReturn(result);
        return consumerFilter.invoke(invoker, invocation);
    }

}


================================================
FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/SentinelDubboProviderFilterTest.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.alibaba.csp.sentinel.adapter.dubbo;

import com.alibaba.csp.sentinel.BaseTest;
import com.alibaba.csp.sentinel.DubboTestUtil;
import com.alibaba.csp.sentinel.Entry;
import com.alibaba.csp.sentinel.EntryType;
import com.alibaba.csp.sentinel.adapter.dubbo.provider.DemoService;
import com.alibaba.csp.sentinel.context.Context;
import com.alibaba.csp.sentinel.context.ContextUtil;
import com.alibaba.csp.sentinel.node.ClusterNode;
import com.alibaba.csp.sentinel.node.DefaultNode;
import com.alibaba.csp.sentinel.node.Node;
import com.alibaba.csp.sentinel.node.StatisticNode;
import com.alibaba.csp.sentinel.slotchain.ResourceWrapper;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.constants.CommonConstants;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.Result;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.util.Map;
import java.util.Set;

import static org.junit.Assert.*;
import static org.mockito.Mockito.*;

/**
 * @author cdfive
 * @author lianglin
 */
public class SentinelDubboProviderFilterTest extends BaseTest {


    private SentinelDubboProviderFilter filter = new SentinelDubboProviderFilter();


    @Before
    public void setUp() {
        cleanUpAll();
    }

    @After
    public void destroy() {
        cleanUpAll();
    }

    @Test
    public void testInvoke() {

        final String originApplication = "consumerA";

        URL url = DubboTestUtil.getDefaultTestURL();
        url = url.addParameter(CommonConstants.SIDE_KEY, CommonConstants.PROVIDER_SIDE);
        Invoker invoker = DubboTestUtil.getMockInvoker(url, DemoService.class);

        Invocation invocation = DubboTestUtil.getMockInvocation(DemoService.class.getMethods()[0]);
        when(invocation.getAttachment(DubboUtils.SENTINEL_DUBBO_APPLICATION_KEY, ""))
                .thenReturn(originApplication);

        final Result result = mock(Result.class);
        when(result.hasException()).thenReturn(false);
        when(result.getException()).thenReturn(new Exception());

        when(invoker.invoke(invocation)).thenAnswer(invocationOnMock -> {
            verifyInvocationStructure(originApplication, invoker, invocation);
            return result;
        });

        filter.invoke(invoker, invocation);
        verify(invoker).invoke(invocation);

        Context context = ContextUtil.getContext();
        assertNull(context);
    }

    /**
     * Simply verify invocation structure in memory:
     * EntranceNode(methodResourceName)
     * --InterfaceNode(interfaceName)
     * ----MethodNode(methodResourceName)
     */
    private void verifyInvocationStructure(String originApplication, Invoker invoker, Invocation invocation) {
        Context context = ContextUtil.getContext();
        assertNotNull(context);

        // As ContextUtil.enter(resourceName, application) in SentinelDubboProviderFilter
        String methodResourceName = filter.getMethodName(invoker, invocation, null);
        assertEquals(methodResourceName, context.getName());
        assertEquals(originApplication, context.getOrigin());

        DefaultNode entranceNode = context.getEntranceNode();
        ResourceWrapper entranceResource = entranceNode.getId();
        assertEquals(methodResourceName, entranceResource.getName());
        assertSame(EntryType.IN, entranceResource.getEntryType());

        // As SphU.entry(interfaceName, EntryType.IN);
        Set<Node> childList = entranceNode.getChildList();
        assertEquals(1, childList.size());
        DefaultNode interfaceNode = (DefaultNode) childList.iterator().next();
        ResourceWrapper interfaceResource = interfaceNode.getId();

        assertEquals(filter.getInterfaceName(invoker, null), interfaceResource.getName());
        assertSame(EntryType.IN, interfaceResource.getEntryType());

        // As SphU.entry(resourceName, EntryType.IN, 1, invocation.getArguments());
        childList = interfaceNode.getChildList();
        assertEquals(1, childList.size());
        DefaultNode methodNode = (DefaultNode) childList.iterator().next();
        ResourceWrapper methodResource = methodNode.getId();
        assertEquals(methodResourceName, methodResource.getName());
        assertSame(EntryType.IN, methodResource.getEntryType());

        // Verify curEntry
        Entry curEntry = context.getCurEntry();
        assertSame(methodNode, curEntry.getCurNode());
        assertSame(interfaceNode, curEntry.getLastNode());
        assertNotNull(curEntry.getOriginNode());// As context origin is not "", originNode should be created

        // Verify clusterNode
        ClusterNode methodClusterNode = methodNode.getClusterNode();
        ClusterNode interfaceClusterNode = interfaceNode.getClusterNode();
        assertNotSame(methodClusterNode, interfaceClusterNode);// Different resource->Different ProcessorSlot->Different ClusterNode

        // As context origin is not "", the StatisticNode should be created in originCountMap of ClusterNode
        Map<String, StatisticNode> methodOriginCountMap = methodClusterNode.getOriginCountMap();
        assertEquals(1, methodOriginCountMap.size());
        assertTrue(methodOriginCountMap.containsKey(originApplication));

        Map<String, StatisticNode> interfaceOriginCountMap = interfaceClusterNode.getOriginCountMap();
        assertEquals(1, interfaceOriginCountMap.size());
        assertTrue(interfaceOriginCountMap.containsKey(originApplication));
    }


}


================================================
FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/fallback/DubboFallbackRegistryTest.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.alibaba.csp.sentinel.adapter.dubbo.fallback;

import com.alibaba.csp.sentinel.adapter.dubbo.config.DubboAdapterGlobalConfig;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.csp.sentinel.slots.block.flow.FlowException;

import org.apache.dubbo.rpc.AsyncRpcResult;
import org.apache.dubbo.rpc.Result;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

/**
 * @author Eric Zhao
 */
public class DubboFallbackRegistryTest {

    @Before
    public void setUp() {
        DubboAdapterGlobalConfig.setConsumerFallback(new DefaultDubboFallback());
    }

    @After
    public void tearDown() {
        DubboAdapterGlobalConfig.setConsumerFallback(new DefaultDubboFallback());
    }

    @Test
    public void testDefaultFallback() {
        // Test for default fallback.
        BlockException ex = new FlowException("xxx");
        Result result = new DefaultDubboFallback().handle(null, null, ex);
        Assert.assertTrue("The result should carry exception", result.hasException());
        Assert.assertTrue(BlockException.isBlockException(result.getException()));
        Assert.assertTrue(result.getException().getMessage().contains(ex.getClass().getSimpleName()));
    }

    @Test
    public void testCustomFallback() {
        BlockException ex = new FlowException("xxx");
        DubboAdapterGlobalConfig.setConsumerFallback(
            (invoker, invocation, e) -> AsyncRpcResult
                .newDefaultAsyncResult("Error: " + e.getClass().getName(), invocation));
        Result result = DubboAdapterGlobalConfig.getConsumerFallback()
            .handle(null, null, ex);
        Assert.assertFalse("The invocation should not fail", result.hasException());
        Assert.assertEquals("Error: " + ex.getClass().getName(), result.getValue());
    }
}


================================================
FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/origin/DubboOriginRegistryTest.java
================================================
/*
 * Copyright 1999-2020 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.alibaba.csp.sentinel.adapter.dubbo.origin;

import com.alibaba.csp.sentinel.adapter.dubbo.DubboUtils;
import com.alibaba.csp.sentinel.adapter.dubbo.config.DubboAdapterGlobalConfig;
import com.alibaba.dubbo.rpc.RpcInvocation;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
import org.junit.After;
import org.junit.Assert;
import org.junit.Test;

/**
 * @author tiecheng
 */
public class DubboOriginRegistryTest {

    @After
    public void cleanUp() {
        DubboAdapterGlobalConfig.setOriginParser(new DefaultDubboOriginParser());
    }

    @Test(expected = IllegalArgumentException.class)
    public void testDefaultOriginParserFail() {
        DubboAdapterGlobalConfig.getOriginParser().parse(null, null);
    }

    @Test
    public void testDefaultOriginParserSuccess() {
        RpcInvocation invocation = new RpcInvocation();
        String dubboName = "sentinel";
        invocation.setAttachment(DubboUtils.SENTINEL_DUBBO_APPLICATION_KEY, dubboName);
        String origin = DubboAdapterGlobalConfig.getOriginParser().parse(null, invocation);
        Assert.assertEquals(dubboName, origin);
    }

    @Test
    public void testCustomOriginParser() {
        DubboAdapterGlobalConfig.setOriginParser(new DubboOriginParser() {
            @Override
            public String parse(Invoker<?> invoker, Invocation invocation) {
                return invocation.getAttachment(DubboUtils.SENTINEL_DUBBO_APPLICATION_KEY, "default") + "_" + invocation
                        .getMethodName();
            }
        });

        RpcInvocation invocation = new RpcInvocation();
        String origin = DubboAdapterGlobalConfig.getOriginParser().parse(null, invocation);
        Assert.assertEquals("default_null", origin);

        String dubboName = "sentinel";
        invocation.setAttachment(DubboUtils.SENTINEL_DUBBO_APPLICATION_KEY, dubboName);
        origin = DubboAdapterGlobalConfig.getOriginParser().parse(null, invocation);
        Assert.assertEquals(dubboName + "_null", origin);

        invocation.setMethodName("hello");
        origin = DubboAdapterGlobalConfig.getOriginParser().parse(null, invocation);
        Assert.assertEquals(dubboName + "_hello", origin);
    }

}


================================================
FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/provider/DemoService.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.alibaba.csp.sentinel.adapter.dubbo.provider;

/**
 * @author leyou
 */
public interface DemoService {
    String sayHello(String name, int n);
    String sayHi(String name,int n);
}


================================================
FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/provider/impl/DemoServiceImpl.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.alibaba.csp.sentinel.adapter.dubbo.provider.impl;

import com.alibaba.csp.sentinel.adapter.dubbo.provider.DemoService;

/**
 * @author leyou
 */
public class DemoServiceImpl implements DemoService {
    public String sayHello(String name, int n) {
        return "Hello " + name + ", " + n;
    }

    @Override
    public String sayHi(String name, int n) {
        return "Hi " + name + ", " + n;
    }
}


================================================
FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/resources/spring-dubbo-consumer-filter.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://code.alibabatech.com/schema/dubbo
       http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <dubbo:application name="demo-consumer"/>
    <dubbo:registry address="multicast://224.5.6.7:1234"/>
    <dubbo:protocol name="dubbo" port="20880"/>
    <dubbo:service interface="com.alibaba.csp.sentinel.adapter.dubbo.provider.DemoService" ref="demoServiceImp" />
    <bean id="demoServiceImp" class="com.alibaba.csp.sentinel.adapter.dubbo.provider.impl.DemoServiceImpl"/>

    <dubbo:reference id="demoService" interface="com.alibaba.csp.sentinel.adapter.dubbo.provider.DemoService"/>

</beans>

================================================
FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/resources/spring-dubbo-provider-filter.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://code.alibabatech.com/schema/dubbo
       http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <dubbo:application name="demo-provider"/>
    <dubbo:registry address="multicast://224.5.6.7:1234"/>
    <dubbo:protocol name="dubbo" port="20880"/>
    <dubbo:service interface="com.alibaba.csp.sentinel.adapter.dubbo.provider.DemoService" ref="demoServiceImp" />
    <bean id="demoServiceImp" class="com.alibaba.csp.sentinel.adapter.dubbo.provider.impl.DemoServiceImpl"/>

    <dubbo:reference id="demoService" interface="com.alibaba.csp.sentinel.adapter.dubbo.provider.DemoService"/>

</beans>

================================================
FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/README.md
================================================
# Sentinel Apache Dubbo Adapter (for 3.0.5+)

> Note: 中文文档请见[此处](https://sentinelguard.io/zh-cn/docs/open-source-framework-integrations.html)。

Sentinel Dubbo Adapter provides service consumer filter and provider filter
for [Apache Dubbo](https://dubbo.apache.org/en/) services.

**Note: This adapter only supports Apache Dubbo 3.0.5 and above.**
For `org.apache:dubbo` 2.7.x, please use `sentinel-apache-dubbo-adapter` module instead.
For legacy `com.alibaba:dubbo` 2.6.x, please use `sentinel-dubbo-adapter` module instead.

To use Sentinel Dubbo 3.x Adapter, you can simply add the following dependency to your `pom.xml`:

```xml
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-apache-dubbo3-adapter</artifactId>
    <version>x.y.z</version>
</dependency>
```

The Sentinel filters are **enabled by default**. Once you add the dependency,
the Dubbo services and methods will become protected resources in Sentinel,
which can leverage Sentinel's flow control and overload protection ability when rules are configured.
Demos can be found in [sentinel-demo-apache-dubbo](https://github.com/alibaba/Sentinel/tree/master/sentinel-demo/sentinel-demo-apache-dubbo).

If you don't want the filters enabled, you can manually disable them. For example:

```xml
<dubbo:consumer filter="-sentinel.dubbo.consumer.filter"/>

<dubbo:provider filter="-sentinel.dubbo.provider.filter"/>
```

For more details of Dubbo filter, see [Dubbo filter documentation](https://cn.dubbo.apache.org/en/overview/mannual/java-sdk/tasks/extensibility/filter/).

## Dubbo resources

The resource for Dubbo services has two granularities: service interface and service method.

- Service interface: resourceName format is `interfaceName`, e.g. `com.alibaba.csp.sentinel.demo.dubbo.FooService`
- Service method: resourceName format is `interfaceName:methodSignature`, e.g. `com.alibaba.csp.sentinel.demo.dubbo.FooService:sayHello(java.lang.String)`

> **Note**: Dubbo *group+version+interface* level is also supported in Sentinel Apache Dubbo adapter.
> You may just add `-Dcsp.sentinel.dubbo.interface.group.version.enabled=true` JVM property,
> then the resource name of the Dubbo interface and method will be prefixed with group and version info.

## Flow control based on caller

In many circumstances, it's also significant to control traffic flow based on the **caller**.
For example, assuming that there are two services A and B, both of them initiate remote call requests to the service provider.
If we want to limit the calls from service B only, we can set the `limitApp` of flow rule as the identifier of service B (e.g. service name).

Sentinel Dubbo Adapter will automatically resolve the Dubbo consumer's *application name* as the caller's name (`origin`),
and will bring the caller's name when doing resource protection.
If `limitApp` of flow rules is not configured (`default`), flow control will take effects on all callers.
If `limitApp` of a flow rule is configured with a caller, then the corresponding flow rule will only take effect on the specific caller.

> Note: The adapter provides support for customizing origin parsing logic as well.
> You may register your own `DubboOriginParser` implementation to `DubboAdapterGlobalConfig`.

## Global fallback

Sentinel Dubbo Adapter supports global fallback configuration.
The global fallback will handle exceptions and give replacement result when blocked by
flow control, degrade or system load protection. You can implement your own `DubboFallback` interface
and then register to `DubboAdapterGlobalConfig`.

If no fallback is configured, Sentinel will wrap the `BlockException` with a `RuntimeException` as the fallback result.

Besides, we can also leverage [Dubbo mock mechanism](https://dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-features-and-usage/service/service-downgrade/) to provide fallback implementation of degraded Dubbo services.


================================================
FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <groupId>com.alibaba.csp</groupId>
        <artifactId>sentinel-adapter</artifactId>
        <version>${revision}</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <name>${project.groupId}:${project.artifactId}</name>

    <artifactId>sentinel-apache-dubbo3-adapter</artifactId>
    <packaging>jar</packaging>

    <properties>
        <java.source.version>1.8</java.source.version>
        <java.target.version>1.8</java.target.version>
        <apache.dubbo.version>3.0.9</apache.dubbo.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>${apache.dubbo.version}</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-inline</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

================================================
FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/BaseSentinelDubboFilter.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.alibaba.csp.sentinel.adapter.dubbo3;


import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;

/**
 * Base class of the {@link SentinelDubboProviderFilter} and {@link SentinelDubboConsumerFilter}.
 *
 * @author Zechao Zheng
 */
public abstract class BaseSentinelDubboFilter {


    /**
     * Get method name of dubbo rpc
     *
     * @param invoker
     * @param invocation
     * @return
     */
    abstract String getMethodName(Invoker invoker, Invocation invocation, String prefix);

    /**
     * Get interface name of dubbo rpc
     *
     * @param invoker
     * @return
     */
    abstract String getInterfaceName(Invoker invoker, String prefix);


}


================================================
FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/DubboAppContextFilter.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.alibaba.csp.sentinel.adapter.dubbo3;

import org.apache.dubbo.common.extension.Activate;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.Result;
import org.apache.dubbo.rpc.RpcException;
import org.apache.dubbo.rpc.cluster.filter.ClusterFilter;
import org.apache.dubbo.rpc.model.ApplicationModel;

import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER;

/**
 * Puts current consumer's application name in the attachment of each invocation.
 *
 * @author Eric Zhao
 */
@Activate(group = CONSUMER)
public class DubboAppContextFilter implements ClusterFilter {

    private final String applicationName;

    public DubboAppContextFilter(ApplicationModel applicationModel) {
        this.applicationName = applicationModel.tryGetApplicationName();
    }

    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
        if (applicationName != null && !applicationName.isEmpty()) {
            invocation.setAttachment(DubboUtils.SENTINEL_DUBBO_APPLICATION_KEY, applicationName);
        }
        return invoker.invoke(invocation);
    }
}


================================================
FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/DubboUtils.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.alibaba.csp.sentinel.adapter.dubbo3;

import com.alibaba.csp.sentinel.adapter.dubbo3.config.DubboAdapterGlobalConfig;
import com.alibaba.csp.sentinel.util.StringUtil;

import org.apache.dubbo.common.utils.StringUtils;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.RpcContext;

import static org.apache.dubbo.common.constants.CommonConstants.REMOTE_APPLICATION_KEY;

/**
 * @author Eric Zhao
 */
public final class DubboUtils {

    public static final String SENTINEL_DUBBO_APPLICATION_KEY = "dubboApplication";

    public static String getApplication(Invocation invocation, String defaultValue) {
        if (invocation == null || invocation.getAttachments() == null) {
            throw new IllegalArgumentException("Bad invocation instance");
        }
        // 1. try to get application from dubbo context
        String remoteApplication = invocation.getAttachment(REMOTE_APPLICATION_KEY);
        if (StringUtils.isEmpty(remoteApplication)) {
            remoteApplication = RpcContext.getServerAttachment().getAttachment(REMOTE_APPLICATION_KEY);
        }
        if (StringUtils.isNotEmpty(remoteApplication)) {
            return remoteApplication;
        }
        // 2. fallback to sentinel application
        return invocation.getAttachment(SENTINEL_DUBBO_APPLICATION_KEY, defaultValue);
    }

    public static String getMethodResourceName(Invoker<?> invoker, Invocation invocation){
        return getMethodResourceName(invoker, invocation, false);
    }

    public static String getMethodResourceName(Invoker<?> invoker, Invocation invocation, Boolean useGroupAndVersion) {
        StringBuilder buf = new StringBuilder(64);
        String interfaceResource = useGroupAndVersion ? invoker.getUrl().getColonSeparatedKey() : invoker.getInterface().getName();
        buf.append(interfaceResource)
            .append(":")
            .append(invocation.getMethodName())
            .append("(");
        boolean isFirst = true;
        for (Class<?> clazz : invocation.getParameterTypes()) {
            if (!isFirst) {
                buf.append(",");
            }
            buf.append(clazz.getName());
            isFirst = false;
        }
        buf.append(")");
        return buf.toString();
    }

    public static String getMethodResourceName(Invoker<?> invoker, Invocation invocation, String prefix) {
        if (StringUtil.isNotBlank(prefix)) {
            return new StringBuilder(64)
                    .append(prefix)
                    .append(getMethodResourceName(invoker, invocation, DubboAdapterGlobalConfig.getDubboInterfaceGroupAndVersionEnabled()))
                    .toString();
        } else {
            return getMethodResourceName(invoker, invocation, DubboAdapterGlobalConfig.getDubboInterfaceGroupAndVersionEnabled());
        }
    }


    public static String getInterfaceName(Invoker invoker) {
        return getInterfaceName(invoker, false);
    }

    public static String getInterfaceName(Invoker<?> invoker, Boolean useGroupAndVersion) {
        StringBuilder buf = new StringBuilder(64);
        return useGroupAndVersion ? invoker.getUrl().getColonSeparatedKey() : invoker.getInterface().getName();
    }

    public static String getInterfaceName(Invoker<?> invoker, String prefix) {
        if (StringUtil.isNotBlank(prefix)) {
            return new StringBuilder(64)
                    .append(prefix)
                    .append(getInterfaceName(invoker, DubboAdapterGlobalConfig.getDubboInterfaceGroupAndVersionEnabled()))
                    .toString();
        } else {
            return getInterfaceName(invoker, DubboAdapterGlobalConfig.getDubboInterfaceGroupAndVersionEnabled());
        }
    }


    private DubboUtils() {
    }
}


================================================
FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/SentinelDubboConsumerFilter.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.alibaba.csp.sentinel.adapter.dubbo3;

import com.alibaba.csp.sentinel.*;
import com.alibaba.csp.sentinel.adapter.dubbo3.config.DubboAdapterGlobalConfig;
import com.alibaba.csp.sentinel.log.RecordLog;
import com.alibaba.csp.sentinel.slots.block.BlockException;

import org.apache.dubbo.common.extension.Activate;
import org.apache.dubbo.rpc.*;
import org.apache.dubbo.rpc.cluster.filter.ClusterFilter;
import org.apache.dubbo.rpc.support.RpcUtils;

import java.util.LinkedList;
import java.util.Optional;

import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER;

/**
 * <p>Dubbo service consumer filter for Sentinel. Auto activated by default.</p>
 * <p>
 * If you want to disable the consumer filter, you can configure:
 * <pre>
 * &lt;dubbo:consumer filter="-sentinel.dubbo.consumer.filter"/&gt;
 * </pre>
 *
 * @author Carpenter Lee
 * @author Eric Zhao
 * @author Lin Liang
 */
@Activate(group = CONSUMER)
public class SentinelDubboConsumerFilter extends BaseSentinelDubboFilter implements ClusterFilter {

    public SentinelDubboConsumerFilter() {
        RecordLog.info("Sentinel Apache Dubbo3 consumer filter initialized");
    }

    @Override
    String getMethodName(Invoker invoker, Invocation invocation, String prefix) {
        return DubboUtils.getMethodResourceName(invoker, invocation, prefix);
    }

    @Override
    String getInterfaceName(Invoker invoker, String prefix) {
        return DubboUtils.getInterfaceName(invoker, prefix);
    }

    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
        InvokeMode invokeMode = RpcUtils.getInvokeMode(invoker.getUrl(), invocation);
        if (InvokeMode.SYNC == invokeMode) {
            return syncInvoke(invoker, invocation);
        } else {
            return asyncInvoke(invoker, invocation);
        }
    }

    private Result syncInvoke(Invoker<?> invoker, Invocation invocation) {
        Entry interfaceEntry = null;
        Entry methodEntry = null;
        String prefix = DubboAdapterGlobalConfig.getDubboConsumerResNamePrefixKey();
        String interfaceResourceName = getInterfaceName(invoker, prefix);
        String methodResourceName = getMethodName(invoker, invocation, prefix);
        try {
            interfaceEntry = SphU.entry(interfaceResourceName, ResourceTypeConstants.COMMON_RPC, EntryType.OUT);
            methodEntry = SphU.entry(methodResourceName, ResourceTypeConstants.COMMON_RPC, EntryType.OUT,
                invocation.getArguments());
            Result result = invoker.invoke(invocation);
            if (result.hasException()) {
                Tracer.traceEntry(result.getException(), interfaceEntry);
                Tracer.traceEntry(result.getException(), methodEntry);
            }
            return result;
        } catch (BlockException e) {
            return DubboAdapterGlobalConfig.getConsumerFallback().handle(invoker, invocation, e);
        } catch (RpcException e) {
            Tracer.traceEntry(e, interfaceEntry);
            Tracer.traceEntry(e, methodEntry);
            throw e;
        } finally {
            if (methodEntry != null) {
                methodEntry.exit(1, invocation.getArguments());
            }
            if (interfaceEntry != null) {
                interfaceEntry.exit();
            }
        }
    }

    private Result asyncInvoke(Invoker<?> invoker, Invocation invocation) {
        LinkedList<EntryHolder> queue = new LinkedList<>();
        String prefix = DubboAdapterGlobalConfig.getDubboConsumerResNamePrefixKey();
        String interfaceResourceName = getInterfaceName(invoker, prefix);
        String methodResourceName = getMethodName(invoker, invocation, prefix);
        try {
            queue.push(new EntryHolder(
                SphU.asyncEntry(interfaceResourceName, ResourceTypeConstants.COMMON_RPC, EntryType.OUT), null));
            queue.push(new EntryHolder(
                SphU.asyncEntry(methodResourceName, ResourceTypeConstants.COMMON_RPC,
                    EntryType.OUT, 1, invocation.getArguments()), invocation.getArguments()));
            Result result = invoker.invoke(invocation);
            result.whenCompleteWithContext((r, throwable) -> {
                Throwable error = throwable;
                if (error == null) {
                    error = Optional.ofNullable(r).map(Result::getException).orElse(null);
                }
                while (!queue.isEmpty()) {
                    EntryHolder holder = queue.pop();
                    Tracer.traceEntry(error, holder.entry);
                    exitEntry(holder);
                }
            });
            return result;
        } catch (BlockException e) {
            while (!queue.isEmpty()) {
                exitEntry(queue.pop());
            }
            return DubboAdapterGlobalConfig.getConsumerFallback().handle(invoker, invocation, e);
        }
    }

    static class EntryHolder {

        final private Entry entry;
        final private Object[] params;

        public EntryHolder(Entry entry, Object[] params) {
            this.entry = entry;
            this.params = params;
        }
    }

    private void exitEntry(EntryHolder holder) {
        if (holder.params != null) {
            holder.entry.exit(1, holder.params);
        } else {
            holder.entry.exit();
        }
    }
}


================================================
FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/SentinelDubboProviderFilter.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.alibaba.csp.sentinel.adapter.dubbo3;

import com.alibaba.csp.sentinel.*;
import com.alibaba.csp.sentinel.adapter.dubbo3.config.DubboAdapterGlobalConfig;
import com.alibaba.csp.sentinel.context.ContextUtil;
import com.alibaba.csp.sentinel.log.RecordLog;
import com.alibaba.csp.sentinel.slots.block.BlockException;

import org.apache.dubbo.common.extension.Activate;
import org.apache.dubbo.rpc.Filter;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.Result;
import org.apache.dubbo.rpc.RpcException;

import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER;

/**
 * <p>Apache Dubbo service provider filter that enables integration with Sentinel. Auto activated by default.</p>
 * <p>Note: this only works for Apache Dubbo 2.7.x or above version.</p>
 * <p>
 * If you want to disable the provider filter, you can configure:
 * <pre>
 * &lt;dubbo:provider filter="-sentinel.dubbo.provider.filter"/&gt;
 * </pre>
 *
 * @author Carpenter Lee
 * @author Eric Zhao
 */
@Activate(group = PROVIDER)
public class SentinelDubboProviderFilter extends BaseSentinelDubboFilter implements Filter {

    public SentinelDubboProviderFilter() {
        RecordLog.info("Sentinel Apache Dubbo3 provider filter initialized");
    }

    @Override
    String getMethodName(Invoker invoker, Invocation invocation, String prefix) {
        return DubboUtils.getMethodResourceName(invoker, invocation, prefix);
    }

    @Override
    String getInterfaceName(Invoker invoker, String prefix) {
        return DubboUtils.getInterfaceName(invoker, prefix);
    }

    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
        // Get origin caller.
        String origin = DubboAdapterGlobalConfig.getOriginParser().parse(invoker, invocation);
        if (null == origin) {
            origin = "";
        }
        Entry interfaceEntry = null;
        Entry methodEntry = null;
        String prefix = DubboAdapterGlobalConfig.getDubboProviderResNamePrefixKey();
        String interfaceResourceName = getInterfaceName(invoker, prefix);
        String methodResourceName = getMethodName(invoker, invocation, prefix);
        try {
            // Only need to create entrance context at provider side, as context will take effect
            // at entrance of invocation chain only (for inbound traffic).
            ContextUtil.enter(methodResourceName, origin);
            interfaceEntry = SphU.entry(interfaceResourceName, ResourceTypeConstants.COMMON_RPC, EntryType.IN);
            methodEntry = SphU.entry(methodResourceName, ResourceTypeConstants.COMMON_RPC, EntryType.IN,
                invocation.getArguments());
            Result result = invoker.invoke(invocation);
            if (result.hasException()) {
                Tracer.traceEntry(result.getException(), interfaceEntry);
                Tracer.traceEntry(result.getException(), methodEntry);
            }
            return result;
        } catch (BlockException e) {
            return DubboAdapterGlobalConfig.getProviderFallback().handle(invoker, invocation, e);
        } catch (RpcException e) {
            Tracer.traceEntry(e, interfaceEntry);
            Tracer.traceEntry(e, methodEntry);
            throw e;
        } finally {
            if (methodEntry != null) {
                methodEntry.exit(1, invocation.getArguments());
            }
            if (interfaceEntry != null) {
                interfaceEntry.exit();
            }
            ContextUtil.exit();
        }
    }

}



================================================
FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/config/DubboAdapterGlobalConfig.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.alibaba.csp.sentinel.adapter.dubbo3.config;

import com.alibaba.csp.sentinel.adapter.dubbo3.fallback.DefaultDubboFallback;
import com.alibaba.csp.sentinel.adapter.dubbo3.fallback.DubboFallback;
import com.alibaba.csp.sentinel.adapter.dubbo3.origin.DefaultDubboOriginParser;
import com.alibaba.csp.sentinel.adapter.dubbo3.origin.DubboOriginParser;
import com.alibaba.csp.sentinel.config.SentinelConfig;
import com.alibaba.csp.sentinel.util.AssertUtil;
import com.alibaba.csp.sentinel.util.StringUtil;

/**
 * <p>
 * Responsible for dubbo service provider, consumer attribute configuration
 * </p>
 *
 * @author lianglin
 * @since 1.7.0
 */
public final class DubboAdapterGlobalConfig {

    private static final String TRUE_STR = "true";

    public static final String DUBBO_RES_NAME_WITH_PREFIX_KEY = "csp.sentinel.dubbo.resource.use.prefix";
    public static final String DUBBO_PROVIDER_RES_NAME_PREFIX_KEY = "csp.sentinel.dubbo.resource.provider.prefix";
    public static final String DUBBO_CONSUMER_RES_NAME_PREFIX_KEY = "csp.sentinel.dubbo.resource.consumer.prefix";

    private static final String DEFAULT_DUBBO_PROVIDER_PREFIX = "dubbo:provider:";
    private static final String DEFAULT_DUBBO_CONSUMER_PREFIX = "dubbo:consumer:";

    public static final String DUBBO_INTERFACE_GROUP_VERSION_ENABLED = "csp.sentinel.dubbo.interface.group.version.enabled";

    private static volatile DubboFallback consumerFallback = new DefaultDubboFallback();
    private static volatile DubboFallback providerFallback = new DefaultDubboFallback();
    private static volatile DubboOriginParser originParser = new DefaultDubboOriginParser();

    public static boolean isUsePrefix() {
        return TRUE_STR.equalsIgnoreCase(SentinelConfig.getConfig(DUBBO_RES_NAME_WITH_PREFIX_KEY));
    }

    public static String getDubboProviderResNamePrefixKey() {
        if (isUsePrefix()) {
            String config = SentinelConfig.getConfig(DUBBO_PROVIDER_RES_NAME_PREFIX_KEY);
            return StringUtil.isNotBlank(config) ? config : DEFAULT_DUBBO_PROVIDER_PREFIX;
        }
        return null;
    }

    public static String getDubboConsumerResNamePrefixKey() {
        if (isUsePrefix()) {
            String config = SentinelConfig.getConfig(DUBBO_CONSUMER_RES_NAME_PREFIX_KEY);
            return StringUtil.isNotBlank(config) ? config : DEFAULT_DUBBO_CONSUMER_PREFIX;
        }
        return null;
    }

    public static Boolean getDubboInterfaceGroupAndVersionEnabled() {
        return TRUE_STR.equalsIgnoreCase(SentinelConfig.getConfig(DUBBO_INTERFACE_GROUP_VERSION_ENABLED));
    }

    public static DubboFallback getConsumerFallback() {
        return consumerFallback;
    }

    public static void setConsumerFallback(DubboFallback consumerFallback) {
        AssertUtil.notNull(consumerFallback, "consumerFallback cannot be null");
        DubboAdapterGlobalConfig.consumerFallback = consumerFallback;
    }

    public static DubboFallback getProviderFallback() {
        return providerFallback;
    }

    public static void setProviderFallback(DubboFallback providerFallback) {
        AssertUtil.notNull(providerFallback, "providerFallback cannot be null");
        DubboAdapterGlobalConfig.providerFallback = providerFallback;
    }

    /**
     * Get the origin parser of Dubbo adapter.
     *
     * @return the origin parser
     * @since 1.8.0
     */
    public static DubboOriginParser getOriginParser() {
        return originParser;
    }

    /**
     * Set the origin parser of Dubbo adapter.
     *
     * @param originParser the origin parser
     * @since 1.8.0
     */
    public static void setOriginParser(DubboOriginParser originParser) {
        AssertUtil.notNull(originParser, "originParser cannot be null");
        DubboAdapterGlobalConfig.originParser = originParser;
    }

    private DubboAdapterGlobalConfig() {}

}


================================================
FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/fallback/DefaultDubboFallback.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.alibaba.csp.sentinel.adapter.dubbo3.fallback;

import com.alibaba.csp.sentinel.slots.block.BlockException;

import org.apache.dubbo.rpc.AsyncRpcResult;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.Result;

/**
 * @author Eric Zhao
 */
public class DefaultDubboFallback implements DubboFallback {

    @Override
    public Result handle(Invoker<?> invoker, Invocation invocation, BlockException ex) {
        // Just wrap the exception.
        return AsyncRpcResult.newDefaultAsyncResult(ex.toRuntimeException(), invocation);
    }
}


================================================
FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/fallback/DubboFallback.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.alibaba.csp.sentinel.adapter.dubbo3.fallback;

import com.alibaba.csp.sentinel.slots.block.BlockException;

import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.Result;

/**
 * Fallback handler for Dubbo services.
 *
 * @author Eric Zhao
 */
@FunctionalInterface
public interface DubboFallback {

    /**
     * Handle the block exception and provide fallback result.
     *
     * @param invoker Dubbo invoker
     * @param invocation Dubbo invocation
     * @param ex block exception
     * @return fallback result
     */
    Result handle(Invoker<?> invoker, Invocation invocation, BlockException ex);
}


================================================
FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/fallback/DubboFallbackRegistry.java
=========================
Download .txt
gitextract_7y3y0mhf/

├── .codecov.yml
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── feature_request.md
│   ├── ISSUE_TEMPLATE.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   └── workflows/
│       ├── ci.yml
│       ├── codeql-analysis.yml
│       └── document-lint.yml
├── .gitignore
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── SECURITY.md
├── doc/
│   ├── README.md
│   └── awesome-sentinel.md
├── pom.xml
├── sentinel-adapter/
│   ├── pom.xml
│   ├── sentinel-apache-dubbo-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── adapter/
│   │       │   │                       └── dubbo/
│   │       │   │                           ├── BaseSentinelDubboFilter.java
│   │       │   │                           ├── DubboAppContextFilter.java
│   │       │   │                           ├── DubboUtils.java
│   │       │   │                           ├── SentinelDubboConsumerFilter.java
│   │       │   │                           ├── SentinelDubboProviderFilter.java
│   │       │   │                           ├── config/
│   │       │   │                           │   └── DubboAdapterGlobalConfig.java
│   │       │   │                           ├── fallback/
│   │       │   │                           │   ├── DefaultDubboFallback.java
│   │       │   │                           │   ├── DubboFallback.java
│   │       │   │                           │   └── DubboFallbackRegistry.java
│   │       │   │                           └── origin/
│   │       │   │                               ├── DefaultDubboOriginParser.java
│   │       │   │                               └── DubboOriginParser.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── dubbo/
│   │       │               └── org.apache.dubbo.rpc.Filter
│   │       └── test/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   ├── BaseTest.java
│   │           │                   ├── DubboTestUtil.java
│   │           │                   └── adapter/
│   │           │                       └── dubbo/
│   │           │                           ├── AbstractTimeBasedTest.java
│   │           │                           ├── DubboAppContextFilterTest.java
│   │           │                           ├── DubboUtilsTest.java
│   │           │                           ├── SentinelDubboConsumerFilterTest.java
│   │           │                           ├── SentinelDubboProviderFilterTest.java
│   │           │                           ├── fallback/
│   │           │                           │   └── DubboFallbackRegistryTest.java
│   │           │                           ├── origin/
│   │           │                           │   └── DubboOriginRegistryTest.java
│   │           │                           └── provider/
│   │           │                               ├── DemoService.java
│   │           │                               └── impl/
│   │           │                                   └── DemoServiceImpl.java
│   │           └── resources/
│   │               ├── spring-dubbo-consumer-filter.xml
│   │               └── spring-dubbo-provider-filter.xml
│   ├── sentinel-apache-dubbo3-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── adapter/
│   │       │   │                       └── dubbo3/
│   │       │   │                           ├── BaseSentinelDubboFilter.java
│   │       │   │                           ├── DubboAppContextFilter.java
│   │       │   │                           ├── DubboUtils.java
│   │       │   │                           ├── SentinelDubboConsumerFilter.java
│   │       │   │                           ├── SentinelDubboProviderFilter.java
│   │       │   │                           ├── config/
│   │       │   │                           │   └── DubboAdapterGlobalConfig.java
│   │       │   │                           ├── fallback/
│   │       │   │                           │   ├── DefaultDubboFallback.java
│   │       │   │                           │   ├── DubboFallback.java
│   │       │   │                           │   └── DubboFallbackRegistry.java
│   │       │   │                           └── origin/
│   │       │   │                               ├── DefaultDubboOriginParser.java
│   │       │   │                               └── DubboOriginParser.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── dubbo/
│   │       │               ├── org.apache.dubbo.rpc.Filter
│   │       │               └── org.apache.dubbo.rpc.cluster.filter.ClusterFilter
│   │       └── test/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   ├── BaseTest.java
│   │           │                   ├── DubboTestUtil.java
│   │           │                   └── adapter/
│   │           │                       └── dubbo3/
│   │           │                           ├── AbstractTimeBasedTest.java
│   │           │                           ├── DubboAppContextFilterTest.java
│   │           │                           ├── DubboUtilsTest.java
│   │           │                           ├── SentinelDubboConsumerFilterTest.java
│   │           │                           ├── SentinelDubboProviderFilterTest.java
│   │           │                           ├── SentinelFilterTest.java
│   │           │                           ├── fallback/
│   │           │                           │   └── DubboFallbackRegistryTest.java
│   │           │                           ├── origin/
│   │           │                           │   └── DubboOriginRegistryTest.java
│   │           │                           └── provider/
│   │           │                               ├── DemoService.java
│   │           │                               └── impl/
│   │           │                                   └── DemoServiceImpl.java
│   │           └── resources/
│   │               ├── spring-dubbo-consumer-filter.xml
│   │               └── spring-dubbo-provider-filter.xml
│   ├── sentinel-apache-httpclient-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── adapter/
│   │       │                           └── apache/
│   │       │                               └── httpclient/
│   │       │                                   ├── SentinelApacheHttpClientBuilder.java
│   │       │                                   ├── config/
│   │       │                                   │   └── SentinelApacheHttpClientConfig.java
│   │       │                                   ├── extractor/
│   │       │                                   │   ├── ApacheHttpClientResourceExtractor.java
│   │       │                                   │   └── DefaultApacheHttpClientResourceExtractor.java
│   │       │                                   └── fallback/
│   │       │                                       ├── ApacheHttpClientFallback.java
│   │       │                                       └── DefaultApacheHttpClientFallback.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── adapter/
│   │                                   └── apache/
│   │                                       └── httpclient/
│   │                                           ├── SentinelApacheHttpClientTest.java
│   │                                           ├── app/
│   │                                           │   ├── TestApplication.java
│   │                                           │   └── controller/
│   │                                           │       └── TestController.java
│   │                                           ├── config/
│   │                                           │   └── SentinelApacheHttpClientConfigTest.java
│   │                                           └── fallback/
│   │                                               └── ApacheHttpClientFallbackTest.java
│   ├── sentinel-api-gateway-adapter-common/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── adapter/
│   │       │   │                       └── gateway/
│   │       │   │                           └── common/
│   │       │   │                               ├── SentinelGatewayConstants.java
│   │       │   │                               ├── api/
│   │       │   │                               │   ├── ApiDefinition.java
│   │       │   │                               │   ├── ApiDefinitionChangeObserver.java
│   │       │   │                               │   ├── ApiPathPredicateItem.java
│   │       │   │                               │   ├── ApiPredicateGroupItem.java
│   │       │   │                               │   ├── ApiPredicateItem.java
│   │       │   │                               │   ├── GatewayApiDefinitionManager.java
│   │       │   │                               │   └── matcher/
│   │       │   │                               │       └── AbstractApiMatcher.java
│   │       │   │                               ├── command/
│   │       │   │                               │   ├── GetGatewayApiDefinitionGroupCommandHandler.java
│   │       │   │                               │   ├── GetGatewayRuleCommandHandler.java
│   │       │   │                               │   ├── UpdateGatewayApiDefinitionGroupCommandHandler.java
│   │       │   │                               │   └── UpdateGatewayRuleCommandHandler.java
│   │       │   │                               ├── param/
│   │       │   │                               │   ├── ConfigurableRequestItemParser.java
│   │       │   │                               │   ├── GatewayParamParser.java
│   │       │   │                               │   ├── GatewayRegexCache.java
│   │       │   │                               │   └── RequestItemParser.java
│   │       │   │                               ├── rule/
│   │       │   │                               │   ├── GatewayFlowRule.java
│   │       │   │                               │   ├── GatewayParamFlowItem.java
│   │       │   │                               │   ├── GatewayRuleConverter.java
│   │       │   │                               │   └── GatewayRuleManager.java
│   │       │   │                               └── slot/
│   │       │   │                                   ├── GatewayFlowSlot.java
│   │       │   │                                   └── GatewaySlotChainBuilder.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               ├── com.alibaba.csp.sentinel.command.CommandHandler
│   │       │               └── com.alibaba.csp.sentinel.slotchain.ProcessorSlot
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── adapter/
│   │                                   └── gateway/
│   │                                       └── common/
│   │                                           ├── api/
│   │                                           │   └── GatewayApiDefinitionManagerTest.java
│   │                                           ├── param/
│   │                                           │   ├── GatewayParamParserTest.java
│   │                                           │   └── GatewayRegexCacheTest.java
│   │                                           └── rule/
│   │                                               ├── GatewayRuleConverterTest.java
│   │                                               └── GatewayRuleManagerTest.java
│   ├── sentinel-dubbo-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── adapter/
│   │       │   │                       └── dubbo/
│   │       │   │                           ├── AbstractDubboFilter.java
│   │       │   │                           ├── DubboAdapterGlobalConfig.java
│   │       │   │                           ├── DubboAppContextFilter.java
│   │       │   │                           ├── DubboUtils.java
│   │       │   │                           ├── SentinelDubboConsumerFilter.java
│   │       │   │                           ├── SentinelDubboProviderFilter.java
│   │       │   │                           ├── fallback/
│   │       │   │                           │   ├── DefaultDubboFallback.java
│   │       │   │                           │   ├── DubboFallback.java
│   │       │   │                           │   └── DubboFallbackRegistry.java
│   │       │   │                           └── origin/
│   │       │   │                               ├── DefaultDubboOriginParser.java
│   │       │   │                               └── DubboOriginParser.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── dubbo/
│   │       │               └── com.alibaba.dubbo.rpc.Filter
│   │       └── test/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   ├── BaseTest.java
│   │           │                   └── adapter/
│   │           │                       └── dubbo/
│   │           │                           ├── AbstractDubboFilterTest.java
│   │           │                           ├── DubboAppContextFilterTest.java
│   │           │                           ├── DubboUtilsTest.java
│   │           │                           ├── SentinelDubboConsumerFilterTest.java
│   │           │                           ├── SentinelDubboProviderFilterTest.java
│   │           │                           ├── fallback/
│   │           │                           │   └── DubboFallbackRegistryTest.java
│   │           │                           ├── origin/
│   │           │                           │   └── DubboOriginRegistryTest.java
│   │           │                           └── provider/
│   │           │                               ├── DemoService.java
│   │           │                               └── impl/
│   │           │                                   └── DemoServiceImpl.java
│   │           └── resources/
│   │               ├── spring-dubbo-consumer-filter.xml
│   │               └── spring-dubbo-provider-filter.xml
│   ├── sentinel-grpc-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── adapter/
│   │       │                           └── grpc/
│   │       │                               ├── SentinelGrpcClientInterceptor.java
│   │       │                               └── SentinelGrpcServerInterceptor.java
│   │       └── test/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── adapter/
│   │           │                       └── grpc/
│   │           │                           ├── FooServiceClient.java
│   │           │                           ├── FooServiceImpl.java
│   │           │                           ├── GrpcTestServer.java
│   │           │                           ├── SentinelGrpcClientInterceptorTest.java
│   │           │                           └── SentinelGrpcServerInterceptorTest.java
│   │           └── proto/
│   │               └── example.proto
│   ├── sentinel-jax-rs-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── adapter/
│   │       │                           └── jaxrs/
│   │       │                               ├── SentinelJaxRsClientTemplate.java
│   │       │                               ├── SentinelJaxRsProviderFilter.java
│   │       │                               ├── config/
│   │       │                               │   └── SentinelJaxRsConfig.java
│   │       │                               ├── exception/
│   │       │                               │   └── DefaultExceptionMapper.java
│   │       │                               ├── fallback/
│   │       │                               │   ├── DefaultSentinelJaxRsFallback.java
│   │       │                               │   └── SentinelJaxRsFallback.java
│   │       │                               ├── future/
│   │       │                               │   └── FutureWrapper.java
│   │       │                               └── request/
│   │       │                                   ├── DefaultRequestOriginParser.java
│   │       │                                   ├── DefaultResourceNameParser.java
│   │       │                                   ├── RequestOriginParser.java
│   │       │                                   └── ResourceNameParser.java
│   │       └── test/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── adapter/
│   │           │                       └── jaxrs/
│   │           │                           ├── ClientFilterTest.java
│   │           │                           ├── ProviderFilterTest.java
│   │           │                           ├── TestApplication.java
│   │           │                           └── TestResource.java
│   │           └── resources/
│   │               ├── application-client.yml
│   │               └── application-provider.yml
│   ├── sentinel-motan-adapter/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── adapter/
│   │           │                       └── motan/
│   │           │                           ├── MotanUtils.java
│   │           │                           ├── SentinelMotanConsumerFilter.java
│   │           │                           ├── SentinelMotanProviderFilter.java
│   │           │                           ├── config/
│   │           │                           │   └── MotanAdapterGlobalConfig.java
│   │           │                           └── fallback/
│   │           │                               ├── DefaultMotanFallback.java
│   │           │                               └── MotanFallback.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       └── com.weibo.api.motan.filter.Filter
│   ├── sentinel-okhttp-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── adapter/
│   │       │                           └── okhttp/
│   │       │                               ├── SentinelOkHttpConfig.java
│   │       │                               ├── SentinelOkHttpInterceptor.java
│   │       │                               ├── extractor/
│   │       │                               │   ├── DefaultOkHttpResourceExtractor.java
│   │       │                               │   └── OkHttpResourceExtractor.java
│   │       │                               └── fallback/
│   │       │                                   ├── DefaultOkHttpFallback.java
│   │       │                                   └── OkHttpFallback.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── adapter/
│   │                                   └── okhttp/
│   │                                       ├── SentinelOkHttpInterceptorTest.java
│   │                                       ├── app/
│   │                                       │   ├── TestApplication.java
│   │                                       │   └── controller/
│   │                                       │       └── TestController.java
│   │                                       ├── config/
│   │                                       │   └── SentinelOkHttpConfigTest.java
│   │                                       ├── extractor/
│   │                                       │   └── OkHttpResourceExtractorTest.java
│   │                                       └── fallback/
│   │                                           └── OkHttpFallbackTest.java
│   ├── sentinel-quarkus-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   ├── sentinel-annotation-quarkus-adapter-deployment/
│   │   │   ├── pom.xml
│   │   │   └── src/
│   │   │       ├── main/
│   │   │       │   └── java/
│   │   │       │       └── com/
│   │   │       │           └── alibaba/
│   │   │       │               └── csp/
│   │   │       │                   └── sentinel/
│   │   │       │                       └── adapter/
│   │   │       │                           └── quarkus/
│   │   │       │                               └── annotation/
│   │   │       │                                   └── deployment/
│   │   │       │                                       └── SentinelAnnotationQuarkusAdapterProcessor.java
│   │   │       └── test/
│   │   │           └── java/
│   │   │               └── com/
│   │   │                   └── alibaba/
│   │   │                       └── csp/
│   │   │                           └── sentinel/
│   │   │                               └── adapter/
│   │   │                                   └── quarkus/
│   │   │                                       └── annotation/
│   │   │                                           └── deployment/
│   │   │                                               ├── FooService.java
│   │   │                                               ├── FooUtil.java
│   │   │                                               └── SentinelAnnotationQuarkusAdapterTest.java
│   │   ├── sentinel-annotation-quarkus-adapter-runtime/
│   │   │   ├── pom.xml
│   │   │   └── src/
│   │   │       └── main/
│   │   │           └── resources/
│   │   │               └── META-INF/
│   │   │                   └── quarkus-extension.yaml
│   │   ├── sentinel-jax-rs-quarkus-adapter-deployment/
│   │   │   ├── pom.xml
│   │   │   └── src/
│   │   │       ├── main/
│   │   │       │   └── java/
│   │   │       │       └── com/
│   │   │       │           └── alibaba/
│   │   │       │               └── csp/
│   │   │       │                   └── sentinel/
│   │   │       │                       └── adapter/
│   │   │       │                           └── quarkus/
│   │   │       │                               └── jaxrs/
│   │   │       │                                   └── deployment/
│   │   │       │                                       └── SentinelJaxRsQuarkusAdapterProcessor.java
│   │   │       └── test/
│   │   │           └── java/
│   │   │               └── com/
│   │   │                   └── alibaba/
│   │   │                       └── csp/
│   │   │                           └── sentinel/
│   │   │                               └── adapter/
│   │   │                                   └── quarkus/
│   │   │                                       └── jaxrs/
│   │   │                                           └── deployment/
│   │   │                                               ├── SentinelJaxRsQuarkusAdapterTest.java
│   │   │                                               └── TestResource.java
│   │   ├── sentinel-jax-rs-quarkus-adapter-runtime/
│   │   │   ├── pom.xml
│   │   │   └── src/
│   │   │       └── main/
│   │   │           └── resources/
│   │   │               └── META-INF/
│   │   │                   ├── quarkus-extension.yaml
│   │   │                   └── services/
│   │   │                       └── javax.ws.rs.ext.Providers
│   │   ├── sentinel-native-image-quarkus-adapter-deployment/
│   │   │   ├── pom.xml
│   │   │   └── src/
│   │   │       └── main/
│   │   │           └── java/
│   │   │               └── com/
│   │   │                   └── alibaba/
│   │   │                       └── csp/
│   │   │                           └── sentinel/
│   │   │                               └── adapter/
│   │   │                                   └── quarkus/
│   │   │                                       └── nativeimage/
│   │   │                                           └── SentinelNativeImageProcessor.java
│   │   └── sentinel-native-image-quarkus-adapter-runtime/
│   │       ├── pom.xml
│   │       └── src/
│   │           └── main/
│   │               ├── java/
│   │               │   └── com/
│   │               │       └── alibaba/
│   │               │           └── csp/
│   │               │               └── sentinel/
│   │               │                   └── adapter/
│   │               │                       └── quarkus/
│   │               │                           └── nativeimage/
│   │               │                               └── SentinelRecorder.java
│   │               └── resources/
│   │                   └── META-INF/
│   │                       └── quarkus-extension.yaml
│   ├── sentinel-reactor-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── adapter/
│   │       │                           └── reactor/
│   │       │                               ├── ContextConfig.java
│   │       │                               ├── EntryConfig.java
│   │       │                               ├── FluxSentinelOperator.java
│   │       │                               ├── InheritableBaseSubscriber.java
│   │       │                               ├── MonoSentinelOperator.java
│   │       │                               ├── ReactorSphU.java
│   │       │                               ├── SentinelReactorConstants.java
│   │       │                               ├── SentinelReactorSubscriber.java
│   │       │                               └── SentinelReactorTransformer.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── adapter/
│   │                                   └── reactor/
│   │                                       ├── FluxSentinelOperatorTestIntegrationTest.java
│   │                                       ├── MonoSentinelOperatorIntegrationTest.java
│   │                                       └── ReactorSphUTest.java
│   ├── sentinel-sofa-rpc-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── adapter/
│   │       │   │                       └── sofa/
│   │       │   │                           └── rpc/
│   │       │   │                               ├── AbstractSofaRpcFilter.java
│   │       │   │                               ├── SentinelConstants.java
│   │       │   │                               ├── SentinelSofaRpcConsumerFilter.java
│   │       │   │                               ├── SentinelSofaRpcProviderFilter.java
│   │       │   │                               ├── SofaRpcUtils.java
│   │       │   │                               └── fallback/
│   │       │   │                                   ├── DefaultSofaRpcFallback.java
│   │       │   │                                   ├── SofaRpcFallback.java
│   │       │   │                                   └── SofaRpcFallbackRegistry.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               └── sofa-rpc/
│   │       │                   └── com.alipay.sofa.rpc.filter.Filter
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── adapter/
│   │                                   └── sofa/
│   │                                       └── rpc/
│   │                                           ├── AbstractSofaRpcFilterTest.java
│   │                                           ├── BaseTest.java
│   │                                           ├── SentinelSofaRpcConsumerFilterTest.java
│   │                                           ├── SentinelSofaRpcProviderFilterTest.java
│   │                                           ├── SofaRpcUtilsTest.java
│   │                                           ├── fallback/
│   │                                           │   ├── DefaultSofaRpcFallbackTest.java
│   │                                           │   └── SofaRpcFallbackRegistryTest.java
│   │                                           └── service/
│   │                                               ├── DemoService.java
│   │                                               └── impl/
│   │                                                   └── DemoServiceImpl.java
│   ├── sentinel-spring-cloud-gateway-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── adapter/
│   │       │   │                       └── gateway/
│   │       │   │                           └── sc/
│   │       │   │                               ├── SentinelGatewayFilter.java
│   │       │   │                               ├── ServerWebExchangeItemParser.java
│   │       │   │                               ├── api/
│   │       │   │                               │   ├── GatewayApiMatcherManager.java
│   │       │   │                               │   ├── SpringCloudGatewayApiDefinitionChangeObserver.java
│   │       │   │                               │   └── matcher/
│   │       │   │                               │       └── WebExchangeApiMatcher.java
│   │       │   │                               ├── callback/
│   │       │   │                               │   ├── BlockRequestHandler.java
│   │       │   │                               │   ├── DefaultBlockRequestHandler.java
│   │       │   │                               │   ├── GatewayCallbackManager.java
│   │       │   │                               │   └── RedirectBlockRequestHandler.java
│   │       │   │                               ├── exception/
│   │       │   │                               │   └── SentinelGatewayBlockExceptionHandler.java
│   │       │   │                               └── route/
│   │       │   │                                   ├── AntRoutePathMatcher.java
│   │       │   │                                   ├── RegexRoutePathMatcher.java
│   │       │   │                                   └── RouteMatchers.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               └── com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinitionChangeObserver
│   │       └── test/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── adapter/
│   │           │                       └── gateway/
│   │           │                           └── sc/
│   │           │                               ├── SentinelGatewayFilterTest.java
│   │           │                               └── SpringCloudGatewayParamParserTest.java
│   │           └── resources/
│   │               └── mockito-extensions/
│   │                   └── org.mockito.plugins.MockMaker
│   ├── sentinel-spring-cloud-gateway-v6x-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── adapter/
│   │       │   │                       └── gateway/
│   │       │   │                           └── sc/
│   │       │   │                               ├── SentinelGatewayFilter.java
│   │       │   │                               ├── ServerWebExchangeItemParser.java
│   │       │   │                               ├── api/
│   │       │   │                               │   ├── GatewayApiMatcherManager.java
│   │       │   │                               │   ├── SpringCloudGatewayApiDefinitionChangeObserver.java
│   │       │   │                               │   └── matcher/
│   │       │   │                               │       └── WebExchangeApiMatcher.java
│   │       │   │                               ├── callback/
│   │       │   │                               │   ├── BlockRequestHandler.java
│   │       │   │                               │   ├── DefaultBlockRequestHandler.java
│   │       │   │                               │   ├── GatewayCallbackManager.java
│   │       │   │                               │   └── RedirectBlockRequestHandler.java
│   │       │   │                               ├── exception/
│   │       │   │                               │   └── SentinelGatewayBlockExceptionHandler.java
│   │       │   │                               └── route/
│   │       │   │                                   ├── AntRoutePathMatcher.java
│   │       │   │                                   ├── RegexRoutePathMatcher.java
│   │       │   │                                   └── RouteMatchers.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               └── com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinitionChangeObserver
│   │       └── test/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── adapter/
│   │           │                       └── gateway/
│   │           │                           └── sc/
│   │           │                               ├── SentinelGatewayFilterTest.java
│   │           │                               └── SpringCloudGatewayParamParserTest.java
│   │           └── resources/
│   │               └── mockito-extensions/
│   │                   └── org.mockito.plugins.MockMaker
│   ├── sentinel-spring-restclient-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── adapter/
│   │       │                           └── spring/
│   │       │                               └── restclient/
│   │       │                                   ├── SentinelRestClientConfig.java
│   │       │                                   ├── SentinelRestClientInterceptor.java
│   │       │                                   ├── extractor/
│   │       │                                   │   ├── DefaultRestClientResourceExtractor.java
│   │       │                                   │   └── RestClientResourceExtractor.java
│   │       │                                   └── fallback/
│   │       │                                       ├── DefaultRestClientFallback.java
│   │       │                                       └── RestClientFallback.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── adapter/
│   │                                   └── spring/
│   │                                       └── restclient/
│   │                                           ├── ManualTest.java
│   │                                           ├── SentinelRestClientConfigTest.java
│   │                                           ├── SentinelRestClientInterceptorSimpleTest.java
│   │                                           ├── app/
│   │                                           │   ├── TestApplication.java
│   │                                           │   └── TestController.java
│   │                                           ├── extractor/
│   │                                           │   └── DefaultRestClientResourceExtractorTest.java
│   │                                           └── fallback/
│   │                                               └── DefaultRestClientFallbackTest.java
│   ├── sentinel-spring-webflux-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── adapter/
│   │       │                           └── spring/
│   │       │                               └── webflux/
│   │       │                                   ├── SentinelWebFluxFilter.java
│   │       │                                   ├── callback/
│   │       │                                   │   ├── BlockRequestHandler.java
│   │       │                                   │   ├── DefaultBlockRequestHandler.java
│   │       │                                   │   └── WebFluxCallbackManager.java
│   │       │                                   └── exception/
│   │       │                                       └── SentinelBlockExceptionHandler.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── adapter/
│   │                                   └── spring/
│   │                                       └── webflux/
│   │                                           ├── SentinelWebFluxIntegrationTest.java
│   │                                           └── test/
│   │                                               ├── WebFluxTestApplication.java
│   │                                               ├── WebFluxTestConfig.java
│   │                                               ├── WebFluxTestController.java
│   │                                               └── WebFluxTestRouter.java
│   ├── sentinel-spring-webmvc-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── adapter/
│   │       │                           └── spring/
│   │       │                               └── webmvc/
│   │       │                                   ├── AbstractSentinelInterceptor.java
│   │       │                                   ├── SentinelExceptionAware.java
│   │       │                                   ├── SentinelWebInterceptor.java
│   │       │                                   ├── SentinelWebTotalInterceptor.java
│   │       │                                   ├── callback/
│   │       │                                   │   ├── BlockExceptionHandler.java
│   │       │                                   │   ├── DefaultBlockExceptionHandler.java
│   │       │                                   │   ├── RequestOriginParser.java
│   │       │                                   │   └── UrlCleaner.java
│   │       │                                   └── config/
│   │       │                                       ├── BaseWebMvcConfig.java
│   │       │                                       ├── SentinelWebMvcConfig.java
│   │       │                                       └── SentinelWebMvcTotalConfig.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── adapter/
│   │                                   └── spring/
│   │                                       └── webmvc/
│   │                                           ├── ResultWrapper.java
│   │                                           ├── SentinelSpringMvcIntegrationTest.java
│   │                                           ├── SentinelWebInterceptorTest.java
│   │                                           ├── TestApplication.java
│   │                                           ├── config/
│   │                                           │   ├── InterceptorConfig.java
│   │                                           │   └── SentinelSpringMvcBlockHandlerConfig.java
│   │                                           ├── controller/
│   │                                           │   └── TestController.java
│   │                                           └── exception/
│   │                                               └── BizException.java
│   ├── sentinel-spring-webmvc-v6x-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── adapter/
│   │       │                           └── spring/
│   │       │                               └── webmvc_v6x/
│   │       │                                   ├── AbstractSentinelInterceptor.java
│   │       │                                   ├── SentinelWebInterceptor.java
│   │       │                                   ├── SentinelWebPrefixInterceptor.java
│   │       │                                   ├── SentinelWebTotalInterceptor.java
│   │       │                                   ├── callback/
│   │       │                                   │   ├── BlockExceptionHandler.java
│   │       │                                   │   ├── DefaultBlockExceptionHandler.java
│   │       │                                   │   └── RequestOriginParser.java
│   │       │                                   └── config/
│   │       │                                       ├── BaseWebMvcConfig.java
│   │       │                                       ├── SentinelPreWebMvcConfig.java
│   │       │                                       ├── SentinelWebMvcConfig.java
│   │       │                                       ├── SentinelWebMvcTotalConfig.java
│   │       │                                       └── WebServletLocalConfig.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── adapter/
│   │                                   └── spring/
│   │                                       └── webmvc_v6x/
│   │                                           ├── ResultWrapper.java
│   │                                           ├── SentinelSpringMvcIntegrationTest.java
│   │                                           ├── SentinelWebInterceptorHttpMethodPrefixTest.java
│   │                                           ├── SentinelWebInterceptorTest.java
│   │                                           ├── TestApplication.java
│   │                                           ├── callback/
│   │                                           │   └── DefaultBlockExceptionHandlerTest.java
│   │                                           ├── config/
│   │                                           │   ├── InterceptorConfig.java
│   │                                           │   └── SentinelSpringMvcBlockHandlerConfig.java
│   │                                           └── controller/
│   │                                               └── TestController.java
│   ├── sentinel-web-adapter-common/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── adapter/
│   │                                   └── web/
│   │                                       └── common/
│   │                                           └── UrlCleaner.java
│   ├── sentinel-web-servlet/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── adapter/
│   │       │                           └── servlet/
│   │       │                               ├── CommonFilter.java
│   │       │                               ├── CommonTotalFilter.java
│   │       │                               ├── callback/
│   │       │                               │   ├── DefaultUrlBlockHandler.java
│   │       │                               │   ├── DefaultUrlCleaner.java
│   │       │                               │   ├── RequestOriginParser.java
│   │       │                               │   ├── UrlBlockHandler.java
│   │       │                               │   ├── UrlCleaner.java
│   │       │                               │   └── WebCallbackManager.java
│   │       │                               ├── config/
│   │       │                               │   └── WebServletConfig.java
│   │       │                               └── util/
│   │       │                                   └── FilterUtil.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── adapter/
│   │                                   ├── servlet/
│   │                                   │   ├── CommonFilterTest.java
│   │                                   │   ├── FilterConfig.java
│   │                                   │   ├── TestApplication.java
│   │                                   │   └── TestController.java
│   │                                   ├── servletcontext/
│   │                                   │   ├── CommonFilterContextTest.java
│   │                                   │   ├── FilterContextConfig.java
│   │                                   │   ├── TestContextApplication.java
│   │                                   │   └── TestContextController.java
│   │                                   └── servletmethod/
│   │                                       ├── CommonFilterMethodTest.java
│   │                                       ├── FilterMethodConfig.java
│   │                                       ├── TestApplication.java
│   │                                       └── TestMethodController.java
│   ├── sentinel-zuul-adapter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── adapter/
│   │       │   │                       └── gateway/
│   │       │   │                           └── zuul/
│   │       │   │                               ├── RequestContextItemParser.java
│   │       │   │                               ├── api/
│   │       │   │                               │   ├── ZuulApiDefinitionChangeObserver.java
│   │       │   │                               │   ├── ZuulGatewayApiMatcherManager.java
│   │       │   │                               │   ├── matcher/
│   │       │   │                               │   │   └── RequestContextApiMatcher.java
│   │       │   │                               │   └── route/
│   │       │   │                               │       ├── PrefixRoutePathMatcher.java
│   │       │   │                               │       ├── RegexRoutePathMatcher.java
│   │       │   │                               │       └── ZuulRouteMatchers.java
│   │       │   │                               ├── callback/
│   │       │   │                               │   ├── DefaultRequestOriginParser.java
│   │       │   │                               │   ├── RequestOriginParser.java
│   │       │   │                               │   └── ZuulGatewayCallbackManager.java
│   │       │   │                               ├── constants/
│   │       │   │                               │   └── ZuulConstant.java
│   │       │   │                               ├── fallback/
│   │       │   │                               │   ├── BlockResponse.java
│   │       │   │                               │   ├── DefaultBlockFallbackProvider.java
│   │       │   │                               │   ├── ZuulBlockFallbackManager.java
│   │       │   │                               │   └── ZuulBlockFallbackProvider.java
│   │       │   │                               └── filters/
│   │       │   │                                   ├── EntryHolder.java
│   │       │   │                                   ├── SentinelEntryUtils.java
│   │       │   │                                   ├── SentinelZuulErrorFilter.java
│   │       │   │                                   ├── SentinelZuulPostFilter.java
│   │       │   │                                   └── SentinelZuulPreFilter.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               └── com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinitionChangeObserver
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── adapter/
│   │                                   └── gateway/
│   │                                       └── zuul/
│   │                                           ├── fallback/
│   │                                           │   ├── ZuulBlockFallbackManagerTest.java
│   │                                           │   └── ZuulBlockFallbackProviderTest.java
│   │                                           ├── filters/
│   │                                           │   ├── SentinelZuulErrorFilterTest.java
│   │                                           │   ├── SentinelZuulPostFilterTest.java
│   │                                           │   └── SentinelZuulPreFilterTest.java
│   │                                           └── route/
│   │                                               └── SentinelZuulRouteTest.java
│   └── sentinel-zuul2-adapter/
│       ├── README.md
│       ├── pom.xml
│       └── src/
│           ├── main/
│           │   ├── java/
│           │   │   └── com/
│           │   │       └── alibaba/
│           │   │           └── csp/
│           │   │               └── sentinel/
│           │   │                   └── adapter/
│           │   │                       └── gateway/
│           │   │                           └── zuul2/
│           │   │                               ├── HttpRequestMessageItemParser.java
│           │   │                               ├── api/
│           │   │                               │   ├── ZuulApiDefinitionChangeObserver.java
│           │   │                               │   ├── ZuulGatewayApiMatcherManager.java
│           │   │                               │   ├── matcher/
│           │   │                               │   │   └── HttpRequestMessageApiMatcher.java
│           │   │                               │   └── route/
│           │   │                               │       ├── PrefixRoutePathMatcher.java
│           │   │                               │       ├── RegexRoutePathMatcher.java
│           │   │                               │       └── ZuulRouteMatchers.java
│           │   │                               ├── constants/
│           │   │                               │   └── SentinelZuul2Constants.java
│           │   │                               ├── fallback/
│           │   │                               │   ├── BlockResponse.java
│           │   │                               │   ├── DefaultBlockFallbackProvider.java
│           │   │                               │   ├── ZuulBlockFallbackManager.java
│           │   │                               │   └── ZuulBlockFallbackProvider.java
│           │   │                               └── filters/
│           │   │                                   ├── EntryHolder.java
│           │   │                                   ├── endpoint/
│           │   │                                   │   └── SentinelZuulEndpoint.java
│           │   │                                   ├── inbound/
│           │   │                                   │   └── SentinelZuulInboundFilter.java
│           │   │                                   └── outbound/
│           │   │                                       └── SentinelZuulOutboundFilter.java
│           │   └── resources/
│           │       └── META-INF/
│           │           └── services/
│           │               └── com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinitionChangeObserver
│           └── test/
│               └── java/
│                   └── com/
│                       └── alibaba/
│                           └── csp/
│                               └── sentinel/
│                                   └── adapter/
│                                       └── gateway/
│                                           └── zuul2/
│                                               └── fallback/
│                                                   ├── ZuulBlockFallbackManagerTest.java
│                                                   └── ZuulBlockFallbackProviderTest.java
├── sentinel-benchmark/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── com/
│                   └── alibaba/
│                       └── csp/
│                           └── sentinel/
│                               └── benchmark/
│                                   └── SentinelEntryBenchmark.java
├── sentinel-cluster/
│   ├── README.md
│   ├── pom.xml
│   ├── sentinel-cluster-client-default/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   ├── cluster/
│   │       │   │                   │   └── client/
│   │       │   │                   │       ├── ClientConstants.java
│   │       │   │                   │       ├── DefaultClusterTokenClient.java
│   │       │   │                   │       ├── NettyTransportClient.java
│   │       │   │                   │       ├── codec/
│   │       │   │                   │       │   ├── ClientEntityCodecProvider.java
│   │       │   │                   │       │   ├── DefaultRequestEntityWriter.java
│   │       │   │                   │       │   ├── DefaultResponseEntityDecoder.java
│   │       │   │                   │       │   ├── data/
│   │       │   │                   │       │   │   ├── FlowRequestDataWriter.java
│   │       │   │                   │       │   │   ├── FlowResponseDataDecoder.java
│   │       │   │                   │       │   │   ├── ParamFlowRequestDataWriter.java
│   │       │   │                   │       │   │   ├── PingRequestDataWriter.java
│   │       │   │                   │       │   │   └── PingResponseDataDecoder.java
│   │       │   │                   │       │   ├── netty/
│   │       │   │                   │       │   │   ├── NettyRequestEncoder.java
│   │       │   │                   │       │   │   └── NettyResponseDecoder.java
│   │       │   │                   │       │   └── registry/
│   │       │   │                   │       │       ├── RequestDataWriterRegistry.java
│   │       │   │                   │       │       └── ResponseDataDecodeRegistry.java
│   │       │   │                   │       ├── config/
│   │       │   │                   │       │   ├── ClusterClientAssignConfig.java
│   │       │   │                   │       │   ├── ClusterClientConfig.java
│   │       │   │                   │       │   ├── ClusterClientConfigManager.java
│   │       │   │                   │       │   ├── ClusterClientStartUpConfig.java
│   │       │   │                   │       │   └── ServerChangeObserver.java
│   │       │   │                   │       ├── handler/
│   │       │   │                   │       │   ├── TokenClientHandler.java
│   │       │   │                   │       │   └── TokenClientPromiseHolder.java
│   │       │   │                   │       └── init/
│   │       │   │                   │           └── DefaultClusterClientInitFunc.java
│   │       │   │                   └── command/
│   │       │   │                       ├── entity/
│   │       │   │                       │   └── ClusterClientStateEntity.java
│   │       │   │                       └── handler/
│   │       │   │                           ├── FetchClusterClientConfigHandler.java
│   │       │   │                           └── ModifyClusterClientConfigHandler.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               ├── com.alibaba.csp.sentinel.cluster.client.ClusterTokenClient
│   │       │               ├── com.alibaba.csp.sentinel.cluster.codec.request.RequestEntityWriter
│   │       │               ├── com.alibaba.csp.sentinel.cluster.codec.response.ResponseEntityDecoder
│   │       │               ├── com.alibaba.csp.sentinel.command.CommandHandler
│   │       │               └── com.alibaba.csp.sentinel.init.InitFunc
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── cluster/
│   │                                   └── client/
│   │                                       └── codec/
│   │                                           └── data/
│   │                                               ├── FlowResponseDataDecoderTest.java
│   │                                               ├── ParamFlowRequestDataWriterTest.java
│   │                                               └── PingResponseDataDecoderTest.java
│   ├── sentinel-cluster-common-default/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── cluster/
│   │                                   ├── ClusterConstants.java
│   │                                   ├── ClusterErrorMessages.java
│   │                                   ├── ClusterTransportClient.java
│   │                                   ├── annotation/
│   │                                   │   └── RequestType.java
│   │                                   ├── codec/
│   │                                   │   ├── EntityDecoder.java
│   │                                   │   ├── EntityWriter.java
│   │                                   │   ├── request/
│   │                                   │   │   ├── RequestEntityDecoder.java
│   │                                   │   │   └── RequestEntityWriter.java
│   │                                   │   └── response/
│   │                                   │       ├── ResponseEntityDecoder.java
│   │                                   │       └── ResponseEntityWriter.java
│   │                                   ├── exception/
│   │                                   │   └── SentinelClusterException.java
│   │                                   ├── registry/
│   │                                   │   └── ConfigSupplierRegistry.java
│   │                                   ├── request/
│   │                                   │   ├── ClusterRequest.java
│   │                                   │   ├── Request.java
│   │                                   │   └── data/
│   │                                   │       ├── FlowRequestData.java
│   │                                   │       └── ParamFlowRequestData.java
│   │                                   └── response/
│   │                                       ├── ClusterResponse.java
│   │                                       ├── Response.java
│   │                                       └── data/
│   │                                           └── FlowTokenResponseData.java
│   ├── sentinel-cluster-server-default/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── cluster/
│   │       │   │                       ├── flow/
│   │       │   │                       │   ├── ClusterFlowChecker.java
│   │       │   │                       │   ├── ClusterParamFlowChecker.java
│   │       │   │                       │   ├── ConcurrentClusterFlowChecker.java
│   │       │   │                       │   ├── DefaultTokenService.java
│   │       │   │                       │   ├── rule/
│   │       │   │                       │   │   ├── ClusterFlowRuleManager.java
│   │       │   │                       │   │   ├── ClusterParamFlowRuleManager.java
│   │       │   │                       │   │   └── NamespaceFlowProperty.java
│   │       │   │                       │   └── statistic/
│   │       │   │                       │       ├── ClusterMetricNode.java
│   │       │   │                       │       ├── ClusterMetricNodeGenerator.java
│   │       │   │                       │       ├── ClusterMetricStatistics.java
│   │       │   │                       │       ├── ClusterParamMetricStatistics.java
│   │       │   │                       │       ├── concurrent/
│   │       │   │                       │       │   ├── ClusterConcurrentCheckerLogListener.java
│   │       │   │                       │       │   ├── CurrentConcurrencyManager.java
│   │       │   │                       │       │   ├── TokenCacheNode.java
│   │       │   │                       │       │   ├── TokenCacheNodeManager.java
│   │       │   │                       │       │   └── expire/
│   │       │   │                       │       │       ├── ExpireStrategy.java
│   │       │   │                       │       │       └── RegularExpireStrategy.java
│   │       │   │                       │       ├── data/
│   │       │   │                       │       │   ├── ClusterFlowEvent.java
│   │       │   │                       │       │   └── ClusterMetricBucket.java
│   │       │   │                       │       ├── limit/
│   │       │   │                       │       │   ├── GlobalRequestLimiter.java
│   │       │   │                       │       │   └── RequestLimiter.java
│   │       │   │                       │       └── metric/
│   │       │   │                       │           ├── ClusterMetric.java
│   │       │   │                       │           ├── ClusterMetricLeapArray.java
│   │       │   │                       │           ├── ClusterParamMetric.java
│   │       │   │                       │           └── ClusterParameterLeapArray.java
│   │       │   │                       └── server/
│   │       │   │                           ├── DefaultEmbeddedTokenServer.java
│   │       │   │                           ├── NettyTransportServer.java
│   │       │   │                           ├── SentinelDefaultTokenServer.java
│   │       │   │                           ├── ServerConstants.java
│   │       │   │                           ├── TokenServiceProvider.java
│   │       │   │                           ├── codec/
│   │       │   │                           │   ├── DefaultRequestEntityDecoder.java
│   │       │   │                           │   ├── DefaultResponseEntityWriter.java
│   │       │   │                           │   ├── ServerEntityCodecProvider.java
│   │       │   │                           │   ├── data/
│   │       │   │                           │   │   ├── FlowRequestDataDecoder.java
│   │       │   │                           │   │   ├── FlowResponseDataWriter.java
│   │       │   │                           │   │   ├── ParamFlowRequestDataDecoder.java
│   │       │   │                           │   │   ├── PingRequestDataDecoder.java
│   │       │   │                           │   │   └── PingResponseDataWriter.java
│   │       │   │                           │   ├── netty/
│   │       │   │                           │   │   ├── NettyRequestDecoder.java
│   │       │   │                           │   │   └── NettyResponseEncoder.java
│   │       │   │                           │   └── registry/
│   │       │   │                           │       ├── RequestDataDecodeRegistry.java
│   │       │   │                           │       └── ResponseDataWriterRegistry.java
│   │       │   │                           ├── command/
│   │       │   │                           │   └── handler/
│   │       │   │                           │       ├── FetchClusterFlowRulesCommandHandler.java
│   │       │   │                           │       ├── FetchClusterMetricCommandHandler.java
│   │       │   │                           │       ├── FetchClusterParamFlowRulesCommandHandler.java
│   │       │   │                           │       ├── FetchClusterServerConfigHandler.java
│   │       │   │                           │       ├── FetchClusterServerInfoCommandHandler.java
│   │       │   │                           │       ├── ModifyClusterFlowRulesCommandHandler.java
│   │       │   │                           │       ├── ModifyClusterParamFlowRulesCommandHandler.java
│   │       │   │                           │       ├── ModifyClusterServerFlowConfigHandler.java
│   │       │   │                           │       ├── ModifyClusterServerTransportConfigHandler.java
│   │       │   │                           │       └── ModifyServerNamespaceSetHandler.java
│   │       │   │                           ├── config/
│   │       │   │                           │   ├── ClusterServerConfigManager.java
│   │       │   │                           │   ├── ServerFlowConfig.java
│   │       │   │                           │   ├── ServerTransportConfig.java
│   │       │   │                           │   └── ServerTransportConfigObserver.java
│   │       │   │                           ├── connection/
│   │       │   │                           │   ├── Connection.java
│   │       │   │                           │   ├── ConnectionDescriptor.java
│   │       │   │                           │   ├── ConnectionGroup.java
│   │       │   │                           │   ├── ConnectionManager.java
│   │       │   │                           │   ├── ConnectionPool.java
│   │       │   │                           │   ├── NettyConnection.java
│   │       │   │                           │   └── ScanIdleConnectionTask.java
│   │       │   │                           ├── handler/
│   │       │   │                           │   └── TokenServerHandler.java
│   │       │   │                           ├── init/
│   │       │   │                           │   └── DefaultClusterServerInitFunc.java
│   │       │   │                           ├── log/
│   │       │   │                           │   └── ClusterServerStatLogUtil.java
│   │       │   │                           ├── processor/
│   │       │   │                           │   ├── FlowRequestProcessor.java
│   │       │   │                           │   ├── ParamFlowRequestProcessor.java
│   │       │   │                           │   ├── RequestProcessor.java
│   │       │   │                           │   └── RequestProcessorProvider.java
│   │       │   │                           └── util/
│   │       │   │                               └── ClusterRuleUtil.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               ├── com.alibaba.csp.sentinel.cluster.TokenService
│   │       │               ├── com.alibaba.csp.sentinel.cluster.codec.request.RequestEntityDecoder
│   │       │               ├── com.alibaba.csp.sentinel.cluster.codec.response.ResponseEntityWriter
│   │       │               ├── com.alibaba.csp.sentinel.cluster.server.EmbeddedClusterTokenServer
│   │       │               ├── com.alibaba.csp.sentinel.cluster.server.processor.RequestProcessor
│   │       │               ├── com.alibaba.csp.sentinel.command.CommandHandler
│   │       │               └── com.alibaba.csp.sentinel.init.InitFunc
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── cluster/
│   │                                   ├── AbstractTimeBasedTest.java
│   │                                   ├── ClusterFlowTestUtil.java
│   │                                   ├── flow/
│   │                                   │   ├── ClusterFlowCheckerTest.java
│   │                                   │   ├── ConcurrentClusterFlowCheckerTest.java
│   │                                   │   └── statistic/
│   │                                   │       ├── concurrent/
│   │                                   │       │   ├── CurrentConcurrencyManagerTest.java
│   │                                   │       │   └── TokenCacheNodeManagerTest.java
│   │                                   │       ├── limit/
│   │                                   │       │   ├── GlobalRequestLimiterTest.java
│   │                                   │       │   └── RequestLimiterTest.java
│   │                                   │       └── metric/
│   │                                   │           ├── ClusterMetricTest.java
│   │                                   │           └── ClusterParamMetricTest.java
│   │                                   └── server/
│   │                                       ├── AbstractTimeBasedTest.java
│   │                                       ├── codec/
│   │                                       │   └── data/
│   │                                       │       └── PingResponseDataWriterTest.java
│   │                                       ├── config/
│   │                                       │   └── ClusterServerConfigManagerTest.java
│   │                                       └── connection/
│   │                                           ├── ConnectionGroupTest.java
│   │                                           └── ConnectionManagerTest.java
│   └── sentinel-cluster-server-envoy-rls/
│       ├── Dockerfile
│       ├── README.md
│       ├── pom.xml
│       ├── sample/
│       │   └── k8s/
│       │       ├── README.md
│       │       ├── envoy-legacy-v2-api.yml
│       │       ├── envoy-v3-api.yml
│       │       └── sentinel-rls.yml
│       └── src/
│           ├── main/
│           │   ├── java/
│           │   │   └── com/
│           │   │       └── alibaba/
│           │   │           └── csp/
│           │   │               └── sentinel/
│           │   │                   └── cluster/
│           │   │                       └── server/
│           │   │                           └── envoy/
│           │   │                               └── rls/
│           │   │                                   ├── SentinelEnvoyRlsConstants.java
│           │   │                                   ├── SentinelEnvoyRlsServer.java
│           │   │                                   ├── SentinelEnvoyRlsServiceImpl.java
│           │   │                                   ├── SentinelRlsGrpcServer.java
│           │   │                                   ├── datasource/
│           │   │                                   │   └── EnvoyRlsRuleDataSourceService.java
│           │   │                                   ├── flow/
│           │   │                                   │   └── SimpleClusterFlowChecker.java
│           │   │                                   ├── log/
│           │   │                                   │   └── RlsAccessLogger.java
│           │   │                                   ├── rule/
│           │   │                                   │   ├── EnvoyRlsRule.java
│           │   │                                   │   ├── EnvoyRlsRuleManager.java
│           │   │                                   │   └── EnvoySentinelRuleConverter.java
│           │   │                                   └── service/
│           │   │                                       └── v3/
│           │   │                                           └── SentinelEnvoyRlsServiceImpl.java
│           │   └── proto/
│           │       ├── envoy/
│           │       │   ├── api/
│           │       │   │   └── v2/
│           │       │   │       ├── core/
│           │       │   │       │   └── base.proto
│           │       │   │       └── ratelimit/
│           │       │   │           └── ratelimit.proto
│           │       │   ├── config/
│           │       │   │   └── core/
│           │       │   │       └── v3/
│           │       │   │           └── base.proto
│           │       │   ├── extensions/
│           │       │   │   └── common/
│           │       │   │       └── ratelimit/
│           │       │   │           └── v3/
│           │       │   │               └── ratelimit.proto
│           │       │   ├── service/
│           │       │   │   └── ratelimit/
│           │       │   │       ├── v2/
│           │       │   │       │   └── rls.proto
│           │       │   │       └── v3/
│           │       │   │           └── rls.proto
│           │       │   └── type/
│           │       │       └── v3/
│           │       │           └── ratelimit_unit.proto
│           │       ├── udpa/
│           │       │   └── annotations/
│           │       │       ├── BUILD
│           │       │       ├── migrate.proto
│           │       │       ├── security.proto
│           │       │       ├── sensitive.proto
│           │       │       ├── status.proto
│           │       │       └── versioning.proto
│           │       └── validate/
│           │           └── validate.proto
│           └── test/
│               └── java/
│                   └── com/
│                       └── alibaba/
│                           └── csp/
│                               └── sentinel/
│                                   └── cluster/
│                                       └── server/
│                                           └── envoy/
│                                               └── rls/
│                                                   ├── SentinelEnvoyRlsServiceImplTest.java
│                                                   ├── rule/
│                                                   │   └── EnvoySentinelRuleConverterTest.java
│                                                   └── service/
│                                                       └── v3/
│                                                           └── SentinelEnvoyRlsServiceImplTest.java
├── sentinel-core/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── alibaba/
│       │   │           └── csp/
│       │   │               └── sentinel/
│       │   │                   ├── AsyncEntry.java
│       │   │                   ├── Constants.java
│       │   │                   ├── CtEntry.java
│       │   │                   ├── CtSph.java
│       │   │                   ├── Entry.java
│       │   │                   ├── EntryType.java
│       │   │                   ├── Env.java
│       │   │                   ├── ErrorEntryFreeException.java
│       │   │                   ├── ResourceTypeConstants.java
│       │   │                   ├── Sph.java
│       │   │                   ├── SphO.java
│       │   │                   ├── SphResourceTypeSupport.java
│       │   │                   ├── SphU.java
│       │   │                   ├── Tracer.java
│       │   │                   ├── annotation/
│       │   │                   │   └── SentinelResource.java
│       │   │                   ├── cluster/
│       │   │                   │   ├── ClusterStateManager.java
│       │   │                   │   ├── TokenResult.java
│       │   │                   │   ├── TokenResultStatus.java
│       │   │                   │   ├── TokenServerDescriptor.java
│       │   │                   │   ├── TokenService.java
│       │   │                   │   ├── client/
│       │   │                   │   │   ├── ClusterTokenClient.java
│       │   │                   │   │   └── TokenClientProvider.java
│       │   │                   │   ├── log/
│       │   │                   │   │   ├── ClusterClientStatLogUtil.java
│       │   │                   │   │   └── ClusterStatLogUtil.java
│       │   │                   │   └── server/
│       │   │                   │       ├── ClusterTokenServer.java
│       │   │                   │       ├── EmbeddedClusterTokenServer.java
│       │   │                   │       └── EmbeddedClusterTokenServerProvider.java
│       │   │                   ├── concurrent/
│       │   │                   │   └── NamedThreadFactory.java
│       │   │                   ├── config/
│       │   │                   │   ├── SentinelConfig.java
│       │   │                   │   └── SentinelConfigLoader.java
│       │   │                   ├── context/
│       │   │                   │   ├── Context.java
│       │   │                   │   ├── ContextNameDefineException.java
│       │   │                   │   ├── ContextUtil.java
│       │   │                   │   └── NullContext.java
│       │   │                   ├── eagleeye/
│       │   │                   │   ├── BaseLoggerBuilder.java
│       │   │                   │   ├── EagleEye.java
│       │   │                   │   ├── EagleEyeAppender.java
│       │   │                   │   ├── EagleEyeCoreUtils.java
│       │   │                   │   ├── EagleEyeLogDaemon.java
│       │   │                   │   ├── EagleEyeRollingFileAppender.java
│       │   │                   │   ├── FastDateFormat.java
│       │   │                   │   ├── StatEntry.java
│       │   │                   │   ├── StatEntryFunc.java
│       │   │                   │   ├── StatLogController.java
│       │   │                   │   ├── StatLogger.java
│       │   │                   │   ├── StatLoggerBuilder.java
│       │   │                   │   ├── StatRollingData.java
│       │   │                   │   ├── SyncAppender.java
│       │   │                   │   └── TokenBucket.java
│       │   │                   ├── init/
│       │   │                   │   ├── InitExecutor.java
│       │   │                   │   ├── InitFunc.java
│       │   │                   │   └── InitOrder.java
│       │   │                   ├── log/
│       │   │                   │   ├── LogBase.java
│       │   │                   │   ├── LogConfigLoader.java
│       │   │                   │   ├── LogTarget.java
│       │   │                   │   ├── Logger.java
│       │   │                   │   ├── LoggerSpiProvider.java
│       │   │                   │   ├── RecordLog.java
│       │   │                   │   └── jul/
│       │   │                   │       ├── BaseJulLogger.java
│       │   │                   │       ├── ConsoleHandler.java
│       │   │                   │       ├── CspFormatter.java
│       │   │                   │       ├── DateFileLogHandler.java
│       │   │                   │       ├── FormattingTuple.java
│       │   │                   │       ├── JavaLoggingAdapter.java
│       │   │                   │       ├── Level.java
│       │   │                   │       └── MessageFormatter.java
│       │   │                   ├── metric/
│       │   │                   │   └── extension/
│       │   │                   │       ├── AdvancedMetricExtension.java
│       │   │                   │       ├── MetricCallbackInit.java
│       │   │                   │       ├── MetricExtension.java
│       │   │                   │       ├── MetricExtensionProvider.java
│       │   │                   │       └── callback/
│       │   │                   │           ├── MetricEntryCallback.java
│       │   │                   │           └── MetricExitCallback.java
│       │   │                   ├── node/
│       │   │                   │   ├── ClusterNode.java
│       │   │                   │   ├── DefaultNode.java
│       │   │                   │   ├── EntranceNode.java
│       │   │                   │   ├── IntervalProperty.java
│       │   │                   │   ├── Node.java
│       │   │                   │   ├── NodeBuilder.java
│       │   │                   │   ├── OccupySupport.java
│       │   │                   │   ├── OccupyTimeoutProperty.java
│       │   │                   │   ├── SampleCountProperty.java
│       │   │                   │   ├── StatisticNode.java
│       │   │                   │   └── metric/
│       │   │                   │       ├── MetricNode.java
│       │   │                   │       ├── MetricSearcher.java
│       │   │                   │       ├── MetricTimerListener.java
│       │   │                   │       ├── MetricWriter.java
│       │   │                   │       └── MetricsReader.java
│       │   │                   ├── property/
│       │   │                   │   ├── DynamicSentinelProperty.java
│       │   │                   │   ├── NoOpSentinelProperty.java
│       │   │                   │   ├── PropertyListener.java
│       │   │                   │   ├── SentinelProperty.java
│       │   │                   │   └── SimplePropertyListener.java
│       │   │                   ├── slotchain/
│       │   │                   │   ├── AbstractLinkedProcessorSlot.java
│       │   │                   │   ├── DefaultProcessorSlotChain.java
│       │   │                   │   ├── MethodResourceWrapper.java
│       │   │                   │   ├── ProcessorSlot.java
│       │   │                   │   ├── ProcessorSlotChain.java
│       │   │                   │   ├── ProcessorSlotEntryCallback.java
│       │   │                   │   ├── ProcessorSlotExitCallback.java
│       │   │                   │   ├── ResourceWrapper.java
│       │   │                   │   ├── SlotChainBuilder.java
│       │   │                   │   ├── SlotChainProvider.java
│       │   │                   │   └── StringResourceWrapper.java
│       │   │                   ├── slots/
│       │   │                   │   ├── DefaultSlotChainBuilder.java
│       │   │                   │   ├── block/
│       │   │                   │   │   ├── AbstractRule.java
│       │   │                   │   │   ├── BlockException.java
│       │   │                   │   │   ├── ClusterRuleConstant.java
│       │   │                   │   │   ├── Rule.java
│       │   │                   │   │   ├── RuleConstant.java
│       │   │                   │   │   ├── RuleManager.java
│       │   │                   │   │   ├── SentinelRpcException.java
│       │   │                   │   │   ├── authority/
│       │   │                   │   │   │   ├── AuthorityException.java
│       │   │                   │   │   │   ├── AuthorityRule.java
│       │   │                   │   │   │   ├── AuthorityRuleChecker.java
│       │   │                   │   │   │   ├── AuthorityRuleManager.java
│       │   │                   │   │   │   └── AuthoritySlot.java
│       │   │                   │   │   ├── degrade/
│       │   │                   │   │   │   ├── DefaultCircuitBreakerRuleManager.java
│       │   │                   │   │   │   ├── DefaultCircuitBreakerSlot.java
│       │   │                   │   │   │   ├── DegradeException.java
│       │   │                   │   │   │   ├── DegradeRule.java
│       │   │                   │   │   │   ├── DegradeRuleManager.java
│       │   │                   │   │   │   ├── DegradeSlot.java
│       │   │                   │   │   │   └── circuitbreaker/
│       │   │                   │   │   │       ├── AbstractCircuitBreaker.java
│       │   │                   │   │   │       ├── CircuitBreaker.java
│       │   │                   │   │   │       ├── CircuitBreakerStateChangeObserver.java
│       │   │                   │   │   │       ├── CircuitBreakerStrategy.java
│       │   │                   │   │   │       ├── EventObserverRegistry.java
│       │   │                   │   │   │       ├── ExceptionCircuitBreaker.java
│       │   │                   │   │   │       └── ResponseTimeCircuitBreaker.java
│       │   │                   │   │   └── flow/
│       │   │                   │   │       ├── ClusterFlowConfig.java
│       │   │                   │   │       ├── ColdFactorProperty.java
│       │   │                   │   │       ├── FlowException.java
│       │   │                   │   │       ├── FlowRule.java
│       │   │                   │   │       ├── FlowRuleChecker.java
│       │   │                   │   │       ├── FlowRuleComparator.java
│       │   │                   │   │       ├── FlowRuleManager.java
│       │   │                   │   │       ├── FlowRuleUtil.java
│       │   │                   │   │       ├── FlowSlot.java
│       │   │                   │   │       ├── PriorityWaitException.java
│       │   │                   │   │       ├── TrafficShapingController.java
│       │   │                   │   │       ├── controller/
│       │   │                   │   │       │   ├── DefaultController.java
│       │   │                   │   │       │   ├── ThrottlingController.java
│       │   │                   │   │       │   ├── WarmUpController.java
│       │   │                   │   │       │   └── WarmUpRateLimiterController.java
│       │   │                   │   │       └── tokenbucket/
│       │   │                   │   │           ├── AbstractTokenBucket.java
│       │   │                   │   │           ├── DefaultTokenBucket.java
│       │   │                   │   │           ├── StrictTokenBucket.java
│       │   │                   │   │           └── TokenBucket.java
│       │   │                   │   ├── clusterbuilder/
│       │   │                   │   │   └── ClusterBuilderSlot.java
│       │   │                   │   ├── logger/
│       │   │                   │   │   ├── EagleEyeLogUtil.java
│       │   │                   │   │   └── LogSlot.java
│       │   │                   │   ├── nodeselector/
│       │   │                   │   │   └── NodeSelectorSlot.java
│       │   │                   │   ├── statistic/
│       │   │                   │   │   ├── MetricEvent.java
│       │   │                   │   │   ├── StatisticSlot.java
│       │   │                   │   │   ├── StatisticSlotCallbackRegistry.java
│       │   │                   │   │   ├── base/
│       │   │                   │   │   │   ├── LeapArray.java
│       │   │                   │   │   │   ├── UnaryLeapArray.java
│       │   │                   │   │   │   └── WindowWrap.java
│       │   │                   │   │   ├── data/
│       │   │                   │   │   │   └── MetricBucket.java
│       │   │                   │   │   └── metric/
│       │   │                   │   │       ├── ArrayMetric.java
│       │   │                   │   │       ├── BucketLeapArray.java
│       │   │                   │   │       ├── DebugSupport.java
│       │   │                   │   │       ├── Metric.java
│       │   │                   │   │       └── occupy/
│       │   │                   │   │           ├── FutureBucketLeapArray.java
│       │   │                   │   │           └── OccupiableBucketLeapArray.java
│       │   │                   │   └── system/
│       │   │                   │       ├── SystemBlockException.java
│       │   │                   │       ├── SystemRule.java
│       │   │                   │       ├── SystemRuleManager.java
│       │   │                   │       ├── SystemSlot.java
│       │   │                   │       └── SystemStatusListener.java
│       │   │                   ├── spi/
│       │   │                   │   ├── Spi.java
│       │   │                   │   ├── SpiLoader.java
│       │   │                   │   └── SpiLoaderException.java
│       │   │                   └── util/
│       │   │                       ├── AppNameUtil.java
│       │   │                       ├── AssertUtil.java
│       │   │                       ├── ConfigUtil.java
│       │   │                       ├── HostNameUtil.java
│       │   │                       ├── IdUtil.java
│       │   │                       ├── MethodUtil.java
│       │   │                       ├── PidUtil.java
│       │   │                       ├── StringUtil.java
│       │   │                       ├── TimeUtil.java
│       │   │                       ├── VersionUtil.java
│       │   │                       └── function/
│       │   │                           ├── BiConsumer.java
│       │   │                           ├── Consumer.java
│       │   │                           ├── Function.java
│       │   │                           ├── Predicate.java
│       │   │                           ├── Supplier.java
│       │   │                           └── Tuple2.java
│       │   └── resources/
│       │       └── META-INF/
│       │           └── services/
│       │               ├── com.alibaba.csp.sentinel.init.InitFunc
│       │               ├── com.alibaba.csp.sentinel.slotchain.ProcessorSlot
│       │               └── com.alibaba.csp.sentinel.slotchain.SlotChainBuilder
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── alibaba/
│           │           └── csp/
│           │               └── sentinel/
│           │                   ├── AsyncEntryIntegrationTest.java
│           │                   ├── AsyncEntryTest.java
│           │                   ├── ConfigPropertyHelper.java
│           │                   ├── CtEntryTest.java
│           │                   ├── CtSphTest.java
│           │                   ├── EntryTest.java
│           │                   ├── RecordLogTest.java
│           │                   ├── SphOTest.java
│           │                   ├── SphUTest.java
│           │                   ├── TracerTest.java
│           │                   ├── config/
│           │                   │   └── SentinelConfigTest.java
│           │                   ├── context/
│           │                   │   ├── ContextTest.java
│           │                   │   └── ContextTestUtil.java
│           │                   ├── eagleeye/
│           │                   │   ├── EagleEyeCoreUtilsTest.java
│           │                   │   └── TokenBucketTest.java
│           │                   ├── log/
│           │                   │   ├── LogBaseTest.java
│           │                   │   └── jul/
│           │                   │       └── ConsoleHandlerTest.java
│           │                   ├── metric/
│           │                   │   └── extension/
│           │                   │       └── callback/
│           │                   │           ├── FakeAdvancedMetricExtension.java
│           │                   │           ├── FakeMetricExtension.java
│           │                   │           ├── MetricEntryCallbackTest.java
│           │                   │           └── MetricExitCallbackTest.java
│           │                   ├── node/
│           │                   │   ├── ClusterNodeTest.java
│           │                   │   ├── StatisticNodeTest.java
│           │                   │   └── metric/
│           │                   │       ├── MetricNodeTest.java
│           │                   │       └── MetricWriterTest.java
│           │                   ├── slots/
│           │                   │   ├── DefaultSlotChainBuilderTest.java
│           │                   │   ├── block/
│           │                   │   │   ├── RuleManagerTest.java
│           │                   │   │   ├── authority/
│           │                   │   │   │   ├── AuthorityPartialIntegrationTest.java
│           │                   │   │   │   ├── AuthorityRuleCheckerTest.java
│           │                   │   │   │   ├── AuthorityRuleManagerTest.java
│           │                   │   │   │   └── AuthoritySlotTest.java
│           │                   │   │   ├── degrade/
│           │                   │   │   │   ├── CircuitBreakingIntegrationTest.java
│           │                   │   │   │   ├── DefaultCircuitBreakerRuleManagerTest.java
│           │                   │   │   │   ├── DefaultCircuitBreakerSlotTest.java
│           │                   │   │   │   ├── DegradePartialIntegrationTest.java
│           │                   │   │   │   ├── DegradeRuleManagerTest.java
│           │                   │   │   │   ├── DegradeRuleTest.java
│           │                   │   │   │   └── circuitbreaker/
│           │                   │   │   │       ├── ExceptionCircuitBreakerTest.java
│           │                   │   │   │       └── ResponseTimeCircuitBreakerTest.java
│           │                   │   │   ├── flow/
│           │                   │   │   │   ├── FlowPartialIntegrationTest.java
│           │                   │   │   │   ├── FlowRuleCheckerTest.java
│           │                   │   │   │   ├── FlowRuleComparatorTest.java
│           │                   │   │   │   ├── FlowRuleManagerTest.java
│           │                   │   │   │   ├── FlowSlotTest.java
│           │                   │   │   │   ├── controller/
│           │                   │   │   │   │   ├── DefaultControllerTest.java
│           │                   │   │   │   │   ├── ThrottlingControllerTest.java
│           │                   │   │   │   │   ├── WarmUpControllerTest.java
│           │                   │   │   │   │   └── WarmUpRateLimiterControllerTest.java
│           │                   │   │   │   └── tokenbucket/
│           │                   │   │   │       └── TokenBucketTest.java
│           │                   │   │   └── system/
│           │                   │   │       ├── SystemGuardIntegrationTest.java
│           │                   │   │       └── SystemRuleTest.java
│           │                   │   ├── clusterbuilder/
│           │                   │   │   └── ClusterNodeBuilderTest.java
│           │                   │   ├── logger/
│           │                   │   │   └── EagleEyeLogUtilTest.java
│           │                   │   ├── nodeselector/
│           │                   │   │   └── NodeSelectorTest.java
│           │                   │   ├── statistic/
│           │                   │   │   ├── base/
│           │                   │   │   │   └── LeapArrayTest.java
│           │                   │   │   └── metric/
│           │                   │   │       ├── ArrayMetricTest.java
│           │                   │   │       ├── BucketLeapArrayTest.java
│           │                   │   │       ├── FutureBucketLeapArrayTest.java
│           │                   │   │       └── OccupiableBucketLeapArrayTest.java
│           │                   │   └── system/
│           │                   │       └── SystemRuleManagerTest.java
│           │                   ├── spi/
│           │                   │   ├── SpiLoaderTest.java
│           │                   │   ├── TestFiveProvider.java
│           │                   │   ├── TestFourProvider.java
│           │                   │   ├── TestInterface.java
│           │                   │   ├── TestNoProviderInterface.java
│           │                   │   ├── TestNoSpiFileInterface.java
│           │                   │   ├── TestOneProvider.java
│           │                   │   ├── TestThreeProvider.java
│           │                   │   └── TestTwoProvider.java
│           │                   ├── test/
│           │                   │   └── AbstractTimeBasedTest.java
│           │                   └── util/
│           │                       ├── ConfigUtilTest.java
│           │                       ├── IdUtilTest.java
│           │                       ├── MethodUtilTest.java
│           │                       ├── StringUtilTest.java
│           │                       ├── TimeUtilTest.java
│           │                       ├── VersionUtilTest.java
│           │                       └── function/
│           │                           └── Tuple2Test.java
│           └── resources/
│               └── META-INF/
│                   └── services/
│                       ├── com.alibaba.csp.sentinel.spi.TestInterface
│                       └── com.alibaba.csp.sentinel.spi.TestNoProviderInterface
├── sentinel-dashboard/
│   ├── Dockerfile
│   ├── README.md
│   ├── Sentinel_Dashboard_Feature.md
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── alibaba/
│       │   │           └── csp/
│       │   │               └── sentinel/
│       │   │                   └── dashboard/
│       │   │                       ├── DashboardApplication.java
│       │   │                       ├── auth/
│       │   │                       │   ├── AuthAction.java
│       │   │                       │   ├── AuthService.java
│       │   │                       │   ├── AuthorizationInterceptor.java
│       │   │                       │   ├── DefaultAuthorizationInterceptor.java
│       │   │                       │   ├── DefaultLoginAuthenticationFilter.java
│       │   │                       │   ├── FakeAuthServiceImpl.java
│       │   │                       │   ├── LoginAuthenticationFilter.java
│       │   │                       │   └── SimpleWebAuthServiceImpl.java
│       │   │                       ├── client/
│       │   │                       │   ├── CommandFailedException.java
│       │   │                       │   ├── CommandNotFoundException.java
│       │   │                       │   └── SentinelApiClient.java
│       │   │                       ├── config/
│       │   │                       │   ├── AuthConfiguration.java
│       │   │                       │   ├── AuthProperties.java
│       │   │                       │   ├── DashboardConfig.java
│       │   │                       │   └── WebConfig.java
│       │   │                       ├── controller/
│       │   │                       │   ├── AppController.java
│       │   │                       │   ├── AuthController.java
│       │   │                       │   ├── AuthorityRuleController.java
│       │   │                       │   ├── DegradeController.java
│       │   │                       │   ├── DemoController.java
│       │   │                       │   ├── FlowControllerV1.java
│       │   │                       │   ├── MachineRegistryController.java
│       │   │                       │   ├── MetricController.java
│       │   │                       │   ├── ParamFlowRuleController.java
│       │   │                       │   ├── ResourceController.java
│       │   │                       │   ├── SystemController.java
│       │   │                       │   ├── VersionController.java
│       │   │                       │   ├── cluster/
│       │   │                       │   │   ├── ClusterAssignController.java
│       │   │                       │   │   └── ClusterConfigController.java
│       │   │                       │   ├── gateway/
│       │   │                       │   │   ├── GatewayApiController.java
│       │   │                       │   │   └── GatewayFlowRuleController.java
│       │   │                       │   └── v2/
│       │   │                       │       └── FlowControllerV2.java
│       │   │                       ├── datasource/
│       │   │                       │   └── entity/
│       │   │                       │       ├── ApplicationEntity.java
│       │   │                       │       ├── MachineEntity.java
│       │   │                       │       ├── MetricEntity.java
│       │   │                       │       ├── MetricPositionEntity.java
│       │   │                       │       ├── SentinelVersion.java
│       │   │                       │       ├── gateway/
│       │   │                       │       │   ├── ApiDefinitionEntity.java
│       │   │                       │       │   ├── ApiPredicateItemEntity.java
│       │   │                       │       │   ├── GatewayFlowRuleEntity.java
│       │   │                       │       │   └── GatewayParamFlowItemEntity.java
│       │   │                       │       └── rule/
│       │   │                       │           ├── AbstractRuleEntity.java
│       │   │                       │           ├── AuthorityRuleEntity.java
│       │   │                       │           ├── DegradeRuleEntity.java
│       │   │                       │           ├── FlowRuleEntity.java
│       │   │                       │           ├── ParamFlowRuleEntity.java
│       │   │                       │           ├── RuleEntity.java
│       │   │                       │           └── SystemRuleEntity.java
│       │   │                       ├── discovery/
│       │   │                       │   ├── AppInfo.java
│       │   │                       │   ├── AppManagement.java
│       │   │                       │   ├── MachineDiscovery.java
│       │   │                       │   ├── MachineInfo.java
│       │   │                       │   └── SimpleMachineDiscovery.java
│       │   │                       ├── domain/
│       │   │                       │   ├── ResourceTreeNode.java
│       │   │                       │   ├── Result.java
│       │   │                       │   ├── cluster/
│       │   │                       │   │   ├── ClusterAppAssignResultVO.java
│       │   │                       │   │   ├── ClusterAppFullAssignRequest.java
│       │   │                       │   │   ├── ClusterAppSingleServerAssignRequest.java
│       │   │                       │   │   ├── ClusterClientInfoVO.java
│       │   │                       │   │   ├── ClusterGroupEntity.java
│       │   │                       │   │   ├── ClusterStateSingleVO.java
│       │   │                       │   │   ├── ConnectionDescriptorVO.java
│       │   │                       │   │   ├── ConnectionGroupVO.java
│       │   │                       │   │   ├── config/
│       │   │                       │   │   │   ├── ClusterClientConfig.java
│       │   │                       │   │   │   ├── ServerFlowConfig.java
│       │   │                       │   │   │   └── ServerTransportConfig.java
│       │   │                       │   │   ├── request/
│       │   │                       │   │   │   ├── ClusterAppAssignMap.java
│       │   │                       │   │   │   ├── ClusterClientModifyRequest.java
│       │   │                       │   │   │   ├── ClusterModifyRequest.java
│       │   │                       │   │   │   └── ClusterServerModifyRequest.java
│       │   │                       │   │   └── state/
│       │   │                       │   │       ├── AppClusterClientStateWrapVO.java
│       │   │                       │   │       ├── AppClusterServerStateWrapVO.java
│       │   │                       │   │       ├── ClusterClientStateVO.java
│       │   │                       │   │       ├── ClusterRequestLimitVO.java
│       │   │                       │   │       ├── ClusterServerStateVO.java
│       │   │                       │   │       ├── ClusterStateSimpleEntity.java
│       │   │                       │   │       ├── ClusterUniversalStatePairVO.java
│       │   │                       │   │       └── ClusterUniversalStateVO.java
│       │   │                       │   └── vo/
│       │   │                       │       ├── MachineInfoVo.java
│       │   │                       │       ├── MetricVo.java
│       │   │                       │       ├── ResourceVo.java
│       │   │                       │       └── gateway/
│       │   │                       │           ├── api/
│       │   │                       │           │   ├── AddApiReqVo.java
│       │   │                       │           │   ├── ApiPredicateItemVo.java
│       │   │                       │           │   └── UpdateApiReqVo.java
│       │   │                       │           └── rule/
│       │   │                       │               ├── AddFlowRuleReqVo.java
│       │   │                       │               ├── GatewayParamFlowItemVo.java
│       │   │                       │               └── UpdateFlowRuleReqVo.java
│       │   │                       ├── metric/
│       │   │                       │   └── MetricFetcher.java
│       │   │                       ├── repository/
│       │   │                       │   ├── gateway/
│       │   │                       │   │   ├── InMemApiDefinitionStore.java
│       │   │                       │   │   └── InMemGatewayFlowRuleStore.java
│       │   │                       │   ├── metric/
│       │   │                       │   │   ├── InMemoryMetricsRepository.java
│       │   │                       │   │   └── MetricsRepository.java
│       │   │                       │   └── rule/
│       │   │                       │       ├── InMemAuthorityRuleStore.java
│       │   │                       │       ├── InMemDegradeRuleStore.java
│       │   │                       │       ├── InMemFlowRuleStore.java
│       │   │                       │       ├── InMemParamFlowRuleStore.java
│       │   │                       │       ├── InMemSystemRuleStore.java
│       │   │                       │       ├── InMemoryRuleRepositoryAdapter.java
│       │   │                       │       └── RuleRepository.java
│       │   │                       ├── rule/
│       │   │                       │   ├── DynamicRuleProvider.java
│       │   │                       │   ├── DynamicRulePublisher.java
│       │   │                       │   ├── FlowRuleApiProvider.java
│       │   │                       │   └── FlowRuleApiPublisher.java
│       │   │                       ├── service/
│       │   │                       │   ├── ClusterAssignService.java
│       │   │                       │   ├── ClusterAssignServiceImpl.java
│       │   │                       │   └── ClusterConfigService.java
│       │   │                       └── util/
│       │   │                           ├── AsyncUtils.java
│       │   │                           ├── ClusterEntityUtils.java
│       │   │                           ├── MachineUtils.java
│       │   │                           └── VersionUtils.java
│       │   ├── resources/
│       │   │   └── application.properties
│       │   └── webapp/
│       │       └── resources/
│       │           ├── .gitignore
│       │           ├── .jshintrc
│       │           ├── README.md
│       │           ├── README_zh.md
│       │           ├── app/
│       │           │   ├── scripts/
│       │           │   │   ├── app.js
│       │           │   │   ├── controllers/
│       │           │   │   │   ├── authority.js
│       │           │   │   │   ├── cluster_app_assign_manage.js
│       │           │   │   │   ├── cluster_app_server_list.js
│       │           │   │   │   ├── cluster_app_server_manage.js
│       │           │   │   │   ├── cluster_app_server_monitor.js
│       │           │   │   │   ├── cluster_app_token_client_list.js
│       │           │   │   │   ├── cluster_single.js
│       │           │   │   │   ├── degrade.js
│       │           │   │   │   ├── flow_v1.js
│       │           │   │   │   ├── flow_v2.js
│       │           │   │   │   ├── gateway/
│       │           │   │   │   │   ├── api.js
│       │           │   │   │   │   ├── flow.js
│       │           │   │   │   │   └── identity.js
│       │           │   │   │   ├── home.js
│       │           │   │   │   ├── identity.js
│       │           │   │   │   ├── login.js
│       │           │   │   │   ├── machine.js
│       │           │   │   │   ├── main.js
│       │           │   │   │   ├── metric.js
│       │           │   │   │   ├── param_flow.js
│       │           │   │   │   └── system.js
│       │           │   │   ├── directives/
│       │           │   │   │   ├── header/
│       │           │   │   │   │   ├── header.html
│       │           │   │   │   │   └── header.js
│       │           │   │   │   └── sidebar/
│       │           │   │   │       ├── sidebar-search/
│       │           │   │   │       │   ├── sidebar-search.html
│       │           │   │   │       │   └── sidebar-search.js
│       │           │   │   │       ├── sidebar.html
│       │           │   │   │       └── sidebar.js
│       │           │   │   ├── filters/
│       │           │   │   │   └── filters.js
│       │           │   │   ├── libs/
│       │           │   │   │   └── treeTable.js
│       │           │   │   └── services/
│       │           │   │       ├── appservice.js
│       │           │   │       ├── auth_service.js
│       │           │   │       ├── authority_service.js
│       │           │   │       ├── cluster_state_service.js
│       │           │   │       ├── degrade_service.js
│       │           │   │       ├── flow_service_v1.js
│       │           │   │       ├── flow_service_v2.js
│       │           │   │       ├── gateway/
│       │           │   │       │   ├── api_service.js
│       │           │   │       │   └── flow_service.js
│       │           │   │       ├── identityservice.js
│       │           │   │       ├── machineservice.js
│       │           │   │       ├── metricservice.js
│       │           │   │       ├── param_flow_service.js
│       │           │   │       ├── systemservice.js
│       │           │   │       └── version_service.js
│       │           │   ├── styles/
│       │           │   │   ├── main.css
│       │           │   │   ├── page.css
│       │           │   │   └── timeline.css
│       │           │   └── views/
│       │           │       ├── authority.html
│       │           │       ├── cluster/
│       │           │       │   ├── client.html
│       │           │       │   └── server.html
│       │           │       ├── cluster_app_assign_manage.html
│       │           │       ├── cluster_app_client_list.html
│       │           │       ├── cluster_app_server_list.html
│       │           │       ├── cluster_app_server_overview.html
│       │           │       ├── cluster_single_config.html
│       │           │       ├── dashboard/
│       │           │       │   ├── home.html
│       │           │       │   └── main.html
│       │           │       ├── degrade.html
│       │           │       ├── dialog/
│       │           │       │   ├── authority-rule-dialog.html
│       │           │       │   ├── cluster/
│       │           │       │   │   ├── cluster-client-config-dialog.html
│       │           │       │   │   ├── cluster-server-assign-dialog.html
│       │           │       │   │   └── cluster-server-connection-detail-dialog.html
│       │           │       │   ├── confirm-dialog.html
│       │           │       │   ├── degrade-rule-dialog.html
│       │           │       │   ├── flow-rule-dialog.html
│       │           │       │   ├── gateway/
│       │           │       │   │   ├── api-dialog.html
│       │           │       │   │   └── flow-rule-dialog.html
│       │           │       │   ├── param-flow-rule-dialog.html
│       │           │       │   └── system-rule-dialog.html
│       │           │       ├── flow_v1.html
│       │           │       ├── flow_v2.html
│       │           │       ├── gateway/
│       │           │       │   ├── api.html
│       │           │       │   ├── flow.html
│       │           │       │   └── identity.html
│       │           │       ├── identity.html
│       │           │       ├── login.html
│       │           │       ├── machine.html
│       │           │       ├── metric.html
│       │           │       ├── pagination.tpl.html
│       │           │       ├── param_flow.html
│       │           │       └── system.html
│       │           ├── dist/
│       │           │   ├── css/
│       │           │   │   └── app.css
│       │           │   └── js/
│       │           │       ├── app.js
│       │           │       └── app.vendor.js
│       │           ├── gulpfile.js
│       │           ├── index.htm
│       │           ├── index_dev.htm
│       │           ├── license-stat.csv
│       │           └── package.json
│       └── test/
│           └── java/
│               └── com/
│                   └── alibaba/
│                       └── csp/
│                           └── sentinel/
│                               └── dashboard/
│                                   ├── client/
│                                   │   └── SentinelApiClientTest.java
│                                   ├── config/
│                                   │   ├── DashboardConfigTest.java
│                                   │   └── NoAuthConfigurationTest.java
│                                   ├── controller/
│                                   │   └── gateway/
│                                   │       ├── GatewayApiControllerTest.java
│                                   │       └── GatewayFlowRuleControllerTest.java
│                                   ├── datasource/
│                                   │   └── entity/
│                                   │       ├── JsonSerializeTest.java
│                                   │       └── SentinelVersionTest.java
│                                   ├── discovery/
│                                   │   ├── AppInfoTest.java
│                                   │   └── MachineInfoTest.java
│                                   ├── repository/
│                                   │   └── metric/
│                                   │       └── InMemoryMetricsRepositoryTest.java
│                                   ├── rule/
│                                   │   ├── apollo/
│                                   │   │   ├── ApolloConfig.java
│                                   │   │   ├── ApolloConfigUtil.java
│                                   │   │   ├── FlowRuleApolloProvider.java
│                                   │   │   └── FlowRuleApolloPublisher.java
│                                   │   ├── nacos/
│                                   │   │   ├── FlowRuleNacosProvider.java
│                                   │   │   ├── FlowRuleNacosPublisher.java
│                                   │   │   ├── NacosConfig.java
│                                   │   │   └── NacosConfigUtil.java
│                                   │   └── zookeeper/
│                                   │       ├── FlowRuleZookeeperProvider.java
│                                   │       ├── FlowRuleZookeeperPublisher.java
│                                   │       ├── ZookeeperConfig.java
│                                   │       └── ZookeeperConfigUtil.java
│                                   └── util/
│                                       └── VersionUtilsTest.java
├── sentinel-demo/
│   ├── README.md
│   ├── pom.xml
│   ├── sentinel-demo-annotation-cdi-interceptor/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── annotation/
│   │           │                           └── cdi/
│   │           │                               └── interceptor/
│   │           │                                   ├── DemoApplication.java
│   │           │                                   ├── ExceptionUtil.java
│   │           │                                   ├── TestService.java
│   │           │                                   └── TestServiceImpl.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── beans.xml
│   ├── sentinel-demo-annotation-spring-aop/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── annotation/
│   │           │                           └── aop/
│   │           │                               ├── DemoApplication.java
│   │           │                               ├── config/
│   │           │                               │   └── AopConfiguration.java
│   │           │                               ├── controller/
│   │           │                               │   └── DemoController.java
│   │           │                               └── service/
│   │           │                                   ├── ExceptionUtil.java
│   │           │                                   ├── TestService.java
│   │           │                                   └── TestServiceImpl.java
│   │           └── resources/
│   │               └── application.properties
│   ├── sentinel-demo-apache-dubbo/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── demo/
│   │                                   └── apache/
│   │                                       └── dubbo/
│   │                                           ├── FooConsumerBootstrap.java
│   │                                           ├── FooConsumerExceptionDegradeBootstrap.java
│   │                                           ├── FooProviderBootstrap.java
│   │                                           ├── FooService.java
│   │                                           ├── consumer/
│   │                                           │   ├── ConsumerConfiguration.java
│   │                                           │   └── FooServiceConsumer.java
│   │                                           └── provider/
│   │                                               ├── FooServiceImpl.java
│   │                                               └── ProviderConfiguration.java
│   ├── sentinel-demo-apache-httpclient/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── apache/
│   │           │                           └── httpclient/
│   │           │                               ├── ApacheHttpClientDemoApplication.java
│   │           │                               └── controller/
│   │           │                                   └── ApacheHttpClientTestController.java
│   │           └── resources/
│   │               └── application.properties
│   ├── sentinel-demo-apollo-datasource/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── datasource/
│   │           │                           └── apollo/
│   │           │                               ├── ApolloDataSourceDemo.java
│   │           │                               └── FlowQpsRunner.java
│   │           └── resources/
│   │               └── log4j2.xml
│   ├── sentinel-demo-basic/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── demo/
│   │                                   ├── AsyncEntryDemo.java
│   │                                   ├── authority/
│   │                                   │   └── AuthorityDemo.java
│   │                                   ├── degrade/
│   │                                   │   ├── ExceptionRatioCircuitBreakerDemo.java
│   │                                   │   └── SlowRatioCircuitBreakerDemo.java
│   │                                   ├── flow/
│   │                                   │   ├── FlowQpsDemo.java
│   │                                   │   ├── FlowQpsRegexDemo.java
│   │                                   │   ├── FlowThreadDemo.java
│   │                                   │   ├── PaceFlowDemo.java
│   │                                   │   ├── WarmUpFlowDemo.java
│   │                                   │   └── WarmUpRateLimiterFlowDemo.java
│   │                                   └── system/
│   │                                       └── SystemGuardDemo.java
│   ├── sentinel-demo-cluster/
│   │   ├── pom.xml
│   │   ├── sentinel-demo-cluster-embedded/
│   │   │   ├── README.md
│   │   │   ├── pom.xml
│   │   │   └── src/
│   │   │       └── main/
│   │   │           ├── java/
│   │   │           │   └── com/
│   │   │           │       └── alibaba/
│   │   │           │           └── csp/
│   │   │           │               └── sentinel/
│   │   │           │                   └── demo/
│   │   │           │                       └── cluster/
│   │   │           │                           ├── DemoConstants.java
│   │   │           │                           ├── app/
│   │   │           │                           │   ├── ClusterDemoApplication.java
│   │   │           │                           │   ├── config/
│   │   │           │                           │   │   └── AopConfig.java
│   │   │           │                           │   ├── controller/
│   │   │           │                           │   │   └── ClusterDemoController.java
│   │   │           │                           │   └── service/
│   │   │           │                           │       └── DemoService.java
│   │   │           │                           ├── entity/
│   │   │           │                           │   └── ClusterGroupEntity.java
│   │   │           │                           └── init/
│   │   │           │                               └── DemoClusterInitFunc.java
│   │   │           └── resources/
│   │   │               └── META-INF/
│   │   │                   └── services/
│   │   │                       └── com.alibaba.csp.sentinel.init.InitFunc
│   │   └── sentinel-demo-cluster-server-alone/
│   │       ├── pom.xml
│   │       └── src/
│   │           └── main/
│   │               ├── java/
│   │               │   └── com/
│   │               │       └── alibaba/
│   │               │           └── csp/
│   │               │               └── sentinel/
│   │               │                   └── demo/
│   │               │                       └── cluster/
│   │               │                           ├── ClusterServerDemo.java
│   │               │                           ├── DemoConstants.java
│   │               │                           └── init/
│   │               │                               └── DemoClusterServerInitFunc.java
│   │               └── resources/
│   │                   └── META-INF/
│   │                       └── services/
│   │                           └── com.alibaba.csp.sentinel.init.InitFunc
│   ├── sentinel-demo-command-handler/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── commandhandler/
│   │           │                           ├── CommandDemo.java
│   │           │                           ├── EchoCommandHandler.java
│   │           │                           └── interceptor/
│   │           │                               ├── AllCommandHandlerInterceptor.java
│   │           │                               └── EchoCommandHandlerInterceptor.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       ├── com.alibaba.csp.sentinel.command.CommandHandler
│   │                       └── com.alibaba.csp.sentinel.command.CommandHandlerInterceptor
│   ├── sentinel-demo-dubbo/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── demo/
│   │                                   └── dubbo/
│   │                                       ├── FooService.java
│   │                                       ├── consumer/
│   │                                       │   ├── ConsumerConfiguration.java
│   │                                       │   └── FooServiceConsumer.java
│   │                                       ├── demo1/
│   │                                       │   ├── FooConsumerBootstrap.java
│   │                                       │   ├── FooProviderBootstrap.java
│   │                                       │   ├── FooServiceImpl.java
│   │                                       │   └── ProviderConfiguration.java
│   │                                       └── demo2/
│   │                                           ├── FooConsumerBootstrap.java
│   │                                           ├── FooProviderBootstrap.java
│   │                                           ├── FooServiceImpl.java
│   │                                           └── ProviderConfiguration.java
│   ├── sentinel-demo-dynamic-file-rule/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── file/
│   │           │                           └── rule/
│   │           │                               ├── FileDataSourceDemo.java
│   │           │                               ├── FileDataSourceInit.java
│   │           │                               ├── FlowQpsRunner.java
│   │           │                               └── JarFileDataSourceDemo.java
│   │           └── resources/
│   │               ├── DegradeRule.json
│   │               ├── FlowRule.json
│   │               └── SystemRule.json
│   ├── sentinel-demo-etcd-datasource/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── demo/
│   │                                   └── datasource/
│   │                                       └── etcd/
│   │                                           ├── EtcdConfigSender.java
│   │                                           └── EtcdDataSourceDemo.java
│   ├── sentinel-demo-jax-rs/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── jaxrs/
│   │           │                           ├── CustomExceptionMapper.java
│   │           │                           ├── HelloEntity.java
│   │           │                           ├── HelloResource.java
│   │           │                           ├── JaxRsClientDemo.java
│   │           │                           ├── JaxRsDemoApplication.java
│   │           │                           └── SentinelJaxRsConfig.java
│   │           └── resources/
│   │               └── application.properties
│   ├── sentinel-demo-log-logback/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── demo/
│   │       │   │                       └── log/
│   │       │   │                           └── logback/
│   │       │   │                               ├── CommandCenterLogLoggerImpl.java
│   │       │   │                               └── RecordLogLoggerImpl.java
│   │       │   └── resources/
│   │       │       ├── META-INF/
│   │       │       │   └── services/
│   │       │       │       └── com.alibaba.csp.sentinel.log.Logger
│   │       │       └── logback.xml
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── demo/
│   │                                   └── log/
│   │                                       └── logback/
│   │                                           ├── CommandCenterLogTest.java
│   │                                           └── RecordLogTest.java
│   ├── sentinel-demo-motan/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── motan/
│   │           │                           ├── SentinelMotanConsumerService.java
│   │           │                           ├── SentinelMotanProviderService.java
│   │           │                           └── service/
│   │           │                               ├── MotanDemoService.java
│   │           │                               └── impl/
│   │           │                                   └── MotanDemoServiceImpl.java
│   │           └── resources/
│   │               └── sentinel.properties
│   ├── sentinel-demo-nacos-datasource/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── demo/
│   │                                   └── datasource/
│   │                                       └── nacos/
│   │                                           ├── FlowQpsRunner.java
│   │                                           ├── NacosConfigSender.java
│   │                                           └── NacosDataSourceDemo.java
│   ├── sentinel-demo-okhttp/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── okhttp/
│   │           │                           ├── OkHttpDemoApplication.java
│   │           │                           └── controller/
│   │           │                               └── OkHttpTestController.java
│   │           └── resources/
│   │               └── application.properties
│   ├── sentinel-demo-parameter-flow-control/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── demo/
│   │                                   └── flow/
│   │                                       └── param/
│   │                                           ├── ParamFlowQpsDemo.java
│   │                                           └── ParamFlowQpsRunner.java
│   ├── sentinel-demo-quarkus/
│   │   ├── .dockerignore
│   │   ├── .gitignore
│   │   ├── .mvn/
│   │   │   └── wrapper/
│   │   │       ├── MavenWrapperDownloader.java
│   │   │       ├── maven-wrapper.jar
│   │   │       └── maven-wrapper.properties
│   │   ├── README.md
│   │   ├── build-native.sh
│   │   ├── build.sh
│   │   ├── mvnw
│   │   ├── mvnw.cmd
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── docker/
│   │       │   │   ├── Dockerfile.jvm
│   │       │   │   └── Dockerfile.native
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── demo/
│   │       │   │                       └── quarkus/
│   │       │   │                           ├── AppLifecycleBean.java
│   │       │   │                           ├── CustomExceptionMapper.java
│   │       │   │                           ├── GreetingFallback.java
│   │       │   │                           ├── GreetingResource.java
│   │       │   │                           └── GreetingService.java
│   │       │   └── resources/
│   │       │       ├── META-INF/
│   │       │       │   └── resources/
│   │       │       │       └── index.html
│   │       │       └── application.properties
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── demo/
│   │                                   └── quarkus/
│   │                                       ├── GreetingResourceTest.java
│   │                                       └── NativeGreetingResourceIT.java
│   ├── sentinel-demo-rocketmq/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── demo/
│   │                                   └── rocketmq/
│   │                                       ├── Constants.java
│   │                                       ├── PullConsumerDemo.java
│   │                                       └── SyncProducer.java
│   ├── sentinel-demo-servlet/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── servlet/
│   │           │                           ├── config/
│   │           │                           │   └── SentinelConfig.java
│   │           │                           └── controller/
│   │           │                               └── DefaultServlet.java
│   │           ├── resources/
│   │           │   └── sentinel.properties
│   │           └── webapp/
│   │               └── WEB-INF/
│   │                   └── web.xml
│   ├── sentinel-demo-slot-spi/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── slot/
│   │           │                           ├── DemoApplication.java
│   │           │                           └── DemoSlot.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       └── com.alibaba.csp.sentinel.slotchain.ProcessorSlot
│   ├── sentinel-demo-slotchain-spi/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── slotchain/
│   │           │                           ├── DemoDegradeRuleApplication.java
│   │           │                           ├── DemoFlowRuleApplication.java
│   │           │                           └── DemoSlotChainBuilder.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       └── com.alibaba.csp.sentinel.slotchain.SlotChainBuilder
│   ├── sentinel-demo-sofa-rpc/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── sofa/
│   │           │                           └── rpc/
│   │           │                               ├── DemoConsumer.java
│   │           │                               ├── DemoProvider.java
│   │           │                               └── service/
│   │           │                                   ├── DemoService.java
│   │           │                                   └── impl/
│   │           │                                       └── DemoServiceImpl.java
│   │           └── resources/
│   │               ├── log4j.xml
│   │               └── sofa-rpc/
│   │                   └── rpc-config.json
│   ├── sentinel-demo-spring-cloud-gateway/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── spring/
│   │           │                           └── sc/
│   │           │                               └── gateway/
│   │           │                                   ├── GatewayConfiguration.java
│   │           │                                   └── GatewayDemoApplication.java
│   │           └── resources/
│   │               └── application.yml
│   ├── sentinel-demo-spring-webflux/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── spring/
│   │           │                           └── webflux/
│   │           │                               ├── WebFluxDemoApplication.java
│   │           │                               ├── config/
│   │           │                               │   ├── RedisConfig.java
│   │           │                               │   └── WebFluxConfig.java
│   │           │                               ├── controller/
│   │           │                               │   ├── BazController.java
│   │           │                               │   └── FooController.java
│   │           │                               └── service/
│   │           │                                   ├── BazService.java
│   │           │                                   └── FooService.java
│   │           └── resources/
│   │               └── application.properties
│   ├── sentinel-demo-spring-webmvc/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── spring/
│   │           │                           └── webmvc/
│   │           │                               ├── WebMvcDemoApplication.java
│   │           │                               ├── config/
│   │           │                               │   ├── InterceptorConfig.java
│   │           │                               │   └── SentinelSpringMvcBlockHandlerConfig.java
│   │           │                               ├── controller/
│   │           │                               │   └── WebMvcTestController.java
│   │           │                               └── vo/
│   │           │                                   └── ResultWrapper.java
│   │           └── resources/
│   │               └── application.properties
│   ├── sentinel-demo-transport-spring-mvc/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── transport/
│   │           │                           └── springmvc/
│   │           │                               └── TransportSpringMvcDemoApplication.java
│   │           └── resources/
│   │               └── application.properties
│   ├── sentinel-demo-zookeeper-datasource/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── demo/
│   │                                   └── datasource/
│   │                                       └── zookeeper/
│   │                                           ├── ZookeeperConfigSender.java
│   │                                           └── ZookeeperDataSourceDemo.java
│   ├── sentinel-demo-zuul-gateway/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── demo/
│   │           │                       └── zuul/
│   │           │                           └── gateway/
│   │           │                               ├── GatewayRuleConfig.java
│   │           │                               ├── ZuulConfig.java
│   │           │                               └── ZuulGatewayDemoApplication.java
│   │           └── resources/
│   │               └── application.yml
│   └── sentinel-demo-zuul2-gateway/
│       ├── pom.xml
│       └── src/
│           └── main/
│               ├── java/
│               │   └── com/
│               │       └── alibaba/
│               │           └── csp/
│               │               └── sentinel/
│               │                   └── demo/
│               │                       └── zuul2/
│               │                           └── gateway/
│               │                               ├── FiltersRegisteringService.java
│               │                               ├── GatewayRuleConfig.java
│               │                               ├── SampleServerStartup.java
│               │                               ├── ZuulBootstrap.java
│               │                               ├── ZuulClasspathFiltersModule.java
│               │                               ├── ZuulSampleModule.java
│               │                               └── filters/
│               │                                   ├── NotFoundEndpoint.java
│               │                                   └── Route.java
│               └── resources/
│                   ├── application.properties
│                   └── log4j.properties
├── sentinel-extension/
│   ├── README.md
│   ├── pom.xml
│   ├── sentinel-annotation-aspectj/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── annotation/
│   │       │                           └── aspectj/
│   │       │                               ├── AbstractSentinelAspectSupport.java
│   │       │                               ├── MethodWrapper.java
│   │       │                               ├── ResourceMetadataRegistry.java
│   │       │                               └── SentinelResourceAspect.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── annotation/
│   │                                   └── aspectj/
│   │                                       ├── AbstractSentinelAspectSupportTest.java
│   │                                       ├── MethodWrapperTest.java
│   │                                       ├── ResourceMetadataRegistryTest.java
│   │                                       └── integration/
│   │                                           ├── SentinelAnnotationIntegrationTest.java
│   │                                           ├── config/
│   │                                           │   └── AopTestConfig.java
│   │                                           └── service/
│   │                                               ├── BarService.java
│   │                                               ├── FooService.java
│   │                                               ├── FooUtil.java
│   │                                               └── GlobalFallback.java
│   ├── sentinel-annotation-cdi-interceptor/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── annotation/
│   │       │   │                       └── cdi/
│   │       │   │                           └── interceptor/
│   │       │   │                               ├── AbstractSentinelInterceptorSupport.java
│   │       │   │                               ├── MethodWrapper.java
│   │       │   │                               ├── ResourceMetadataRegistry.java
│   │       │   │                               ├── SentinelResourceBinding.java
│   │       │   │                               └── SentinelResourceInterceptor.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── beans.xml
│   │       └── test/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── annotation/
│   │           │                       └── cdi/
│   │           │                           └── interceptor/
│   │           │                               ├── AbstractSentinelInterceptorSupportTest.java
│   │           │                               ├── MethodWrapperTest.java
│   │           │                               ├── ResourceMetadataRegistryTest.java
│   │           │                               └── integration/
│   │           │                                   ├── SentinelAnnotationInterceptorIntegrationTest.java
│   │           │                                   └── service/
│   │           │                                       ├── FooService.java
│   │           │                                       └── FooUtil.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── beans.xml
│   ├── sentinel-datasource-apollo/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── datasource/
│   │                                   └── apollo/
│   │                                       └── ApolloDataSource.java
│   ├── sentinel-datasource-consul/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── datasource/
│   │       │                           └── consul/
│   │       │                               └── ConsulDataSource.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── datasource/
│   │                                   └── consul/
│   │                                       └── ConsulDataSourceTest.java
│   ├── sentinel-datasource-etcd/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── datasource/
│   │       │                           └── etcd/
│   │       │                               ├── EtcdConfig.java
│   │       │                               └── EtcdDataSource.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── datasource/
│   │                                   └── etcd/
│   │                                       └── EtcdDataSourceTest.java
│   ├── sentinel-datasource-eureka/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── datasource/
│   │       │                           └── eureka/
│   │       │                               └── EurekaDataSource.java
│   │       └── test/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── datasource/
│   │           │                       └── eureka/
│   │           │                           ├── EurekaDataSourceTest.java
│   │           │                           └── SimpleSpringApplication.java
│   │           └── resources/
│   │               └── application.yml
│   ├── sentinel-datasource-extension/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── datasource/
│   │                                   ├── AbstractDataSource.java
│   │                                   ├── AutoRefreshDataSource.java
│   │                                   ├── Converter.java
│   │                                   ├── EmptyDataSource.java
│   │                                   ├── FileInJarReadableDataSource.java
│   │                                   ├── FileRefreshableDataSource.java
│   │                                   ├── FileWritableDataSource.java
│   │                                   ├── ReadableDataSource.java
│   │                                   └── WritableDataSource.java
│   ├── sentinel-datasource-nacos/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── datasource/
│   │                                   └── nacos/
│   │                                       └── NacosDataSource.java
│   ├── sentinel-datasource-redis/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── datasource/
│   │       │                           └── redis/
│   │       │                               ├── RedisDataSource.java
│   │       │                               └── config/
│   │       │                                   ├── RedisConnectionConfig.java
│   │       │                                   └── RedisHostAndPort.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── datasource/
│   │                                   └── redis/
│   │                                       ├── ClusterModeRedisDataSourceTest.java
│   │                                       ├── RedisConnectionConfigTest.java
│   │                                       ├── SentinelModeRedisDataSourceTest.java
│   │                                       └── StandaloneRedisDataSourceTest.java
│   ├── sentinel-datasource-spring-cloud-config/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── datasource/
│   │       │   │                       └── spring/
│   │       │   │                           └── cloud/
│   │       │   │                               └── config/
│   │       │   │                                   ├── SentinelRuleLocator.java
│   │       │   │                                   ├── SentinelRuleStorage.java
│   │       │   │                                   ├── SpringCloudConfigDataSource.java
│   │       │   │                                   └── config/
│   │       │   │                                       └── DataSourceBootstrapConfiguration.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── spring.factories
│   │       └── test/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── datasource/
│   │           │                       └── spring/
│   │           │                           └── cloud/
│   │           │                               └── config/
│   │           │                                   ├── SimpleSpringApplication.java
│   │           │                                   ├── client/
│   │           │                                   │   └── ConfigClient.java
│   │           │                                   ├── server/
│   │           │                                   │   └── ConfigServer.java
│   │           │                                   └── test/
│   │           │                                       ├── SentinelRuleLocatorTests.java
│   │           │                                       └── SpringCouldDataSourceTest.java
│   │           └── resources/
│   │               ├── bootstrap.yml
│   │               ├── config-client-application.properties
│   │               └── config-server-application.properties
│   ├── sentinel-datasource-zookeeper/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── alibaba/
│   │       │               └── csp/
│   │       │                   └── sentinel/
│   │       │                       └── datasource/
│   │       │                           └── zookeeper/
│   │       │                               └── ZookeeperDataSource.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── datasource/
│   │                                   └── zookeeper/
│   │                                       └── ZookeeperDataSourceTest.java
│   ├── sentinel-metric-exporter/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── metric/
│   │       │   │                       ├── MetricExporterInit.java
│   │       │   │                       ├── collector/
│   │       │   │                       │   └── MetricCollector.java
│   │       │   │                       └── exporter/
│   │       │   │                           ├── MetricExporter.java
│   │       │   │                           └── jmx/
│   │       │   │                               ├── JMXMetricExporter.java
│   │       │   │                               ├── MBeanRegistry.java
│   │       │   │                               ├── MetricBean.java
│   │       │   │                               ├── MetricBeanWriter.java
│   │       │   │                               └── MetricMXBean.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               └── com.alibaba.csp.sentinel.init.InitFunc
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── cps/
│   │                           └── sentinel/
│   │                               └── metric/
│   │                                   └── exporter/
│   │                                       ├── MBeanRegistryTest.java
│   │                                       └── MetricBeanWriterTest.java
│   ├── sentinel-parameter-flow-control/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   ├── command/
│   │       │   │                   │   └── handler/
│   │       │   │                   │       ├── GetParamFlowRulesCommandHandler.java
│   │       │   │                   │       └── ModifyParamFlowRulesCommandHandler.java
│   │       │   │                   ├── init/
│   │       │   │                   │   └── ParamFlowStatisticSlotCallbackInit.java
│   │       │   │                   └── slots/
│   │       │   │                       ├── HotParamSlotChainBuilder.java
│   │       │   │                       ├── block/
│   │       │   │                       │   └── flow/
│   │       │   │                       │       └── param/
│   │       │   │                       │           ├── ParamFlowArgument.java
│   │       │   │                       │           ├── ParamFlowChecker.java
│   │       │   │                       │           ├── ParamFlowClusterConfig.java
│   │       │   │                       │           ├── ParamFlowException.java
│   │       │   │                       │           ├── ParamFlowItem.java
│   │       │   │                       │           ├── ParamFlowRule.java
│   │       │   │                       │           ├── ParamFlowRuleManager.java
│   │       │   │                       │           ├── ParamFlowRuleUtil.java
│   │       │   │                       │           ├── ParamFlowSlot.java
│   │       │   │                       │           ├── ParameterMetric.java
│   │       │   │                       │           ├── ParameterMetricStorage.java
│   │       │   │                       │           ├── RollingParamEvent.java
│   │       │   │                       │           └── TokenUpdateStatus.java
│   │       │   │                       └── statistic/
│   │       │   │                           ├── ParamFlowStatisticEntryCallback.java
│   │       │   │                           ├── ParamFlowStatisticExitCallback.java
│   │       │   │                           ├── cache/
│   │       │   │                           │   ├── CacheMap.java
│   │       │   │                           │   └── ConcurrentLinkedHashMapWrapper.java
│   │       │   │                           └── data/
│   │       │   │                               └── ParamMapBucket.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               ├── com.alibaba.csp.sentinel.command.CommandHandler
│   │       │               ├── com.alibaba.csp.sentinel.init.InitFunc
│   │       │               └── com.alibaba.csp.sentinel.slotchain.ProcessorSlot
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               ├── block/
│   │                               │   └── flow/
│   │                               │       └── param/
│   │                               │           └── AbstractTimeBasedTest.java
│   │                               └── slots/
│   │                                   ├── block/
│   │                                   │   └── flow/
│   │                                   │       └── param/
│   │                                   │           ├── ParamFlowCheckerTest.java
│   │                                   │           ├── ParamFlowDefaultCheckerTest.java
│   │                                   │           ├── ParamFlowPartialIntegrationTest.java
│   │                                   │           ├── ParamFlowRuleManagerTest.java
│   │                                   │           ├── ParamFlowRuleUtilTest.java
│   │                                   │           ├── ParamFlowSlotTest.java
│   │                                   │           ├── ParamFlowThrottleRateLimitingCheckerTest.java
│   │                                   │           ├── ParameterMetricStorageTest.java
│   │                                   │           └── ParameterMetricTest.java
│   │                                   └── statistic/
│   │                                       └── data/
│   │                                           └── ParamMapBucketTest.java
│   └── sentinel-prometheus-metric-exporter/
│       ├── README.md
│       ├── pom.xml
│       └── src/
│           ├── main/
│           │   ├── java/
│           │   │   └── com/
│           │   │       └── alibaba/
│           │   │           └── csp/
│           │   │               └── sentinel/
│           │   │                   └── metric/
│           │   │                       └── prom/
│           │   │                           ├── MetricConstants.java
│           │   │                           ├── PromExporterInit.java
│           │   │                           ├── collector/
│           │   │                           │   └── SentinelCollector.java
│           │   │                           ├── config/
│           │   │                           │   └── PrometheusGlobalConfig.java
│           │   │                           └── types/
│           │   │                               └── GaugeMetricFamily.java
│           │   └── resources/
│           │       └── META-INF/
│           │           └── services/
│           │               └── com.alibaba.csp.sentinel.init.InitFunc
│           └── test/
│               └── java/
│                   └── com/
│                       └── alibaba/
│                           └── csp/
│                               └── sentinel/
│                                   └── metric/
│                                       └── prom/
│                                           ├── collector/
│                                           │   └── SentinelCollectorTest.java
│                                           └── types/
│                                               └── GaugeMetricFamilyTest.java
├── sentinel-logging/
│   ├── pom.xml
│   └── sentinel-logging-slf4j/
│       ├── README.md
│       ├── pom.xml
│       └── src/
│           ├── main/
│           │   ├── java/
│           │   │   └── com/
│           │   │       └── alibaba/
│           │   │           └── csp/
│           │   │               └── sentinel/
│           │   │                   └── logging/
│           │   │                       └── slf4j/
│           │   │                           ├── CommandCenterLogLogger.java
│           │   │                           └── RecordLogLogger.java
│           │   └── resources/
│           │       └── META-INF/
│           │           └── services/
│           │               └── com.alibaba.csp.sentinel.log.Logger
│           └── test/
│               └── java/
│                   └── com/
│                       └── alibaba/
│                           └── csp/
│                               └── sentinel/
│                                   └── logging/
│                                       └── slf4j/
│                                           ├── AbstraceSlf4jLogTest.java
│                                           ├── CommandCenterLogTest.java
│                                           └── RecordLogTest.java
├── sentinel-transport/
│   ├── README.md
│   ├── pom.xml
│   ├── sentinel-transport-common/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   ├── command/
│   │       │   │                   │   ├── CommandCenterProvider.java
│   │       │   │                   │   ├── CommandConstants.java
│   │       │   │                   │   ├── CommandHandler.java
│   │       │   │                   │   ├── CommandHandlerInterceptor.java
│   │       │   │                   │   ├── CommandHandlerProvider.java
│   │       │   │                   │   ├── CommandRequest.java
│   │       │   │                   │   ├── CommandRequestExecution.java
│   │       │   │                   │   ├── CommandResponse.java
│   │       │   │                   │   ├── annotation/
│   │       │   │                   │   │   └── CommandMapping.java
│   │       │   │                   │   ├── handler/
│   │       │   │                   │   │   ├── ApiCommandHandler.java
│   │       │   │                   │   │   ├── BasicInfoCommandHandler.java
│   │       │   │                   │   │   ├── FetchActiveRuleCommandHandler.java
│   │       │   │                   │   │   ├── FetchClusterNodeByIdCommandHandler.java
│   │       │   │                   │   │   ├── FetchClusterNodeHumanCommandHandler.java
│   │       │   │                   │   │   ├── FetchJsonTreeCommandHandler.java
│   │       │   │                   │   │   ├── FetchOriginCommandHandler.java
│   │       │   │                   │   │   ├── FetchSimpleClusterNodeCommandHandler.java
│   │       │   │                   │   │   ├── FetchSystemStatusCommandHandler.java
│   │       │   │                   │   │   ├── FetchTreeCommandHandler.java
│   │       │   │                   │   │   ├── InterceptingCommandHandler.java
│   │       │   │                   │   │   ├── ModifyRulesCommandHandler.java
│   │       │   │                   │   │   ├── OnOffGetCommandHandler.java
│   │       │   │                   │   │   ├── OnOffSetCommandHandler.java
│   │       │   │                   │   │   ├── SendMetricCommandHandler.java
│   │       │   │                   │   │   ├── VersionCommandHandler.java
│   │       │   │                   │   │   └── cluster/
│   │       │   │                   │   │       ├── FetchClusterModeCommandHandler.java
│   │       │   │                   │   │       └── ModifyClusterModeCommandHandler.java
│   │       │   │                   │   └── vo/
│   │       │   │                   │       └── NodeVo.java
│   │       │   │                   ├── heartbeat/
│   │       │   │                   │   └── HeartbeatSenderProvider.java
│   │       │   │                   └── transport/
│   │       │   │                       ├── CommandCenter.java
│   │       │   │                       ├── HeartbeatSender.java
│   │       │   │                       ├── client/
│   │       │   │                       │   └── CommandClient.java
│   │       │   │                       ├── config/
│   │       │   │                       │   └── TransportConfig.java
│   │       │   │                       ├── endpoint/
│   │       │   │                       │   ├── Endpoint.java
│   │       │   │                       │   └── Protocol.java
│   │       │   │                       ├── init/
│   │       │   │                       │   ├── CommandCenterInitFunc.java
│   │       │   │                       │   └── HeartbeatSenderInitFunc.java
│   │       │   │                       ├── log/
│   │       │   │                       │   └── CommandCenterLog.java
│   │       │   │                       ├── ssl/
│   │       │   │                       │   └── SslFactory.java
│   │       │   │                       └── util/
│   │       │   │                           ├── HttpCommandUtils.java
│   │       │   │                           └── WritableDataSourceRegistry.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               ├── com.alibaba.csp.sentinel.command.CommandHandler
│   │       │               └── com.alibaba.csp.sentinel.init.InitFunc
│   │       └── test/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── transport/
│   │           │                       ├── command/
│   │           │                       │   ├── GetRulesCommandHandlerInterceptor.java
│   │           │                       │   └── InterceptingCommandHandlerTest.java
│   │           │                       ├── config/
│   │           │                       │   └── TransportConfigTest.java
│   │           │                       ├── endpoint/
│   │           │                       │   └── EndpointTest.java
│   │           │                       └── init/
│   │           │                           └── HeartbeatSenderInitFuncTest.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       └── com.alibaba.csp.sentinel.command.CommandHandlerInterceptor
│   ├── sentinel-transport-netty-http/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── transport/
│   │       │   │                       ├── command/
│   │       │   │                       │   ├── NettyHttpCommandCenter.java
│   │       │   │                       │   ├── codec/
│   │       │   │                       │   │   ├── CodecRegistry.java
│   │       │   │                       │   │   ├── Decoder.java
│   │       │   │                       │   │   ├── DefaultCodecs.java
│   │       │   │                       │   │   ├── Encoder.java
│   │       │   │                       │   │   ├── StringDecoder.java
│   │       │   │                       │   │   └── StringEncoder.java
│   │       │   │                       │   └── netty/
│   │       │   │                       │       ├── HttpServer.java
│   │       │   │                       │       ├── HttpServerHandler.java
│   │       │   │                       │       └── HttpServerInitializer.java
│   │       │   │                       └── heartbeat/
│   │       │   │                           ├── HttpHeartbeatSender.java
│   │       │   │                           └── client/
│   │       │   │                               └── HttpClientsFactory.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               ├── com.alibaba.csp.sentinel.transport.CommandCenter
│   │       │               └── com.alibaba.csp.sentinel.transport.HeartbeatSender
│   │       └── test/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── alibaba/
│   │           │           └── csp/
│   │           │               └── sentinel/
│   │           │                   └── transport/
│   │           │                       └── command/
│   │           │                           ├── handler/
│   │           │                           │   └── MultipleSlashNameCommandTestHandler.java
│   │           │                           └── netty/
│   │           │                               ├── HttpServerHandlerTest.java
│   │           │                               ├── HttpServerInitializerTest.java
│   │           │                               └── HttpServerTest.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       └── com.alibaba.csp.sentinel.command.CommandHandler
│   ├── sentinel-transport-simple-http/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── alibaba/
│   │       │   │           └── csp/
│   │       │   │               └── sentinel/
│   │       │   │                   └── transport/
│   │       │   │                       ├── command/
│   │       │   │                       │   ├── SimpleHttpCommandCenter.java
│   │       │   │                       │   ├── exception/
│   │       │   │                       │   │   └── RequestException.java
│   │       │   │                       │   └── http/
│   │       │   │                       │       ├── HttpEventTask.java
│   │       │   │                       │       └── StatusCode.java
│   │       │   │                       └── heartbeat/
│   │       │   │                           ├── HeartbeatMessage.java
│   │       │   │                           ├── SimpleHttpHeartbeatSender.java
│   │       │   │                           └── client/
│   │       │   │                               ├── SimpleHttpClient.java
│   │       │   │                               ├── SimpleHttpRequest.java
│   │       │   │                               ├── SimpleHttpResponse.java
│   │       │   │                               ├── SimpleHttpResponseParser.java
│   │       │   │                               └── SocketFactory.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               ├── com.alibaba.csp.sentinel.transport.CommandCenter
│   │       │               └── com.alibaba.csp.sentinel.transport.HeartbeatSender
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── alibaba/
│   │                       └── csp/
│   │                           └── sentinel/
│   │                               └── transport/
│   │                                   └── command/
│   │                                       └── http/
│   │                                           ├── CommandCenterTest.java
│   │                                           └── HttpEventTaskTest.java
│   └── sentinel-transport-spring-mvc/
│       ├── pom.xml
│       └── src/
│           └── main/
│               ├── java/
│               │   └── com/
│               │       └── alibaba/
│               │           └── csp/
│               │               └── sentinel/
│               │                   └── transport/
│               │                       ├── command/
│               │                       │   ├── SentinelApiHandler.java
│               │                       │   ├── SentinelApiHandlerAdapter.java
│               │                       │   ├── SentinelApiHandlerMapping.java
│               │                       │   ├── SpringMvcHttpCommandCenter.java
│               │                       │   └── http/
│               │                       │       └── StatusCode.java
│               │                       └── heartbeat/
│               │                           ├── SpringMvcHttpHeartbeatSender.java
│               │                           └── client/
│               │                               └── HttpClientsFactory.java
│               └── resources/
│                   └── META-INF/
│                       └── services/
│                           ├── com.alibaba.csp.sentinel.transport.CommandCenter
│                           └── com.alibaba.csp.sentinel.transport.HeartbeatSender
└── toolchains-example.xml
Download .txt
Showing preview only (791K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (8206 symbols across 1241 files)

FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/BaseSentinelDubboFilter.java
  class BaseSentinelDubboFilter (line 28) | public abstract class BaseSentinelDubboFilter implements Filter {
    method getMethodName (line 38) | abstract String getMethodName(Invoker invoker, Invocation invocation, ...
    method getInterfaceName (line 46) | abstract String getInterfaceName(Invoker invoker, String prefix);

FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/DubboAppContextFilter.java
  class DubboAppContextFilter (line 34) | @Activate(group = CONSUMER)
    method invoke (line 37) | @Override

FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/DubboUtils.java
  class DubboUtils (line 26) | public final class DubboUtils {
    method getApplication (line 30) | public static String getApplication(Invocation invocation, String defa...
    method getMethodResourceName (line 37) | public static String getMethodResourceName(Invoker<?> invoker, Invocat...
    method getMethodResourceName (line 41) | public static String getMethodResourceName(Invoker<?> invoker, Invocat...
    method getMethodResourceName (line 60) | public static String getMethodResourceName(Invoker<?> invoker, Invocat...
    method getInterfaceName (line 72) | public static String getInterfaceName(Invoker invoker) {
    method getInterfaceName (line 76) | public static String getInterfaceName(Invoker<?> invoker, Boolean useG...
    method getInterfaceName (line 81) | public static String getInterfaceName(Invoker<?> invoker, String prefi...
    method DubboUtils (line 93) | private DubboUtils() {

FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/SentinelDubboConsumerFilter.java
  class SentinelDubboConsumerFilter (line 45) | @Activate(group = CONSUMER)
    method SentinelDubboConsumerFilter (line 48) | public SentinelDubboConsumerFilter() {
    method getMethodName (line 52) | @Override
    method getInterfaceName (line 57) | @Override
    method invoke (line 62) | @Override
    method syncInvoke (line 72) | private Result syncInvoke(Invoker<?> invoker, Invocation invocation) {
    method asyncInvoke (line 104) | private Result asyncInvoke(Invoker<?> invoker, Invocation invocation) {
    class EntryHolder (line 136) | static class EntryHolder {
      method EntryHolder (line 141) | public EntryHolder(Entry entry, Object[] params) {
    method exitEntry (line 147) | private void exitEntry(EntryHolder holder) {

FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/SentinelDubboProviderFilter.java
  class SentinelDubboProviderFilter (line 44) | @Activate(group = PROVIDER)
    method SentinelDubboProviderFilter (line 47) | public SentinelDubboProviderFilter() {
    method getMethodName (line 51) | @Override
    method getInterfaceName (line 56) | @Override
    method invoke (line 61) | @Override

FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/config/DubboAdapterGlobalConfig.java
  class DubboAdapterGlobalConfig (line 34) | public final class DubboAdapterGlobalConfig {
    method isUsePrefix (line 51) | public static boolean isUsePrefix() {
    method getDubboProviderResNamePrefixKey (line 55) | public static String getDubboProviderResNamePrefixKey() {
    method getDubboConsumerResNamePrefixKey (line 63) | public static String getDubboConsumerResNamePrefixKey() {
    method getDubboInterfaceGroupAndVersionEnabled (line 71) | public static Boolean getDubboInterfaceGroupAndVersionEnabled() {
    method getConsumerFallback (line 75) | public static DubboFallback getConsumerFallback() {
    method setConsumerFallback (line 79) | public static void setConsumerFallback(DubboFallback consumerFallback) {
    method getProviderFallback (line 84) | public static DubboFallback getProviderFallback() {
    method setProviderFallback (line 88) | public static void setProviderFallback(DubboFallback providerFallback) {
    method getOriginParser (line 99) | public static DubboOriginParser getOriginParser() {
    method setOriginParser (line 109) | public static void setOriginParser(DubboOriginParser originParser) {
    method DubboAdapterGlobalConfig (line 114) | private DubboAdapterGlobalConfig() {}

FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/fallback/DefaultDubboFallback.java
  class DefaultDubboFallback (line 28) | public class DefaultDubboFallback implements DubboFallback {
    method handle (line 30) | @Override

FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/fallback/DubboFallback.java
  type DubboFallback (line 29) | @FunctionalInterface
    method handle (line 40) | Result handle(Invoker<?> invoker, Invocation invocation, BlockExceptio...

FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/fallback/DubboFallbackRegistry.java
  class DubboFallbackRegistry (line 26) | @Deprecated
    method getConsumerFallback (line 29) | public static DubboFallback getConsumerFallback() {
    method setConsumerFallback (line 33) | public static void setConsumerFallback(DubboFallback consumerFallback) {
    method getProviderFallback (line 37) | public static DubboFallback getProviderFallback() {
    method setProviderFallback (line 41) | public static void setProviderFallback(DubboFallback providerFallback) {
    method DubboFallbackRegistry (line 45) | private DubboFallbackRegistry() {}

FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/origin/DefaultDubboOriginParser.java
  class DefaultDubboOriginParser (line 27) | public class DefaultDubboOriginParser implements DubboOriginParser {
    method parse (line 29) | @Override

FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/origin/DubboOriginParser.java
  type DubboOriginParser (line 27) | public interface DubboOriginParser {
    method parse (line 36) | String parse(Invoker<?> invoker, Invocation invocation);

FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/BaseTest.java
  class BaseTest (line 41) | public class BaseTest extends AbstractTimeBasedTest {
    method cleanUpAll (line 47) | public void cleanUpAll() {
    method cleanUpCstContext (line 56) | private void cleanUpCstContext() throws NoSuchMethodException, Invocat...
    method clearDubboContext (line 67) | private void clearDubboContext() {

FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/DubboTestUtil.java
  class DubboTestUtil (line 32) | public class DubboTestUtil {
    method getMockInvoker (line 39) | public static Invoker getMockInvoker(URL url, Class<?> cls) {
    method getDefaultMockInvoker (line 46) | public static Invoker getDefaultMockInvoker() {
    method getMockInvocation (line 50) | public static Invocation getMockInvocation(Method method) {
    method getDefaultMockInvocationOne (line 57) | public static Invocation getDefaultMockInvocationOne() {
    method getDefaultMockInvocationTwo (line 64) | public static Invocation getDefaultMockInvocationTwo() {
    method getDefaultTestURL (line 71) | public static URL getDefaultTestURL() {

FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/AbstractTimeBasedTest.java
  class AbstractTimeBasedTest (line 22) | public abstract class AbstractTimeBasedTest {
    method mockTimeUtil (line 26) | public MockedStatic<TimeUtil> mockTimeUtil() {
    method useActualTime (line 32) | protected final void useActualTime(MockedStatic<TimeUtil> mocked) {
    method setCurrentMillis (line 36) | protected final void setCurrentMillis(MockedStatic<TimeUtil> mocked, l...
    method sleep (line 41) | protected final void sleep(MockedStatic<TimeUtil> mocked, long timeInM...
    method sleepSecond (line 46) | protected final void sleepSecond(MockedStatic<TimeUtil> mocked, long t...

FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/DubboAppContextFilterTest.java
  class DubboAppContextFilterTest (line 34) | public class DubboAppContextFilterTest extends BaseTest {
    method setUp (line 38) | @Before
    method cleanUp (line 43) | @After
    method testInvokeApplicationKey (line 48) | @Test
    method testInvokeNullApplicationKey (line 62) | @Test

FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/DubboUtilsTest.java
  class DubboUtilsTest (line 40) | public class DubboUtilsTest {
    method setUp (line 42) | @Before
    method tearDown (line 51) | @After
    method testGetApplication (line 60) | @Test
    method testGetApplicationNoAttachments (line 73) | @Test(expected = IllegalArgumentException.class)
    method testGetResourceName (line 85) | @Test
    method testGetResourceNameWithGroupAndVersion (line 101) | @Test
    method testGetResourceNameWithPrefix (line 122) | @Test
    method testGetInterfaceName (line 149) | @Test
    method testGetInterfaceNameWithGroupAndVersion (line 165) | @Test
    method testGetInterfaceNameWithPrefix (line 180) | @Test

FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/SentinelDubboConsumerFilterTest.java
  class SentinelDubboConsumerFilterTest (line 60) | @RunWith(MockitoJUnitRunner.class)
    method setUp (line 65) | @Before
    method destroy (line 71) | @After
    method testInterfaceLevelFollowControlAsync (line 76) | @Test
    method testDegradeAsync (line 100) | @Test
    method testDegradeSync (line 134) | @Test
    method testMethodFlowControlAsync (line 166) | @Test
    method testInvokeAsync (line 189) | @Test
    method testInvokeSync (line 208) | @Test
    method verifyInvocationStructure (line 234) | private void verifyInvocationStructure(Invoker invoker, Invocation inv...
    method verifyInvocationStructureForAsyncCall (line 288) | private void verifyInvocationStructureForAsyncCall(Invoker invoker, In...
    method verifyInvocationStructureForCallFinish (line 340) | private void verifyInvocationStructureForCallFinish(Invoker invoker, I...
    method getNode (line 348) | private DefaultNode getNode(String resourceName, DefaultNode root) {
    method initFlowRule (line 364) | private void initFlowRule(String resource) {
    method initDegradeRule (line 373) | private void initDegradeRule(String resource) {
    method initFallback (line 383) | private void initFallback() {
    method invokeDubboRpc (line 390) | private Result invokeDubboRpc(boolean exception, Invoker invoker, Invo...

FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/SentinelDubboProviderFilterTest.java
  class SentinelDubboProviderFilterTest (line 49) | public class SentinelDubboProviderFilterTest extends BaseTest {
    method setUp (line 55) | @Before
    method destroy (line 60) | @After
    method testInvoke (line 65) | @Test
    method verifyInvocationStructure (line 100) | private void verifyInvocationStructure(String originApplication, Invok...

FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/fallback/DubboFallbackRegistryTest.java
  class DubboFallbackRegistryTest (line 32) | public class DubboFallbackRegistryTest {
    method setUp (line 34) | @Before
    method tearDown (line 39) | @After
    method testDefaultFallback (line 44) | @Test
    method testCustomFallback (line 54) | @Test

FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/origin/DubboOriginRegistryTest.java
  class DubboOriginRegistryTest (line 30) | public class DubboOriginRegistryTest {
    method cleanUp (line 32) | @After
    method testDefaultOriginParserFail (line 37) | @Test(expected = IllegalArgumentException.class)
    method testDefaultOriginParserSuccess (line 42) | @Test
    method testCustomOriginParser (line 51) | @Test

FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/provider/DemoService.java
  type DemoService (line 21) | public interface DemoService {
    method sayHello (line 22) | String sayHello(String name, int n);
    method sayHi (line 23) | String sayHi(String name,int n);

FILE: sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/provider/impl/DemoServiceImpl.java
  class DemoServiceImpl (line 23) | public class DemoServiceImpl implements DemoService {
    method sayHello (line 24) | public String sayHello(String name, int n) {
    method sayHi (line 28) | @Override

FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/BaseSentinelDubboFilter.java
  class BaseSentinelDubboFilter (line 27) | public abstract class BaseSentinelDubboFilter {
    method getMethodName (line 37) | abstract String getMethodName(Invoker invoker, Invocation invocation, ...
    method getInterfaceName (line 45) | abstract String getInterfaceName(Invoker invoker, String prefix);

FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/DubboAppContextFilter.java
  class DubboAppContextFilter (line 33) | @Activate(group = CONSUMER)
    method DubboAppContextFilter (line 38) | public DubboAppContextFilter(ApplicationModel applicationModel) {
    method invoke (line 42) | @Override

FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/DubboUtils.java
  class DubboUtils (line 31) | public final class DubboUtils {
    method getApplication (line 35) | public static String getApplication(Invocation invocation, String defa...
    method getMethodResourceName (line 51) | public static String getMethodResourceName(Invoker<?> invoker, Invocat...
    method getMethodResourceName (line 55) | public static String getMethodResourceName(Invoker<?> invoker, Invocat...
    method getMethodResourceName (line 74) | public static String getMethodResourceName(Invoker<?> invoker, Invocat...
    method getInterfaceName (line 86) | public static String getInterfaceName(Invoker invoker) {
    method getInterfaceName (line 90) | public static String getInterfaceName(Invoker<?> invoker, Boolean useG...
    method getInterfaceName (line 95) | public static String getInterfaceName(Invoker<?> invoker, String prefi...
    method DubboUtils (line 107) | private DubboUtils() {

FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/SentinelDubboConsumerFilter.java
  class SentinelDubboConsumerFilter (line 45) | @Activate(group = CONSUMER)
    method SentinelDubboConsumerFilter (line 48) | public SentinelDubboConsumerFilter() {
    method getMethodName (line 52) | @Override
    method getInterfaceName (line 57) | @Override
    method invoke (line 62) | @Override
    method syncInvoke (line 72) | private Result syncInvoke(Invoker<?> invoker, Invocation invocation) {
    method asyncInvoke (line 104) | private Result asyncInvoke(Invoker<?> invoker, Invocation invocation) {
    class EntryHolder (line 136) | static class EntryHolder {
      method EntryHolder (line 141) | public EntryHolder(Entry entry, Object[] params) {
    method exitEntry (line 147) | private void exitEntry(EntryHolder holder) {

FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/SentinelDubboProviderFilter.java
  class SentinelDubboProviderFilter (line 45) | @Activate(group = PROVIDER)
    method SentinelDubboProviderFilter (line 48) | public SentinelDubboProviderFilter() {
    method getMethodName (line 52) | @Override
    method getInterfaceName (line 57) | @Override
    method invoke (line 62) | @Override

FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/config/DubboAdapterGlobalConfig.java
  class DubboAdapterGlobalConfig (line 34) | public final class DubboAdapterGlobalConfig {
    method isUsePrefix (line 51) | public static boolean isUsePrefix() {
    method getDubboProviderResNamePrefixKey (line 55) | public static String getDubboProviderResNamePrefixKey() {
    method getDubboConsumerResNamePrefixKey (line 63) | public static String getDubboConsumerResNamePrefixKey() {
    method getDubboInterfaceGroupAndVersionEnabled (line 71) | public static Boolean getDubboInterfaceGroupAndVersionEnabled() {
    method getConsumerFallback (line 75) | public static DubboFallback getConsumerFallback() {
    method setConsumerFallback (line 79) | public static void setConsumerFallback(DubboFallback consumerFallback) {
    method getProviderFallback (line 84) | public static DubboFallback getProviderFallback() {
    method setProviderFallback (line 88) | public static void setProviderFallback(DubboFallback providerFallback) {
    method getOriginParser (line 99) | public static DubboOriginParser getOriginParser() {
    method setOriginParser (line 109) | public static void setOriginParser(DubboOriginParser originParser) {
    method DubboAdapterGlobalConfig (line 114) | private DubboAdapterGlobalConfig() {}

FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/fallback/DefaultDubboFallback.java
  class DefaultDubboFallback (line 28) | public class DefaultDubboFallback implements DubboFallback {
    method handle (line 30) | @Override

FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/fallback/DubboFallback.java
  type DubboFallback (line 29) | @FunctionalInterface
    method handle (line 40) | Result handle(Invoker<?> invoker, Invocation invocation, BlockExceptio...

FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/fallback/DubboFallbackRegistry.java
  class DubboFallbackRegistry (line 26) | @Deprecated
    method getConsumerFallback (line 29) | public static DubboFallback getConsumerFallback() {
    method setConsumerFallback (line 33) | public static void setConsumerFallback(DubboFallback consumerFallback) {
    method getProviderFallback (line 37) | public static DubboFallback getProviderFallback() {
    method setProviderFallback (line 41) | public static void setProviderFallback(DubboFallback providerFallback) {
    method DubboFallbackRegistry (line 45) | private DubboFallbackRegistry() {}

FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/origin/DefaultDubboOriginParser.java
  class DefaultDubboOriginParser (line 27) | public class DefaultDubboOriginParser implements DubboOriginParser {
    method parse (line 29) | @Override

FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/origin/DubboOriginParser.java
  type DubboOriginParser (line 27) | public interface DubboOriginParser {
    method parse (line 36) | String parse(Invoker<?> invoker, Invocation invocation);

FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/test/java/com/alibaba/csp/sentinel/BaseTest.java
  class BaseTest (line 41) | public class BaseTest extends AbstractTimeBasedTest {
    method cleanUpAll (line 47) | public void cleanUpAll() {
    method cleanUpCstContext (line 56) | private void cleanUpCstContext() throws NoSuchMethodException, Invocat...
    method clearDubboContext (line 67) | private void clearDubboContext() {

FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/test/java/com/alibaba/csp/sentinel/DubboTestUtil.java
  class DubboTestUtil (line 33) | public class DubboTestUtil {
    method getMockInvoker (line 40) | public static Invoker getMockInvoker(URL url, Class<?> cls) {
    method getDefaultMockInvoker (line 47) | public static Invoker getDefaultMockInvoker() {
    method getMockInvocation (line 51) | public static Invocation getMockInvocation(Method method) {
    method getDefaultMockInvocationOne (line 58) | public static Invocation getDefaultMockInvocationOne() {
    method getDefaultMockInvocationTwo (line 65) | public static Invocation getDefaultMockInvocationTwo() {
    method getDefaultTestURL (line 72) | public static URL getDefaultTestURL() {

FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo3/AbstractTimeBasedTest.java
  class AbstractTimeBasedTest (line 22) | public abstract class AbstractTimeBasedTest {
    method mockTimeUtil (line 26) | public MockedStatic<TimeUtil> mockTimeUtil() {
    method useActualTime (line 32) | protected final void useActualTime(MockedStatic<TimeUtil> mocked) {
    method setCurrentMillis (line 36) | protected final void setCurrentMillis(MockedStatic<TimeUtil> mocked, l...
    method sleep (line 41) | protected final void sleep(MockedStatic<TimeUtil> mocked, long timeInM...
    method sleepSecond (line 46) | protected final void sleepSecond(MockedStatic<TimeUtil> mocked, long t...

FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo3/DubboAppContextFilterTest.java
  class DubboAppContextFilterTest (line 38) | public class DubboAppContextFilterTest extends BaseTest {
    method setUp (line 40) | @Before
    method cleanUp (line 45) | @After
    method testInvokeApplicationKey (line 50) | @Test
    method testInvokeNullApplicationKey (line 67) | @Test

FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo3/DubboUtilsTest.java
  class DubboUtilsTest (line 39) | public class DubboUtilsTest {
    method setUp (line 41) | @Before
    method tearDown (line 50) | @After
    method testGetApplication (line 59) | @Test
    method testGetApplicationNoAttachments (line 72) | @Test(expected = IllegalArgumentException.class)
    method testGetResourceName (line 84) | @Test
    method testGetResourceNameWithGroupAndVersion (line 100) | @Test
    method testGetResourceNameWithPrefix (line 121) | @Test
    method testGetInterfaceName (line 148) | @Test
    method testGetInterfaceNameWithGroupAndVersion (line 164) | @Test
    method testGetInterfaceNameWithPrefix (line 179) | @Test

FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo3/SentinelDubboConsumerFilterTest.java
  class SentinelDubboConsumerFilterTest (line 56) | @RunWith(MockitoJUnitRunner.class)
    method setUp (line 61) | @Before
    method destroy (line 67) | @After
    method testInterfaceLevelFollowControlAsync (line 72) | @Test
    method testDegradeAsync (line 96) | @Test
    method testDegradeSync (line 129) | @Test
    method testMethodFlowControlAsync (line 161) | @Test
    method testInvokeAsync (line 184) | @Test
    method testInvokeSync (line 203) | @Test
    method verifyInvocationStructure (line 229) | private void verifyInvocationStructure(Invoker invoker, Invocation inv...
    method verifyInvocationStructureForAsyncCall (line 283) | private void verifyInvocationStructureForAsyncCall(Invoker invoker, In...
    method verifyInvocationStructureForCallFinish (line 335) | private void verifyInvocationStructureForCallFinish(Invoker invoker, I...
    method getNode (line 343) | private DefaultNode getNode(String resourceName, DefaultNode root) {
    method initFlowRule (line 359) | private void initFlowRule(String resource) {
    method initDegradeRule (line 368) | private void initDegradeRule(String resource) {
    method initFallback (line 378) | private void initFallback() {
    method invokeDubboRpc (line 385) | private Result invokeDubboRpc(boolean exception, Invoker invoker, Invo...

FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo3/SentinelDubboProviderFilterTest.java
  class SentinelDubboProviderFilterTest (line 49) | public class SentinelDubboProviderFilterTest extends BaseTest {
    method setUp (line 55) | @Before
    method destroy (line 60) | @After
    method testInvoke (line 65) | @Test
    method verifyInvocationStructure (line 100) | private void verifyInvocationStructure(String originApplication, Invok...

FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo3/SentinelFilterTest.java
  class SentinelFilterTest (line 29) | public class SentinelFilterTest {
    method test (line 30) | @Test

FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo3/fallback/DubboFallbackRegistryTest.java
  class DubboFallbackRegistryTest (line 37) | public class DubboFallbackRegistryTest {
    method setUp (line 39) | @Before
    method tearDown (line 44) | @After
    method testDefaultFallback (line 49) | @Test
    method testCustomFallback (line 59) | @Test

FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo3/origin/DubboOriginRegistryTest.java
  class DubboOriginRegistryTest (line 30) | public class DubboOriginRegistryTest {
    method cleanUp (line 32) | @After
    method testDefaultOriginParserFail (line 37) | @Test(expected = IllegalArgumentException.class)
    method testDefaultOriginParserSuccess (line 42) | @Test
    method testCustomOriginParser (line 51) | @Test

FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo3/provider/DemoService.java
  type DemoService (line 21) | public interface DemoService {
    method sayHello (line 22) | String sayHello(String name, int n);
    method sayHi (line 23) | String sayHi(String name,int n);

FILE: sentinel-adapter/sentinel-apache-dubbo3-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo3/provider/impl/DemoServiceImpl.java
  class DemoServiceImpl (line 23) | public class DemoServiceImpl implements DemoService {
    method sayHello (line 24) | public String sayHello(String name, int n) {
    method sayHi (line 28) | @Override

FILE: sentinel-adapter/sentinel-apache-httpclient-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/apache/httpclient/SentinelApacheHttpClientBuilder.java
  class SentinelApacheHttpClientBuilder (line 36) | public class SentinelApacheHttpClientBuilder extends HttpClientBuilder {
    method SentinelApacheHttpClientBuilder (line 40) | public SentinelApacheHttpClientBuilder(){
    method SentinelApacheHttpClientBuilder (line 44) | public SentinelApacheHttpClientBuilder(SentinelApacheHttpClientConfig ...
    method decorateMainExec (line 48) | @Override

FILE: sentinel-adapter/sentinel-apache-httpclient-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/apache/httpclient/config/SentinelApacheHttpClientConfig.java
  class SentinelApacheHttpClientConfig (line 27) | public class SentinelApacheHttpClientConfig {
    method getPrefix (line 33) | public String getPrefix() {
    method setPrefix (line 37) | public void setPrefix(String prefix) {
    method getExtractor (line 42) | public ApacheHttpClientResourceExtractor getExtractor() {
    method setExtractor (line 46) | public void setExtractor(ApacheHttpClientResourceExtractor extractor) {
    method getFallback (line 51) | public ApacheHttpClientFallback getFallback() {
    method setFallback (line 55) | public void setFallback(ApacheHttpClientFallback fallback) {

FILE: sentinel-adapter/sentinel-apache-httpclient-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/apache/httpclient/extractor/ApacheHttpClientResourceExtractor.java
  type ApacheHttpClientResourceExtractor (line 23) | public interface ApacheHttpClientResourceExtractor {
    method extractor (line 25) | String extractor(HttpRequestWrapper request);

FILE: sentinel-adapter/sentinel-apache-httpclient-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/apache/httpclient/extractor/DefaultApacheHttpClientResourceExtractor.java
  class DefaultApacheHttpClientResourceExtractor (line 23) | public class DefaultApacheHttpClientResourceExtractor implements ApacheH...
    method extractor (line 25) | @Override

FILE: sentinel-adapter/sentinel-apache-httpclient-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/apache/httpclient/fallback/ApacheHttpClientFallback.java
  type ApacheHttpClientFallback (line 30) | public interface ApacheHttpClientFallback {
    method handle (line 32) | CloseableHttpResponse handle(HttpRequestWrapper request, BlockExceptio...

FILE: sentinel-adapter/sentinel-apache-httpclient-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/apache/httpclient/fallback/DefaultApacheHttpClientFallback.java
  class DefaultApacheHttpClientFallback (line 31) | public class DefaultApacheHttpClientFallback implements ApacheHttpClient...
    method handle (line 33) | @Override

FILE: sentinel-adapter/sentinel-apache-httpclient-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/apache/httpclient/SentinelApacheHttpClientTest.java
  class SentinelApacheHttpClientTest (line 45) | @RunWith(SpringRunner.class)
    method testSentinelOkHttpInterceptor0 (line 56) | @Test
    method testSentinelOkHttpInterceptor1 (line 69) | @Test
    method getRemoteString (line 94) | private String getRemoteString(CloseableHttpClient httpclient, HttpGet...

FILE: sentinel-adapter/sentinel-apache-httpclient-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/apache/httpclient/app/TestApplication.java
  class TestApplication (line 24) | @SpringBootApplication
    method main (line 27) | public static void main(String[] args) {

FILE: sentinel-adapter/sentinel-apache-httpclient-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/apache/httpclient/app/controller/TestController.java
  class TestController (line 25) | @RestController
    method back (line 28) | @RequestMapping("/httpclient/back")
    method back (line 33) | @RequestMapping("/httpclient/back/{id}")

FILE: sentinel-adapter/sentinel-apache-httpclient-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/apache/httpclient/config/SentinelApacheHttpClientConfigTest.java
  class SentinelApacheHttpClientConfigTest (line 23) | public class SentinelApacheHttpClientConfigTest {
    method testConfigSetPrefix (line 25) | @Test(expected = IllegalArgumentException.class)
    method testConfigSetCleaner (line 31) | @Test(expected = IllegalArgumentException.class)
    method testConfigSetFallback (line 37) | @Test(expected = IllegalArgumentException.class)

FILE: sentinel-adapter/sentinel-apache-httpclient-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/apache/httpclient/fallback/ApacheHttpClientFallbackTest.java
  class ApacheHttpClientFallbackTest (line 26) | public class ApacheHttpClientFallbackTest {
    method testDefaultOkHttpFallback (line 28) | @Test(expected = SentinelRpcException.class)

FILE: sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/SentinelGatewayConstants.java
  class SentinelGatewayConstants (line 22) | public final class SentinelGatewayConstants {
    method SentinelGatewayConstants (line 51) | private SentinelGatewayConstants() {}

FILE: sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/api/ApiDefinition.java
  class ApiDefinition (line 27) | public class ApiDefinition {
    method ApiDefinition (line 32) | public ApiDefinition() {}
    method ApiDefinition (line 34) | public ApiDefinition(String apiName) {
    method getApiName (line 38) | public String getApiName() {
    method setApiName (line 42) | public ApiDefinition setApiName(String apiName) {
    method getPredicateItems (line 47) | public Set<ApiPredicateItem> getPredicateItems() {
    method setPredicateItems (line 51) | public ApiDefinition setPredicateItems(Set<ApiPredicateItem> predicate...
    method equals (line 56) | @Override
    method hashCode (line 67) | @Override
    method toString (line 74) | @Override

FILE: sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/api/ApiDefinitionChangeObserver.java
  type ApiDefinitionChangeObserver (line 24) | public interface ApiDefinitionChangeObserver {
    method onChange (line 31) | void onChange(Set<ApiDefinition> apiDefinitions);

FILE: sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/api/ApiPathPredicateItem.java
  class ApiPathPredicateItem (line 26) | public class ApiPathPredicateItem implements ApiPredicateItem {
    method setPattern (line 31) | public ApiPathPredicateItem setPattern(String pattern) {
    method setMatchStrategy (line 36) | public ApiPathPredicateItem setMatchStrategy(int matchStrategy) {
    method getPattern (line 41) | public String getPattern() {
    method getMatchStrategy (line 45) | public int getMatchStrategy() {
    method equals (line 49) | @Override
    method hashCode (line 60) | @Override
    method toString (line 67) | @Override

FILE: sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/api/ApiPredicateGroupItem.java
  class ApiPredicateGroupItem (line 27) | public class ApiPredicateGroupItem implements ApiPredicateItem {
    method addItem (line 31) | public ApiPredicateGroupItem addItem(ApiPredicateItem item) {
    method getItems (line 37) | public Set<ApiPredicateItem> getItems() {

FILE: sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/api/ApiPredicateItem.java
  type ApiPredicateItem (line 24) | public interface ApiPredicateItem {

FILE: sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/api/GatewayApiDefinitionManager.java
  class GatewayApiDefinitionManager (line 39) | public final class GatewayApiDefinitionManager {
    method initializeApiChangeObserverSpi (line 61) | private static void initializeApiChangeObserverSpi() {
    method register2Property (line 70) | public static void register2Property(SentinelProperty<Set<ApiDefinitio...
    method loadApiDefinitions (line 86) | public static boolean loadApiDefinitions(Set<ApiDefinition> apiDefinit...
    method getApiDefinition (line 90) | public static ApiDefinition getApiDefinition(final String apiName) {
    method getApiDefinitions (line 97) | public static Set<ApiDefinition> getApiDefinitions() {
    class ApiDefinitionPropertyListener (line 101) | private static final class ApiDefinitionPropertyListener implements Pr...
      method configUpdate (line 103) | @Override
      method configLoad (line 109) | @Override
      method applyApiUpdateInternal (line 115) | private static synchronized void applyApiUpdateInternal(Set<ApiDefin...
    method notifyDownstreamListeners (line 138) | private static void notifyDownstreamListeners(/*@Valid*/ final Set<Api...
    method isValidApi (line 148) | public static boolean isValidApi(ApiDefinition apiDefinition) {
    method addApiChangeListener (line 153) | static void addApiChangeListener(ApiDefinitionChangeObserver listener) {
    method removeApiChangeListener (line 158) | static void removeApiChangeListener(Class<?> clazz) {

FILE: sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/api/matcher/AbstractApiMatcher.java
  class AbstractApiMatcher (line 30) | public abstract class AbstractApiMatcher<T> implements Predicate<T> {
    method AbstractApiMatcher (line 39) | public AbstractApiMatcher(ApiDefinition apiDefinition) {
    method initializeMatchers (line 55) | protected abstract void initializeMatchers();
    method test (line 57) | @Override
    method getApiName (line 67) | public String getApiName() {
    method getApiDefinition (line 71) | public ApiDefinition getApiDefinition() {

FILE: sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/command/GetGatewayApiDefinitionGroupCommandHandler.java
  class GetGatewayApiDefinitionGroupCommandHandler (line 29) | @CommandMapping(name = "gateway/getApiDefinitions", desc = "Fetch all cu...
    method handle (line 32) | @Override

FILE: sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/command/GetGatewayRuleCommandHandler.java
  class GetGatewayRuleCommandHandler (line 29) | @CommandMapping(name = "gateway/getRules", desc = "Fetch all gateway rul...
    method handle (line 32) | @Override

FILE: sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/command/UpdateGatewayApiDefinitionGroupCommandHandler.java
  class UpdateGatewayApiDefinitionGroupCommandHandler (line 41) | @CommandMapping(name = "gateway/updateApiDefinitions", desc = "")
    method handle (line 46) | @Override
    method parseJson (line 80) | private Set<ApiDefinition> parseJson(String data) {
    method writeToDataSource (line 106) | private <T> boolean writeToDataSource(WritableDataSource<T> dataSource...
    method getWritableDataSource (line 118) | public synchronized static WritableDataSource<Set<ApiDefinition>> getW...
    method setWritableDataSource (line 122) | public synchronized static void setWritableDataSource(WritableDataSour...

FILE: sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/command/UpdateGatewayRuleCommandHandler.java
  class UpdateGatewayRuleCommandHandler (line 37) | @CommandMapping(name = "gateway/updateRules", desc = "Update gateway rul...
    method handle (line 41) | @Override
    method writeToDataSource (line 74) | private <T> boolean writeToDataSource(WritableDataSource<T> dataSource...
    method getWritableDataSource (line 86) | public synchronized static WritableDataSource<Set<GatewayFlowRule>> ge...
    method setWritableDataSource (line 90) | public synchronized static void setWritableDataSource(WritableDataSour...

FILE: sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/param/ConfigurableRequestItemParser.java
  class ConfigurableRequestItemParser (line 48) | public class ConfigurableRequestItemParser<T> implements RequestItemPars...
    method ConfigurableRequestItemParser (line 62) | public ConfigurableRequestItemParser(RequestItemParser<T> delegate) {
    method getPath (line 67) | @Override
    method getRemoteAddress (line 78) | @Override
    method getHeader (line 89) | @Override
    method getUrlParam (line 100) | @Override
    method getCookieValue (line 111) | @Override
    method addPathExtractor (line 122) | public ConfigurableRequestItemParser<T> addPathExtractor(Function<T, S...
    method addRemoteAddressExtractor (line 130) | public ConfigurableRequestItemParser<T> addRemoteAddressExtractor(Func...
    method addHeaderExtractor (line 138) | public ConfigurableRequestItemParser<T> addHeaderExtractor(BiFunction<...
    method addUrlParamExtractor (line 146) | public ConfigurableRequestItemParser<T> addUrlParamExtractor(BiFunctio...
    method addCookieValueExtractor (line 154) | public ConfigurableRequestItemParser<T> addCookieValueExtractor(BiFunc...

FILE: sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/param/GatewayParamParser.java
  class GatewayParamParser (line 34) | public class GatewayParamParser<T> {
    method GatewayParamParser (line 38) | public GatewayParamParser(RequestItemParser<T> requestItemParser) {
    method parseParameterFor (line 51) | public Object[] parseParameterFor(String resource, T request, Predicat...
    method parseInternal (line 86) | private String parseInternal(GatewayParamFlowItem item, T request) {
    method parseClientIp (line 103) | private String parseClientIp(/*@Valid*/ GatewayParamFlowItem item, T r...
    method parseHeader (line 112) | private String parseHeader(/*@Valid*/ GatewayParamFlowItem item, T req...
    method parseHost (line 124) | private String parseHost(/*@Valid*/ GatewayParamFlowItem item, T reque...
    method parseUrlParameter (line 134) | private String parseUrlParameter(/*@Valid*/ GatewayParamFlowItem item,...
    method parseCookie (line 145) | private String parseCookie(/*@Valid*/ GatewayParamFlowItem item, T req...
    method parseWithMatchStrategyInternal (line 156) | private String parseWithMatchStrategyInternal(int matchStrategy, Strin...

FILE: sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/param/GatewayRegexCache.java
  class GatewayRegexCache (line 28) | public final class GatewayRegexCache {
    method getRegexPattern (line 32) | public static Pattern getRegexPattern(String pattern) {
    method addRegexPattern (line 39) | public static boolean addRegexPattern(String pattern) {
    method clear (line 53) | public static void clear() {
    method GatewayRegexCache (line 57) | private GatewayRegexCache() {}

FILE: sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/param/RequestItemParser.java
  type RequestItemParser (line 22) | public interface RequestItemParser<T> {
    method getPath (line 30) | String getPath(T request);
    method getRemoteAddress (line 38) | String getRemoteAddress(T request);
    method getHeader (line 47) | String getHeader(T request, String key);
    method getUrlParam (line 56) | String getUrlParam(T request, String paramName);
    method getCookieValue (line 66) | String getCookieValue(T request, String cookieName);

FILE: sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/rule/GatewayFlowRule.java
  class GatewayFlowRule (line 27) | public class GatewayFlowRule {
    method GatewayFlowRule (line 49) | public GatewayFlowRule() {}
    method GatewayFlowRule (line 51) | public GatewayFlowRule(String resource) {
    method getResource (line 55) | public String getResource() {
    method setResource (line 59) | public GatewayFlowRule setResource(String resource) {
    method getResourceMode (line 64) | public int getResourceMode() {
    method setResourceMode (line 68) | public GatewayFlowRule setResourceMode(int resourceMode) {
    method getGrade (line 73) | public int getGrade() {
    method setGrade (line 77) | public GatewayFlowRule setGrade(int grade) {
    method getControlBehavior (line 82) | public int getControlBehavior() {
    method setControlBehavior (line 86) | public GatewayFlowRule setControlBehavior(int controlBehavior) {
    method getCount (line 91) | public double getCount() {
    method setCount (line 95) | public GatewayFlowRule setCount(double count) {
    method getIntervalSec (line 100) | public long getIntervalSec() {
    method setIntervalSec (line 104) | public GatewayFlowRule setIntervalSec(long intervalSec) {
    method getBurst (line 109) | public int getBurst() {
    method setBurst (line 113) | public GatewayFlowRule setBurst(int burst) {
    method getParamItem (line 118) | public GatewayParamFlowItem getParamItem() {
    method setParamItem (line 122) | public GatewayFlowRule setParamItem(GatewayParamFlowItem paramItem) {
    method getMaxQueueingTimeoutMs (line 127) | public int getMaxQueueingTimeoutMs() {
    method setMaxQueueingTimeoutMs (line 131) | public GatewayFlowRule setMaxQueueingTimeoutMs(int maxQueueingTimeoutM...
    method equals (line 136) | @Override
    method hashCode (line 155) | @Override
    method toString (line 172) | @Override

FILE: sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/rule/GatewayParamFlowItem.java
  class GatewayParamFlowItem (line 24) | public class GatewayParamFlowItem {
    method getIndex (line 48) | public Integer getIndex() {
    method setIndex (line 52) | GatewayParamFlowItem setIndex(Integer index) {
    method getParseStrategy (line 57) | public int getParseStrategy() {
    method setParseStrategy (line 61) | public GatewayParamFlowItem setParseStrategy(int parseStrategy) {
    method getFieldName (line 66) | public String getFieldName() {
    method setFieldName (line 70) | public GatewayParamFlowItem setFieldName(String fieldName) {
    method getPattern (line 75) | public String getPattern() {
    method setPattern (line 79) | public GatewayParamFlowItem setPattern(String pattern) {
    method getMatchStrategy (line 84) | public int getMatchStrategy() {
    method setMatchStrategy (line 88) | public GatewayParamFlowItem setMatchStrategy(int matchStrategy) {
    method toString (line 93) | @Override

FILE: sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/rule/GatewayRuleConverter.java
  class GatewayRuleConverter (line 27) | final class GatewayRuleConverter {
    method toFlowRule (line 29) | static FlowRule toFlowRule(/*@Valid*/ GatewayFlowRule rule) {
    method generateNonMatchPassParamItem (line 37) | static ParamFlowItem generateNonMatchPassParamItem() {
    method generateNonMatchBlockParamItem (line 43) | static ParamFlowItem generateNonMatchBlockParamItem() {
    method applyNonParamToParamRule (line 49) | static ParamFlowRule applyNonParamToParamRule(/*@Valid*/ GatewayFlowRu...
    method applyToParamRule (line 68) | static ParamFlowRule applyToParamRule(/*@Valid*/ GatewayFlowRule gatew...
    method GatewayRuleConverter (line 88) | private GatewayRuleConverter() {}

FILE: sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/rule/GatewayRuleManager.java
  class GatewayRuleManager (line 39) | public final class GatewayRuleManager {
    method GatewayRuleManager (line 60) | private GatewayRuleManager() {
    method register2Property (line 63) | public static void register2Property(SentinelProperty<Set<GatewayFlowR...
    method loadRules (line 80) | public static boolean loadRules(Set<GatewayFlowRule> rules) {
    method getRules (line 84) | public static Set<GatewayFlowRule> getRules() {
    method getRulesForResource (line 92) | public static Set<GatewayFlowRule> getRulesForResource(String resource...
    method getConvertedParamRules (line 110) | public static List<ParamFlowRule> getConvertedParamRules(String resour...
    method isValidRule (line 117) | public static boolean isValidRule(GatewayFlowRule rule) {
    method isValidParamItem (line 136) | static boolean isValidParamItem(/*@NonNull*/ GatewayParamFlowItem item) {
    class GatewayRulePropertyListener (line 147) | private static final class GatewayRulePropertyListener implements Prop...
      method configUpdate (line 149) | @Override
      method configLoad (line 155) | @Override
      method getIdxInternal (line 161) | private int getIdxInternal(Map<String, Integer> idxMap, String resou...
      method cacheRegexPattern (line 169) | private void cacheRegexPattern(/*@NonNull*/ GatewayParamFlowItem ite...
      method applyGatewayRuleInternal (line 179) | private synchronized void applyGatewayRuleInternal(Set<GatewayFlowRu...
      method applyToConvertedParamMap (line 239) | private void applyToConvertedParamMap(Set<ParamFlowRule> paramFlowRu...

FILE: sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/slot/GatewayFlowSlot.java
  class GatewayFlowSlot (line 36) | @Spi(order = -4000)
    method entry (line 39) | @Override
    method checkGatewayParamFlow (line 47) | private void checkGatewayParamFlow(ResourceWrapper resourceWrapper, in...
    method exit (line 73) | @Override

FILE: sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/slot/GatewaySlotChainBuilder.java
  class GatewaySlotChainBuilder (line 30) | @Deprecated

FILE: sentinel-adapter/sentinel-api-gateway-adapter-common/src/test/java/com/alibaba/csp/sentinel/adapter/gateway/common/api/GatewayApiDefinitionManagerTest.java
  class GatewayApiDefinitionManagerTest (line 12) | public class GatewayApiDefinitionManagerTest {
    method testIsValidApi (line 14) | @Test

FILE: sentinel-adapter/sentinel-api-gateway-adapter-common/src/test/java/com/alibaba/csp/sentinel/adapter/gateway/common/param/GatewayParamParserTest.java
  class GatewayParamParserTest (line 44) | @SuppressWarnings("unchecked")
    method test (line 48) | @Override
    method test (line 54) | @Override
    method testParseParametersNoParamItem (line 60) | @Test
    method testParseParametersWithItems (line 84) | @Test
    method testParseParametersWithEmptyItemPattern (line 189) | @Test
    method testParseParametersWithItemPatternMatching (line 218) | @Test
    method mockClientHostAddress (line 308) | private void mockClientHostAddress(/*@Mock*/ RequestItemParser parser,...
    method mockHeaders (line 312) | private void mockHeaders(/*@Mock*/ RequestItemParser parser, Map<Strin...
    method mockUrlParams (line 318) | private void mockUrlParams(/*@Mock*/ RequestItemParser parser, Map<Str...
    method mockSingleUrlParam (line 324) | private void mockSingleUrlParam(/*@Mock*/ RequestItemParser parser, St...
    method mockSingleHeader (line 328) | private void mockSingleHeader(/*@Mock*/ RequestItemParser parser, Stri...
    method mockSingleCookie (line 332) | private void mockSingleCookie(/*@Mock*/ RequestItemParser parser, Stri...
    method setUp (line 336) | @Before
    method tearDown (line 343) | @After

FILE: sentinel-adapter/sentinel-api-gateway-adapter-common/src/test/java/com/alibaba/csp/sentinel/adapter/gateway/common/param/GatewayRegexCacheTest.java
  class GatewayRegexCacheTest (line 27) | public class GatewayRegexCacheTest {
    method setUp (line 29) | @Before
    method tearDown (line 34) | @After
    method testAddAndGetRegexPattern (line 39) | @Test

FILE: sentinel-adapter/sentinel-api-gateway-adapter-common/src/test/java/com/alibaba/csp/sentinel/adapter/gateway/common/rule/GatewayRuleConverterTest.java
  class GatewayRuleConverterTest (line 30) | public class GatewayRuleConverterTest {
    method testConvertToFlowRule (line 32) | @Test
    method testConvertAndApplyToParamRule (line 45) | @Test

FILE: sentinel-adapter/sentinel-api-gateway-adapter-common/src/test/java/com/alibaba/csp/sentinel/adapter/gateway/common/rule/GatewayRuleManagerTest.java
  class GatewayRuleManagerTest (line 35) | public class GatewayRuleManagerTest {
    method testLoadAndGetGatewayRules (line 37) | @Test
    method testIsValidRule (line 73) | @Test
    method setUp (line 106) | @Before
    method tearDown (line 111) | @After

FILE: sentinel-adapter/sentinel-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/AbstractDubboFilter.java
  class AbstractDubboFilter (line 26) | abstract class AbstractDubboFilter implements Filter {
    method getMethodResourceName (line 28) | protected String getMethodResourceName(Invoker<?> invoker, Invocation ...
    method getMethodResourceName (line 46) | protected String getMethodResourceName(Invoker<?> invoker, Invocation ...
    method getInterfaceName (line 56) | protected String getInterfaceName(Invoker<?> invoker) {
    method getInterfaceName (line 60) | protected String getInterfaceName(Invoker<?> invoker, String prefix) {

FILE: sentinel-adapter/sentinel-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/DubboAdapterGlobalConfig.java
  class DubboAdapterGlobalConfig (line 33) | public final class DubboAdapterGlobalConfig {
    method isUsePrefix (line 48) | public static boolean isUsePrefix() {
    method getDubboProviderPrefix (line 52) | public static String getDubboProviderPrefix() {
    method getDubboConsumerPrefix (line 60) | public static String getDubboConsumerPrefix() {
    method getConsumerFallback (line 68) | public static DubboFallback getConsumerFallback() {
    method setConsumerFallback (line 72) | public static void setConsumerFallback(DubboFallback consumerFallback) {
    method getProviderFallback (line 77) | public static DubboFallback getProviderFallback() {
    method setProviderFallback (line 81) | public static void setProviderFallback(DubboFallback providerFallback) {
    method getOriginParser (line 92) | public static DubboOriginParser getOriginParser() {
    method setOriginParser (line 102) | public static void setOriginParser(DubboOriginParser originParser) {
    method DubboAdapterGlobalConfig (line 107) | private DubboAdapterGlobalConfig() {}

FILE: sentinel-adapter/sentinel-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/DubboAppContextFilter.java
  class DubboAppContextFilter (line 34) | @Activate(group = CONSUMER)
    method invoke (line 37) | @Override

FILE: sentinel-adapter/sentinel-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/DubboUtils.java
  class DubboUtils (line 23) | public final class DubboUtils {
    method getApplication (line 27) | public static String getApplication(Invocation invocation, String defa...
    method DubboUtils (line 34) | private DubboUtils() {}

FILE: sentinel-adapter/sentinel-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/SentinelDubboConsumerFilter.java
  class SentinelDubboConsumerFilter (line 45) | @Activate(group = CONSUMER)
    method SentinelDubboConsumerFilter (line 48) | public SentinelDubboConsumerFilter() {
    method invoke (line 52) | @Override

FILE: sentinel-adapter/sentinel-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/SentinelDubboProviderFilter.java
  class SentinelDubboProviderFilter (line 46) | @Activate(group = PROVIDER)
    method SentinelDubboProviderFilter (line 49) | public SentinelDubboProviderFilter() {
    method invoke (line 53) | @Override

FILE: sentinel-adapter/sentinel-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/fallback/DefaultDubboFallback.java
  class DefaultDubboFallback (line 28) | public class DefaultDubboFallback implements DubboFallback {
    method handle (line 30) | @Override

FILE: sentinel-adapter/sentinel-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/fallback/DubboFallback.java
  type DubboFallback (line 28) | public interface DubboFallback {
    method handle (line 38) | Result handle(Invoker<?> invoker, Invocation invocation, BlockExceptio...

FILE: sentinel-adapter/sentinel-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/fallback/DubboFallbackRegistry.java
  class DubboFallbackRegistry (line 26) | @Deprecated
    method getConsumerFallback (line 29) | public static DubboFallback getConsumerFallback() {
    method setConsumerFallback (line 33) | public static void setConsumerFallback(DubboFallback consumerFallback) {
    method getProviderFallback (line 37) | public static DubboFallback getProviderFallback() {
    method setProviderFallback (line 41) | public static void setProviderFallback(DubboFallback providerFallback) {
    method DubboFallbackRegistry (line 45) | private DubboFallbackRegistry() {}

FILE: sentinel-adapter/sentinel-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/origin/DefaultDubboOriginParser.java
  class DefaultDubboOriginParser (line 28) | public class DefaultDubboOriginParser implements DubboOriginParser {
    method parse (line 30) | @Override

FILE: sentinel-adapter/sentinel-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/origin/DubboOriginParser.java
  type DubboOriginParser (line 27) | public interface DubboOriginParser {
    method parse (line 36) | String parse(Invoker<?> invoker, Invocation invocation);

FILE: sentinel-adapter/sentinel-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/BaseTest.java
  class BaseTest (line 14) | public class BaseTest {
    method cleanUpAll (line 19) | protected static void cleanUpAll() {

FILE: sentinel-adapter/sentinel-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/AbstractDubboFilterTest.java
  class AbstractDubboFilterTest (line 22) | public class AbstractDubboFilterTest {
    method setUp (line 25) | @Before
    method tearDown (line 32) | @After
    method invoke (line 40) | @Override
    method testGetResourceName (line 47) | @Test
    method testGetResourceNameWithPrefix (line 62) | @Test

FILE: sentinel-adapter/sentinel-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/DubboAppContextFilterTest.java
  class DubboAppContextFilterTest (line 18) | public class DubboAppContextFilterTest extends BaseTest {
    method setUp (line 22) | @Before
    method cleanUp (line 27) | @After
    method testInvokeApplicationKey (line 32) | @Test
    method testInvokeNullApplicationKey (line 46) | @Test

FILE: sentinel-adapter/sentinel-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/DubboUtilsTest.java
  class DubboUtilsTest (line 15) | public class DubboUtilsTest {
    method testGetApplication (line 17) | @Test
    method testGetApplicationNoAttachments (line 29) | @Test(expected = IllegalArgumentException.class)

FILE: sentinel-adapter/sentinel-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/SentinelDubboConsumerFilterTest.java
  class SentinelDubboConsumerFilterTest (line 34) | public class SentinelDubboConsumerFilterTest extends BaseTest {
    method setUp (line 38) | @Before
    method cleanUp (line 43) | @After
    method testInvoke (line 48) | @Test
    method verifyInvocationStructure (line 81) | private void verifyInvocationStructure(Invoker invoker, Invocation inv...

FILE: sentinel-adapter/sentinel-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/SentinelDubboProviderFilterTest.java
  class SentinelDubboProviderFilterTest (line 33) | public class SentinelDubboProviderFilterTest extends BaseTest {
    method setUp (line 37) | @Before
    method cleanUp (line 42) | @After
    method testInvoke (line 47) | @Test
    method verifyInvocationStructure (line 83) | private void verifyInvocationStructure(String originApplication, Invok...

FILE: sentinel-adapter/sentinel-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/fallback/DubboFallbackRegistryTest.java
  class DubboFallbackRegistryTest (line 32) | public class DubboFallbackRegistryTest {
    method testDefaultFallback (line 34) | @Test
    method testCustomFallback (line 43) | @Test

FILE: sentinel-adapter/sentinel-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/origin/DubboOriginRegistryTest.java
  class DubboOriginRegistryTest (line 31) | public class DubboOriginRegistryTest {
    method cleanUp (line 33) | @After
    method testDefaultOriginParserFail (line 38) | @Test(expected = IllegalArgumentException.class)
    method testDefaultOriginParserSuccess (line 43) | @Test
    method testCustomOriginParser (line 52) | @Test

FILE: sentinel-adapter/sentinel-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/provider/DemoService.java
  type DemoService (line 21) | public interface DemoService {
    method sayHello (line 22) | String sayHello(String name, int n);

FILE: sentinel-adapter/sentinel-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/provider/impl/DemoServiceImpl.java
  class DemoServiceImpl (line 23) | public class DemoServiceImpl implements DemoService {
    method sayHello (line 24) | public String sayHello(String name, int n) {

FILE: sentinel-adapter/sentinel-grpc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/grpc/SentinelGrpcClientInterceptor.java
  class SentinelGrpcClientInterceptor (line 59) | public class SentinelGrpcClientInterceptor implements ClientInterceptor {
    method interceptCall (line 63) | @Override

FILE: sentinel-adapter/sentinel-grpc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/grpc/SentinelGrpcServerInterceptor.java
  class SentinelGrpcServerInterceptor (line 49) | public class SentinelGrpcServerInterceptor implements ServerInterceptor {
    method interceptCall (line 54) | @Override

FILE: sentinel-adapter/sentinel-grpc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/grpc/FooServiceClient.java
  class FooServiceClient (line 32) | final class FooServiceClient {
    method FooServiceClient (line 36) | FooServiceClient(String host, int port) {
    method FooServiceClient (line 43) | FooServiceClient(String host, int port, ClientInterceptor interceptor) {
    method sayHello (line 51) | FooResponse sayHello(FooRequest request) {
    method anotherHello (line 58) | FooResponse anotherHello(FooRequest request) {
    method shutdown (line 65) | void shutdown() throws InterruptedException {

FILE: sentinel-adapter/sentinel-grpc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/grpc/FooServiceImpl.java
  class FooServiceImpl (line 26) | class FooServiceImpl extends FooServiceGrpc.FooServiceImplBase {
    method sayHello (line 27) | @Override
    method anotherHello (line 52) | @Override

FILE: sentinel-adapter/sentinel-grpc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/grpc/GrpcTestServer.java
  class GrpcTestServer (line 24) | class GrpcTestServer {
    method GrpcTestServer (line 28) | GrpcTestServer() {}
    method start (line 30) | void start(int port, boolean shouldIntercept) throws IOException {
    method stop (line 43) | void stop() {

FILE: sentinel-adapter/sentinel-grpc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/grpc/SentinelGrpcClientInterceptorTest.java
  class SentinelGrpcClientInterceptorTest (line 43) | public class SentinelGrpcClientInterceptorTest {
    method configureFlowRule (line 48) | private void configureFlowRule(int count) {
    method testGrpcClientInterceptor (line 58) | @Test
    method sendRequest (line 87) | private boolean sendRequest(FooRequest request) {
    method cleanUpBefore (line 98) | @Before
    method cleanUpAfter (line 104) | @After

FILE: sentinel-adapter/sentinel-grpc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/grpc/SentinelGrpcServerInterceptorTest.java
  class SentinelGrpcServerInterceptorTest (line 43) | public class SentinelGrpcServerInterceptorTest {
    method configureFlowRule (line 48) | private void configureFlowRule(int count) {
    method testGrpcServerInterceptor (line 58) | @Test
    method sendRequest (line 87) | private boolean sendRequest(FooRequest request) {
    method cleanUpBefore (line 98) | @Before
    method cleanUpAfter (line 104) | @After

FILE: sentinel-adapter/sentinel-jax-rs-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/jaxrs/SentinelJaxRsClientTemplate.java
  class SentinelJaxRsClientTemplate (line 42) | public class SentinelJaxRsClientTemplate {
    method execute (line 50) | public static Response execute(String resourceName, Supplier<Response>...
    method executeAsync (line 71) | public static Future<Response> executeAsync(String resourceName, Suppl...

FILE: sentinel-adapter/sentinel-jax-rs-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/jaxrs/SentinelJaxRsProviderFilter.java
  class SentinelJaxRsProviderFilter (line 32) | @Provider
    method filter (line 43) | @Override
    method filter (line 67) | @Override
    method getResourceName (line 77) | public String getResourceName(ContainerRequestContext containerRequest...
    method getContextName (line 81) | protected String getContextName(ContainerRequestContext request) {
    method parseOrigin (line 85) | protected String parseOrigin(ContainerRequestContext request) {

FILE: sentinel-adapter/sentinel-jax-rs-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/jaxrs/config/SentinelJaxRsConfig.java
  class SentinelJaxRsConfig (line 28) | public class SentinelJaxRsConfig {
    method getResourceNameParser (line 36) | public static ResourceNameParser getResourceNameParser() {
    method setResourceNameParser (line 40) | public static void setResourceNameParser(ResourceNameParser resourceNa...
    method getRequestOriginParser (line 44) | public static RequestOriginParser getRequestOriginParser() {
    method setRequestOriginParser (line 48) | public static void setRequestOriginParser(RequestOriginParser originPa...
    method getJaxRsFallback (line 52) | public static SentinelJaxRsFallback getJaxRsFallback() {
    method setJaxRsFallback (line 56) | public static void setJaxRsFallback(SentinelJaxRsFallback jaxRsFallbac...
    method SentinelJaxRsConfig (line 60) | private SentinelJaxRsConfig() {

FILE: sentinel-adapter/sentinel-jax-rs-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/jaxrs/exception/DefaultExceptionMapper.java
  class DefaultExceptionMapper (line 30) | @Provider
    method toResponse (line 33) | @Override

FILE: sentinel-adapter/sentinel-jax-rs-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/jaxrs/fallback/DefaultSentinelJaxRsFallback.java
  class DefaultSentinelJaxRsFallback (line 27) | public class DefaultSentinelJaxRsFallback implements SentinelJaxRsFallba...
    method fallbackResponse (line 28) | @Override
    method fallbackFutureResponse (line 36) | @Override

FILE: sentinel-adapter/sentinel-jax-rs-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/jaxrs/fallback/SentinelJaxRsFallback.java
  type SentinelJaxRsFallback (line 24) | public interface SentinelJaxRsFallback {
    method fallbackResponse (line 33) | Response fallbackResponse(String route, Throwable cause);
    method fallbackFutureResponse (line 42) | Future<Response> fallbackFutureResponse(String route, Throwable cause);

FILE: sentinel-adapter/sentinel-jax-rs-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/jaxrs/future/FutureWrapper.java
  class FutureWrapper (line 26) | public class FutureWrapper<V> implements Future<V> {
    method FutureWrapper (line 32) | public FutureWrapper(AsyncEntry entry, Future<V> future) {
    method cancel (line 37) | @Override
    method isCancelled (line 47) | @Override
    method isDone (line 52) | @Override
    method get (line 57) | @Override
    method get (line 66) | @Override
    method exitEntry (line 75) | private void exitEntry() {

FILE: sentinel-adapter/sentinel-jax-rs-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/jaxrs/request/DefaultRequestOriginParser.java
  class DefaultRequestOriginParser (line 23) | public class DefaultRequestOriginParser implements RequestOriginParser {
    method parseOrigin (line 27) | @Override

FILE: sentinel-adapter/sentinel-jax-rs-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/jaxrs/request/DefaultResourceNameParser.java
  class DefaultResourceNameParser (line 25) | public class DefaultResourceNameParser implements ResourceNameParser {
    method parse (line 26) | @Override

FILE: sentinel-adapter/sentinel-jax-rs-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/jaxrs/request/RequestOriginParser.java
  type RequestOriginParser (line 25) | public interface RequestOriginParser {
    method parseOrigin (line 33) | String parseOrigin(ContainerRequestContext request);

FILE: sentinel-adapter/sentinel-jax-rs-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/jaxrs/request/ResourceNameParser.java
  type ResourceNameParser (line 24) | public interface ResourceNameParser {
    method parse (line 26) | String parse(ContainerRequestContext containerRequestContext, Resource...

FILE: sentinel-adapter/sentinel-jax-rs-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/jaxrs/ClientFilterTest.java
  class ClientFilterTest (line 57) | public class ClientFilterTest {
    method startApplication (line 69) | @BeforeClass
    method shutdown (line 82) | @AfterClass
    method cleanUp (line 106) | @After
    method testClientGetHello (line 112) | @Test
    method testClientAsyncGetHello (line 143) | @Test
    method testCustomResourceName (line 166) | @Test
    method testClientFallback (line 205) | @Test
    method testClientCustomFallback (line 227) | @Test
    method testServerReturn400 (line 269) | @Test
    method testServerReturn500 (line 289) | @Test
    method testServerTimeout (line 309) | @Test
    method testFutureGetServerTimeout (line 330) | @Test
    method testFutureGetTimeout (line 353) | @Test
    method testCancelFuture (line 376) | @Test
    method configureRulesFor (line 399) | private void configureRulesFor(String resource, int count) {
    method configureRulesFor (line 403) | private void configureRulesFor(String resource, int count, String limi...

FILE: sentinel-adapter/sentinel-jax-rs-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/jaxrs/ProviderFilterTest.java
  class ProviderFilterTest (line 56) | public class ProviderFilterTest {
    method startApplication (line 62) | @BeforeClass
    method shutdown (line 71) | @AfterClass
    method cleanUp (line 76) | @After
    method testGetHello (line 83) | @Test
    method testAsyncGetHello (line 106) | @Test
    method testUrlPathParam (line 129) | @Test
    method testDefaultFallback (line 150) | @Test
    method testCustomFallback (line 164) | @Test
    method testCustomRequestOriginParser (line 199) | @Test
    method testExceptionMapper (line 232) | @Test
    method configureRulesFor (line 243) | private void configureRulesFor(String resource, int count) {
    method configureRulesFor (line 247) | private void configureRulesFor(String resource, int count, String limi...

FILE: sentinel-adapter/sentinel-jax-rs-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/jaxrs/TestApplication.java
  class TestApplication (line 24) | @SpringBootApplication
    method main (line 27) | public static void main(String[] args) {

FILE: sentinel-adapter/sentinel-jax-rs-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/jaxrs/TestResource.java
  class TestResource (line 32) | @Path("/test")
    method sayHello (line 38) | @Path("/hello")
    method asyncSayHello (line 45) | @Path("/async-hello")
    method sayHelloWithName (line 62) | @Path("/hello/{name}")
    method exception (line 69) | @Path("/ex")
    method badRequest (line 76) | @Path("/400")
    method delay (line 85) | @Path("/delay/{seconds}")

FILE: sentinel-adapter/sentinel-motan-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/motan/MotanUtils.java
  class MotanUtils (line 27) | public class MotanUtils {
    method MotanUtils (line 29) | private MotanUtils() {}
    method getMethodResourceName (line 31) | public static String getMethodResourceName(Caller<?> caller, Request r...
    method getMethodResourceName (line 35) | public static String getMethodResourceName(Caller<?> caller, Request r...
    method getMethodResourceName (line 59) | public static String getMethodResourceName(Caller<?> caller, Request r...
    method getInterfaceName (line 70) | public static String getInterfaceName(Caller<?> caller) {
    method getInterfaceName (line 74) | public static String getInterfaceName(Caller<?> caller, Boolean useGro...
    method getInterfaceName (line 78) | public static String getInterfaceName(Caller<?> caller, String prefix) {

FILE: sentinel-adapter/sentinel-motan-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/motan/SentinelMotanConsumerFilter.java
  class SentinelMotanConsumerFilter (line 34) | @Activation(key = MotanConstants.NODE_TYPE_REFERER)
    method SentinelMotanConsumerFilter (line 38) | public SentinelMotanConsumerFilter(){
    method filter (line 42) | @Override

FILE: sentinel-adapter/sentinel-motan-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/motan/SentinelMotanProviderFilter.java
  class SentinelMotanProviderFilter (line 36) | @Activation(key = MotanConstants.NODE_TYPE_SERVICE)
    method SentinelMotanProviderFilter (line 40) | public SentinelMotanProviderFilter(){
    method filter (line 44) | @Override

FILE: sentinel-adapter/sentinel-motan-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/motan/config/MotanAdapterGlobalConfig.java
  class MotanAdapterGlobalConfig (line 27) | public class MotanAdapterGlobalConfig {
    method MotanAdapterGlobalConfig (line 51) | private MotanAdapterGlobalConfig() {}
    method isUsePrefix (line 53) | public static boolean isUsePrefix() {
    method getMotanProviderPrefix (line 57) | public static String getMotanProviderPrefix() {
    method getMotanConsumerPrefix (line 65) | public static String getMotanConsumerPrefix() {
    method getMotanInterfaceGroupAndVersionEnabled (line 73) | public static Boolean getMotanInterfaceGroupAndVersionEnabled() {
    method getConsumerFallback (line 77) | public static MotanFallback getConsumerFallback() {
    method setConsumerFallback (line 81) | public static void setConsumerFallback(MotanFallback consumerFallback) {
    method getProviderFallback (line 86) | public static MotanFallback getProviderFallback() {
    method setProviderFallback (line 90) | public static void setProviderFallback(MotanFallback providerFallback) {

FILE: sentinel-adapter/sentinel-motan-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/motan/fallback/DefaultMotanFallback.java
  class DefaultMotanFallback (line 27) | public class DefaultMotanFallback implements MotanFallback{
    method handle (line 29) | @Override

FILE: sentinel-adapter/sentinel-motan-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/motan/fallback/MotanFallback.java
  type MotanFallback (line 26) | public interface MotanFallback {
    method handle (line 35) | Response handle(Caller<?> caller, Request request, BlockException ex);

FILE: sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpConfig.java
  class SentinelOkHttpConfig (line 28) | public class SentinelOkHttpConfig {
    method SentinelOkHttpConfig (line 36) | public SentinelOkHttpConfig() {
    method SentinelOkHttpConfig (line 40) | public SentinelOkHttpConfig(String resourcePrefix) {
    method SentinelOkHttpConfig (line 44) | public SentinelOkHttpConfig(OkHttpResourceExtractor resourceExtractor,...
    method SentinelOkHttpConfig (line 48) | public SentinelOkHttpConfig(String resourcePrefix,
    method getResourcePrefix (line 58) | public String getResourcePrefix() {
    method getResourceExtractor (line 62) | public OkHttpResourceExtractor getResourceExtractor() {
    method getFallback (line 66) | public OkHttpFallback getFallback() {
    method toString (line 70) | @Override

FILE: sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptor.java
  class SentinelOkHttpInterceptor (line 32) | public class SentinelOkHttpInterceptor implements Interceptor {
    method SentinelOkHttpInterceptor (line 36) | public SentinelOkHttpInterceptor() {
    method SentinelOkHttpInterceptor (line 40) | public SentinelOkHttpInterceptor(SentinelOkHttpConfig config) {
    method intercept (line 45) | @Override

FILE: sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/extractor/DefaultOkHttpResourceExtractor.java
  class DefaultOkHttpResourceExtractor (line 24) | public class DefaultOkHttpResourceExtractor implements OkHttpResourceExt...
    method extract (line 26) | @Override

FILE: sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/extractor/OkHttpResourceExtractor.java
  type OkHttpResourceExtractor (line 24) | public interface OkHttpResourceExtractor {
    method extract (line 33) | String extract(Request request, Connection connection);

FILE: sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/DefaultOkHttpFallback.java
  class DefaultOkHttpFallback (line 27) | public class DefaultOkHttpFallback implements OkHttpFallback {
    method handle (line 29) | @Override

FILE: sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/OkHttpFallback.java
  type OkHttpFallback (line 26) | public interface OkHttpFallback {
    method handle (line 28) | Response handle(Request request, Connection connection, BlockException...

FILE: sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java
  class SentinelOkHttpInterceptorTest (line 38) | @RunWith(SpringRunner.class)
    method testSentinelOkHttpInterceptor0 (line 49) | @Test
    method testSentinelOkHttpInterceptor1 (line 68) | @Test

FILE: sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/app/TestApplication.java
  class TestApplication (line 24) | @SpringBootApplication
    method main (line 27) | public static void main(String[] args) {

FILE: sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/app/controller/TestController.java
  class TestController (line 25) | @RestController
    method back (line 28) | @RequestMapping("/okhttp/back")
    method back (line 33) | @RequestMapping("/okhttp/back/{id}")

FILE: sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfigTest.java
  class SentinelOkHttpConfigTest (line 27) | public class SentinelOkHttpConfigTest {
    method testConfigSetCleaner (line 29) | @Test(expected = IllegalArgumentException.class)
    method testConfigSetFallback (line 34) | @Test(expected = IllegalArgumentException.class)

FILE: sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/extractor/OkHttpResourceExtractorTest.java
  class OkHttpResourceExtractorTest (line 27) | public class OkHttpResourceExtractorTest {
    method testDefaultOkHttpResourceExtractor (line 29) | @Test
    method testCustomizeOkHttpUrlCleaner (line 40) | @Test

FILE: sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/OkHttpFallbackTest.java
  class OkHttpFallbackTest (line 26) | public class OkHttpFallbackTest {
    method testDefaultOkHttpFallback (line 28) | @Test(expected = SentinelRpcException.class)

FILE: sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-deployment/src/main/java/com/alibaba/csp/sentinel/adapter/quarkus/annotation/deployment/SentinelAnnotationQuarkusAdapterProcessor.java
  class SentinelAnnotationQuarkusAdapterProcessor (line 30) | class SentinelAnnotationQuarkusAdapterProcessor {
    method feature (line 34) | @BuildStep
    method additionalBeans (line 39) | @BuildStep

FILE: sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-deployment/src/test/java/com/alibaba/csp/sentinel/adapter/quarkus/annotation/deployment/FooService.java
  class FooService (line 27) | @ApplicationScoped
    method foo (line 30) | @SentinelResourceBinding(value = "apiFoo", blockHandler = "fooBlockHan...
    method fooWithFallback (line 42) | @SentinelResourceBinding(value = "apiFooWithFallback", blockHandler = ...
    method anotherFoo (line 54) | @SentinelResourceBinding(value = "apiAnotherFooWithDefaultFallback", d...
    method random (line 63) | @SentinelResourceBinding(blockHandler = "globalBlockHandler", blockHan...
    method baz (line 68) | @SentinelResourceBinding(value = "apiBaz", blockHandler = "bazBlockHan...
    method fooBlockHandler (line 77) | public String fooBlockHandler(int i, BlockException ex) {
    method fooFallbackFunc (line 81) | public String fooFallbackFunc(int i) {

FILE: sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-deployment/src/test/java/com/alibaba/csp/sentinel/adapter/quarkus/annotation/deployment/FooUtil.java
  class FooUtil (line 23) | public class FooUtil {
    method globalBlockHandler (line 28) | public static int globalBlockHandler(BlockException ex) {
    method globalDefaultFallback (line 33) | public static String globalDefaultFallback(Throwable t) {

FILE: sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-deployment/src/test/java/com/alibaba/csp/sentinel/adapter/quarkus/annotation/deployment/SentinelAnnotationQuarkusAdapterTest.java
  class SentinelAnnotationQuarkusAdapterTest (line 44) | public class SentinelAnnotationQuarkusAdapterTest {
    method setUp (line 57) | @BeforeEach
    method tearDown (line 63) | @AfterEach
    method testForeignBlockHandlerClass (line 69) | @Test
    method testBlockHandlerNotFound (line 84) | @Test
    method testAnnotationExceptionsToIgnore (line 101) | @Test
    method testFallbackWithNoParams (line 114) | @Test
    method testDefaultFallbackWithSingleParam (line 143) | @Test
    method testNormalBlockHandlerAndFallback (line 164) | @Test

FILE: sentinel-adapter/sentinel-quarkus-adapter/sentinel-jax-rs-quarkus-adapter-deployment/src/main/java/com/alibaba/csp/sentinel/adapter/quarkus/jaxrs/deployment/SentinelJaxRsQuarkusAdapterProcessor.java
  class SentinelJaxRsQuarkusAdapterProcessor (line 26) | class SentinelJaxRsQuarkusAdapterProcessor {
    method feature (line 32) | @BuildStep

FILE: sentinel-adapter/sentinel-quarkus-adapter/sentinel-jax-rs-quarkus-adapter-deployment/src/test/java/com/alibaba/csp/sentinel/adapter/quarkus/jaxrs/deployment/SentinelJaxRsQuarkusAdapterTest.java
  class SentinelJaxRsQuarkusAdapterTest (line 52) | public class SentinelJaxRsQuarkusAdapterTest {
    method cleanUp (line 62) | @AfterEach
    method testGetHello (line 68) | @Test
    method testAsyncGetHello (line 91) | @Test
    method testUrlPathParam (line 114) | @Test
    method testDefaultFallback (line 135) | @Test
    method testCustomFallback (line 149) | @Test
    method testCustomRequestOriginParser (line 184) | @Test
    method testExceptionMapper (line 217) | @Test
    method configureRulesFor (line 228) | private void configureRulesFor(String resource, int count) {
    method configureRulesFor (line 232) | private void configureRulesFor(String resource, int count, String limi...

FILE: sentinel-adapter/sentinel-quarkus-adapter/sentinel-jax-rs-quarkus-adapter-deployment/src/test/java/com/alibaba/csp/sentinel/adapter/quarkus/jaxrs/deployment/TestResource.java
  class TestResource (line 31) | @Path("/test")
    method sayHello (line 36) | @Path("/hello")
    method asyncSayHello (line 43) | @Path("/async-hello")
    method sayHelloWithName (line 60) | @Path("/hello/{name}")
    method exception (line 67) | @Path("/ex")
    method badRequest (line 74) | @Path("/400")
    method delay (line 83) | @Path("/delay/{seconds}")

FILE: sentinel-adapter/sentinel-quarkus-adapter/sentinel-native-image-quarkus-adapter-deployment/src/main/java/com/alibaba/csp/sentinel/adapter/quarkus/nativeimage/SentinelNativeImageProcessor.java
  class SentinelNativeImageProcessor (line 34) | class SentinelNativeImageProcessor {
    method feature (line 38) | @BuildStep
    method runtimeInitializedClasses (line 43) | @BuildStep(onlyIf = NativeBuild.class)
    method setupSentinelReflectiveClasses (line 62) | @BuildStep(onlyIf = NativeBuild.class)
    method record (line 68) | @BuildStep(onlyIf = NativeBuild.class)

FILE: sentinel-adapter/sentinel-quarkus-adapter/sentinel-native-image-quarkus-adapter-runtime/src/main/java/com/alibaba/csp/sentinel/adapter/quarkus/nativeimage/SentinelRecorder.java
  class SentinelRecorder (line 31) | @Recorder
    method init (line 37) | public void init() {

FILE: sentinel-adapter/sentinel-reactor-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/reactor/ContextConfig.java
  class ContextConfig (line 24) | public class ContextConfig {
    method ContextConfig (line 29) | public ContextConfig(String contextName) {
    method ContextConfig (line 33) | public ContextConfig(String contextName, String origin) {
    method getContextName (line 42) | public String getContextName() {
    method getOrigin (line 46) | public String getOrigin() {
    method toString (line 50) | @Override

FILE: sentinel-adapter/sentinel-reactor-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/reactor/EntryConfig.java
  class EntryConfig (line 28) | public class EntryConfig {
    method EntryConfig (line 38) | public EntryConfig(String resourceName) {
    method EntryConfig (line 42) | public EntryConfig(String resourceName, EntryType entryType) {
    method EntryConfig (line 46) | public EntryConfig(String resourceName, EntryType entryType, ContextCo...
    method EntryConfig (line 50) | public EntryConfig(String resourceName, int resourceType, EntryType en...
    method EntryConfig (line 54) | public EntryConfig(String resourceName, EntryType entryType, int acqui...
    method EntryConfig (line 58) | public EntryConfig(String resourceName, EntryType entryType, int acqui...
    method EntryConfig (line 63) | public EntryConfig(String resourceName, int resourceType, EntryType en...
    method EntryConfig (line 67) | public EntryConfig(String resourceName, int resourceType, EntryType en...
    method getResourceName (line 81) | public String getResourceName() {
    method getEntryType (line 85) | public EntryType getEntryType() {
    method getAcquireCount (line 89) | public int getAcquireCount() {
    method getArgs (line 93) | public Object[] getArgs() {
    method getContextConfig (line 97) | public ContextConfig getContextConfig() {
    method getResourceType (line 104) | public int getResourceType() {
    method toString (line 108) | @Override

FILE: sentinel-adapter/sentinel-reactor-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/reactor/FluxSentinelOperator.java
  class FluxSentinelOperator (line 28) | public class FluxSentinelOperator<T> extends FluxOperator<T, T> {
    method FluxSentinelOperator (line 32) | public FluxSentinelOperator(Flux<? extends T> source, EntryConfig entr...
    method subscribe (line 38) | @Override

FILE: sentinel-adapter/sentinel-reactor-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/reactor/InheritableBaseSubscriber.java
  class InheritableBaseSubscriber (line 36) | abstract class InheritableBaseSubscriber<T> implements CoreSubscriber<T>...
    method upstream (line 49) | protected Subscription upstream() {
    method isDisposed (line 53) | @Override
    method dispose (line 62) | @Override
    method hookOnSubscribe (line 76) | protected void hookOnSubscribe(Subscription subscription) {
    method hookOnNext (line 88) | protected void hookOnNext(T value) {
    method hookOnComplete (line 95) | protected void hookOnComplete() {
    method hookOnError (line 105) | protected void hookOnError(Throwable throwable) {
    method hookOnCancel (line 113) | protected void hookOnCancel() {
    method hookFinally (line 128) | protected void hookFinally(SignalType type) {
    method onSubscribe (line 132) | @Override
    method onNext (line 143) | @Override
    method shouldCallErrorDropHook (line 153) | protected boolean shouldCallErrorDropHook() {
    method onError (line 157) | @Override
    method onComplete (line 185) | @Override
    method request (line 201) | @Override
    method requestUnbounded (line 214) | public final void requestUnbounded() {
    method cancel (line 218) | @Override
    method safeHookFinally (line 231) | void safeHookFinally(SignalType type) {
    method toString (line 239) | @Override

FILE: sentinel-adapter/sentinel-reactor-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/reactor/MonoSentinelOperator.java
  class MonoSentinelOperator (line 28) | public class MonoSentinelOperator<T> extends MonoOperator<T, T> {
    method MonoSentinelOperator (line 32) | public MonoSentinelOperator(Mono<? extends T> source, EntryConfig entr...
    method subscribe (line 38) | @Override

FILE: sentinel-adapter/sentinel-reactor-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/reactor/ReactorSphU.java
  class ReactorSphU (line 35) | public final class ReactorSphU {
    method entryWith (line 37) | public static <R> Mono<R> entryWith(String resourceName, Mono<R> actua...
    method entryWith (line 41) | public static <R> Mono<R> entryWith(String resourceName, EntryType ent...
    method ReactorSphU (line 71) | private ReactorSphU() {}

FILE: sentinel-adapter/sentinel-reactor-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/reactor/SentinelReactorConstants.java
  class SentinelReactorConstants (line 22) | public final class SentinelReactorConstants {
    method SentinelReactorConstants (line 26) | private SentinelReactorConstants() {}

FILE: sentinel-adapter/sentinel-reactor-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/reactor/SentinelReactorSubscriber.java
  class SentinelReactorSubscriber (line 37) | public class SentinelReactorSubscriber<T> extends InheritableBaseSubscri...
    method SentinelReactorSubscriber (line 47) | public SentinelReactorSubscriber(EntryConfig entryConfig,
    method checkEntryConfig (line 56) | private void checkEntryConfig(EntryConfig config) {
    method currentContext (line 60) | @Override
    method doWithContextOrCurrent (line 73) | private void doWithContextOrCurrent(Supplier<Optional<com.alibaba.csp....
    method entryWhenSubscribed (line 85) | private void entryWhenSubscribed() {
    method hookOnSubscribe (line 110) | @Override
    method hookOnNext (line 116) | @Override
    method hookOnComplete (line 133) | @Override
    method shouldCallErrorDropHook (line 139) | @Override
    method hookOnError (line 146) | @Override
    method hookOnCancel (line 156) | @Override
    method tryCompleteEntry (line 161) | private boolean tryCompleteEntry() {

FILE: sentinel-adapter/sentinel-reactor-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/reactor/SentinelReactorTransformer.java
  class SentinelReactorTransformer (line 32) | public class SentinelReactorTransformer<T> implements Function<Publisher...
    method SentinelReactorTransformer (line 36) | public SentinelReactorTransformer(String resourceName) {
    method SentinelReactorTransformer (line 40) | public SentinelReactorTransformer(EntryConfig entryConfig) {
    method apply (line 45) | @Override

FILE: sentinel-adapter/sentinel-reactor-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/reactor/FluxSentinelOperatorTestIntegrationTest.java
  class FluxSentinelOperatorTestIntegrationTest (line 21) | public class FluxSentinelOperatorTestIntegrationTest {
    method testEmitMultipleValueSuccess (line 23) | @Test
    method testEmitFluxError (line 38) | @Test
    method testEmitMultipleValuesWhenFlowControlTriggered (line 52) | @Test
    method createResourceName (line 72) | private String createResourceName(String resourceName) {

FILE: sentinel-adapter/sentinel-reactor-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/reactor/MonoSentinelOperatorIntegrationTest.java
  class MonoSentinelOperatorIntegrationTest (line 26) | public class MonoSentinelOperatorIntegrationTest {
    method testTransformMonoWithSentinelContextEnter (line 28) | @Test
    method testFluxToMonoNextThenCancelSuccess (line 58) | @Test
    method testEmitSingleLongTimeRt (line 73) | @Test
    method testEmitEmptySuccess (line 88) | @Test
    method testEmitSingleSuccess (line 100) | @Test
    method testEmitSingleValueWhenFlowControlTriggered (line 113) | @Test
    method testEmitExceptionWhenFlowControlTriggered (line 133) | @Test
    method testEmitSingleError (line 152) | @Test
    method testMultipleReactorTransformerLatterFlowControl (line 165) | @Test
    method createResourceName (line 187) | private String createResourceName(String resourceName) {

FILE: sentinel-adapter/sentinel-reactor-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/reactor/ReactorSphUTest.java
  class ReactorSphUTest (line 22) | public class ReactorSphUTest {
    method testReactorEntryNormalWhenFlowControlTriggered (line 24) | @Test
    method testReactorEntryWithCommon (line 44) | @Test
    method testReactorEntryWithBizException (line 58) | @Test
    method createResourceName (line 71) | private String createResourceName(String resourceName) {

FILE: sentinel-adapter/sentinel-sofa-rpc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/sofa/rpc/AbstractSofaRpcFilter.java
  class AbstractSofaRpcFilter (line 33) | abstract class AbstractSofaRpcFilter extends Filter {
    method needToLoad (line 35) | @Override
    method traceResponseException (line 47) | protected void traceResponseException(SofaResponse response, Entry int...
    method traceOtherException (line 61) | protected SofaRpcException traceOtherException(Throwable t, Entry inte...

FILE: sentinel-adapter/sentinel-sofa-rpc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/sofa/rpc/SentinelConstants.java
  class SentinelConstants (line 22) | public final class SentinelConstants {
    method SentinelConstants (line 26) | private SentinelConstants() {}

FILE: sentinel-adapter/sentinel-sofa-rpc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/sofa/rpc/SentinelSofaRpcConsumerFilter.java
  class SentinelSofaRpcConsumerFilter (line 45) | @Extension(value = "consumerSentinel", order = -1000)
    method invoke (line 49) | @Override

FILE: sentinel-adapter/sentinel-sofa-rpc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/sofa/rpc/SentinelSofaRpcProviderFilter.java
  class SentinelSofaRpcProviderFilter (line 51) | @Extension(value = "providerSentinel", order = -1000)
    method invoke (line 55) | @Override

FILE: sentinel-adapter/sentinel-sofa-rpc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/sofa/rpc/SofaRpcUtils.java
  class SofaRpcUtils (line 24) | public class SofaRpcUtils {
    method getApplicationName (line 26) | public static String getApplicationName(SofaRequest request) {
    method getInterfaceResourceName (line 31) | public static String getInterfaceResourceName(SofaRequest request) {
    method getMethodResourceName (line 35) | public static String getMethodResourceName(SofaRequest request) {
    method getMethodArguments (line 56) | public static Object[] getMethodArguments(SofaRequest request) {
    method SofaRpcUtils (line 60) | private SofaRpcUtils() {}

FILE: sentinel-adapter/sentinel-sofa-rpc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/sofa/rpc/fallback/DefaultSofaRpcFallback.java
  class DefaultSofaRpcFallback (line 30) | public class DefaultSofaRpcFallback implements SofaRpcFallback {
    method handle (line 32) | @Override

FILE: sentinel-adapter/sentinel-sofa-rpc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/sofa/rpc/fallback/SofaRpcFallback.java
  type SofaRpcFallback (line 28) | public interface SofaRpcFallback {
    method handle (line 38) | SofaResponse handle(FilterInvoker invoker, SofaRequest request, BlockE...

FILE: sentinel-adapter/sentinel-sofa-rpc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/sofa/rpc/fallback/SofaRpcFallbackRegistry.java
  class SofaRpcFallbackRegistry (line 25) | public final class SofaRpcFallbackRegistry {
    method getProviderFallback (line 30) | public static SofaRpcFallback getProviderFallback() {
    method setProviderFallback (line 34) | public static void setProviderFallback(SofaRpcFallback providerFallbac...
    method getConsumerFallback (line 39) | public static SofaRpcFallback getConsumerFallback() {
    method setConsumerFallback (line 43) | public static void setConsumerFallback(SofaRpcFallback consumerFallbac...
    method SofaRpcFallbackRegistry (line 48) | private SofaRpcFallbackRegistry() {}

FILE: sentinel-adapter/sentinel-sofa-rpc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/sofa/rpc/AbstractSofaRpcFilterTest.java
  class AbstractSofaRpcFilterTest (line 21) | public class AbstractSofaRpcFilterTest {
    method setUp (line 23) | @Before
    method cleanUp (line 28) | @After
    method testNeedToLoadProvider (line 33) | @Test
    method testNeedToLoadConsumer (line 52) | @Test
    method testNeedToLoadProviderAndConsumer (line 71) | @Test
    method removeRpcConfig (line 99) | private void removeRpcConfig(String key) {

FILE: sentinel-adapter/sentinel-sofa-rpc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/sofa/rpc/BaseTest.java
  class BaseTest (line 33) | public class BaseTest {
    method cleanUpAll (line 38) | protected static void cleanUpAll() {

FILE: sentinel-adapter/sentinel-sofa-rpc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/sofa/rpc/SentinelSofaRpcConsumerFilterTest.java
  class SentinelSofaRpcConsumerFilterTest (line 49) | public class SentinelSofaRpcConsumerFilterTest extends BaseTest {
    method setUp (line 51) | @Before
    method cleanUp (line 56) | @After
    method testInvokeSentinelWorks (line 61) | @Test
    method verifyInvocationStructure (line 104) | private void verifyInvocationStructure(String interfaceResourceName, S...

FILE: sentinel-adapter/sentinel-sofa-rpc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/sofa/rpc/SentinelSofaRpcProviderFilterTest.java
  class SentinelSofaRpcProviderFilterTest (line 48) | public class SentinelSofaRpcProviderFilterTest extends BaseTest {
    method setUp (line 50) | @Before
    method cleanUp (line 55) | @After
    method testInvokeSentinelWorks (line 60) | @Test
    method verifyInvocationStructure (line 105) | private void verifyInvocationStructure(String applicationName, String ...

FILE: sentinel-adapter/sentinel-sofa-rpc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/sofa/rpc/SofaRpcUtilsTest.java
  class SofaRpcUtilsTest (line 28) | public class SofaRpcUtilsTest {
    method testGetApplicationName (line 30) | @Test
    method testGetInterfaceResourceName (line 41) | @Test
    method testGetMethodResourceName (line 49) | @Test
    method testGetMethodArguments (line 59) | @Test

FILE: sentinel-adapter/sentinel-sofa-rpc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/sofa/rpc/fallback/DefaultSofaRpcFallbackTest.java
  class DefaultSofaRpcFallbackTest (line 30) | public class DefaultSofaRpcFallbackTest {
    method testHandle (line 32) | @Test

FILE: sentinel-adapter/sentinel-sofa-rpc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/sofa/rpc/fallback/SofaRpcFallbackRegistryTest.java
  class SofaRpcFallbackRegistryTest (line 31) | public class SofaRpcFallbackRegistryTest {
    method testDefaultfallback (line 33) | @Test
    method testCustomFallback (line 46) | @Test

FILE: sentinel-adapter/sentinel-sofa-rpc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/sofa/rpc/service/DemoService.java
  type DemoService (line 21) | public interface DemoService {
    method sayHello (line 23) | String sayHello(String name, int year);

FILE: sentinel-adapter/sentinel-sofa-rpc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/sofa/rpc/service/impl/DemoServiceImpl.java
  class DemoServiceImpl (line 23) | public class DemoServiceImpl implements DemoService {
    method sayHello (line 25) | @Override

FILE: sentinel-adapter/sentinel-spring-cloud-gateway-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/SentinelGatewayFilter.java
  class SentinelGatewayFilter (line 47) | public class SentinelGatewayFilter implements GatewayFilter, GlobalFilte...
    method SentinelGatewayFilter (line 53) | public SentinelGatewayFilter() {
    method SentinelGatewayFilter (line 57) | public SentinelGatewayFilter(int order) {
    method SentinelGatewayFilter (line 61) | public SentinelGatewayFilter(RequestItemParser<ServerWebExchange> serv...
    method SentinelGatewayFilter (line 65) | public SentinelGatewayFilter(int order, RequestItemParser<ServerWebExc...
    method filter (line 71) | @Override
    method contextName (line 102) | private String contextName(String route) {
    method pickMatchingApiDefinitions (line 106) | Set<String> pickMatchingApiDefinitions(ServerWebExchange exchange) {
    method getOrder (line 114) | @Override

FILE: sentinel-adapter/sentinel-spring-cloud-gateway-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/ServerWebExchangeItemParser.java
  class ServerWebExchangeItemParser (line 30) | public class ServerWebExchangeItemParser implements RequestItemParser<Se...
    method getPath (line 32) | @Override
    method getRemoteAddress (line 37) | @Override
    method getHeader (line 46) | @Override
    method getUrlParam (line 51) | @Override
    method getCookieValue (line 56) | @Override

FILE: sentinel-adapter/sentinel-spring-cloud-gateway-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/api/GatewayApiMatcherManager.java
  class GatewayApiMatcherManager (line 32) | public final class GatewayApiMatcherManager {
    method getApiMatcherMap (line 36) | public static Map<String, WebExchangeApiMatcher> getApiMatcherMap() {
    method getMatcher (line 40) | public static Optional<WebExchangeApiMatcher> getMatcher(final String ...
    method getApiDefinitionSet (line 45) | public static Set<ApiDefinition> getApiDefinitionSet() {
    method loadApiDefinitions (line 52) | static synchronized void loadApiDefinitions(/*@Valid*/ Set<ApiDefiniti...
    method GatewayApiMatcherManager (line 61) | private GatewayApiMatcherManager() {}

FILE: sentinel-adapter/sentinel-spring-cloud-gateway-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/api/SpringCloudGatewayApiDefinitionChangeObserver.java
  class SpringCloudGatewayApiDefinitionChangeObserver (line 27) | public class SpringCloudGatewayApiDefinitionChangeObserver implements Ap...
    method onChange (line 29) | @Override

FILE: sentinel-adapter/sentinel-spring-cloud-gateway-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/api/matcher/WebExchangeApiMatcher.java
  class WebExchangeApiMatcher (line 35) | public class WebExchangeApiMatcher extends AbstractApiMatcher<ServerWebE...
    method WebExchangeApiMatcher (line 37) | public WebExchangeApiMatcher(ApiDefinition apiDefinition) {
    method initializeMatchers (line 41) | @Override
    method fromApiPredicate (line 49) | private Optional<Predicate<ServerWebExchange>> fromApiPredicate(/*@Non...
    method fromApiPathPredicate (line 56) | private Optional<Predicate<ServerWebExchange>> fromApiPathPredicate(/*...

FILE: sentinel-adapter/sentinel-spring-cloud-gateway-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/callback/BlockRequestHandler.java
  type BlockRequestHandler (line 27) | @FunctionalInterface
    method handleRequest (line 37) | Mono<ServerResponse> handleRequest(ServerWebExchange exchange, Throwab...

FILE: sentinel-adapter/sentinel-spring-cloud-gateway-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/callback/DefaultBlockRequestHandler.java
  class DefaultBlockRequestHandler (line 35) | public class DefaultBlockRequestHandler implements BlockRequestHandler {
    method handleRequest (line 39) | @Override
    method htmlErrorResponse (line 50) | private Mono<ServerResponse> htmlErrorResponse(Throwable ex) {
    method buildErrorResult (line 56) | private ErrorResult buildErrorResult(Throwable ex) {
    method acceptsHtml (line 64) | private boolean acceptsHtml(ServerWebExchange exchange) {
    class ErrorResult (line 76) | private static class ErrorResult {
      method ErrorResult (line 80) | ErrorResult(int code, String message) {
      method getCode (line 85) | public int getCode() {
      method getMessage (line 89) | public String getMessage() {

FILE: sentinel-adapter/sentinel-spring-cloud-gateway-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/callback/GatewayCallbackManager.java
  class GatewayCallbackManager (line 28) | public final class GatewayCallbackManager {
    method getBlockHandler (line 41) | public static /*@NonNull*/ BlockRequestHandler getBlockHandler() {
    method resetBlockHandler (line 45) | public static void resetBlockHandler() {
    method setBlockHandler (line 49) | public static void setBlockHandler(BlockRequestHandler blockHandler) {
    method getRequestOriginParser (line 54) | public static /*@NonNull*/ Function<ServerWebExchange, String> getRequ...
    method resetRequestOriginParser (line 58) | public static void resetRequestOriginParser() {
    method setRequestOriginParser (line 62) | public static void setRequestOriginParser(Function<ServerWebExchange, ...
    method GatewayCallbackManager (line 67) | private GatewayCallbackManager() {}

FILE: sentinel-adapter/sentinel-spring-cloud-gateway-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/callback/RedirectBlockRequestHandler.java
  class RedirectBlockRequestHandler (line 30) | public class RedirectBlockRequestHandler implements BlockRequestHandler {
    method RedirectBlockRequestHandler (line 34) | public RedirectBlockRequestHandler(String url) {
    method handleRequest (line 39) | @Override

FILE: sentinel-adapter/sentinel-spring-cloud-gateway-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/exception/SentinelGatewayBlockExceptionHandler.java
  class SentinelGatewayBlockExceptionHandler (line 36) | public class SentinelGatewayBlockExceptionHandler implements WebExceptio...
    method SentinelGatewayBlockExceptionHandler (line 41) | public SentinelGatewayBlockExceptionHandler(List<ViewResolver> viewRes...
    method writeResponse (line 46) | private Mono<Void> writeResponse(ServerResponse response, ServerWebExc...
    method handle (line 50) | @Override
    method handleBlockedRequest (line 63) | private Mono<ServerResponse> handleBlockedRequest(ServerWebExchange ex...
    method messageWriters (line 68) | @Override
    method viewResolvers (line 73) | @Override

FILE: sentinel-adapter/sentinel-spring-cloud-gateway-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/route/AntRoutePathMatcher.java
  class AntRoutePathMatcher (line 29) | public class AntRoutePathMatcher implements Predicate<ServerWebExchange> {
    method AntRoutePathMatcher (line 36) | public AntRoutePathMatcher(String pattern) {
    method test (line 43) | @Override
    method getPattern (line 52) | public String getPattern() {

FILE: sentinel-adapter/sentinel-spring-cloud-gateway-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/route/RegexRoutePathMatcher.java
  class RegexRoutePathMatcher (line 29) | public class RegexRoutePathMatcher implements Predicate<ServerWebExchang...
    method RegexRoutePathMatcher (line 34) | public RegexRoutePathMatcher(String pattern) {
    method test (line 40) | @Override
    method getPattern (line 46) | public String getPattern() {

FILE: sentinel-adapter/sentinel-spring-cloud-gateway-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/route/RouteMatchers.java
  class RouteMatchers (line 27) | public final class RouteMatchers {
    method all (line 29) | public static Predicate<ServerWebExchange> all() {
    method antPath (line 33) | public static Predicate<ServerWebExchange> antPath(String pathPattern) {
    method exactPath (line 37) | public static Predicate<ServerWebExchange> exactPath(final String path) {
    method regexPath (line 41) | public static Predicate<ServerWebExchange> regexPath(String pathPatter...
    method RouteMatchers (line 45) | private RouteMatchers() {}

FILE: sentinel-adapter/sentinel-spring-cloud-gateway-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/gateway/sc/SentinelGatewayFilterTest.java
  class SentinelGatewayFilterTest (line 30) | public class SentinelGatewayFilterTest {
    method testPickMatchingApiDefinitions (line 32) | @Test
    method setUp (line 80) | @Before
    method tearDown (line 86) | @After

FILE: sentinel-adapter/sentinel-spring-cloud-gateway-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/gateway/sc/SpringCloudGatewayParamParserTest.java
  class SpringCloudGatewayParamParserTest (line 49) | public class SpringCloudGatewayParamParserTest {
    method testParseParametersNoParamItem (line 55) | @Test
    method testParseParametersWithItems (line 73) | @Test
    method mockClientHostAddress (line 160) | private void mockClientHostAddress(/*@Mock*/ ServerHttpRequest request...
    method mockHeaders (line 168) | private void mockHeaders(/*@Mock*/ ServerHttpRequest request, Map<Stri...
    method mockUrlParams (line 176) | @SuppressWarnings("unchecked")
    method mockSingleUrlParam (line 185) | @SuppressWarnings("unchecked")
    method mockSingleHeader (line 192) | private void mockSingleHeader(/*@Mock*/ ServerHttpRequest request, Str...
    method setUp (line 198) | @Before
    method tearDown (line 204) | @After

FILE: sentinel-adapter/sentinel-spring-cloud-gateway-v6x-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/SentinelGatewayFilter.java
  class SentinelGatewayFilter (line 47) | public class SentinelGatewayFilter implements GatewayFilter, GlobalFilte...
    method SentinelGatewayFilter (line 53) | public SentinelGatewayFilter() {
    method SentinelGatewayFilter (line 57) | public SentinelGatewayFilter(int order) {
    method SentinelGatewayFilter (line 61) | public SentinelGatewayFilter(RequestItemParser<ServerWebExchange> serv...
    method SentinelGatewayFilter (line 65) | public SentinelGatewayFilter(int order, RequestItemParser<ServerWebExc...
    method filter (line 71) | @Override
    method contextName (line 102) | private String contextName(String route) {
    method pickMatchingApiDefinitions (line 106) | Set<String> pickMatchingApiDefinitions(ServerWebExchange exchange) {
    method getOrder (line 114) | @Override

FILE: sentinel-adapter/sentinel-spring-cloud-gateway-v6x-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/ServerWebExchangeItemParser.java
  class ServerWebExchangeItemParser (line 30) | public class ServerWebExchangeItemParser implements RequestItemParser<Se...
    method getPath (line 32) | @Override
    method getRemoteAddress (line 37) | @Override
    method getHeader (line 46) | @Override
    method getUrlParam (line 51) | @Override
    method getCookieValue (line 56) | @Override

FILE: sentinel-adapter/sentinel-spring-cloud-gateway-v6x-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/api/GatewayApiMatcherManager.java
  class GatewayApiMatcherManager (line 32) | public final class GatewayApiMatcherManager {
    method getApiMatcherMap (line 36) | public static Map<String, WebExchangeApiMatcher> getApiMatcherMap() {
    method getMatcher (line 40) | public static Optional<WebExchangeApiMatcher> getMatcher(final String ...
    method getApiDefinitionSet (line 45) | public static Set<ApiDefinition> getApiDefinitionSet() {
    method loadApiDefinitions (line 52) | static synchronized void loadApiDefinitions(/*@Valid*/ Set<ApiDefiniti...
    method GatewayApiMatcherManager (line 61) | private GatewayApiMatcherManager() {}

FILE: sentinel-adapter/sentinel-spring-cloud-gateway-v6x-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/api/SpringCloudGatewayApiDefinitionChangeObserver.java
  class SpringCloudGatewayApiDefinitionChangeObserver (line 27) | public class SpringCloudGatewayApiDefinitionChangeObserver implements Ap...
    method onChange (line 29) | @Override

FILE: sentinel-adapter/sentinel-spring-cloud-gateway-v6x-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/api/matcher/WebExchangeApiMatcher.java
  class WebExchangeApiMatcher (line 35) | public class WebExchangeApiMatcher extends AbstractApiMatcher<ServerWebE...
    method WebExchangeApiMatcher (line 37) | public WebExchangeApiMatcher(ApiDefinition apiDefinition) {
    method initializeMatchers (line 41) | @Override
    method fromApiPredicate (line 49) | private Optional<Predicate<ServerWebExchange>> fromApiPredicate(/*@Non...
    method fromApiPathPredicate (line 56) | private Optional<Predicate<ServerWebExchange>> fromApiPathPredicate(/*...

FILE: sentinel-adapter/sentinel-spring-cloud-gateway-v6x-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/callback/BlockRequestHandler.java
  type BlockRequestHandler (line 27) | @FunctionalInterface
    method handleRequest (line 37) | Mono<ServerResponse> handleRequest(ServerWebExchange exchange, Throwab...

FILE: sentinel-adapter/sentinel-spring-cloud-gateway-v6x-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/callback/DefaultBlockRequestHandler.java
  class DefaultBlockRequestHandler (line 36) | public class DefaultBlockRequestHandler implements BlockRequestHandler {
    method handleRequest (line 40) | @Override
    method htmlErrorResponse (line 51) | private Mono<ServerResponse> htmlErrorResponse(Throwable ex) {
    method buildErrorResult (line 57) | private ErrorResult buildErrorResult(Throwable ex) {
    method acceptsHtml (line 65) | private boolean acceptsHtml(ServerWebExchange exchange) {
    class ErrorResult (line 77) | private static class ErrorResult {
      method ErrorResult (line 81) | ErrorResult(int code, String message) {
      method getCode (line 86) | public int getCode() {
      method getMessage (line 90) | public String getMessage() {

FILE: sentinel-adapter/sentinel-spring-cloud-gateway-v6x-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/callback/GatewayCallbackManager.java
  class GatewayCallbackManager (line 28) | public final class GatewayCallbackManager {
    method getBlockHandler (line 41) | public static /*@NonNull*/ BlockRequestHandler getBlockHandler() {
    method resetBlockHandler (line 45) | public static void resetBlockHandler() {
    method setBlockHandler (line 49) | public static void setBlockHandler(BlockRequestHandler blockHandler) {
    method getRequestOriginParser (line 54) | public static /*@NonNull*/ Function<ServerWebExchange, String> getRequ...
    method resetRequestOriginParser (line 58) | public static void resetRequestOriginParser() {
    method setRequestOriginParser (line 62) | public static void setRequestOriginParser(Function<ServerWebExchange, ...
    method GatewayCallbackManager (line 67) | private GatewayCallbackManager() {}

FILE: sentinel-adapter/sentinel-spring-cloud-gateway-v6x-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/callback/RedirectBlockRequestHandler.java
  class RedirectBlockRequestHandler (line 30) | public class RedirectBlockRequestHandler implements BlockRequestHandler {
    method RedirectBlockRequestHandler (line 34) | public RedirectBlockRequestHandler(String url) {
    method handleRequest (line 39) | @Override

FILE: sentinel-adapter/sentinel-spring-cloud-gateway-v6x-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/exception/SentinelGatewayBlockExceptionHandler.java
  class SentinelGatewayBlockExceptionHandler (line 36) | public class SentinelGatewayBlockExceptionHandler implements WebExceptio...
    method SentinelGatewayBlockExceptionHandler (line 41) | public SentinelGatewayBlockExceptionHandler(List<ViewResolver> viewRes...
    method writeResponse (line 46) | private Mono<Void> writeResponse(ServerResponse response, ServerWebExc...
    method handle (line 50) | @Override
    method handleBlockedRequest (line 63) | private Mono<ServerResponse> handleBlockedRequest(ServerWebExchange ex...
    method messageWriters (line 68) | @Override
    method viewResolvers (line 73) | @Override

FILE: sentinel-adapter/sentinel-spring-cloud-gateway-v6x-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/route/AntRoutePathMatcher.java
  class AntRoutePathMatcher (line 29) | public class AntRoutePathMatcher implements Predicate<ServerWebExchange> {
    method AntRoutePathMatcher (line 36) | public AntRoutePathMatcher(String pattern) {
    method test (line 43) | @Override
    method getPattern (line 52) | public String getPattern() {

FILE: sentinel-adapter/sentinel-spring-cloud-gateway-v6x-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/route/RegexRoutePathMatcher.java
  class RegexRoutePathMatcher (line 29) | public class RegexRoutePathMatcher implements Predicate<ServerWebExchang...
    method RegexRoutePathMatcher (line 34) | public RegexRoutePathMatcher(String pattern) {
    method test (line 40) | @Override
    method getPattern (line 46) | public String getPattern() {

FILE: sentinel-adapter/sentinel-spring-cloud-gateway-v6x-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/route/RouteMatchers.java
  class RouteMatchers (line 27) | public final class RouteMatchers {
    method all (line 29) | public static Predicate<ServerWebExchange> all() {
    method antPath (line 33) | public static Predicate<ServerWebExchange> antPath(String pathPattern) {
    method exactPath (line 37) | public static Predicate<ServerWebExchange> exactPath(final String path) {
    method regexPath (line 41) | public static Predicate<ServerWebExchange> regexPath(String pathPatter...
    method RouteMatchers (line 45) | private RouteMatchers() {}

FILE: sentinel-adapter/sentinel-spring-cloud-gateway-v6x-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/gateway/sc/SentinelGatewayFilterTest.java
  class SentinelGatewayFilterTest (line 30) | public class SentinelGatewayFilterTest {
    method testPickMatchingApiDefinitions (line 32) | @Test
    method setUp (line 80) | @Before
    method tearDown (line 86) | @After

FILE: sentinel-adapter/sentinel-spring-cloud-gateway-v6x-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/gateway/sc/SpringCloudGatewayParamParserTest.java
  class SpringCloudGatewayParamParserTest (line 49) | public class SpringCloudGatewayParamParserTest {
    method testParseParametersNoParamItem (line 55) | @Test
    method testParseParametersWithItems (line 73) | @Test
    method mockClientHostAddress (line 160) | private void mockClientHostAddress(/*@Mock*/ ServerHttpRequest request...
    method mockHeaders (line 168) | private void mockHeaders(/*@Mock*/ ServerHttpRequest request, Map<Stri...
    method mockUrlParams (line 176) | @SuppressWarnings("unchecked")
    method mockSingleUrlParam (line 185) | @SuppressWarnings("unchecked")
    method mockSingleHeader (line 192) | private void mockSingleHeader(/*@Mock*/ ServerHttpRequest request, Str...
    method setUp (line 198) | @Before
    method tearDown (line 204) | @After

FILE: sentinel-adapter/sentinel-spring-restclient-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/restclient/SentinelRestClientConfig.java
  class SentinelRestClientConfig (line 29) | public class SentinelRestClientConfig {
    method SentinelRestClientConfig (line 37) | public SentinelRestClientConfig() {
    method SentinelRestClientConfig (line 41) | public SentinelRestClientConfig(String resourcePrefix) {
    method SentinelRestClientConfig (line 45) | public SentinelRestClientConfig(RestClientResourceExtractor resourceEx...
    method SentinelRestClientConfig (line 49) | public SentinelRestClientConfig(String resourcePrefix,
    method getResourcePrefix (line 59) | public String getResourcePrefix() {
    method getResourceExtractor (line 63) | public RestClientResourceExtractor getResourceExtractor() {
    method getFallback (line 67) | public RestClientFallback getFallback() {
    method toString (line 71) | @Override

FILE: sentinel-adapter/sentinel-spring-restclient-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/restclient/SentinelRestClientInterceptor.java
  class SentinelRestClientInterceptor (line 65) | public class SentinelRestClientInterceptor implements ClientHttpRequestI...
    method SentinelRestClientInterceptor (line 69) | public SentinelRestClientInterceptor() {
    method SentinelRestClientInterceptor (line 73) | public SentinelRestClientInterceptor(SentinelRestClientConfig config) {
    method intercept (line 78) | @Override
    method buildHostResourceName (line 125) | private String buildHostResourceName(HttpRequest request, URI uri) {
    method buildPathResourceName (line 138) | private String buildPathResourceName(HttpRequest request) {
    method handleBlockException (line 148) | private ClientHttpResponse handleBlockException(HttpRequest request, b...

FILE: sentinel-adapter/sentinel-spring-restclient-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/restclient/extractor/DefaultRestClientResourceExtractor.java
  class DefaultRestClientResourceExtractor (line 39) | public class DefaultRestClientResourceExtractor implements RestClientRes...
    method extract (line 41) | @Override

FILE: sentinel-adapter/sentinel-spring-restclient-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/restclient/extractor/RestClientResourceExtractor.java
  type RestClientResourceExtractor (line 25) | public interface RestClientResourceExtractor {
    method extract (line 33) | String extract(HttpRequest request);

FILE: sentinel-adapter/sentinel-spring-restclient-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/restclient/fallback/DefaultRestClientFallback.java
  class DefaultRestClientFallback (line 30) | public class DefaultRestClientFallback implements RestClientFallback {
    method handle (line 32) | @Override

FILE: sentinel-adapter/sentinel-spring-restclient-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/restclient/fallback/RestClientFallback.java
  type RestClientFallback (line 29) | public interface RestClientFallback {
    method handle (line 40) | ClientHttpResponse handle(HttpRequest request, byte[] body,

FILE: sentinel-adapter/sentinel-spring-restclient-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/restclient/ManualTest.java
  class ManualTest (line 26) | public class ManualTest {
    method main (line 28) | public static void main(String[] args) {
    method testBasicUsage (line 38) | private static void testBasicUsage() {
    method testWithFlowControl (line 68) | private static void testWithFlowControl() {
    method testWithCustomExtractor (line 100) | private static void testWithCustomExtractor() {

FILE: sentinel-adapter/sentinel-spring-restclient-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/restclient/SentinelRestClientConfigTest.java
  class SentinelRestClientConfigTest (line 27) | public class SentinelRestClientConfigTest {
    method testConfigSetExtractorNull (line 29) | @Test(expected = IllegalArgumentException.class)
    method testConfigSetFallbackNull (line 34) | @Test(expected = IllegalArgumentException.class)

FILE: sentinel-adapter/sentinel-spring-restclient-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/restclient/SentinelRestClientInterceptorSimpleTest.java
  class SentinelRestClientInterceptorSimpleTest (line 45) | @RunWith(SpringRunner.class)
    method setUp (line 56) | @Before
    method tearDown (line 64) | @After
    method testBasicRequest (line 72) | @Test
    method testDualLevelResources (line 89) | @Test
    method testFlowControlBlocking (line 124) | @Test(expected = com.alibaba.csp.sentinel.slots.block.SentinelRpcExcep...
    method testHostLevelFlowControl (line 145) | @Test(expected = com.alibaba.csp.sentinel.slots.block.SentinelRpcExcep...
    method testCustomConfig (line 167) | @Test(expected = IllegalStateException.class)
    method testPostRequestFlowControl (line 193) | @Test(expected = com.alibaba.csp.sentinel.slots.block.SentinelRpcExcep...
    method testDegradeByExceptionRatio (line 215) | @Test
    method testDegradeBySlowResponseTime (line 257) | @Test

FILE: sentinel-adapter/sentinel-spring-restclient-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/restclient/app/TestApplication.java
  class TestApplication (line 11) | @SpringBootApplication
    method main (line 13) | public static void main(String[] args) {

FILE: sentinel-adapter/sentinel-spring-restclient-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/restclient/app/TestController.java
  class TestController (line 16) | @RestController
    method hello (line 20) | @GetMapping("/hello")
    method getUser (line 25) | @GetMapping("/users/{id}")
    method createUser (line 30) | @PostMapping("/users")
    method error (line 35) | @GetMapping("/error")
    method delay (line 40) | @GetMapping("/delay")

FILE: sentinel-adapter/sentinel-spring-restclient-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/restclient/extractor/DefaultRestClientResourceExtractorTest.java
  class DefaultRestClientResourceExtractorTest (line 17) | public class DefaultRestClientResourceExtractorTest {
    method testExtract (line 19) | @Test
    method testExtractWithPort (line 45) | @Test

FILE: sentinel-adapter/sentinel-spring-restclient-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/restclient/fallback/DefaultRestClientFallbackTest.java
  class DefaultRestClientFallbackTest (line 18) | public class DefaultRestClientFallbackTest {
    method testHandleThrowsException (line 20) | @Test(expected = SentinelRpcException.class)
    method testHandleWrapsBlockException (line 45) | @Test

FILE: sentinel-adapter/sentinel-spring-webflux-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webflux/SentinelWebFluxFilter.java
  class SentinelWebFluxFilter (line 37) | public class SentinelWebFluxFilter implements WebFilter {
    method filter (line 41) | @Override
    method buildSentinelTransformer (line 55) | private SentinelReactorTransformer<Void> buildSentinelTransformer(Serv...
    method getContextName (line 64) | protected String getContextName(ServerWebExchange exchange){

FILE: sentinel-adapter/sentinel-spring-webflux-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webflux/callback/BlockRequestHandler.java
  type BlockRequestHandler (line 28) | @FunctionalInterface
    method handleRequest (line 38) | Mono<ServerResponse> handleRequest(ServerWebExchange exchange, Throwab...

FILE: sentinel-adapter/sentinel-spring-webflux-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webflux/callback/DefaultBlockRequestHandler.java
  class DefaultBlockRequestHandler (line 35) | public class DefaultBlockRequestHandler implements BlockRequestHandler {
    method handleRequest (line 39) | @Override
    method htmlErrorResponse (line 50) | private Mono<ServerResponse> htmlErrorResponse(Throwable ex) {
    method buildErrorResult (line 56) | private ErrorResult buildErrorResult(Throwable ex) {
    method acceptsHtml (line 64) | private boolean acceptsHtml(ServerWebExchange exchange) {
    class ErrorResult (line 76) | private static class ErrorResult {
      method ErrorResult (line 80) | ErrorResult(int code, String message) {
      method getCode (line 85) | public int getCode() {
      method getMessage (line 89) | public String getMessage() {

FILE: sentinel-adapter/sentinel-spring-webflux-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webflux/callback/WebFluxCallbackManager.java
  class WebFluxCallbackManager (line 29) | public final class WebFluxCallbackManager {
    method getBlockHandler (line 47) | public static /*@NonNull*/ BlockRequestHandler getBlockHandler() {
    method resetBlockHandler (line 51) | public static void resetBlockHandler() {
    method setBlockHandler (line 55) | public static void setBlockHandler(BlockRequestHandler blockHandler) {
    method getUrlCleaner (line 60) | public static /*@NonNull*/ BiFunction<ServerWebExchange, String, Strin...
    method resetUrlCleaner (line 64) | public static void resetUrlCleaner() {
    method setUrlCleaner (line 68) | public static void setUrlCleaner(BiFunction<ServerWebExchange, String,...
    method getRequestOriginParser (line 73) | public static /*@NonNull*/ Function<ServerWebExchange, String> getRequ...
    method resetRequestOriginParser (line 77) | public static void resetRequestOriginParser() {
    method setRequestOriginParser (line 81) | public static void setRequestOriginParser(Function<ServerWebExchange, ...
    method WebFluxCallbackManager (line 86) | private WebFluxCallbackManager() {}

FILE: sentinel-adapter/sentinel-spring-webflux-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webflux/exception/SentinelBlockExceptionHandler.java
  class SentinelBlockExceptionHandler (line 36) | public class SentinelBlockExceptionHandler implements WebExceptionHandler {
    method SentinelBlockExceptionHandler (line 41) | public SentinelBlockExceptionHandler(List<ViewResolver> viewResolvers,...
    method writeResponse (line 46) | private Mono<Void> writeResponse(ServerResponse response, ServerWebExc...
    method handle (line 50) | @Override
    method handleBlockedRequest (line 63) | private Mono<ServerResponse> handleBlockedRequest(ServerWebExchange ex...
    method messageWriters (line 68) | @Override
    method viewResolvers (line 73) | @Override

FILE: sentinel-adapter/sentinel-spring-webflux-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webflux/SentinelWebFluxIntegrationTest.java
  class SentinelWebFluxIntegrationTest (line 34) | @RunWith(SpringRunner.class)
    method configureRulesFor (line 44) | private void configureRulesFor(String resource, int count) {
    method configureRulesFor (line 48) | private void configureRulesFor(String resource, int count, String limi...
    method testWebFluxFilterBasic (line 59) | @Test
    method testWebFluxRouterFunction (line 74) | @Test
    method testCustomizedUrlCleaner (line 98) | @Test
    method testCustomizedIgnoreUrlCleaner (line 128) | @Test
    method testCustomizedBlockRequestHandler (line 148) | @Test
    method testCustomizedRequestOriginParser (line 165) | @Test
    method setUp (line 202) | @Before
    method cleanUp (line 208) | @After

FILE: sentinel-adapter/sentinel-spring-webflux-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webflux/test/WebFluxTestApplication.java
  class WebFluxTestApplication (line 24) | @SpringBootApplication
    method main (line 27) | public static void main(String[] args) {

FILE: sentinel-adapter/sentinel-spring-webflux-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webflux/test/WebFluxTestConfig.java
  class WebFluxTestConfig (line 34) | @Configuration
    method WebFluxTestConfig (line 40) | public WebFluxTestConfig(ObjectProvider<List<ViewResolver>> viewResolv...
    method sentinelBlockExceptionHandler (line 46) | @Bean
    method sentinelWebFluxFilter (line 53) | @Bean

FILE: sentinel-adapter/sentinel-spring-webflux-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webflux/test/WebFluxTestController.java
  class WebFluxTestController (line 29) | @RestController
    method apiHello (line 32) | @GetMapping("/hello")
    method apiFlux (line 37) | @GetMapping("/flux")
    method apiError (line 42) | @GetMapping("/error")
    method apiFoo (line 47) | @GetMapping("/foo/{id}")

FILE: sentinel-adapter/sentinel-spring-webflux-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webflux/test/WebFluxTestRouter.java
  class WebFluxTestRouter (line 30) | @Configuration
    method routingFunction (line 33) | @Bean

FILE: sentinel-adapter/sentinel-spring-webmvc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/AbstractSentinelInterceptor.java
  class AbstractSentinelInterceptor (line 59) | public abstract class AbstractSentinelInterceptor implements AsyncHandle...
    method AbstractSentinelInterceptor (line 66) | public AbstractSentinelInterceptor(BaseWebMvcConfig config) {
    method increaseReference (line 78) | private Integer increaseReference(HttpServletRequest request, String r...
    method preHandle (line 91) | @Override
    method getResourceName (line 128) | protected abstract String getResourceName(HttpServletRequest request);
    method getContextName (line 136) | protected String getContextName(HttpServletRequest request) {
    method afterConcurrentHandlingStarted (line 150) | @Override
    method afterCompletion (line 156) | @Override
    method exit (line 162) | private void exit(HttpServletRequest request) {
    method exit (line 166) | private void exit(HttpServletRequest request, Exception ex) {
    method postHandle (line 184) | @Override
    method getEntryInRequest (line 189) | protected Entry getEntryInRequest(HttpServletRequest request, String a...
    method removeEntryInRequest (line 194) | protected void removeEntryInRequest(HttpServletRequest request) {
    method traceExceptionAndExit (line 198) | protected void traceExceptionAndExit(Entry entry, Exception ex) {
    method handleBlockException (line 216) | protected void handleBlockException(HttpServletRequest request, HttpSe...
    method parseOrigin (line 226) | protected String parseOrigin(HttpServletRequest request) {
    method getHttpServletRequest (line 237) | private HttpServletRequest getHttpServletRequest() {

FILE: sentinel-adapter/sentinel-spring-webmvc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/SentinelExceptionAware.java
  class SentinelExceptionAware (line 33) | @Order(-1)
    method resolveException (line 35) | @Override
    method addExceptionToRequest (line 41) | private void addExceptionToRequest(HttpServletRequest httpServletReque...

FILE: sentinel-adapter/sentinel-spring-webmvc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/SentinelWebInterceptor.java
  class SentinelWebInterceptor (line 34) | public class SentinelWebInterceptor extends AbstractSentinelInterceptor {
    method SentinelWebInterceptor (line 38) | public SentinelWebInterceptor() {
    method SentinelWebInterceptor (line 42) | public SentinelWebInterceptor(SentinelWebMvcConfig config) {
    method getResourceName (line 52) | @Override
    method getContextName (line 71) | @Override

FILE: sentinel-adapter/sentinel-spring-webmvc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/SentinelWebTotalInterceptor.java
  class SentinelWebTotalInterceptor (line 29) | public class SentinelWebTotalInterceptor extends AbstractSentinelInterce...
    method SentinelWebTotalInterceptor (line 33) | public SentinelWebTotalInterceptor(SentinelWebMvcTotalConfig config) {
    method SentinelWebTotalInterceptor (line 42) | public SentinelWebTotalInterceptor() {
    method getResourceName (line 46) | @Override

FILE: sentinel-adapter/sentinel-spring-webmvc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/callback/BlockExceptionHandler.java
  type BlockExceptionHandler (line 28) | public interface BlockExceptionHandler {
    method handle (line 38) | void handle(HttpServletRequest request, HttpServletResponse response, ...

FILE: sentinel-adapter/sentinel-spring-webmvc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/callback/DefaultBlockExceptionHandler.java
  class DefaultBlockExceptionHandler (line 30) | public class DefaultBlockExceptionHandler implements BlockExceptionHandl...
    method handle (line 32) | @Override

FILE: sentinel-adapter/sentinel-spring-webmvc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/callback/RequestOriginParser.java
  type RequestOriginParser (line 25) | public interface RequestOriginParser {
    method parseOrigin (line 33) | String parseOrigin(HttpServletRequest request);

FILE: sentinel-adapter/sentinel-spring-webmvc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/callback/UrlCleaner.java
  type UrlCleaner (line 23) | public interface UrlCleaner {
    method clean (line 31) | String clean(String originUrl);

FILE: sentinel-adapter/sentinel-spring-webmvc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/config/BaseWebMvcConfig.java
  class BaseWebMvcConfig (line 27) | public abstract class BaseWebMvcConfig {
    method getRequestAttributeName (line 36) | public String getRequestAttributeName() {
    method setRequestAttributeName (line 40) | public void setRequestAttributeName(String requestAttributeName) {
    method getRequestRefName (line 50) | public String getRequestRefName() {
    method getBlockExceptionHandler (line 54) | public BlockExceptionHandler getBlockExceptionHandler() {
    method setBlockExceptionHandler (line 58) | public void setBlockExceptionHandler(BlockExceptionHandler blockExcept...
    method getOriginParser (line 62) | public RequestOriginParser getOriginParser() {
    method setOriginParser (line 66) | public void setOriginParser(RequestOriginParser originParser) {

FILE: sentinel-adapter/sentinel-spring-webmvc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/config/SentinelWebMvcConfig.java
  class SentinelWebMvcConfig (line 24) | public class SentinelWebMvcConfig extends BaseWebMvcConfig {
    method SentinelWebMvcConfig (line 45) | public SentinelWebMvcConfig() {
    method getUrlCleaner (line 50) | public UrlCleaner getUrlCleaner() {
    method setUrlCleaner (line 54) | public SentinelWebMvcConfig setUrlCleaner(UrlCleaner urlCleaner) {
    method isHttpMethodSpecify (line 59) | public boolean isHttpMethodSpecify() {
    method setHttpMethodSpecify (line 63) | public SentinelWebMvcConfig setHttpMethodSpecify(boolean httpMethodSpe...
    method isWebContextUnify (line 68) | public boolean isWebContextUnify() {
    method setWebContextUnify (line 72) | public SentinelWebMvcConfig setWebContextUnify(boolean webContextUnify) {
    method toString (line 77) | @Override

FILE: sentinel-adapter/sentinel-spring-webmvc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/config/SentinelWebMvcTotalConfig.java
  class SentinelWebMvcTotalConfig (line 22) | public class SentinelWebMvcTotalConfig extends BaseWebMvcConfig {
    method SentinelWebMvcTotalConfig (line 29) | public SentinelWebMvcTotalConfig() {
    method getTotalResourceName (line 34) | public String getTotalResourceName() {
    method setTotalResourceName (line 38) | public SentinelWebMvcTotalConfig setTotalResourceName(String totalReso...
    method toString (line 43) | @Override

FILE: sentinel-adapter/sentinel-spring-webmvc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/ResultWrapper.java
  class ResultWrapper (line 23) | public class ResultWrapper {
    method ResultWrapper (line 28) | public ResultWrapper(Integer code, String message) {
    method getCode (line 33) | public Integer getCode() {
    method setCode (line 37) | public void setCode(Integer code) {
    method error (line 41) | public static ResultWrapper error() {
    method blocked (line 46) | public static ResultWrapper blocked() {
    method toJsonString (line 50) | public String toJsonString() {

FILE: sentinel-adapter/sentinel-spring-webmvc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/SentinelSpringMvcIntegrationTest.java
  class SentinelSpringMvcIntegrationTest (line 50) | @RunWith(SpringRunner.class)
    method testBase (line 59) | @Test
    method testAsync (line 71) | @Test
    method testOriginParser (line 83) | @Test
    method testTotalInterceptor (line 109) | @Test
    method testRuntimeException (line 123) | @Test
    method testExceptionPerception (line 148) | @Test
    method configureRulesFor (line 173) | private void configureRulesFor(String resource, int count, String limi...
    method configureExceptionRulesFor (line 184) | private void configureExceptionRulesFor(String resource, int count, St...
    method configureExceptionDegradeRulesFor (line 195) | private void configureExceptionDegradeRulesFor(String resource, double...
    method cleanUp (line 209) | @After

FILE: sentinel-adapter/sentinel-spring-webmvc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/SentinelWebInterceptorTest.java
  class SentinelWebInterceptorTest (line 27) | public class SentinelWebInterceptorTest {
    method testPassIllegalConfig (line 29) | @Test(expected = IllegalArgumentException.class)

FILE: sentinel-adapter/sentinel-spring-webmvc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/TestApplication.java
  class TestApplication (line 26) | @SpringBootApplication
    method main (line 28) | public static void main(String[] args) {

FILE: sentinel-adapter/sentinel-spring-webmvc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/config/InterceptorConfig.java
  class InterceptorConfig (line 34) | @Configuration
    method sentinelExceptionAware (line 37) | @Bean
    method addInterceptors (line 42) | @Override
    method addSpringMvcInterceptor (line 51) | private void addSpringMvcInterceptor(InterceptorRegistry registry) {
    method addSpringMvcTotalInterceptor (line 82) | private void addSpringMvcTotalInterceptor(InterceptorRegistry registry) {

FILE: sentinel-adapter/sentinel-spring-webmvc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/config/SentinelSpringMvcBlockHandlerConfig.java
  class SentinelSpringMvcBlockHandlerConfig (line 34) | @ControllerAdvice
    method sentinelBlockHandler (line 39) | @ExceptionHandler(BlockException.class)
    method exceptionHandler (line 49) | @ExceptionHandler(Exception.class)
    method bizExceptionHandler (line 56) | @ExceptionHandler(BizException.class)

FILE: sentinel-adapter/sentinel-spring-webmvc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/controller/TestController.java
  class TestController (line 29) | @RestController
    method apiHello (line 32) | @GetMapping("/hello")
    method apiError (line 37) | @GetMapping("/err")
    method apiFoo (line 42) | @GetMapping("/foo/{id}")
    method runtimeException (line 47) | @GetMapping("/runtimeException")
    method bizException (line 53) | @GetMapping("/bizException")
    method apiExclude (line 58) | @GetMapping("/exclude/{id}")
    method distribute (line 63) | @GetMapping("/async")

FILE: sentinel-adapter/sentinel-spring-webmvc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/exception/BizException.java
  class BizException (line 6) | public class BizException extends RuntimeException{

FILE: sentinel-adapter/sentinel-spring-webmvc-v6x-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc_v6x/AbstractSentinelInterceptor.java
  class AbstractSentinelInterceptor (line 53) | public abstract class AbstractSentinelInterceptor implements AsyncHandle...
    method AbstractSentinelInterceptor (line 60) | public AbstractSentinelInterceptor(BaseWebMvcConfig config) {
    method increaseReference (line 72) | private Integer increaseReference(HttpServletRequest request, String r...
    method preHandle (line 85) | @Override
    method getResourceName (line 120) | protected abstract String getResourceName(HttpServletRequest request);
    method getContextName (line 128) | protected String getContextName(HttpServletRequest request) {
    method afterConcurrentHandlingStarted (line 142) | @Override
    method afterCompletion (line 148) | @Override
    method exit (line 154) | private void exit(HttpServletRequest request) {
    method exit (line 158) | private void exit(HttpServletRequest request, Exception ex) {
    method postHandle (line 181) | @Override
    method getEntryInRequest (line 186) | protected Entry getEntryInRequest(HttpServletRequest request, String a...
    method removeEntryInRequest (line 191) | protected void removeEntryInRequest(HttpServletRequest request) {
    method traceExceptionAndExit (line 195) | protected void traceExceptionAndExit(Entry entry, Exception ex) {
    method handleBlockException (line 204) | protected void handleBlockException(HttpServletRequest request, HttpSe...
    method parseOrigin (line 220) | protected String parseOrigin(HttpServletRequest request) {

FILE: sentinel-adapter/sentinel-spring-webmvc-v6x-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc_v6x/SentinelWebInterceptor.java
  class SentinelWebInterceptor (line 33) | public class SentinelWebInterceptor extends AbstractSentinelInterceptor {
    method SentinelWebInterceptor (line 37) | public SentinelWebInterceptor() {
    method SentinelWebInterceptor (line 41) | public SentinelWebInterceptor(SentinelWebMvcConfig config) {
    method getResourceName (line 51) | @Override
    method getContextName (line 72) | @Override

FILE: sentinel-adapter/sentinel-spring-webmvc-v6x-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc_v6x/SentinelWebPrefixInterceptor.java
  class SentinelWebPrefixInterceptor (line 28) | public class SentinelWebPrefixInterceptor extends SentinelWebInterceptor {
    method getResourceName (line 30) | @Override

FILE: sentinel-adapter/sentinel-spring-webmvc-v6x-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc_v6x/SentinelWebTotalInterceptor.java
  class SentinelWebTotalInterceptor (line 28) | public class SentinelWebTotalInterceptor extends AbstractSentinelInterce...
    method SentinelWebTotalInterceptor (line 32) | public SentinelWebTotalInterceptor(SentinelWebMvcTotalConfig config) {
    method SentinelWebTotalInterceptor (line 41) | public SentinelWebTotalInterceptor() {
    method getResourceName (line 45) | @Override

FILE: sentinel-adapter/sentinel-spring-webmvc-v6x-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc_v6x/callback/BlockExceptionHandler.java
  type BlockExceptionHandler (line 28) | public interface BlockExceptionHandler {
    method handle (line 39) | void handle(HttpServletRequest request, HttpServletResponse response, ...

FILE: sentinel-adapter/sentinel-spring-webmvc-v6x-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc_v6x/callback/DefaultBlockExceptionHandler.java
  class DefaultBlockExceptionHandler (line 29) | public class DefaultBlockExceptionHandler implements BlockExceptionHandl...
    method handle (line 31) | @Override

FILE: sentinel-adapter/sentinel-spring-webmvc-v6x-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc_v6x/callback/RequestOriginParser.java
  type RequestOriginParser (line 25) | public interface RequestOriginParser {
    method parseOrigin (line 33) | String parseOrigin(HttpServletRequest request);

FILE: sentinel-adapter/sentinel-spring-webmvc-v6x-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc_v6x/config/BaseWebMvcConfig.java
  class BaseWebMvcConfig (line 27) | public abstract class BaseWebMvcConfig {
    method getRequestAttributeName (line 34) | public String getRequestAttributeName() {
    method setRequestAttributeName (line 38) | public void setRequestAttributeName(String requestAttributeName) {
    method getRequestRefName (line 48) | public String getRequestRefName() {
    method getBlockExceptionHandler (line 52) | public BlockExceptionHandler getBlockExceptionHandler() {
    method setBlockExceptionHandler (line 56) | public void setBlockExceptionHandler(BlockExceptionHandler blockExcept...
    method getOriginParser (line 60) | public RequestOriginParser getOriginParser() {
    method setOriginParser (line 64) | public void setOriginParser(RequestOriginParser originParser) {

FILE: sentinel-adapter/sentinel-spring-webmvc-v6x-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc_v6x/config/SentinelPreWebMvcConfig.java
  class SentinelPreWebMvcConfig (line 8) | public class SentinelPreWebMvcConfig extends BaseWebMvcConfig {
    method SentinelPreWebMvcConfig (line 26) | public SentinelPreWebMvcConfig() {
    method isHttpMethodSpecify (line 31) | public boolean isHttpMethodSpecify() {
    method setHttpMethodSpecify (line 35) | public SentinelPreWebMvcConfig setHttpMethodSpecify(boolean httpMethod...
    method isWebContextUnify (line 40) | public boolean isWebContextUnify() {
    method setWebContextUnify (line 44) | public SentinelPreWebMvcConfig setWebContextUnify(boolean webContextUn...
    method getUrlCleaner (line 49) | public UrlCleaner getUrlCleaner() {
    method setUrlCleaner (line 53) | public SentinelPreWebMvcConfig setUrlCleaner(UrlCleaner urlCleaner) {

FILE: sentinel-adapter/sentinel-spring-webmvc-v6x-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc_v6x/config/SentinelWebMvcConfig.java
  class SentinelWebMvcConfig (line 23) | public class SentinelWebMvcConfig extends BaseWebMvcConfig {
    method SentinelWebMvcConfig (line 50) | public SentinelWebMvcConfig() {
    method getUrlCleaner (line 62) | public UrlCleaner getUrlCleaner() {
    method setUrlCleaner (line 66) | public SentinelWebMvcConfig setUrlCleaner(UrlCleaner urlCleaner) {
    method isHttpMethodSpecify (line 71) | public boolean isHttpMethodSpecify() {
    method setHttpMethodSpecify (line 75) | public SentinelWebMvcConfig setHttpMethodSpecify(boolean httpMethodSpe...
    method isWebContextUnify (line 80) | public boolean isWebContextUnify() {
    method setWebContextUnify (line 84) | public SentinelWebMvcConfig setWebContextUnify(boolean webContextUnify) {
    method isContextPathSpecify (line 89) | public boolean isContextPathSpecify() {
    method setContextPathSpecify (line 93) | public SentinelWebMvcConfig setContextPathSpecify(boolean contextPathS...
    method toString (line 98) | @Override

FILE: sentinel-adapter/sentinel-spring-webmvc-v6x-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc_v6x/config/SentinelWebMvcTotalConfig.java
  class SentinelWebMvcTotalConfig (line 21) | public class SentinelWebMvcTotalConfig extends BaseWebMvcConfig {
    method SentinelWebMvcTotalConfig (line 28) | public SentinelWebMvcTotalConfig() {
    method getTotalResourceName (line 33) | public String getTotalResourceName() {
    method setTotalResourceName (line 37) | public SentinelWebMvcTotalConfig setTotalResourceName(String totalReso...
    method toString (line 42) | @Override

FILE: sentinel-adapter/sentinel-spring-webmvc-v6x-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc_v6x/config/WebServletLocalConfig.java
  class WebServletLocalConfig (line 27) | public final class WebServletLocalConfig {
    method getBlockPage (line 40) | public static String getBlockPage() {
    method setBlockPage (line 44) | public static void setBlockPage(String blockPage) {
    method getBlockPageHttpStatus (line 56) | public static int getBlockPageHttpStatus() {
    method setBlockPageHttpStatus (line 79) | public static void setBlockPageHttpStatus(int httpStatus) {
    method WebServletLocalConfig (line 86) | private WebServletLocalConfig() {}

FILE: sentinel-adapter/sentinel-spring-webmvc-v6x-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webmvc_v6x/ResultWrapper.java
  class ResultWrapper (line 23) | public class ResultWrapper {
    method ResultWrapper (line 28) | public ResultWrapper(Integer code, String message) {
    method getCode (line 33) | public Integer getCode() {
    method setCode (line 37) | public void setCode(Integer code) {
    method error (line 41) | public static ResultWrapper error() {
    method blocked (line 46) | public static ResultWrapper blocked() {
    method toJsonString (line 50) | public String toJsonString() {

FILE: sentinel-adapter/sentinel-spring-webmvc-v6x-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webmvc_v6x/SentinelSpringMvcIntegrationTest.java
  class SentinelSpringMvcIntegrationTest (line 49) | @RunWith(SpringRunner.class)
    method disableMseHttpMethodPrefix (line 58) | @BeforeClass
    method testBase (line 63) | @Test
    method testAsync (line 75) | @Test
    method testOriginParser (line 87) | @Test
    method testTotalInterceptor (line 113) | @Test
    method testRuntimeException (line 127) | @Test
    method configureRulesFor (line 151) | private void configureRulesFor(String resource, int count, String limi...
    method configureExceptionRulesFor (line 162) | private void configureExceptionRulesFor(String resource, int count, St...
    method cleanUp (line 173) | @After

FILE: sentinel-adapter/sentinel-spring-webmvc-v6x-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webmvc_v6x/SentinelWebInterceptorHttpMethodPrefixTest.java
  class SentinelWebInterceptorHttpMethodPrefixTest (line 20) | public class SentinelWebInterceptorHttpMethodPrefixTest {
    method setUp (line 25) | @Before
    method testGetResourceNameWithHttpMethodSpecifyEnabled (line 30) | @Test
    method testGetResourceNameWithHttpMethodSpecifyDisabled (line 43) | @Test
    method testGetResourceNameEmptyResourceNameShouldReturnEmptyString (line 56) | @Test
    method testGetResourceNameNullResourceNameShouldReturnNull (line 69) | @Test
    method testGetResourceNameWithUrlCleaner (line 81) | @Test
    method testGetResourceNameWithContextPath (line 100) | @Test
    method testGetResourceNameWithContextPathDisabled (line 114) | @Test

FILE: sentinel-adapter/sentinel-spring-webmvc-v6x-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webmvc_v6x/SentinelWebInterceptorTest.java
  class SentinelWebInterceptorTest (line 25) | public class SentinelWebInterceptorTest {
    method testPassIllegalConfig (line 27) | @Test(expected = IllegalArgumentException.class)

FILE: sentinel-adapter/sentinel-spring-webmvc-v6x-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webmvc_v6x/TestApplication.java
  class TestApplication (line 24) | @SpringBootApplication
    method main (line 26) | public static void main(String[] args) {

FILE: sentinel-adapter/sentinel-spring-webmvc-v6x-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webmvc_v6x/callback/DefaultBlockExceptionHandlerTest.java
  class DefaultBlockExceptionHandlerTest (line 11) | public class DefaultBlockExceptionHandlerTest {
    method handle_writeBlockPage (line 13) | @Test

FILE: sentinel-adapter/sentinel-spring-webmvc-v6x-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webmvc_v6x/config/InterceptorConfig.java
  class InterceptorConfig (line 35) | @Configuration
    method addInterceptors (line 38) | @Override
    method addSpringMvcInterceptor (line 47) | private void addSpringMvcInterceptor(InterceptorRegistry registry) {
    method addSpringMvcTotalInterceptor (line 81) | private void addSpringMvcTotalInterceptor(InterceptorRegistry registry) {

FILE: sentinel-adapter/sentinel-spring-webmvc-v6x-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webmvc_v6x/config/SentinelSpringMvcBlockHandlerConfig.java
  class SentinelSpringMvcBlockHandlerConfig (line 33) | @ControllerAdvice
    method sentinelBlockHandler (line 38) | @ExceptionHandler(BlockException.class)
    method exceptionHandler (line 48) | @ExceptionHandler(Exception.class)

FILE: sentinel-adapter/sentinel-spring-webmvc-v6x-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webmvc_v6x/controller/TestController.java
  class TestController (line 28) | @RestController
    method apiHello (line 31) | @GetMapping("/hello")
    method apiError (line 36) | @GetMapping("/err")
    method apiFoo (line 41) | @GetMapping("/foo/{id}")
    method runtimeException (line 46) | @GetMapping("/runtimeException")
    method apiExclude (line 52) | @GetMapping("/exclude/{id}")
    method distribute (line 57) | @GetMapping("/async")

FILE: sentinel-adapter/sentinel-web-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/web/common/UrlCleaner.java
  type UrlCleaner (line 23) | public interface UrlCleaner {
    method clean (line 31) | String clean(String originUrl);

FILE: sentinel-adapter/sentinel-web-servlet/src/main/java/com/alibaba/csp/sentinel/adapter/servlet/CommonFilter.java
  class CommonFilter (line 50) | public class CommonFilter implements Filter {
    method init (line 70) | @Override
    method doFilter (line 78) | @Override
    method parseOrigin (line 126) | private String parseOrigin(HttpServletRequest request) {
    method destroy (line 138) | @Override

FILE: sentinel-adapter/sentinel-web-servlet/src/main/java/com/alibaba/csp/sentinel/adapter/servlet/CommonTotalFilter.java
  class CommonTotalFilter (line 43) | public class CommonTotalFilter implements Filter {
    method init (line 47) | @Override
    method doFilter (line 52) | @Override
    method destroy (line 76) | @Override

FILE: sentinel-adapter/sentinel-web-servlet/src/main/java/com/alibaba/csp/sentinel/adapter/servlet/callback/DefaultUrlBlockHandler.java
  class DefaultUrlBlockHandler (line 31) | public class DefaultUrlBlockHandler implements UrlBlockHandler {
    method blocked (line 33) | @Override

FILE: sentinel-adapter/sentinel-web-servlet/src/main/java/com/alibaba/csp/sentinel/adapter/servlet/callback/DefaultUrlCleaner.java
  class DefaultUrlCleaner (line 21) | public class DefaultUrlCleaner implements UrlCleaner {
    method clean (line 23) | @Override

FILE: sentinel-adapter/sentinel-web-servlet/src/main/java/com/alibaba/csp/sentinel/adapter/servlet/callback/RequestOriginParser.java
  type RequestOriginParser (line 26) | public interface RequestOriginParser {
    method parseOrigin (line 34) | String parseOrigin(HttpServletRequest request);

FILE: sentinel-adapter/sentinel-web-servlet/src/main/java/com/alibaba/csp/sentinel/adapter/servlet/callback/UrlBlockHandler.java
  type UrlBlockHandler (line 30) | public interface UrlBlockHandler {
    method blocked (line 40) | void blocked(HttpServletRequest request, HttpServletResponse response,...

FILE: sentinel-adapter/sentinel-web-servlet/src/main/java/com/alibaba/csp/sentinel/adapter/servlet/callback/UrlCleaner.java
  type UrlCleaner (line 21) | public interface UrlCleaner {
    method clean (line 30) | String clean(String originUrl);

FILE: sentinel-adapter/sentinel-web-servlet/src/main/java/com/alibaba/csp/sentinel/adapter/servlet/callback/WebCallbackManager.java
  class WebCallbackManager (line 25) | public class WebCallbackManager {
    method getUrlCleaner (line 39) | public static UrlCleaner getUrlCleaner() {
    method setUrlCleaner (line 43) | public static void setUrlCleaner(UrlCleaner urlCleaner) {
    method getUrlBlockHandler (line 47) | public static UrlBlockHandler getUrlBlockHandler() {
    method setUrlBlockHandler (line 51) | public static void setUrlBlockHandler(UrlBlockHandler urlBlockHandler) {
    method getRequestOriginParser (line 56) | public static RequestOriginParser getRequestOriginParser() {
    method setRequestOriginParser (line 60) | public static void setRequestOriginParser(RequestOriginParser requestO...

FILE: sentinel-adapter/sentinel-web-servlet/src/main/java/com/alibaba/csp/sentinel/adapter/servlet/config/WebServletConfig.java
  class WebServletConfig (line 30) | public final class WebServletConfig {
    method getBlockPage (line 45) | public static String getBlockPage() {
    method setBlockPage (line 49) | public static void setBlockPage(String blockPage) {
    method getBlockPageHttpStatus (line 62) | public static int getBlockPageHttpStatus() {
    method setBlockPageHttpStatus (line 86) | public static void setBlockPageHttpStatus(int httpStatus) {
    method WebServletConfig (line 93) | private WebServletConfig() {}

FILE: sentinel-adapter/sentinel-web-servlet/src/main/java/com/alibaba/csp/sentinel/adapter/servlet/util/FilterUtil.java
  class FilterUtil (line 34) | public final class FilterUtil {
    method filterTarget (line 38) | public static String filterTarget(HttpServletRequest request) {
    method blockRequest (line 61) | public static void blockRequest(HttpServletRequest request, HttpServle...
    method writeDefaultBlockedPage (line 77) | private static void writeDefaultBlockedPage(HttpServletResponse respon...
    method getResourcePath (line 85) | private static String getResourcePath(HttpServletRequest request) {
    method normalizeAbsolutePath (line 92) | private static String normalizeAbsolutePath(String path, boolean remov...
    method normalizePath (line 96) | private static String normalizePath(String path, boolean forceAbsolute...
    method indexOfSlash (line 168) | private static int indexOfSlash(char[] chars, int beginIndex, boolean ...
    method FilterUtil (line 190) | private FilterUtil() {}

FILE: sentinel-adapter/sentinel-web-servlet/src/test/java/com/alibaba/csp/sentinel/adapter/servlet/CommonFilterTest.java
  class CommonFilterTest (line 57) | @RunWith(SpringRunner.class)
    method configureRulesFor (line 67) | private void configureRulesFor(String resource, int count) {
    method configureRulesFor (line 71) | private void configureRulesFor(String resource, int count, String limi...
    method testCommonFilterMiscellaneous (line 82) | @Test
    method testCommonBlockAndRedirectBlockPage (line 113) | private void testCommonBlockAndRedirectBlockPage(String url, ClusterNo...
    method testUrlCleaner (line 138) | private void testUrlCleaner() throws Exception {
    method testUrlExclusion (line 165) | private void testUrlExclusion() throws Exception {
    method testCustomOriginParser (line 184) | private void testCustomOriginParser() throws Exception {
    method cleanUp (line 213) | @After

FILE: sentinel-adapter/sentinel-web-servlet/src/test/java/com/alibaba/csp/sentinel/adapter/servlet/FilterConfig.java
  class FilterConfig (line 25) | @Configuration
    method sentinelFilterRegistration (line 28) | @Bean

FILE: sentinel-adapter/sentinel-web-servlet/src/test/java/com/alibaba/csp/sentinel/adapter/servlet/TestApplication.java
  class TestApplication (line 24) | @SpringBootApplication
    method main (line 27) | public static void main(String[] args) {

FILE: sentinel-adapter/sentinel-web-servlet/src/test/java/com/alibaba/csp/sentinel/adapter/servlet/TestController.java
  class TestController (line 25) | @RestController
    method apiHello (line 28) | @GetMapping("/hello")
    method apiError (line 33) | @GetMapping("/err")
    method apiFoo (line 38) | @GetMapping("/foo/{id}")
    method apiExclude (line 43) | @GetMapping("/exclude/{id}")

FILE: sentinel-adapter/sentinel-web-servlet/src/test/java/com/alibaba/csp/sentinel/adapter/servletcontext/CommonFilterContextTest.java
  class CommonFilterContextTest (line 47) | @RunWith(SpringRunner.class)
    method configureRulesFor (line 58) | private void configureRulesFor(String resource, int count) {
    method configureRulesFor (line 62) | private void configureRulesFor(String resource, int count, String limi...
    method testCommonFilterMiscellaneous (line 73) | @Test
    method cleanUp (line 95) | @After

FILE: sentinel-adapter/sentinel-web-servlet/src/test/java/com/alibaba/csp/sentinel/adapter/servletcontext/FilterContextConfig.java
  class FilterContextConfig (line 26) | @Configuration
    method sentinelFilterRegistration (line 29) | @Bean

FILE: sentinel-adapter/sentinel-web-servlet/src/test/java/com/alibaba/csp/sentinel/adapter/servletcontext/TestContextApplication.java
  class TestContextApplication (line 24) | @SpringBootApplication
    method main (line 27) | public static void main(String[] args) {

FILE: sentinel-adapter/sentinel-web-servlet/src/test/java/com/alibaba/csp/sentinel/adapter/servletcontext/TestContextController.java
  class TestContextController (line 24) | @RestController
    method apiHello (line 27) | @GetMapping("/hello")

FILE: sentinel-adapter/sentinel-web-servlet/src/test/java/com/alibaba/csp/sentinel/adapter/servletmethod/CommonFilterMethodTest.java
  class CommonFilterMethodTest (line 47) | @RunWith(SpringRunner.class)
    method configureRulesFor (line 66) | private void configureRulesFor(String resource, int count) {
    method configureRulesFor (line 70) | private void configureRulesFor(String resource, int count, String limi...
    method testCommonFilterMiscellaneous (line 81) | @Test
    method testCommonBlockAndRedirectBlockPage (line 107) | private void testCommonBlockAndRedirectBlockPage(String url, ClusterNo...
    method cleanUp (line 127) | @After

FILE: sentinel-adapter/sentinel-web-servlet/src/test/java/com/alibaba/csp/sentinel/adapter/servletmethod/FilterMethodConfig.java
  class FilterMethodConfig (line 11) | @Configuration
    method sentinelFilterRegistration (line 14) | @Bean

FILE: sentinel-adapter/sentinel-web-servlet/src/test/java/com/alibaba/csp/sentinel/adapter/servletmethod/TestApplication.java
  class TestApplication (line 24) | @SpringBootApplication
    method main (line 27) | public static void main(String[] args) {

FILE: sentinel-adapter/sentinel-web-servlet/src/test/java/com/alibaba/csp/sentinel/adapter/servletmethod/TestMethodController.java
  class TestMethodController (line 25) | @RestController
    method apiHello (line 28) | @GetMapping("/hello")
    method apiHelloPost (line 33) | @PostMapping("/hello")

FILE: sentinel-adapter/sentinel-zuul-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul/RequestContextItemParser.java
  class RequestContextItemParser (line 28) | public class RequestContextItemParser implements RequestItemParser<Reque...
    method getPath (line 30) | @Override
    method getRemoteAddress (line 35) | @Override
    method getHeader (line 40) | @Override
    method getUrlParam (line 45) | @Override
    method getCookieValue (line 50) | @Override

FILE: sentinel-adapter/sentinel-zuul-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul/api/ZuulApiDefinitionChangeObserver.java
  class ZuulApiDefinitionChangeObserver (line 27) | public class ZuulApiDefinitionChangeObserver implements ApiDefinitionCha...
    method onChange (line 29) | @Override

FILE: sentinel-adapter/sentinel-zuul-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul/api/ZuulGatewayApiMatcherManager.java
  class ZuulGatewayApiMatcherManager (line 31) | public final class ZuulGatewayApiMatcherManager {
    method getApiMatcherMap (line 35) | public static Map<String, RequestContextApiMatcher> getApiMatcherMap() {
    method getMatcher (line 39) | public static RequestContextApiMatcher getMatcher(final String apiName) {
    method getApiDefinitionSet (line 46) | public static Set<ApiDefinition> getApiDefinitionSet() {
    method loadApiDefinitions (line 54) | static synchronized void loadApiDefinitions(/*@Valid*/ Set<ApiDefiniti...
    method addApiDefinition (line 64) | static void addApiDefinition(ApiDefinition definition) {
    method ZuulGatewayApiMatcherManager (line 68) | private ZuulGatewayApiMatcherManager() {}

FILE: sentinel-adapter/sentinel-zuul-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul/api/matcher/RequestContextApiMatcher.java
  class RequestContextApiMatcher (line 33) | public class RequestContextApiMatcher extends AbstractApiMatcher<Request...
    method RequestContextApiMatcher (line 35) | public RequestContextApiMatcher(ApiDefinition apiDefinition) {
    method initializeMatchers (line 39) | @Override
    method fromApiPredicate (line 51) | private Predicate<RequestContext> fromApiPredicate(/*@NonNull*/ ApiPre...
    method fromApiPathPredicate (line 58) | private Predicate<RequestContext> fromApiPathPredicate(/*@Valid*/ ApiP...

FILE: sentinel-adapter/sentinel-zuul-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul/api/route/PrefixRoutePathMatcher.java
  class PrefixRoutePathMatcher (line 30) | public class PrefixRoutePathMatcher implements Predicate<RequestContext> {
    method PrefixRoutePathMatcher (line 37) | public PrefixRoutePathMatcher(String pattern) {
    method test (line 44) | @Override
    method getPattern (line 58) | public String getPattern() {

FILE: sentinel-adapter/sentinel-zuul-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul/api/route/RegexRoutePathMatcher.java
  class RegexRoutePathMatcher (line 29) | public class RegexRoutePathMatcher implements Predicate<RequestContext> {
    method RegexRoutePathMatcher (line 34) | public RegexRoutePathMatcher(String pattern) {
    method test (line 40) | @Override
    method getPattern (line 51) | public String getPattern() {

FILE: sentinel-adapter/sentinel-zuul-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul/api/route/ZuulRouteMatchers.java
  class ZuulRouteMatchers (line 26) | public final class ZuulRouteMatchers {
    method all (line 28) | public static Predicate<RequestContext> all() {
    method antPath (line 37) | public static Predicate<RequestContext> antPath(String pathPattern) {
    method exactPath (line 41) | public static Predicate<RequestContext> exactPath(final String path) {
    method regexPath (line 50) | public static Predicate<RequestContext> regexPath(String pathPattern) {
    method ZuulRouteMatchers (line 54) | private ZuulRouteMatchers() {}

FILE: sentinel-adapter/sentinel-zuul-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul/callback/DefaultRequestOriginParser.java
  class DefaultRequestOriginParser (line 8) | public class DefaultRequestOriginParser implements RequestOriginParser {
    method parseOrigin (line 10) | @Override

FILE: sentinel-adapter/sentinel-zuul-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul/callback/RequestOriginParser.java
  type RequestOriginParser (line 25) | public interface RequestOriginParser {
    method parseOrigin (line 33) | String parseOrigin(HttpServletRequest request);

FILE: sentinel-adapter/sentinel-zuul-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul/callback/ZuulGatewayCallbackManager.java
  class ZuulGatewayCallbackManager (line 24) | public final class ZuulGatewayCallbackManager {
    method getOriginParser (line 28) | public static RequestOriginParser getOriginParser() {
    method setOriginParser (line 32) | public static void setOriginParser(RequestOriginParser originParser) {
    method ZuulGatewayCallbackManager (line 37) | private ZuulGatewayCallbackManager() {}

FILE: sentinel-adapter/sentinel-zuul-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul/constants/ZuulConstant.java
  class ZuulConstant (line 24) | public class ZuulConstant {
    method ZuulConstant (line 72) | private ZuulConstant(){}

FILE: sentinel-adapter/sentinel-zuul-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul/fallback/BlockResponse.java
  class BlockResponse (line 24) | public class BlockResponse {
    method BlockResponse (line 34) | public BlockResponse(int code, String message, String route) {
    method getCode (line 40) | public int getCode() {
    method setCode (line 44) | public void setCode(int code) {
    method getMessage (line 48) | public String getMessage() {
    method setMessage (line 52) | public void setMessage(String message) {
    method getRoute (line 56) | public String getRoute() {
    method setRoute (line 60) | public void setRoute(String route) {
    method toString (line 64) | @Override

FILE: sentinel-adapter/sentinel-zuul-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul/fallback/DefaultBlockFallbackProvider.java
  class DefaultBlockFallbackProvider (line 26) | public class DefaultBlockFallbackProvider implements ZuulBlockFallbackPr...
    method getRoute (line 28) | @Override
    method fallbackResponse (line 33) | @Override

FILE: sentinel-adapter/sentinel-zuul-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul/fallback/ZuulBlockFallbackManager.java
  class ZuulBlockFallbackManager (line 29) | public class ZuulBlockFallbackManager {
    method registerProvider (line 38) | public static synchronized void registerProvider(ZuulBlockFallbackProv...
    method getFallbackProvider (line 48) | public static ZuulBlockFallbackProvider getFallbackProvider(String rou...
    method clear (line 56) | public synchronized static void clear(){

FILE: sentinel-adapter/sentinel-zuul-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul/fallback/ZuulBlockFallbackProvider.java
  type ZuulBlockFallbackProvider (line 24) | public interface ZuulBlockFallbackProvider {
    method getRoute (line 30) | String getRoute();
    method fallbackResponse (line 39) | BlockResponse fallbackResponse(String route, Throwable cause);

FILE: sentinel-adapter/sentinel-zuul-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul/filters/EntryHolder.java
  class EntryHolder (line 23) | class EntryHolder {
    method EntryHolder (line 29) | public EntryHolder(Entry entry, Object[] params) {
    method getEntry (line 34) | public Entry getEntry() {
    method getParams (line 38) | public Object[] getParams() {

FILE: sentinel-adapter/sentinel-zuul-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul/filters/SentinelEntryUtils.java
  class SentinelEntryUtils (line 31) | final class SentinelEntryUtils {
    method tryExitFromCurrentContext (line 33) | @SuppressWarnings("unchecked")
    method tryTraceExceptionThenExitFromCurrentContext (line 49) | @SuppressWarnings("unchecked")
    method exit (line 65) | static void exit(EntryHolder holder) {
    method SentinelEntryUtils (line 70) | private SentinelEntryUtils() {}

FILE: sentinel-adapter/sentinel-zuul-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul/filters/SentinelZuulErrorFilter.java
  class SentinelZuulErrorFilter (line 33) | public class SentinelZuulErrorFilter extends ZuulFilter {
    method SentinelZuulErrorFilter (line 37) | public SentinelZuulErrorFilter() {
    method SentinelZuulErrorFilter (line 41) | public SentinelZuulErrorFilter(int order) {
    method filterType (line 45) | @Override
    method shouldFilter (line 50) | @Override
    method filterOrder (line 56) | @Override
    method run (line 61) | @Override

FILE: sentinel-adapter/sentinel-zuul-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul/filters/SentinelZuulPostFilter.java
  class SentinelZuulPostFilter (line 32) | public class SentinelZuulPostFilter extends ZuulFilter {
    method SentinelZuulPostFilter (line 36) | public SentinelZuulPostFilter() {
    method SentinelZuulPostFilter (line 40) | public SentinelZuulPostFilter(int order) {
    method filterType (line 44) | @Override
    method filterOrder (line 49) | @Override
    method shouldFilter (line 54) | @Override
    method run (line 59) | @Override

FILE: sentinel-adapter/sentinel-zuul-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul/filters/SentinelZuulPreFilter.java
  class SentinelZuulPreFilter (line 60) | public class SentinelZuulPreFilter extends ZuulFilter {
    method SentinelZuulPreFilter (line 66) | public SentinelZuulPreFilter() {
    method SentinelZuulPreFilter (line 70) | public SentinelZuulPreFilter(int order) {
    method SentinelZuulPreFilter (line 74) | public SentinelZuulPreFilter(int order, RequestItemParser<RequestConte...
    method filterType (line 80) | @Override
    method filterOrder (line 88) | @Override
    method shouldFilter (line 93) | @Override
    method doSentinelEntry (line 98) | private void doSentinelEntry(String resourceName, final int resType, R...
    method run (line 113) | @Override
    method parseOrigin (line 158) | private String parseOrigin(HttpServletRequest request) {
    method pickMatchingApiDefinitions (line 162) | private Set<String> pickMatchingApiDefinitions(RequestContext requestC...

FILE: sentinel-adapter/sentinel-zuul-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/gateway/zuul/fallback/ZuulBlockFallbackManagerTest.java
  class ZuulBlockFallbackManagerTest (line 27) | public class ZuulBlockFallbackManagerTest {
    class MyNullResponseFallBackProvider (line 33) | class MyNullResponseFallBackProvider implements ZuulBlockFallbackProvi...
      method getRoute (line 34) | @Override
      method fallbackResponse (line 39) | @Override
    method testRegisterProvider (line 45) | @Test
    method clear (line 53) | @Test

FILE: sentinel-adapter/sentinel-zuul-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/gateway/zuul/fallback/ZuulBlockFallbackProviderTest.java
  class ZuulBlockFallbackProviderTest (line 27) | public class ZuulBlockFallbackProviderTest {
    method testGetNullRoute (line 31) | @Test
    method testGetDefaultRoute (line 37) | @Test
    method testGetNotInCacheRoute (line 43) | @Test
    method testFlowControlFallbackResponse (line 49) | @Test
    method testRuntimeExceptionFallbackResponse (line 57) | @Test

FILE: sentinel-adapter/sentinel-zuul-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/gateway/zuul/filters/SentinelZuulErrorFilterTest.java
  class SentinelZuulErrorFilterTest (line 28) | public class SentinelZuulErrorFilterTest {
    method testFilterType (line 30) | @Test
    method testShouldFilter (line 36) | @Test
    method testRun (line 44) | @Test

FILE: sentinel-adapter/sentinel-zuul-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/gateway/zuul/filters/SentinelZuulPostFilterTest.java
  class SentinelZuulPostFilterTest (line 27) | public class SentinelZuulPostFilterTest {
    method testFilterType (line 29) | @Test
    method testRun (line 35) | @Test

FILE: sentinel-adapter/sentinel-zuul-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/gateway/zuul/filters/SentinelZuulPreFilterTest.java
  class SentinelZuulPreFilterTest (line 35) | public class SentinelZuulPreFilterTest {
    method setUp (line 44) | @Before
    method testFilterType (line 55) | @Test

FILE: sentinel-adapter/sentinel-zuul-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/gateway/zuul/route/SentinelZuulRouteTest.java
  class SentinelZuulRouteTest (line 16) | public class SentinelZuulRouteTest {
    method setUp (line 27) | @Before
    method testPrefixRoutePathMatche (line 38) | @Test
    method testRegexRoutePathMatcher (line 47) | @Test

FILE: sentinel-adapter/sentinel-zuul2-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul2/HttpRequestMessageItemParser.java
  class HttpRequestMessageItemParser (line 25) | public class HttpRequestMessageItemParser implements RequestItemParser<H...
    method getPath (line 27) | @Override
    method getRemoteAddress (line 32) | @Override
    method getHeader (line 37) | @Override
    method getUrlParam (line 42) | @Override
    method getCookieValue (line 47) | @Override

FILE: sentinel-adapter/sentinel-zuul2-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul2/api/ZuulApiDefinitionChangeObserver.java
  class ZuulApiDefinitionChangeObserver (line 27) | public class ZuulApiDefinitionChangeObserver implements ApiDefinitionCha...
    method onChange (line 29) | @Override

FILE: sentinel-adapter/sentinel-zuul2-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul2/api/ZuulGatewayApiMatcherManager.java
  class ZuulGatewayApiMatcherManager (line 31) | public final class ZuulGatewayApiMatcherManager {
    method getApiMatcherMap (line 35) | public static Map<String, HttpRequestMessageApiMatcher> getApiMatcherM...
    method getMatcher (line 39) | public static HttpRequestMessageApiMatcher getMatcher(final String api...
    method getApiDefinitionSet (line 46) | public static Set<ApiDefinition> getApiDefinitionSet() {
    method loadApiDefinitions (line 54) | static synchronized void loadApiDefinitions(/*@Valid*/ Set<ApiDefiniti...
    method addApiDefinition (line 64) | static void addApiDefinition(ApiDefinition definition) {
    method ZuulGatewayApiMatcherManager (line 68) | private ZuulGatewayApiMatcherManager() {}

FILE: sentinel-adapter/sentinel-zuul2-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul2/api/matcher/HttpRequestMessageApiMatcher.java
  class HttpRequestMessageApiMatcher (line 31) | public class HttpRequestMessageApiMatcher extends AbstractApiMatcher<Htt...
    method HttpRequestMessageApiMatcher (line 33) | public HttpRequestMessageApiMatcher(ApiDefinition apiDefinition) {
    method initializeMatchers (line 37) | @Override
    method fromApiPredicate (line 49) | private Predicate<HttpRequestMessage> fromApiPredicate(/*@NonNull*/ Ap...
    method fromApiPathPredicate (line 56) | private Predicate<HttpRequestMessage> fromApiPathPredicate(/*@Valid*/ ...

FILE: sentinel-adapter/sentinel-zuul2-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul2/api/route/PrefixRoutePathMatcher.java
  class PrefixRoutePathMatcher (line 27) | public class PrefixRoutePathMatcher implements Predicate<HttpRequestMess...
    method PrefixRoutePathMatcher (line 34) | public PrefixRoutePathMatcher(String pattern) {
    method test (line 41) | @Override
    method getPattern (line 50) | public String getPattern() {

FILE: sentinel-adapter/sentinel-zuul2-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul2/api/route/RegexRoutePathMatcher.java
  class RegexRoutePathMatcher (line 27) | public class RegexRoutePathMatcher implements Predicate<HttpRequestMessa...
    method RegexRoutePathMatcher (line 32) | public RegexRoutePathMatcher(String pattern) {
    method test (line 38) | @Override
    method getPattern (line 44) | public String getPattern() {

FILE: sentinel-adapter/sentinel-zuul2-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul2/api/route/ZuulRouteMatchers.java
  class ZuulRouteMatchers (line 24) | public final class ZuulRouteMatchers {
    method all (line 26) | public static Predicate<HttpRequestMessage> all() {
    method antPath (line 30) | public static Predicate<HttpRequestMessage> antPath(String pathPattern) {
    method exactPath (line 34) | public static Predicate<HttpRequestMessage> exactPath(final String pat...
    method regexPath (line 38) | public static Predicate<HttpRequestMessage> regexPath(String pathPatte...
    method ZuulRouteMatchers (line 42) | private ZuulRouteMatchers() {}

FILE: sentinel-adapter/sentinel-zuul2-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul2/constants/SentinelZuul2Constants.java
  class SentinelZuul2Constants (line 22) | public class SentinelZuul2Constants {
    method SentinelZuul2Constants (line 38) | private SentinelZuul2Constants() {}

FILE: sentinel-adapter/sentinel-zuul2-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul2/fallback/BlockResponse.java
  class BlockResponse (line 24) | public class BlockResponse {
    method BlockResponse (line 34) | public BlockResponse(int code, String message, String route) {
    method getCode (line 40) | public int getCode() {
    method setCode (line 44) | public void setCode(int code) {
    method getMessage (line 48) | public String getMessage() {
    method setMessage (line 52) | public void setMessage(String message) {
    method getRoute (line 56) | public String getRoute() {
    method setRoute (line 60) | public void setRoute(String route) {
    method toString (line 64) | @Override

FILE: sentinel-adapter/sentinel-zuul2-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul2/fallback/DefaultBlockFallbackProvider.java
  class DefaultBlockFallbackProvider (line 26) | public class DefaultBlockFallbackProvider implements ZuulBlockFallbackPr...
    method getRoute (line 28) | @Override
    method fallbackResponse (line 33) | @Override

FILE: sentinel-adapter/sentinel-zuul2-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul2/fallback/ZuulBlockFallbackManager.java
  class ZuulBlockFallbackManager (line 29) | public class ZuulBlockFallbackManager {
    method registerProvider (line 38) | public static synchronized void registerProvider(ZuulBlockFallbackProv...
    method getFallbackProvider (line 48) | public static ZuulBlockFallbackProvider getFallbackProvider(String rou...
    method clear (line 56) | public synchronized static void clear(){

FILE: sentinel-adapter/sentinel-zuul2-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul2/fallback/ZuulBlockFallbackProvider.java
  type ZuulBlockFallbackProvider (line 24) | public interface ZuulBlockFallbackProvider {
    method getRoute (line 30) | String getRoute();
    method fallbackResponse (line 39) | BlockResponse fallbackResponse(String route, Throwable cause);

FILE: sentinel-adapter/sentinel-zuul2-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul2/filters/EntryHolder.java
  class EntryHolder (line 23) | public class EntryHolder {
    method EntryHolder (line 29) | public EntryHolder(Entry entry, Object[] params) {
    method getEntry (line 34) | public Entry getEntry() {
    method getParams (line 38) | public Object[] getParams() {

FILE: sentinel-adapter/sentinel-zuul2-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul2/filters/endpoint/SentinelZuulEndpoint.java
  class SentinelZuulEndpoint (line 35) | public class SentinelZuulEndpoint extends HttpSyncEndpoint {
    method apply (line 37) | @Override

FILE: sentinel-adapter/sentinel-zuul2-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul2/filters/inbound/SentinelZuulInboundFilter.java
  class SentinelZuulInboundFilter (line 54) | public class SentinelZuulInboundFilter extends HttpInboundFilter {
    method SentinelZuulInboundFilter (line 78) | public SentinelZuulInboundFilter(int order) {
    method SentinelZuulInboundFilter (line 82) | public SentinelZuulInboundFilter(int order, Function<HttpRequestMessag...
    method SentinelZuulInboundFilter (line 86) | public SentinelZuulInboundFilter(int order, Executor executor, Functio...
    method SentinelZuulInboundFilter (line 99) | public SentinelZuulInboundFilter(int order, String blockedEndpointName...
    method SentinelZuulInboundFilter (line 104) | public SentinelZuulInboundFilter(int order, String blockedEndpointName...
    method filterOrder (line 117) | @Override
    method applyAsync (line 122) | @Override
    method apply (line 131) | private Observable<HttpRequestMessage> apply(HttpRequestMessage reques...
    method doSentinelEntry (line 169) | private void doSentinelEntry(String resourceName, final int resType, H...
    method pickMatchingApiDefinitions (line 175) | private Set<String> pickMatchingApiDefinitions(HttpRequestMessage mess...
    method shouldFilter (line 185) | @Override

FILE: sentinel-adapter/sentinel-zuul2-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/zuul2/filters/outbound/SentinelZuulOutboundFilter.java
  class SentinelZuulOutboundFilter (line 36) | public class SentinelZuulOutboundFilter extends HttpOutboundFilter {
    method SentinelZuulOutboundFilter (line 40) | public SentinelZuulOutboundFilter(int order) {
    method filterOrder (line 44) | @Override
    method applyAsync (line 49) | @Override
    method apply (line 54) | public HttpResponseMessage apply(HttpResponseMessage response) {
    method shouldFilter (line 74) | @Override

FILE: sentinel-adapter/sentinel-zuul2-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/gateway/zuul2/fallback/ZuulBlockFallbackManagerTest.java
  class ZuulBlockFallbackManagerTest (line 26) | public class ZuulBlockFallbackManagerTest {
    class MyNullResponseFallBackProvider (line 32) | class MyNullResponseFallBackProvider implements ZuulBlockFallbackProvi...
      method getRoute (line 33) | @Override
      method fallbackResponse (line 38) | @Override
    method testRegisterProvider (line 44) | @Test
    method clear (line 52) | @Test

FILE: sentinel-adapter/sentinel-zuul2-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/gateway/zuul2/fallback/ZuulBlockFallbackProviderTest.java
  class ZuulBlockFallbackProviderTest (line 26) | public class ZuulBlockFallbackProviderTest {
    method testGetNullRoute (line 30) | @Test
    method testGetDefaultRoute (line 36) | @Test
    method testGetNotInCacheRoute (line 42) | @Test
    method testFlowControlFallbackResponse (line 48) | @Test
    method testRuntimeExceptionFallbackResponse (line 56) | @Test

FILE: sentinel-benchmark/src/main/java/com/alibaba/csp/sentinel/benchmark/SentinelEntryBenchmark.java
  class SentinelEntryBenchmark (line 44) | @Warmup(iterations = 10)
    method prepare (line 55) | @Setup
    method doSomething (line 63) | private void doSomething() {
    method doSomethingWithEntry (line 68) | private void doSomethingWithEntry() {
    method testSingleThreadDirectly (line 81) | @Benchmark
    method testSingleThreadSingleEntry (line 87) | @Benchmark
    method test2ThreadsSingleEntry (line 93) | @Benchmark
    method test3ThreadsSingleEntry (line 99) | @Benchmark
    method test4ThreadsDirectly (line 105) | @Benchmark
    method test4ThreadsSingleEntry (line 111) | @Benchmark
    method test8ThreadsDirectly (line 117) | @Benchmark
    method test8ThreadsSingleEntry (line 123) | @Benchmark
    method test16ThreadsDirectly (line 129) | @Benchmark
    method test16ThreadsSingleEntry (line 135) | @Benchmark

FILE: sentinel-cluster/sentinel-cluster-client-default/src/main/java/com/alibaba/csp/sentinel/cluster/client/ClientConstants.java
  class ClientConstants (line 22) | public final class ClientConstants {
    method ClientConstants (line 32) | private ClientConstants() {}

FILE: sentinel-cluster/sentinel-cluster-client-default/src/main/java/com/alibaba/csp/sentinel/cluster/client/DefaultClusterTokenClient.java
  class DefaultClusterTokenClient (line 45) | public class DefaultClusterTokenClient implements ClusterTokenClient {
    method DefaultClusterTokenClient (line 52) | public DefaultClusterTokenClient() {
    method serverEqual (line 62) | private boolean serverEqual(TokenServerDescriptor descriptor, ClusterC...
    method initNewConnection (line 69) | private void initNewConnection() {
    method changeServer (line 88) | private void changeServer(/*@Valid*/ ClusterClientAssignConfig config) {
    method startClientIfScheduled (line 106) | private void startClientIfScheduled() throws Exception {
    method stopClientIfStarted (line 116) | private void stopClientIfStarted() throws Exception {
    method start (line 124) | @Override
    method stop (line 131) | @Override
    method getState (line 136) | @Override
    method currentServer (line 144) | @Override
    method requestToken (line 149) | @Override
    method requestParamToken (line 167) | @Override
    method requestConcurrentToken (line 185) | @Override
    method releaseConcurrentToken (line 190) | @Override
    method logForResult (line 194) | private void logForResult(TokenResult result) {
    method sendTokenRequest (line 206) | private TokenResult sendTokenRequest(ClusterRequest request) throws Ex...
    method notValidRequest (line 222) | private boolean notValidRequest(Long id, int count) {
    method badRequest (line 226) | private TokenResult badRequest() {
    method clientFail (line 230) | private TokenResult clientFail() {

FILE: sentinel-cluster/sentinel-cluster-client-default/src/main/java/com/alibaba/csp/sentinel/cluster/client/NettyTransportClient.java
  class NettyTransportClient (line 61) | public class NettyTransportClient implements ClusterTransportClient {
    method NettyTransportClient (line 82) | public NettyTransportClient(String host, int port) {
    method initClientBootstrap (line 89) | private Bootstrap initClientBootstrap() {
    method connect (line 114) | private void connect(Bootstrap b) {
    method run (line 137) | @Override
    method start (line 159) | @Override
    method startInternal (line 165) | private void startInternal() {
    method cleanUp (line 169) | private void cleanUp() {
    method stop (line 179) | @Override
    method validRequest (line 198) | private boolean validRequest(Request request) {
    method isReady (line 202) | @Override
    method sendRequest (line 207) | @Override
    method getCurrentId (line 239) | private int getCurrentId() {

FILE: sentinel-cluster/sentinel-cluster-client-default/src/main/java/com/alibaba/csp/sentinel/cluster/client/codec/ClientEntityCodecProvider.java
  class ClientEntityCodecProvider (line 27) | public final class ClientEntityCodecProvider {
    method resolveInstance (line 36) | private static void resolveInstance() {
    method getRequestEntityWriter (line 55) | public static RequestEntityWriter getRequestEntityWriter() {
    method getResponseEntityDecoder (line 59) | public static ResponseEntityDecoder getResponseEntityDecoder() {
    method ClientEntityCodecProvider (line 63) | private ClientEntityCodecProvider() {}

FILE: sentinel-cluster/sentinel-cluster-client-default/src/main/java/com/alibaba/csp/sentinel/cluster/client/codec/DefaultRequestEntityWriter.java
  class DefaultRequestEntityWriter (line 31) | public class DefaultRequestEntityWriter implements RequestEntityWriter<C...
    method writeTo (line 33) | @Override
    method writeHead (line 49) | private void writeHead(Request request, ByteBuf out) {

FILE: sentinel-cluster/sentinel-cluster-client-default/src/main/java/com/alibaba/csp/sentinel/cluster/client/codec/DefaultResponseEntityDecoder.java
  class DefaultResponseEntityDecoder (line 39) | public class DefaultResponseEntityDecoder implements ResponseEntityDecod...
    method decode (line 41) | @Override

FILE: sentinel-cluster/sentinel-cluster-client-default/src/main/java/com/alibaba/csp/sentinel/cluster/client/codec/data/FlowRequestDataWriter.java
  class FlowRequestDataWriter (line 31) | public class FlowRequestDataWriter implements EntityWriter<FlowRequestDa...
    method writeTo (line 33) | @Override

FILE: sentinel-cluster/sentinel-cluster-client-default/src/main/java/com/alibaba/csp/sentinel/cluster/client/codec/data/FlowResponseDataDecoder.java
  class FlowResponseDataDecoder (line 27) | public class FlowResponseDataDecoder implements EntityDecoder<ByteBuf, F...
    method decode (line 29) | @Override

FILE: sentinel-cluster/sentinel-cluster-client-default/src/main/java/com/alibaba/csp/sentinel/cluster/client/codec/data/ParamFlowRequestDataWriter.java
  class ParamFlowRequestDataWriter (line 34) | public class ParamFlowRequestDataWriter implements EntityWriter<ParamFlo...
    method ParamFlowRequestDataWriter (line 38) | public ParamFlowRequestDataWriter() {
    method ParamFlowRequestDataWriter (line 42) | public ParamFlowRequestDataWriter(int maxParamByteSize) {
    method writeTo (line 47) | @Override
    method resolveValidParams (line 69) | public List<Object> resolveValidParams(Collection<Object> params) {
    method encodeValue (line 90) | private void encodeValue(Object param, ByteBuf target) {
    method encodeString (line 120) | private void encodeString(String param, ByteBuf target) {
    method calculateParamTransportSize (line 128) | int calculateParamTransportSize(Object value) {

FILE: sentinel-cluster/sentinel-cluster-client-default/src/main/java/com/alibaba/csp/sentinel/cluster/client/codec/data/PingRequestDataWriter.java
  class PingRequestDataWriter (line 27) | public class PingRequestDataWriter implements EntityWriter<String, ByteB...
    method writeTo (line 29) | @Override

FILE: sentinel-cluster/sentinel-cluster-client-default/src/main/java/com/alibaba/csp/sentinel/cluster/client/codec/data/PingResponseDataDecoder.java
  class PingResponseDataDecoder (line 26) | public class PingResponseDataDecoder implements EntityDecoder<ByteBuf, I...
    method decode (line 28) | @Override

FILE: sentinel-cluster/sentinel-cluster-client-default/src/main/java/com/alibaba/csp/sentinel/cluster/client/codec/netty/NettyRequestEncoder.java
  class NettyRequestEncoder (line 32) | public class NettyRequestEncoder extends MessageToByteEncoder<ClusterReq...
    method encode (line 34) | @Override

FILE: sentinel-cluster/sentinel-cluster-client-default/src/main/java/com/alibaba/csp/sentinel/cluster/client/codec/netty/NettyResponseDecoder.java
  class NettyResponseDecoder (line 36) | public class NettyResponseDecoder extends ByteToMessageDecoder {
    method decode (line 38) | @Override

FILE: sentinel-cluster/sentinel-cluster-client-default/src/main/java/com/alibaba/csp/sentinel/cluster/client/codec/registry/RequestDataWriterRegistry.java
  class RequestDataWriterRegistry (line 29) | public final class RequestDataWriterRegistry {
    method addWriter (line 33) | public static <T> boolean addWriter(int type, EntityWriter<T, ByteBuf>...
    method getWriter (line 41) | public static EntityWriter<Object, ByteBuf> getWriter(int type) {
    method remove (line 45) | public static boolean remove(int type) {

FILE: sentinel-cluster/sentinel-cluster-client-default/src/main/java/com/alibaba/csp/sentinel/cluster/client/codec/registry/ResponseDataDecodeRegistry.java
  class ResponseDataDecodeRegistry (line 29) | public final class ResponseDataDecodeRegistry {
    method addDecoder (line 33) | public static boolean addDecoder(int type, EntityDecoder<ByteBuf, ?> d...
    method getDecoder (line 41) | public static EntityDecoder<ByteBuf, Object> getDecoder(int type) {
    method removeDecoder (line 45) | public static boolean removeDecoder(int type) {

FILE: sentinel-cluster/sentinel-cluster-client-default/src/main/java/com/alibaba/csp/sentinel/cluster/client/config/ClusterClientAssignConfig.java
  class ClusterClientAssignConfig (line 22) | public class ClusterClientAssignConfig {
    method ClusterClientAssignConfig (line 27) | public ClusterClientAssignConfig() {}
    method ClusterClientAssignConfig (line 29) | public ClusterClientAssignConfig(String serverHost, Integer serverPort) {
    method getServerHost (line 34) | public String getServerHost() {
    method setServerHost (line 38) | public ClusterClientAssignConfig setServerHost(String serverHost) {
    method getServerPort (line 43) | public Integer getServerPort() {
    method setServerPort (line 47) | public ClusterClientAssignConfig setServerPort(Integer serverPort) {
    method toString (line 52) | @Override

FILE: sentinel-cluster/sentinel-cluster-client-default/src/main/java/com/alibaba/csp/sentinel/cluster/client/config/ClusterClientConfig.java
  class ClusterClientConfig (line 22) | public class ClusterClientConfig {
    method getRequestTimeout (line 26) | public Integer getRequestTimeout() {
    method setRequestTimeout (line 30) | public ClusterClientConfig setRequestTimeout(Integer requestTimeout) {
    method toString (line 35) | @Override

FILE: sentinel-cluster/sentinel-cluster-client-default/src/main/java/com/alibaba/csp/sentinel/cluster/client/config/ClusterClientConfigManager.java
  class ClusterClientConfigManager (line 33) | public final class ClusterClientConfigManager {
    method bindPropertyListener (line 58) | private static void bindPropertyListener() {
    method removePropertyListener (line 64) | private static void removePropertyListener() {
    method registerServerAssignProperty (line 69) | public static void registerServerAssignProperty(SentinelProperty<Clust...
    method registerClientConfigProperty (line 80) | public static void registerClientConfigProperty(SentinelProperty<Clust...
    method addServerChangeObserver (line 91) | public static void addServerChangeObserver(ServerChangeObserver observ...
    method applyNewConfig (line 101) | public static void applyNewConfig(ClusterClientConfig config) {
    method applyNewAssignConfig (line 105) | public static void applyNewAssignConfig(ClusterClientAssignConfig clus...
    class ClientAssignPropertyListener (line 109) | private static class ClientAssignPropertyListener implements PropertyL...
      method configLoad (line 110) | @Override
      method configUpdate (line 119) | @Override
      method applyConfig (line 124) | private synchronized void applyConfig(ClusterClientAssignConfig conf...
    class ClientConfigPropertyListener (line 140) | private static class ClientConfigPropertyListener implements PropertyL...
      method configLoad (line 142) | @Override
      method configUpdate (line 151) | @Override
      method applyConfig (line 156) | private synchronized void applyConfig(ClusterClientConfig config) {
    method updateClientConfigChange (line 169) | private static void updateClientConfigChange(ClusterClientConfig confi...
    method updateServerAssignment (line 175) | private static void updateServerAssignment(/*@Valid*/ ClusterClientAss...
    method isValidAssignConfig (line 187) | public static boolean isValidAssignConfig(ClusterClientAssignConfig co...
    method isValidClientConfig (line 193) | public static boolean isValidClientConfig(ClusterClientConfig config) {
    method getServerHost (line 197) | public static String getServerHost() {
    method getServerPort (line 201) | public static int getServerPort() {
    method getRequestTimeout (line 205) | public static int getRequestTimeout() {
    method getConnectTimeout (line 209) | public static int getConnectTimeout() {
    method ClusterClientConfigManager (line 213) | private ClusterClientConfigManager() {}

FILE: sentinel-cluster/sentinel-cluster-client-default/src/main/java/com/alibaba/csp/sentinel/cluster/client/config/ClusterClientStartUpConfig.java
  class ClusterClientStartUpConfig (line 29) | public class ClusterClientStartUpConfig {
    method getMaxParamByteSize (line 38) | public static In
Condensed preview — 1604 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,743K chars).
[
  {
    "path": ".codecov.yml",
    "chars": 1518,
    "preview": "ignore:\n  - \"sentinel-demo/.*\"\n  - \"sentinel-dashboard/.*\"\n  - \"sentinel-benchmark/.*\"\n  - \"sentinel-transport/.*\"\n  - \""
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 742,
    "preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: \"[BUG] \"\nlabels: ''\nassignees: ''\n\n---\n\n<!-- Here "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "chars": 574,
    "preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n<!-- Here is "
  },
  {
    "path": ".github/ISSUE_TEMPLATE.md",
    "chars": 554,
    "preview": "<!-- Here is for bug reports and feature requests ONLY! \n\nIf you're looking for help, please check our mail list and the"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 564,
    "preview": "<!--  Thanks for submitting a pull request! Here are some tips for you:\n1. Please make sure you have read and understood"
  },
  {
    "path": ".github/workflows/ci.yml",
    "chars": 1311,
    "preview": "name: Sentinel CI\n\non:\n  push:\n    branches:\n      - '*'\n  pull_request:\n    branches:\n      - master\n      - \"1.8\"\n    "
  },
  {
    "path": ".github/workflows/codeql-analysis.yml",
    "chars": 2189,
    "preview": "name: \"CodeQL\"\n\non:\n  push:\n    branches:\n      - master\n      - \"1.8\"\n      - \"2.0\"\n  pull_request:\n    branches:\n     "
  },
  {
    "path": ".github/workflows/document-lint.yml",
    "chars": 572,
    "preview": "name: document-lint\n\non:\n  push:\n    branches:\n      - '*'\n  pull_request:\n    branches:\n      - master\n      - \"1.8\"\n  "
  },
  {
    "path": ".gitignore",
    "chars": 431,
    "preview": "# IntelliJ project files\n.idea/\n*.iml\nout\ngen\n\n# Visual Studio Code\n.history/\n\n# Maven\ntarget/\npom.xml.tag\npom.xml.relea"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 3309,
    "preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 3264,
    "preview": "# Contributing to Sentinel\n\nWelcome to Sentinel! This document is a guideline about how to contribute to Sentinel.\nIf yo"
  },
  {
    "path": "LICENSE",
    "chars": 11357,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "README.md",
    "chars": 10557,
    "preview": "# Sentinel: The Sentinel of Your Microservices\n\n<img src=\"https://user-images.githubusercontent.com/9434884/43697219-3cb"
  },
  {
    "path": "SECURITY.md",
    "chars": 285,
    "preview": "# Security Policy\n\n## Reporting a security issue\n\nIf you think the bug you found is likely to make Sentinel-based applic"
  },
  {
    "path": "doc/README.md",
    "chars": 74,
    "preview": "# Sentinel related documents\n\n- [Awesome Sentinel](./awesome-sentinel.md)\n"
  },
  {
    "path": "doc/awesome-sentinel.md",
    "chars": 7211,
    "preview": "# Awesome Sentinel\n\n[![Awesome](https://awesome.re/badge-flat.svg)](https://awesome.re)\n\nA curated list of awesome thing"
  },
  {
    "path": "pom.xml",
    "chars": 23471,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
  },
  {
    "path": "sentinel-adapter/pom.xml",
    "chars": 3562,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/"
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo-adapter/README.md",
    "chars": 4022,
    "preview": "# Sentinel Apache Dubbo Adapter (for 2.7.x+)\n\n> Note: 中文文档请见[此处](https://sentinelguard.io/zh-cn/docs/open-source-framewo"
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo-adapter/pom.xml",
    "chars": 1771,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/BaseSentinelDubboFilter.java",
    "chars": 1366,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/DubboAppContextFilter.java",
    "chars": 1679,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/DubboUtils.java",
    "chars": 3762,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/SentinelDubboConsumerFilter.java",
    "chars": 5944,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/SentinelDubboProviderFilter.java",
    "chars": 4148,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/config/DubboAdapterGlobalConfig.java",
    "chars": 4488,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/fallback/DefaultDubboFallback.java",
    "chars": 1221,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/fallback/DubboFallback.java",
    "chars": 1287,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/fallback/DubboFallbackRegistry.java",
    "chars": 1566,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/origin/DefaultDubboOriginParser.java",
    "chars": 1092,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/origin/DubboOriginParser.java",
    "chars": 1209,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo-adapter/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter",
    "chars": 295,
    "preview": "sentinel.dubbo.provider.filter=com.alibaba.csp.sentinel.adapter.dubbo.SentinelDubboProviderFilter\nsentinel.dubbo.consume"
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/BaseTest.java",
    "chars": 3056,
    "preview": "/*\n * Copyright 1999-2024 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/DubboTestUtil.java",
    "chars": 3041,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/AbstractTimeBasedTest.java",
    "chars": 1766,
    "preview": "/*\n * Copyright 1999-2024 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/DubboAppContextFilterTest.java",
    "chars": 2362,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/DubboUtilsTest.java",
    "chars": 10440,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/SentinelDubboConsumerFilterTest.java",
    "chars": 17444,
    "preview": "/*\n * Copyright 1999-2024 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/SentinelDubboProviderFilterTest.java",
    "chars": 6134,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/fallback/DubboFallbackRegistryTest.java",
    "chars": 2467,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/origin/DubboOriginRegistryTest.java",
    "chars": 2855,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/provider/DemoService.java",
    "chars": 810,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/provider/impl/DemoServiceImpl.java",
    "chars": 1034,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/resources/spring-dubbo-consumer-filter.xml",
    "chars": 968,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\n       xmlns:xsi=\"http"
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo-adapter/src/test/resources/spring-dubbo-provider-filter.xml",
    "chars": 968,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\n       xmlns:xsi=\"http"
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo3-adapter/README.md",
    "chars": 3916,
    "preview": "# Sentinel Apache Dubbo Adapter (for 3.0.5+)\n\n> Note: 中文文档请见[此处](https://sentinelguard.io/zh-cn/docs/open-source-framewo"
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo3-adapter/pom.xml",
    "chars": 1771,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/BaseSentinelDubboFilter.java",
    "chars": 1313,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/DubboAppContextFilter.java",
    "chars": 1788,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/DubboUtils.java",
    "chars": 4405,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/SentinelDubboConsumerFilter.java",
    "chars": 5992,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/SentinelDubboProviderFilter.java",
    "chars": 4205,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/config/DubboAdapterGlobalConfig.java",
    "chars": 4493,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/fallback/DefaultDubboFallback.java",
    "chars": 1222,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/fallback/DubboFallback.java",
    "chars": 1288,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/fallback/DubboFallbackRegistry.java",
    "chars": 1568,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/origin/DefaultDubboOriginParser.java",
    "chars": 1094,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo3/origin/DubboOriginParser.java",
    "chars": 1210,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter",
    "chars": 99,
    "preview": "sentinel.dubbo.provider.filter=com.alibaba.csp.sentinel.adapter.dubbo3.SentinelDubboProviderFilter\n"
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo3-adapter/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.cluster.filter.ClusterFilter",
    "chars": 199,
    "preview": "dubbo.application.context.name.filter=com.alibaba.csp.sentinel.adapter.dubbo3.DubboAppContextFilter\nsentinel.dubbo.consu"
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo3-adapter/src/test/java/com/alibaba/csp/sentinel/BaseTest.java",
    "chars": 3059,
    "preview": "/*\n * Copyright 1999-2024 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo3-adapter/src/test/java/com/alibaba/csp/sentinel/DubboTestUtil.java",
    "chars": 3094,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo3-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo3/AbstractTimeBasedTest.java",
    "chars": 1767,
    "preview": "/*\n * Copyright 1999-2024 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo3-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo3/DubboAppContextFilterTest.java",
    "chars": 2869,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo3-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo3/DubboUtilsTest.java",
    "chars": 10431,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo3-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo3/SentinelDubboConsumerFilterTest.java",
    "chars": 17256,
    "preview": "/*\n * Copyright 1999-2024 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo3-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo3/SentinelDubboProviderFilterTest.java",
    "chars": 6136,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo3-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo3/SentinelFilterTest.java",
    "chars": 1803,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo3-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo3/fallback/DubboFallbackRegistryTest.java",
    "chars": 2643,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo3-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo3/origin/DubboOriginRegistryTest.java",
    "chars": 2858,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo3-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo3/provider/DemoService.java",
    "chars": 811,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo3-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo3/provider/impl/DemoServiceImpl.java",
    "chars": 1036,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo3-adapter/src/test/resources/spring-dubbo-consumer-filter.xml",
    "chars": 971,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\n       xmlns:xsi=\"http"
  },
  {
    "path": "sentinel-adapter/sentinel-apache-dubbo3-adapter/src/test/resources/spring-dubbo-provider-filter.xml",
    "chars": 971,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\n       xmlns:xsi=\"http"
  },
  {
    "path": "sentinel-adapter/sentinel-apache-httpclient-adapter/README.md",
    "chars": 2677,
    "preview": "# Sentinel Apache Httpclient Adapter\n\n## Introduction\n\nSentinel provides integration for OkHttp client to enable flow c"
  },
  {
    "path": "sentinel-adapter/sentinel-apache-httpclient-adapter/pom.xml",
    "chars": 2537,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "sentinel-adapter/sentinel-apache-httpclient-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/apache/httpclient/SentinelApacheHttpClientBuilder.java",
    "chars": 3065,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-httpclient-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/apache/httpclient/config/SentinelApacheHttpClientConfig.java",
    "chars": 2195,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-httpclient-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/apache/httpclient/extractor/ApacheHttpClientResourceExtractor.java",
    "chars": 883,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-httpclient-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/apache/httpclient/extractor/DefaultApacheHttpClientResourceExtractor.java",
    "chars": 1009,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-httpclient-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/apache/httpclient/fallback/ApacheHttpClientFallback.java",
    "chars": 1172,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-httpclient-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/apache/httpclient/fallback/DefaultApacheHttpClientFallback.java",
    "chars": 1394,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-httpclient-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/apache/httpclient/SentinelApacheHttpClientTest.java",
    "chars": 4458,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-httpclient-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/apache/httpclient/app/TestApplication.java",
    "chars": 995,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-httpclient-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/apache/httpclient/app/controller/TestController.java",
    "chars": 1204,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-httpclient-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/apache/httpclient/config/SentinelApacheHttpClientConfigTest.java",
    "chars": 1453,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-apache-httpclient-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/apache/httpclient/fallback/ApacheHttpClientFallbackTest.java",
    "chars": 1249,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/README.md",
    "chars": 374,
    "preview": "# Sentinel API Gateway Adapter Common\n\nThe `sentinel-api-gateway-adapter-common` module provides common abstraction for\n"
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/pom.xml",
    "chars": 1695,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/SentinelGatewayConstants.java",
    "chars": 2117,
    "preview": "/*\n * Copyright 1999-2019 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/api/ApiDefinition.java",
    "chars": 2237,
    "preview": "/*\n * Copyright 1999-2019 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/api/ApiDefinitionChangeObserver.java",
    "chars": 1003,
    "preview": "/*\n * Copyright 1999-2019 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/api/ApiPathPredicateItem.java",
    "chars": 2147,
    "preview": "/*\n * Copyright 1999-2019 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/api/ApiPredicateGroupItem.java",
    "chars": 1381,
    "preview": "/*\n * Copyright 1999-2019 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/api/ApiPredicateItem.java",
    "chars": 1177,
    "preview": "/*\n * Copyright 1999-2019 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/api/GatewayApiDefinitionManager.java",
    "chars": 6243,
    "preview": "/*\n * Copyright 1999-2019 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/api/matcher/AbstractApiMatcher.java",
    "chars": 2326,
    "preview": "/*\n * Copyright 1999-2019 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/command/GetGatewayApiDefinitionGroupCommandHandler.java",
    "chars": 1481,
    "preview": "/*\n * Copyright 1999-2019 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/command/GetGatewayRuleCommandHandler.java",
    "chars": 1417,
    "preview": "/*\n * Copyright 1999-2019 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/command/UpdateGatewayApiDefinitionGroupCommandHandler.java",
    "chars": 5028,
    "preview": "/*\n * Copyright 1999-2019 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/command/UpdateGatewayRuleCommandHandler.java",
    "chars": 3770,
    "preview": "/*\n * Copyright 1999-2019 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/param/ConfigurableRequestItemParser.java",
    "chars": 5644,
    "preview": "/*\n * Copyright 1999-2022 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/param/GatewayParamParser.java",
    "chars": 7492,
    "preview": "/*\n * Copyright 1999-2019 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/param/GatewayRegexCache.java",
    "chars": 1720,
    "preview": "/*\n * Copyright 1999-2019 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/param/RequestItemParser.java",
    "chars": 1857,
    "preview": "/*\n * Copyright 1999-2019 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/rule/GatewayFlowRule.java",
    "chars": 5382,
    "preview": "/*\n * Copyright 1999-2019 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/rule/GatewayParamFlowItem.java",
    "chars": 2786,
    "preview": "/*\n * Copyright 1999-2019 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/rule/GatewayRuleConverter.java",
    "chars": 3805,
    "preview": "/*\n * Copyright 1999-2019 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/rule/GatewayRuleManager.java",
    "chars": 11781,
    "preview": "/*\n * Copyright 1999-2019 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/slot/GatewayFlowSlot.java",
    "chars": 3050,
    "preview": "/*\n * Copyright 1999-2019 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/slot/GatewaySlotChainBuilder.java",
    "chars": 1109,
    "preview": "/*\n * Copyright 1999-2019 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/resources/META-INF/services/com.alibaba.csp.sentinel.command.CommandHandler",
    "chars": 373,
    "preview": "com.alibaba.csp.sentinel.adapter.gateway.common.command.UpdateGatewayApiDefinitionGroupCommandHandler\ncom.alibaba.csp.se"
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/resources/META-INF/services/com.alibaba.csp.sentinel.slotchain.ProcessorSlot",
    "chars": 68,
    "preview": "com.alibaba.csp.sentinel.adapter.gateway.common.slot.GatewayFlowSlot"
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/src/test/java/com/alibaba/csp/sentinel/adapter/gateway/common/api/GatewayApiDefinitionManagerTest.java",
    "chars": 793,
    "preview": "package com.alibaba.csp.sentinel.adapter.gateway.common.api;\n\nimport java.util.Collections;\n\nimport org.junit.Test;\n\nimp"
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/src/test/java/com/alibaba/csp/sentinel/adapter/gateway/common/param/GatewayParamParserTest.java",
    "chars": 15905,
    "preview": "/*\n * Copyright 1999-2019 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/src/test/java/com/alibaba/csp/sentinel/adapter/gateway/common/param/GatewayRegexCacheTest.java",
    "chars": 1512,
    "preview": "/*\n * Copyright 1999-2019 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/src/test/java/com/alibaba/csp/sentinel/adapter/gateway/common/rule/GatewayRuleConverterTest.java",
    "chars": 2713,
    "preview": "/*\n * Copyright 1999-2019 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-api-gateway-adapter-common/src/test/java/com/alibaba/csp/sentinel/adapter/gateway/common/rule/GatewayRuleManagerTest.java",
    "chars": 4581,
    "preview": "/*\n * Copyright 1999-2019 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-dubbo-adapter/README.md",
    "chars": 3960,
    "preview": "# Sentinel Dubbo Adapter\n\n> Note: 中文文档请见[此处](https://github.com/alibaba/Sentinel/wiki/主流框架的适配#dubbo)。\n\nSentinel Dubbo Ad"
  },
  {
    "path": "sentinel-adapter/sentinel-dubbo-adapter/pom.xml",
    "chars": 1618,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/"
  },
  {
    "path": "sentinel-adapter/sentinel-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/AbstractDubboFilter.java",
    "chars": 2264,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/DubboAdapterGlobalConfig.java",
    "chars": 4151,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/DubboAppContextFilter.java",
    "chars": 1641,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/DubboUtils.java",
    "chars": 1204,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/SentinelDubboConsumerFilter.java",
    "chars": 3400,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/SentinelDubboProviderFilter.java",
    "chars": 3717,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/fallback/DefaultDubboFallback.java",
    "chars": 1367,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/fallback/DubboFallback.java",
    "chars": 1268,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/fallback/DubboFallbackRegistry.java",
    "chars": 1547,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/origin/DefaultDubboOriginParser.java",
    "chars": 1110,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-dubbo-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/dubbo/origin/DubboOriginParser.java",
    "chars": 1151,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-dubbo-adapter/src/main/resources/META-INF/dubbo/com.alibaba.dubbo.rpc.Filter",
    "chars": 295,
    "preview": "sentinel.dubbo.provider.filter=com.alibaba.csp.sentinel.adapter.dubbo.SentinelDubboProviderFilter\nsentinel.dubbo.consume"
  },
  {
    "path": "sentinel-adapter/sentinel-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/BaseTest.java",
    "chars": 656,
    "preview": "package com.alibaba.csp.sentinel;\n\nimport com.alibaba.csp.sentinel.slots.clusterbuilder.ClusterBuilderSlot;\nimport com.a"
  },
  {
    "path": "sentinel-adapter/sentinel-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/AbstractDubboFilterTest.java",
    "chars": 4088,
    "preview": "package com.alibaba.csp.sentinel.adapter.dubbo;\n\nimport com.alibaba.csp.sentinel.adapter.dubbo.provider.DemoService;\nimp"
  },
  {
    "path": "sentinel-adapter/sentinel-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/DubboAppContextFilterTest.java",
    "chars": 1725,
    "preview": "package com.alibaba.csp.sentinel.adapter.dubbo;\n\nimport com.alibaba.csp.sentinel.BaseTest;\nimport com.alibaba.dubbo.comm"
  },
  {
    "path": "sentinel-adapter/sentinel-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/DubboUtilsTest.java",
    "chars": 1293,
    "preview": "package com.alibaba.csp.sentinel.adapter.dubbo;\n\nimport com.alibaba.dubbo.rpc.Invocation;\nimport org.junit.Test;\n\nimport"
  },
  {
    "path": "sentinel-adapter/sentinel-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/SentinelDubboConsumerFilterTest.java",
    "chars": 5487,
    "preview": "package com.alibaba.csp.sentinel.adapter.dubbo;\n\nimport com.alibaba.csp.sentinel.BaseTest;\nimport com.alibaba.csp.sentin"
  },
  {
    "path": "sentinel-adapter/sentinel-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/SentinelDubboProviderFilterTest.java",
    "chars": 5542,
    "preview": "package com.alibaba.csp.sentinel.adapter.dubbo;\n\nimport com.alibaba.csp.sentinel.BaseTest;\nimport com.alibaba.csp.sentin"
  },
  {
    "path": "sentinel-adapter/sentinel-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/fallback/DubboFallbackRegistryTest.java",
    "chars": 2259,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/origin/DubboOriginRegistryTest.java",
    "chars": 2820,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/provider/DemoService.java",
    "chars": 773,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-dubbo-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/dubbo/provider/impl/DemoServiceImpl.java",
    "chars": 927,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-dubbo-adapter/src/test/resources/spring-dubbo-consumer-filter.xml",
    "chars": 968,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\n       xmlns:xsi=\"http"
  },
  {
    "path": "sentinel-adapter/sentinel-dubbo-adapter/src/test/resources/spring-dubbo-provider-filter.xml",
    "chars": 968,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\n       xmlns:xsi=\"http"
  },
  {
    "path": "sentinel-adapter/sentinel-grpc-adapter/README.md",
    "chars": 836,
    "preview": "# Sentinel gRPC Adapter\n\nSentinel gRPC Adapter provides client and server interceptor for gRPC services.\n\n> Note that cu"
  },
  {
    "path": "sentinel-adapter/sentinel-grpc-adapter/pom.xml",
    "chars": 3633,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "sentinel-adapter/sentinel-grpc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/grpc/SentinelGrpcClientInterceptor.java",
    "chars": 5580,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-grpc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/grpc/SentinelGrpcServerInterceptor.java",
    "chars": 4852,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-grpc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/grpc/FooServiceClient.java",
    "chars": 2360,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-grpc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/grpc/FooServiceImpl.java",
    "chars": 2870,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-grpc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/grpc/GrpcTestServer.java",
    "chars": 1465,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-grpc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/grpc/SentinelGrpcClientInterceptorTest.java",
    "chars": 4082,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-grpc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/grpc/SentinelGrpcServerInterceptorTest.java",
    "chars": 4045,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-grpc-adapter/src/test/proto/example.proto",
    "chars": 483,
    "preview": "syntax = \"proto3\";\n\noption java_multiple_files = true;\noption java_package = \"com.alibaba.csp.sentinel.adapter.grpc.gen\""
  },
  {
    "path": "sentinel-adapter/sentinel-jax-rs-adapter/README.md",
    "chars": 3555,
    "preview": "# Sentinel adapter for JAX-RS\n\nSentinel provides integration to enable fault-tolerance and flow control for JAX-RS web r"
  },
  {
    "path": "sentinel-adapter/sentinel-jax-rs-adapter/pom.xml",
    "chars": 2583,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
  },
  {
    "path": "sentinel-adapter/sentinel-jax-rs-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/jaxrs/SentinelJaxRsClientTemplate.java",
    "chars": 2713,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-jax-rs-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/jaxrs/SentinelJaxRsProviderFilter.java",
    "chars": 3524,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-jax-rs-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/jaxrs/config/SentinelJaxRsConfig.java",
    "chars": 2334,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-jax-rs-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/jaxrs/exception/DefaultExceptionMapper.java",
    "chars": 1528,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-jax-rs-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/jaxrs/fallback/DefaultSentinelJaxRsFallback.java",
    "chars": 1594,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-jax-rs-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/jaxrs/fallback/SentinelJaxRsFallback.java",
    "chars": 1504,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-jax-rs-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/jaxrs/future/FutureWrapper.java",
    "chars": 1967,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-jax-rs-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/jaxrs/request/DefaultRequestOriginParser.java",
    "chars": 994,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-jax-rs-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/jaxrs/request/DefaultResourceNameParser.java",
    "chars": 1353,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-jax-rs-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/jaxrs/request/RequestOriginParser.java",
    "chars": 1077,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-jax-rs-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/jaxrs/request/ResourceNameParser.java",
    "chars": 930,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-jax-rs-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/jaxrs/ClientFilterTest.java",
    "chars": 14831,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-jax-rs-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/jaxrs/ProviderFilterTest.java",
    "chars": 9386,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-jax-rs-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/jaxrs/TestApplication.java",
    "chars": 978,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-jax-rs-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/jaxrs/TestResource.java",
    "chars": 2720,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-jax-rs-adapter/src/test/resources/application-client.yml",
    "chars": 87,
    "preview": "resteasy:\n  jaxrs:\n    scan-packages: com.alibaba.csp.sentinel.adapter.jaxrs.exception\n"
  },
  {
    "path": "sentinel-adapter/sentinel-jax-rs-adapter/src/test/resources/application-provider.yml",
    "chars": 77,
    "preview": "resteasy:\n  jaxrs:\n    scan-packages: com.alibaba.csp.sentinel.adapter.jaxrs\n"
  },
  {
    "path": "sentinel-adapter/sentinel-motan-adapter/pom.xml",
    "chars": 1368,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "sentinel-adapter/sentinel-motan-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/motan/MotanUtils.java",
    "chars": 3460,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-motan-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/motan/SentinelMotanConsumerFilter.java",
    "chars": 3102,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-motan-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/motan/SentinelMotanProviderFilter.java",
    "chars": 3452,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-motan-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/motan/config/MotanAdapterGlobalConfig.java",
    "chars": 3974,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-motan-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/motan/fallback/DefaultMotanFallback.java",
    "chars": 1466,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-motan-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/motan/fallback/MotanFallback.java",
    "chars": 1150,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-motan-adapter/src/main/resources/META-INF/services/com.weibo.api.motan.filter.Filter",
    "chars": 133,
    "preview": "com.alibaba.csp.sentinel.adapter.motan.SentinelMotanProviderFilter\ncom.alibaba.csp.sentinel.adapter.motan.SentinelMotanC"
  },
  {
    "path": "sentinel-adapter/sentinel-okhttp-adapter/README.md",
    "chars": 1983,
    "preview": "# Sentinel OkHttp Adapter\n\n## Introduction\n\nSentinel provides integration for OkHttp client to enable flow control for "
  },
  {
    "path": "sentinel-adapter/sentinel-okhttp-adapter/pom.xml",
    "chars": 2483,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpConfig.java",
    "chars": 2755,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptor.java",
    "chars": 2245,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/extractor/DefaultOkHttpResourceExtractor.java",
    "chars": 997,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/extractor/OkHttpResourceExtractor.java",
    "chars": 1083,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/DefaultOkHttpFallback.java",
    "chars": 1171,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/OkHttpFallback.java",
    "chars": 959,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java",
    "chars": 3932,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/app/TestApplication.java",
    "chars": 984,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/app/controller/TestController.java",
    "chars": 1185,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfigTest.java",
    "chars": 1418,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/extractor/OkHttpResourceExtractorTest.java",
    "chars": 2111,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/OkHttpFallbackTest.java",
    "chars": 1214,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-quarkus-adapter/README.md",
    "chars": 3144,
    "preview": "# Sentinel Quarkus Adapter\n\nSentinel provides `sentinel-annotation-quarkus-adapter` and `sentinel-jax-rs-quarkus-adapter"
  },
  {
    "path": "sentinel-adapter/sentinel-quarkus-adapter/pom.xml",
    "chars": 2373,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
  },
  {
    "path": "sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-deployment/pom.xml",
    "chars": 2402,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-deployment/src/main/java/com/alibaba/csp/sentinel/adapter/quarkus/annotation/deployment/SentinelAnnotationQuarkusAdapterProcessor.java",
    "chars": 1565,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-deployment/src/test/java/com/alibaba/csp/sentinel/adapter/quarkus/annotation/deployment/FooService.java",
    "chars": 2906,
    "preview": "/*\n * Copyright 1999-2020 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  }
]

// ... and 1404 more files (download for full content)

About this extraction

This page contains the full source code of the alibaba/Sentinel GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1604 files (5.1 MB), approximately 1.5M tokens, and a symbol index with 8206 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!