Copy disabled (too large)
Download .txt
Showing preview only (29,259K chars total). Download the full file to get everything.
Repository: apache/shenyu
Branch: master
Commit: c39506e97cee
Files: 4468
Total size: 26.5 MB
Directory structure:
gitextract_9c5hxuql/
├── .asf.yaml
├── .devcontainer/
│ └── devcontainer.json
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug-report.yml
│ │ ├── config.yml
│ │ ├── feature-request.yml
│ │ ├── question.yml
│ │ ├── task.yml
│ │ └── volunteer.yml
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── activie-committers.yml
│ ├── filters.yml
│ └── workflows/
│ ├── auto-notify.yml
│ ├── ci.yml
│ ├── codeql-analysis.yml
│ ├── docker-publish-dockerhub.yml
│ ├── docker-publish.yml
│ ├── e2e-k8s.yml
│ ├── integrated-test-k8s-ingress.yml
│ ├── integrated-test.yml
│ ├── issue-label.yml
│ └── k8s-examples-http.yml
├── .gitignore
├── .gitpod.Dockerfile
├── .gitpod.yml
├── .idea/
│ └── vcs.xml
├── .licenserc.yaml
├── .mvn/
│ └── wrapper/
│ └── maven-wrapper.properties
├── .prowlabels.yaml
├── LICENSE
├── MATURITY.md
├── Makefile
├── NOTICE
├── README.md
├── RELEASE-NOTES.md
├── SECURITY.md
├── actions/
│ ├── paths-filter/
│ │ ├── action.yml
│ │ └── dist/
│ │ └── index.js
│ └── scripts/
│ └── issue-manager.sh
├── changelog.sh
├── db/
│ ├── init/
│ │ ├── init-guide.md
│ │ ├── mysql/
│ │ │ └── schema.sql
│ │ ├── ob/
│ │ │ └── schema.sql
│ │ ├── og/
│ │ │ └── create-table.sql
│ │ ├── oracle/
│ │ │ └── schema.sql
│ │ └── pg/
│ │ ├── create-database.sql
│ │ └── create-table.sql
│ └── upgrade/
│ ├── 2.4.1-upgrade-2.4.2-mysql.sql
│ ├── 2.4.1-upgrade-2.4.2-pg.sql
│ ├── 2.4.2-upgrade-2.4.3-mysql.sql
│ ├── 2.4.2-upgrade-2.4.3-pg.sql
│ ├── 2.4.3-upgrade-2.5.0-mysql.sql
│ ├── 2.4.3-upgrade-2.5.0-pg.sql
│ ├── 2.5.0-upgrade-2.5.1-mysql.sql
│ ├── 2.5.0-upgrade-2.5.1-oracle.sql
│ ├── 2.5.0-upgrade-2.5.1-pg.sql
│ ├── 2.5.1-upgrade-2.6.0-mysql.sql
│ ├── 2.5.1-upgrade-2.6.0-oracle.sql
│ ├── 2.5.1-upgrade-2.6.0-pg.sql
│ ├── 2.6.0-upgrade-2.6.1-mysql.sql
│ ├── 2.6.0-upgrade-2.6.1-og.sql
│ ├── 2.6.0-upgrade-2.6.1-oracle.sql
│ ├── 2.6.0-upgrade-2.6.1-pg.sql
│ ├── 2.6.1-upgrade-2.7.0-mysql.sql
│ ├── 2.6.1-upgrade-2.7.0-og.sql
│ ├── 2.6.1-upgrade-2.7.0-oracle.sql
│ ├── 2.6.1-upgrade-2.7.0-pg.sql
│ ├── 2.7.0-upgrade-2.7.1-mysql.sql
│ ├── 2.7.0-upgrade-2.7.1-ob.sql
│ ├── 2.7.0-upgrade-2.7.1-og.sql
│ ├── 2.7.0-upgrade-2.7.1-oracle.sql
│ ├── 2.7.0-upgrade-2.7.1-pg.sql
│ └── upgrade-guide.md
├── mvnw
├── mvnw.cmd
├── pom.xml
├── script/
│ ├── checkstyle-header.txt
│ └── shenyu_checkstyle.xml
├── shenyu-admin/
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── http/
│ │ ├── http-debug-app-auth-controller-api.http
│ │ ├── http-debug-dashboard-user-controller-api.http
│ │ ├── http-debug-data-permission-controller-api.http
│ │ ├── http-debug-dict-controller-api.http
│ │ ├── http-debug-meta-data-controller-api.http
│ │ ├── http-debug-operation-record-log-controller-api.http
│ │ ├── http-debug-platform-controller-api.http
│ │ ├── http-debug-plugin-controller-api.http
│ │ ├── http-debug-plugin-handle-controller-api.http
│ │ ├── http-debug-registry-config-controller-api.http
│ │ ├── http-debug-registry-controller-api.http
│ │ ├── http-debug-resource-controller-api.http
│ │ ├── http-debug-role-controller-api.http
│ │ ├── http-debug-rule-controller-api.http
│ │ └── http-debug-selector-controller-api.http
│ ├── main/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── admin/
│ │ │ ├── ShenyuAdminBootstrap.java
│ │ │ ├── aspect/
│ │ │ │ ├── DataPermissionAspect.java
│ │ │ │ ├── PageableAspect.java
│ │ │ │ ├── annotation/
│ │ │ │ │ ├── DataPermission.java
│ │ │ │ │ ├── Pageable.java
│ │ │ │ │ └── RestApi.java
│ │ │ │ └── controller/
│ │ │ │ ├── ControllerMethodAdvice.java
│ │ │ │ ├── PrintLogControllerMethodAdviceImpl.java
│ │ │ │ ├── RestControllerAspect.java
│ │ │ │ └── SuperAdminPasswordSafeAdvice.java
│ │ │ ├── config/
│ │ │ │ ├── ClusterConfiguration.java
│ │ │ │ ├── ClusterJdbcConfiguration.java
│ │ │ │ ├── ClusterZookeeperConfiguration.java
│ │ │ │ ├── DataBaseConfiguration.java
│ │ │ │ ├── DiscoveryConfiguration.java
│ │ │ │ ├── HttpLongPollingSyncConfiguration.java
│ │ │ │ ├── HttpUtilsConfiguration.java
│ │ │ │ ├── KubernetesConfiguration.java
│ │ │ │ ├── LdapConfiguration.java
│ │ │ │ ├── MapperConfig.java
│ │ │ │ ├── RegisterCenterConfiguration.java
│ │ │ │ ├── ShenyuAdminConfiguration.java
│ │ │ │ ├── StandaloneConfiguration.java
│ │ │ │ ├── SwaggerConfiguration.java
│ │ │ │ ├── WebConfiguration.java
│ │ │ │ ├── WebSocketSyncConfiguration.java
│ │ │ │ └── properties/
│ │ │ │ ├── ClusterProperties.java
│ │ │ │ ├── ClusterZookeeperProperties.java
│ │ │ │ ├── DashboardProperties.java
│ │ │ │ ├── DataBaseProperties.java
│ │ │ │ ├── DeploymentProperties.java
│ │ │ │ ├── HttpSyncProperties.java
│ │ │ │ ├── JwtProperties.java
│ │ │ │ ├── LdapProperties.java
│ │ │ │ ├── SecretProperties.java
│ │ │ │ ├── ShiroProperties.java
│ │ │ │ └── WebsocketSyncProperties.java
│ │ │ ├── controller/
│ │ │ │ ├── AiProxyApiKeyController.java
│ │ │ │ ├── AlertReceiverController.java
│ │ │ │ ├── AlertReportController.java
│ │ │ │ ├── ApiController.java
│ │ │ │ ├── ApiDocController.java
│ │ │ │ ├── AppAuthController.java
│ │ │ │ ├── ConfigController.java
│ │ │ │ ├── ConfigsExportImportController.java
│ │ │ │ ├── DashboardUserController.java
│ │ │ │ ├── DataPermissionController.java
│ │ │ │ ├── DetailController.java
│ │ │ │ ├── DiscoveryController.java
│ │ │ │ ├── DiscoveryUpstreamController.java
│ │ │ │ ├── FieldController.java
│ │ │ │ ├── IndexController.java
│ │ │ │ ├── InstanceController.java
│ │ │ │ ├── MetaDataController.java
│ │ │ │ ├── MockRequestRecordController.java
│ │ │ │ ├── NamespaceController.java
│ │ │ │ ├── NamespacePluginController.java
│ │ │ │ ├── OperationRecordLogController.java
│ │ │ │ ├── PagedController.java
│ │ │ │ ├── PermissionController.java
│ │ │ │ ├── PlatformController.java
│ │ │ │ ├── PluginController.java
│ │ │ │ ├── PluginHandleController.java
│ │ │ │ ├── ProxySelectorController.java
│ │ │ │ ├── RegistryController.java
│ │ │ │ ├── ResourceController.java
│ │ │ │ ├── RoleController.java
│ │ │ │ ├── RuleController.java
│ │ │ │ ├── SandboxController.java
│ │ │ │ ├── ScalePolicyController.java
│ │ │ │ ├── ScaleRlueController.java
│ │ │ │ ├── SelectorController.java
│ │ │ │ ├── ShenyuClientHttpRegistryController.java
│ │ │ │ ├── ShenyuDictController.java
│ │ │ │ ├── SwaggerImportController.java
│ │ │ │ ├── TagController.java
│ │ │ │ └── TagRelationController.java
│ │ │ ├── discovery/
│ │ │ │ ├── APDiscoveryProcessor.java
│ │ │ │ ├── AbstractDiscoveryProcessor.java
│ │ │ │ ├── DefaultDiscoveryProcessor.java
│ │ │ │ ├── DiscoveryDataChangedEventSyncListener.java
│ │ │ │ ├── DiscoveryLevel.java
│ │ │ │ ├── DiscoveryMode.java
│ │ │ │ ├── DiscoveryProcessor.java
│ │ │ │ ├── DiscoveryProcessorHolder.java
│ │ │ │ ├── LocalDiscoveryProcessor.java
│ │ │ │ ├── listener/
│ │ │ │ │ ├── DataChangedEventListener.java
│ │ │ │ │ └── DiscoveryDataChangedEvent.java
│ │ │ │ └── parse/
│ │ │ │ ├── CustomDiscoveryUpstreamParser.java
│ │ │ │ └── KeyValueParser.java
│ │ │ ├── disruptor/
│ │ │ │ ├── RegisterClientServerDisruptorPublisher.java
│ │ │ │ ├── executor/
│ │ │ │ │ └── RegisterServerConsumerExecutor.java
│ │ │ │ └── subscriber/
│ │ │ │ ├── ApiDocExecutorSubscriber.java
│ │ │ │ ├── DiscoveryConfigRegisterExecutorSubscriber.java
│ │ │ │ ├── McpToolsRegisterExecutorSubscriber.java
│ │ │ │ ├── MetadataExecutorSubscriber.java
│ │ │ │ └── URIRegisterExecutorSubscriber.java
│ │ │ ├── exception/
│ │ │ │ ├── ExceptionHandlers.java
│ │ │ │ ├── I18nException.java
│ │ │ │ ├── ResourceNotFoundException.java
│ │ │ │ ├── ShenyuAdminException.java
│ │ │ │ ├── ValidFailException.java
│ │ │ │ └── WebI18nException.java
│ │ │ ├── listener/
│ │ │ │ ├── AbstractDataChangedListener.java
│ │ │ │ ├── AiProxySelectorResolverInvalidator.java
│ │ │ │ ├── ApplicationStartListener.java
│ │ │ │ ├── ConfigDataCache.java
│ │ │ │ ├── DataChangedEvent.java
│ │ │ │ ├── DataChangedEventDispatcher.java
│ │ │ │ ├── RecordLogDataChangedAdapterListener.java
│ │ │ │ ├── http/
│ │ │ │ │ └── HttpLongPollingDataChangedListener.java
│ │ │ │ └── websocket/
│ │ │ │ ├── WebsocketCollector.java
│ │ │ │ ├── WebsocketConfigurator.java
│ │ │ │ ├── WebsocketDataChangedListener.java
│ │ │ │ └── WebsocketListener.java
│ │ │ ├── lock/
│ │ │ │ ├── RegisterExecutionLock.java
│ │ │ │ ├── RegisterExecutionRepository.java
│ │ │ │ ├── impl/
│ │ │ │ │ ├── ForUpdateBackedRegisterExecutionLock.java
│ │ │ │ │ └── PlatformTransactionRegisterExecutionRepository.java
│ │ │ │ └── util/
│ │ │ │ └── RegisterTransactionUtil.java
│ │ │ ├── mapper/
│ │ │ │ ├── AiProxyApiKeyMapper.java
│ │ │ │ ├── AlertReceiverMapper.java
│ │ │ │ ├── ApiMapper.java
│ │ │ │ ├── ApiRuleRelationMapper.java
│ │ │ │ ├── AppAuthMapper.java
│ │ │ │ ├── AuthParamMapper.java
│ │ │ │ ├── AuthPathMapper.java
│ │ │ │ ├── DashboardUserMapper.java
│ │ │ │ ├── DataPermissionMapper.java
│ │ │ │ ├── DetailMapper.java
│ │ │ │ ├── DiscoveryHandlerMapper.java
│ │ │ │ ├── DiscoveryMapper.java
│ │ │ │ ├── DiscoveryRelMapper.java
│ │ │ │ ├── DiscoveryUpstreamMapper.java
│ │ │ │ ├── FieldMapper.java
│ │ │ │ ├── InstanceInfoMapper.java
│ │ │ │ ├── MetaDataMapper.java
│ │ │ │ ├── MockRequestRecordMapper.java
│ │ │ │ ├── ModelMapper.java
│ │ │ │ ├── NamespaceMapper.java
│ │ │ │ ├── NamespacePluginRelMapper.java
│ │ │ │ ├── NamespaceUserRelMapper.java
│ │ │ │ ├── OperationRecordLogMapper.java
│ │ │ │ ├── ParameterMapper.java
│ │ │ │ ├── PermissionMapper.java
│ │ │ │ ├── PluginHandleMapper.java
│ │ │ │ ├── PluginMapper.java
│ │ │ │ ├── ProxySelectorMapper.java
│ │ │ │ ├── RegistryMapper.java
│ │ │ │ ├── ResourceMapper.java
│ │ │ │ ├── RoleMapper.java
│ │ │ │ ├── RuleConditionMapper.java
│ │ │ │ ├── RuleMapper.java
│ │ │ │ ├── ScaleHistoryMapper.java
│ │ │ │ ├── ScalePolicyMapper.java
│ │ │ │ ├── ScaleRuleMapper.java
│ │ │ │ ├── SelectorConditionMapper.java
│ │ │ │ ├── SelectorMapper.java
│ │ │ │ ├── ShenyuDictMapper.java
│ │ │ │ ├── TagMapper.java
│ │ │ │ ├── TagRelationMapper.java
│ │ │ │ └── UserRoleMapper.java
│ │ │ ├── mode/
│ │ │ │ ├── ShenyuRunningModeService.java
│ │ │ │ ├── cluster/
│ │ │ │ │ ├── filter/
│ │ │ │ │ │ └── ClusterForwardFilter.java
│ │ │ │ │ ├── impl/
│ │ │ │ │ │ ├── jdbc/
│ │ │ │ │ │ │ ├── ClusterSelectMasterServiceJdbcImpl.java
│ │ │ │ │ │ │ └── mapper/
│ │ │ │ │ │ │ └── ClusterMasterMapper.java
│ │ │ │ │ │ └── zookeeper/
│ │ │ │ │ │ ├── ClusterSelectMasterServiceZookeeperImpl.java
│ │ │ │ │ │ ├── ClusterZookeeperClient.java
│ │ │ │ │ │ └── ClusterZookeeperConfig.java
│ │ │ │ │ └── service/
│ │ │ │ │ ├── ClusterSelectMasterService.java
│ │ │ │ │ └── ShenyuClusterService.java
│ │ │ │ └── standalone/
│ │ │ │ └── ShenyuStandaloneService.java
│ │ │ ├── model/
│ │ │ │ ├── bean/
│ │ │ │ │ ├── CustomCode.java
│ │ │ │ │ ├── DocInfo.java
│ │ │ │ │ ├── DocItem.java
│ │ │ │ │ ├── DocModule.java
│ │ │ │ │ ├── DocParameter.java
│ │ │ │ │ └── UpstreamInstance.java
│ │ │ │ ├── constant/
│ │ │ │ │ └── RegConstant.java
│ │ │ │ ├── custom/
│ │ │ │ │ └── UserInfo.java
│ │ │ │ ├── dto/
│ │ │ │ │ ├── ApiDTO.java
│ │ │ │ │ ├── AppAuthDTO.java
│ │ │ │ │ ├── AuthApplyDTO.java
│ │ │ │ │ ├── AuthParamDTO.java
│ │ │ │ │ ├── AuthPathApplyDTO.java
│ │ │ │ │ ├── AuthPathDTO.java
│ │ │ │ │ ├── AuthPathWarpDTO.java
│ │ │ │ │ ├── BatchCommonDTO.java
│ │ │ │ │ ├── BatchIdsDTO.java
│ │ │ │ │ ├── BatchNamespaceCommonDTO.java
│ │ │ │ │ ├── ClusterMasterDTO.java
│ │ │ │ │ ├── CreateResourceDTO.java
│ │ │ │ │ ├── DashboardUserDTO.java
│ │ │ │ │ ├── DashboardUserModifyPasswordDTO.java
│ │ │ │ │ ├── DataPermissionDTO.java
│ │ │ │ │ ├── DetailDTO.java
│ │ │ │ │ ├── DiscoveryDTO.java
│ │ │ │ │ ├── DiscoveryHandlerDTO.java
│ │ │ │ │ ├── DiscoveryRelDTO.java
│ │ │ │ │ ├── DiscoveryUpstreamDTO.java
│ │ │ │ │ ├── FieldDTO.java
│ │ │ │ │ ├── MetaDataDTO.java
│ │ │ │ │ ├── MockRequestRecordDTO.java
│ │ │ │ │ ├── NamespaceDTO.java
│ │ │ │ │ ├── NamespacePluginDTO.java
│ │ │ │ │ ├── NamespaceSyncDTO.java
│ │ │ │ │ ├── PermissionDTO.java
│ │ │ │ │ ├── PluginDTO.java
│ │ │ │ │ ├── PluginHandleDTO.java
│ │ │ │ │ ├── ProxyApiKeyDTO.java
│ │ │ │ │ ├── ProxyGatewayDTO.java
│ │ │ │ │ ├── ProxySelectorAddDTO.java
│ │ │ │ │ ├── ProxySelectorDTO.java
│ │ │ │ │ ├── RegistryDTO.java
│ │ │ │ │ ├── ResourceDTO.java
│ │ │ │ │ ├── RoleDTO.java
│ │ │ │ │ ├── RuleConditionDTO.java
│ │ │ │ │ ├── RuleDTO.java
│ │ │ │ │ ├── ScalePolicyDTO.java
│ │ │ │ │ ├── ScaleRuleDTO.java
│ │ │ │ │ ├── SelectorConditionDTO.java
│ │ │ │ │ ├── SelectorDTO.java
│ │ │ │ │ ├── ShenyuDictDTO.java
│ │ │ │ │ ├── SwaggerImportRequest.java
│ │ │ │ │ ├── TagDTO.java
│ │ │ │ │ ├── TagRelationDTO.java
│ │ │ │ │ └── UserRoleDTO.java
│ │ │ │ ├── entity/
│ │ │ │ │ ├── AlertReceiverDO.java
│ │ │ │ │ ├── ApiDO.java
│ │ │ │ │ ├── ApiRuleRelationDO.java
│ │ │ │ │ ├── AppAuthDO.java
│ │ │ │ │ ├── AuthParamDO.java
│ │ │ │ │ ├── AuthPathDO.java
│ │ │ │ │ ├── BaseDO.java
│ │ │ │ │ ├── ClusterMasterDO.java
│ │ │ │ │ ├── DashboardUserDO.java
│ │ │ │ │ ├── DataPermissionDO.java
│ │ │ │ │ ├── DetailDO.java
│ │ │ │ │ ├── DiscoveryDO.java
│ │ │ │ │ ├── DiscoveryHandlerDO.java
│ │ │ │ │ ├── DiscoveryRelDO.java
│ │ │ │ │ ├── DiscoveryUpstreamDO.java
│ │ │ │ │ ├── FieldDO.java
│ │ │ │ │ ├── InstanceInfoDO.java
│ │ │ │ │ ├── MetaDataDO.java
│ │ │ │ │ ├── MockRequestRecordDO.java
│ │ │ │ │ ├── ModelDO.java
│ │ │ │ │ ├── NamespaceDO.java
│ │ │ │ │ ├── NamespacePluginRelDO.java
│ │ │ │ │ ├── NamespaceUserRelDO.java
│ │ │ │ │ ├── OperationRecordLog.java
│ │ │ │ │ ├── ParameterDO.java
│ │ │ │ │ ├── PermissionDO.java
│ │ │ │ │ ├── PluginDO.java
│ │ │ │ │ ├── PluginHandleDO.java
│ │ │ │ │ ├── ProxyApiKeyDO.java
│ │ │ │ │ ├── ProxySelectorDO.java
│ │ │ │ │ ├── RegistryDO.java
│ │ │ │ │ ├── ResourceDO.java
│ │ │ │ │ ├── RoleDO.java
│ │ │ │ │ ├── RuleConditionDO.java
│ │ │ │ │ ├── RuleDO.java
│ │ │ │ │ ├── ScaleHistoryDO.java
│ │ │ │ │ ├── ScalePolicyDO.java
│ │ │ │ │ ├── ScaleRuleDO.java
│ │ │ │ │ ├── SelectorConditionDO.java
│ │ │ │ │ ├── SelectorDO.java
│ │ │ │ │ ├── ShenyuDictDO.java
│ │ │ │ │ ├── TagDO.java
│ │ │ │ │ ├── TagRelationDO.java
│ │ │ │ │ └── UserRoleDO.java
│ │ │ │ ├── enums/
│ │ │ │ │ ├── DiscoveryTypeEnum.java
│ │ │ │ │ └── EventTypeEnum.java
│ │ │ │ ├── event/
│ │ │ │ │ ├── AdminDataModelChangedEvent.java
│ │ │ │ │ ├── BatchChangedEvent.java
│ │ │ │ │ ├── dict/
│ │ │ │ │ │ ├── BatchDictChangedEvent.java
│ │ │ │ │ │ ├── BatchDictDeletedEvent.java
│ │ │ │ │ │ ├── DictChangedEvent.java
│ │ │ │ │ │ ├── DictCreatedEvent.java
│ │ │ │ │ │ └── DictUpdatedEvent.java
│ │ │ │ │ ├── discovery/
│ │ │ │ │ │ └── DiscoveryStreamUpdatedEvent.java
│ │ │ │ │ ├── handle/
│ │ │ │ │ │ ├── BatchPluginHandleChangedEvent.java
│ │ │ │ │ │ └── PluginHandleChangedEvent.java
│ │ │ │ │ ├── instance/
│ │ │ │ │ │ └── InstanceInfoReportEvent.java
│ │ │ │ │ ├── metadata/
│ │ │ │ │ │ ├── BatchMetaDataChangedEvent.java
│ │ │ │ │ │ ├── BatchMetaDataDeletedEvent.java
│ │ │ │ │ │ ├── MetaDataChangedEvent.java
│ │ │ │ │ │ ├── MetaDataCreatedEvent.java
│ │ │ │ │ │ └── MetadataUpdatedEvent.java
│ │ │ │ │ ├── namespace/
│ │ │ │ │ │ └── NamespaceCreatedEvent.java
│ │ │ │ │ ├── plugin/
│ │ │ │ │ │ ├── BatchNamespacePluginChangedEvent.java
│ │ │ │ │ │ ├── BatchNamespacePluginDeletedEvent.java
│ │ │ │ │ │ ├── BatchPluginChangedEvent.java
│ │ │ │ │ │ ├── BatchPluginDeletedEvent.java
│ │ │ │ │ │ ├── NamespacePluginChangedEvent.java
│ │ │ │ │ │ ├── NamespacePluginCreatedEvent.java
│ │ │ │ │ │ ├── PluginChangedEvent.java
│ │ │ │ │ │ └── PluginCreatedEvent.java
│ │ │ │ │ ├── resource/
│ │ │ │ │ │ ├── BatchResourceCreatedEvent.java
│ │ │ │ │ │ ├── BatchResourceDeletedEvent.java
│ │ │ │ │ │ ├── ResourceChangedEvent.java
│ │ │ │ │ │ └── ResourceCreatedEvent.java
│ │ │ │ │ ├── role/
│ │ │ │ │ │ ├── BatchRoleDeletedEvent.java
│ │ │ │ │ │ ├── RoleChangedEvent.java
│ │ │ │ │ │ ├── RoleCreatedEvent.java
│ │ │ │ │ │ └── RoleUpdatedEvent.java
│ │ │ │ │ ├── rule/
│ │ │ │ │ │ ├── BatchRuleDeletedEvent.java
│ │ │ │ │ │ ├── RuleChangedEvent.java
│ │ │ │ │ │ ├── RuleCreatedEvent.java
│ │ │ │ │ │ └── RuleUpdatedEvent.java
│ │ │ │ │ ├── selector/
│ │ │ │ │ │ ├── BatchSelectorDeletedEvent.java
│ │ │ │ │ │ ├── SelectorChangedEvent.java
│ │ │ │ │ │ ├── SelectorCreatedEvent.java
│ │ │ │ │ │ └── SelectorUpdatedEvent.java
│ │ │ │ │ └── user/
│ │ │ │ │ ├── BatchUserDeletedEvent.java
│ │ │ │ │ ├── UserChangedEvent.java
│ │ │ │ │ ├── UserCreatedEvent.java
│ │ │ │ │ └── UserUpdatedEvent.java
│ │ │ │ ├── page/
│ │ │ │ │ ├── CommonPager.java
│ │ │ │ │ ├── PageCondition.java
│ │ │ │ │ ├── PageParameter.java
│ │ │ │ │ ├── PageResultUtils.java
│ │ │ │ │ └── condition/
│ │ │ │ │ ├── BaseExcludedSearchCondition.java
│ │ │ │ │ ├── SearchCondition.java
│ │ │ │ │ └── SwitchCondition.java
│ │ │ │ ├── query/
│ │ │ │ │ ├── AlertReceiverQuery.java
│ │ │ │ │ ├── ApiQuery.java
│ │ │ │ │ ├── AppAuthQuery.java
│ │ │ │ │ ├── DashboardUserQuery.java
│ │ │ │ │ ├── DataPermissionQuery.java
│ │ │ │ │ ├── DetailQuery.java
│ │ │ │ │ ├── FieldQuery.java
│ │ │ │ │ ├── FilterQuery.java
│ │ │ │ │ ├── InstanceQuery.java
│ │ │ │ │ ├── InstanceQueryCondition.java
│ │ │ │ │ ├── MetaDataQuery.java
│ │ │ │ │ ├── MockRequestRecordQuery.java
│ │ │ │ │ ├── NamespacePluginQuery.java
│ │ │ │ │ ├── NamespacePluginQueryCondition.java
│ │ │ │ │ ├── NamespaceQuery.java
│ │ │ │ │ ├── NamespaceUserQuery.java
│ │ │ │ │ ├── PermissionQuery.java
│ │ │ │ │ ├── PluginHandleQuery.java
│ │ │ │ │ ├── PluginQuery.java
│ │ │ │ │ ├── PluginQueryCondition.java
│ │ │ │ │ ├── ProxyApiKeyQuery.java
│ │ │ │ │ ├── ProxySelectorQuery.java
│ │ │ │ │ ├── RecordLogQueryCondition.java
│ │ │ │ │ ├── RegistryQuery.java
│ │ │ │ │ ├── ResourceQuery.java
│ │ │ │ │ ├── RoleQuery.java
│ │ │ │ │ ├── RuleConditionQuery.java
│ │ │ │ │ ├── RuleQuery.java
│ │ │ │ │ ├── RuleQueryCondition.java
│ │ │ │ │ ├── ScaleRuleQuery.java
│ │ │ │ │ ├── SelectorConditionQuery.java
│ │ │ │ │ ├── SelectorQuery.java
│ │ │ │ │ ├── SelectorQueryCondition.java
│ │ │ │ │ ├── ShenyuDictQuery.java
│ │ │ │ │ ├── TagQuery.java
│ │ │ │ │ └── TagRelationQuery.java
│ │ │ │ ├── result/
│ │ │ │ │ ├── AdminResult.java
│ │ │ │ │ ├── ConfigImportResult.java
│ │ │ │ │ └── ShenyuAdminResult.java
│ │ │ │ └── vo/
│ │ │ │ ├── AlertTemplateVO.java
│ │ │ │ ├── ApiVO.java
│ │ │ │ ├── AppAuthVO.java
│ │ │ │ ├── AuthParamVO.java
│ │ │ │ ├── AuthPathVO.java
│ │ │ │ ├── DashboardUserEditVO.java
│ │ │ │ ├── DashboardUserVO.java
│ │ │ │ ├── DataPermissionPageVO.java
│ │ │ │ ├── DetailVO.java
│ │ │ │ ├── DiscoveryHandlerVO.java
│ │ │ │ ├── DiscoveryRelVO.java
│ │ │ │ ├── DiscoveryUpstreamVO.java
│ │ │ │ ├── DiscoveryVO.java
│ │ │ │ ├── DocVO.java
│ │ │ │ ├── EnumVO.java
│ │ │ │ ├── FieldVO.java
│ │ │ │ ├── InstanceDataVisualLineVO.java
│ │ │ │ ├── InstanceDataVisualVO.java
│ │ │ │ ├── InstanceInfoVO.java
│ │ │ │ ├── LoginDashboardUserVO.java
│ │ │ │ ├── MenuDocItemVO.java
│ │ │ │ ├── MenuModuleVO.java
│ │ │ │ ├── MenuProjectVO.java
│ │ │ │ ├── MetaDataVO.java
│ │ │ │ ├── MockRequestRecordVO.java
│ │ │ │ ├── NamespacePluginVO.java
│ │ │ │ ├── NamespaceUserRelVO.java
│ │ │ │ ├── NamespaceVO.java
│ │ │ │ ├── PermissionMenuVO.java
│ │ │ │ ├── PluginHandleVO.java
│ │ │ │ ├── PluginSnapshotVO.java
│ │ │ │ ├── PluginVO.java
│ │ │ │ ├── ProxyApiKeyVO.java
│ │ │ │ ├── ProxySelectorVO.java
│ │ │ │ ├── RegistryVO.java
│ │ │ │ ├── ResourceVO.java
│ │ │ │ ├── RoleEditVO.java
│ │ │ │ ├── RoleVO.java
│ │ │ │ ├── RuleConditionVO.java
│ │ │ │ ├── RuleVO.java
│ │ │ │ ├── ScalePolicyVO.java
│ │ │ │ ├── ScaleRuleVO.java
│ │ │ │ ├── SelectorConditionVO.java
│ │ │ │ ├── SelectorVO.java
│ │ │ │ ├── ShenyuDictVO.java
│ │ │ │ ├── TagVO.java
│ │ │ │ └── UserRoleVO.java
│ │ │ ├── mybatis/
│ │ │ │ ├── handler/
│ │ │ │ │ ├── AbstractObjectTypeHandler.java
│ │ │ │ │ ├── ListByteTypeHandler.java
│ │ │ │ │ └── MapStringTypeHandler.java
│ │ │ │ ├── og/
│ │ │ │ │ ├── handler/
│ │ │ │ │ │ └── OpenGaussSQLBooleanHandler.java
│ │ │ │ │ └── interceptor/
│ │ │ │ │ ├── OpenGaussSQLPrepareInterceptor.java
│ │ │ │ │ ├── OpenGaussSQLQueryInterceptor.java
│ │ │ │ │ └── OpenGaussSqlUpdateInterceptor.java
│ │ │ │ ├── oracle/
│ │ │ │ │ ├── OracleSQLPrepareInterceptor.java
│ │ │ │ │ └── OracleSQLUpdateInterceptor.java
│ │ │ │ └── pg/
│ │ │ │ ├── handler/
│ │ │ │ │ └── PostgreSQLBooleanHandler.java
│ │ │ │ └── interceptor/
│ │ │ │ ├── PostgreSQLPrepareInterceptor.java
│ │ │ │ ├── PostgreSQLQueryInterceptor.java
│ │ │ │ └── PostgreSqlUpdateInterceptor.java
│ │ │ ├── register/
│ │ │ │ ├── ShenyuClientServerRegisterPublisher.java
│ │ │ │ └── ShenyuClientServerRegisterRepository.java
│ │ │ ├── scale/
│ │ │ │ ├── collector/
│ │ │ │ │ ├── PrometheusMetricsProvider.java
│ │ │ │ │ └── provider/
│ │ │ │ │ ├── MetricData.java
│ │ │ │ │ └── MetricsProvider.java
│ │ │ │ ├── config/
│ │ │ │ │ ├── PrometheusProperties.java
│ │ │ │ │ └── ScaleProperties.java
│ │ │ │ ├── monitor/
│ │ │ │ │ ├── observer/
│ │ │ │ │ │ ├── Observer.java
│ │ │ │ │ │ └── ScaleObserver.java
│ │ │ │ │ └── subject/
│ │ │ │ │ ├── MetricsMonitor.java
│ │ │ │ │ ├── Subject.java
│ │ │ │ │ └── cache/
│ │ │ │ │ └── ScaleRuleCache.java
│ │ │ │ └── scaler/
│ │ │ │ ├── KubernetesScaler.java
│ │ │ │ ├── ScaleService.java
│ │ │ │ ├── ScaleTaskInitializer.java
│ │ │ │ ├── cache/
│ │ │ │ │ └── ScalePolicyCache.java
│ │ │ │ └── dynamic/
│ │ │ │ ├── ScaleAction.java
│ │ │ │ ├── ScaleRuleEvaluator.java
│ │ │ │ └── TaskSchedulerManager.java
│ │ │ ├── service/
│ │ │ │ ├── AiProxyApiKeyService.java
│ │ │ │ ├── AiProxyConnectionService.java
│ │ │ │ ├── AlertDispatchService.java
│ │ │ │ ├── AlertReceiverService.java
│ │ │ │ ├── ApiService.java
│ │ │ │ ├── AppAuthService.java
│ │ │ │ ├── ConfigsService.java
│ │ │ │ ├── DashboardUserService.java
│ │ │ │ ├── DataPermissionService.java
│ │ │ │ ├── DetailService.java
│ │ │ │ ├── DiscoveryService.java
│ │ │ │ ├── DiscoveryUpstreamService.java
│ │ │ │ ├── EnumService.java
│ │ │ │ ├── FieldService.java
│ │ │ │ ├── InstanceInfoService.java
│ │ │ │ ├── MetaDataService.java
│ │ │ │ ├── MockRequestRecordService.java
│ │ │ │ ├── NamespacePluginService.java
│ │ │ │ ├── NamespaceService.java
│ │ │ │ ├── NamespaceUserService.java
│ │ │ │ ├── OperationRecordLogService.java
│ │ │ │ ├── PageService.java
│ │ │ │ ├── PermissionService.java
│ │ │ │ ├── PluginHandleService.java
│ │ │ │ ├── PluginService.java
│ │ │ │ ├── ProxySelectorService.java
│ │ │ │ ├── RegistryService.java
│ │ │ │ ├── ResourceService.java
│ │ │ │ ├── RoleService.java
│ │ │ │ ├── RuleService.java
│ │ │ │ ├── SandboxService.java
│ │ │ │ ├── ScalePolicyService.java
│ │ │ │ ├── ScaleRuleService.java
│ │ │ │ ├── SecretService.java
│ │ │ │ ├── SelectorService.java
│ │ │ │ ├── ShenyuDictService.java
│ │ │ │ ├── SwaggerImportService.java
│ │ │ │ ├── TagRelationService.java
│ │ │ │ ├── TagService.java
│ │ │ │ ├── configs/
│ │ │ │ │ ├── AuthConfigsExportImportHandler.java
│ │ │ │ │ ├── ConfigsExportImportEnum.java
│ │ │ │ │ ├── ConfigsExportImportHandler.java
│ │ │ │ │ ├── ConfigsImportContext.java
│ │ │ │ │ ├── DictDataConfigsExportImportHandler.java
│ │ │ │ │ ├── DiscoveryDataConfigsExportImportHandler.java
│ │ │ │ │ ├── DiscoveryUpstreamDataConfigsExportImportHandler.java
│ │ │ │ │ ├── MetadataConfigsExportImportHandler.java
│ │ │ │ │ ├── NamespacePluginDataConfigsExportImportHandler.java
│ │ │ │ │ ├── PluginHandleDataConfigsExportImportHandler.java
│ │ │ │ │ ├── PluginTemplateDataConfigsExportImportHandler.java
│ │ │ │ │ ├── ProxySelectorDataConfigsExportImportHandler.java
│ │ │ │ │ ├── RuleDataConfigsExportImportHandler.java
│ │ │ │ │ └── SelectorDataConfigsExportImportHandler.java
│ │ │ │ ├── converter/
│ │ │ │ │ ├── AbstractSelectorHandleConverter.java
│ │ │ │ │ ├── DivideSelectorHandleConverter.java
│ │ │ │ │ ├── DubboSelectorHandleConverter.java
│ │ │ │ │ ├── GrpcSelectorHandleConverter.java
│ │ │ │ │ ├── SelectorHandleConverter.java
│ │ │ │ │ ├── SelectorHandleConverterFactor.java
│ │ │ │ │ └── TarsSelectorHandleConverter.java
│ │ │ │ ├── impl/
│ │ │ │ │ ├── AiProxyApiKeyServiceImpl.java
│ │ │ │ │ ├── AiProxyConnectionServiceImpl.java
│ │ │ │ │ ├── AlertDispatchServiceImpl.java
│ │ │ │ │ ├── AlertReceiverServiceImpl.java
│ │ │ │ │ ├── ApiServiceImpl.java
│ │ │ │ │ ├── AppAuthServiceImpl.java
│ │ │ │ │ ├── ConfigsServiceImpl.java
│ │ │ │ │ ├── DashboardUserServiceImpl.java
│ │ │ │ │ ├── DataPermissionServiceImpl.java
│ │ │ │ │ ├── DetailServiceImpl.java
│ │ │ │ │ ├── DiscoveryServiceImpl.java
│ │ │ │ │ ├── DiscoveryUpstreamServiceImpl.java
│ │ │ │ │ ├── EnumServiceImpl.java
│ │ │ │ │ ├── FieldServiceImpl.java
│ │ │ │ │ ├── InstanceCheckService.java
│ │ │ │ │ ├── InstanceInfoServiceImpl.java
│ │ │ │ │ ├── MetaDataServiceImpl.java
│ │ │ │ │ ├── MockRequestRecordServiceImpl.java
│ │ │ │ │ ├── NamespacePluginServiceImpl.java
│ │ │ │ │ ├── NamespaceServiceImpl.java
│ │ │ │ │ ├── NamespaceUserServiceImpl.java
│ │ │ │ │ ├── OperationRecordLogServiceImpl.java
│ │ │ │ │ ├── PermissionServiceImpl.java
│ │ │ │ │ ├── PluginHandleServiceImpl.java
│ │ │ │ │ ├── PluginServiceImpl.java
│ │ │ │ │ ├── ProxySelectorServiceImpl.java
│ │ │ │ │ ├── RegistryServiceImpl.java
│ │ │ │ │ ├── ResourceServiceImpl.java
│ │ │ │ │ ├── RoleServiceImpl.java
│ │ │ │ │ ├── RuleServiceImpl.java
│ │ │ │ │ ├── SandboxServiceImpl.java
│ │ │ │ │ ├── ScalePolicyServiceImpl.java
│ │ │ │ │ ├── ScaleRuleServiceImpl.java
│ │ │ │ │ ├── SecretServiceImpl.java
│ │ │ │ │ ├── SelectorServiceImpl.java
│ │ │ │ │ ├── ShenyuDictServiceImpl.java
│ │ │ │ │ ├── SwaggerImportServiceImpl.java
│ │ │ │ │ ├── SyncDataServiceImpl.java
│ │ │ │ │ ├── TagRelationServiceImpl.java
│ │ │ │ │ ├── TagServiceImpl.java
│ │ │ │ │ └── UpstreamCheckService.java
│ │ │ │ ├── manager/
│ │ │ │ │ ├── DocManager.java
│ │ │ │ │ ├── DocParser.java
│ │ │ │ │ ├── LoadServiceDocEntry.java
│ │ │ │ │ ├── PullSwaggerDocService.java
│ │ │ │ │ ├── RegisterApiDocService.java
│ │ │ │ │ └── impl/
│ │ │ │ │ ├── DocManagerImpl.java
│ │ │ │ │ ├── LoadServiceDocEntryImpl.java
│ │ │ │ │ ├── PullSwaggerDocServiceImpl.java
│ │ │ │ │ ├── RegisterApiDocServiceImpl.java
│ │ │ │ │ └── SwaggerDocParser.java
│ │ │ │ ├── provider/
│ │ │ │ │ ├── AppKeyProvider.java
│ │ │ │ │ └── PluginNameProvider.java
│ │ │ │ ├── publish/
│ │ │ │ │ ├── AdminDataModelChangedEventPublisher.java
│ │ │ │ │ ├── DictEventPublisher.java
│ │ │ │ │ ├── InstanceInfoReportEventPublisher.java
│ │ │ │ │ ├── MetaDataEventPublisher.java
│ │ │ │ │ ├── NamespaceEventPublisher.java
│ │ │ │ │ ├── NamespacePluginEventPublisher.java
│ │ │ │ │ ├── PluginEventPublisher.java
│ │ │ │ │ ├── PluginHandleEventPublisher.java
│ │ │ │ │ ├── ResourceEventPublisher.java
│ │ │ │ │ ├── RoleEventPublisher.java
│ │ │ │ │ ├── RuleEventPublisher.java
│ │ │ │ │ ├── SelectorEventPublisher.java
│ │ │ │ │ └── UserEventPublisher.java
│ │ │ │ ├── register/
│ │ │ │ │ ├── AbstractContextPathRegisterService.java
│ │ │ │ │ ├── AbstractShenyuClientRegisterServiceImpl.java
│ │ │ │ │ ├── FallbackShenyuClientRegisterService.java
│ │ │ │ │ ├── ShenyuClientRegisterDivideServiceImpl.java
│ │ │ │ │ ├── ShenyuClientRegisterDubboServiceImpl.java
│ │ │ │ │ ├── ShenyuClientRegisterGrpcServiceImpl.java
│ │ │ │ │ ├── ShenyuClientRegisterMcpServiceImpl.java
│ │ │ │ │ ├── ShenyuClientRegisterMotanServiceImpl.java
│ │ │ │ │ ├── ShenyuClientRegisterService.java
│ │ │ │ │ ├── ShenyuClientRegisterSofaServiceImpl.java
│ │ │ │ │ ├── ShenyuClientRegisterTarsServiceImpl.java
│ │ │ │ │ └── ShenyuClientRegisterWebSocketServiceImpl.java
│ │ │ │ └── support/
│ │ │ │ └── AiProxyRealKeyResolver.java
│ │ │ ├── shiro/
│ │ │ │ ├── bean/
│ │ │ │ │ └── StatelessAuthFilter.java
│ │ │ │ └── config/
│ │ │ │ ├── ShiroConfiguration.java
│ │ │ │ └── ShiroRealm.java
│ │ │ ├── spring/
│ │ │ │ ├── LocalDataSourceLoader.java
│ │ │ │ ├── ResourcePermissionDataSourceLoader.java
│ │ │ │ ├── ShenyuApplicationContextAware.java
│ │ │ │ └── SpringBeanUtils.java
│ │ │ ├── transfer/
│ │ │ │ ├── AlertTransfer.java
│ │ │ │ ├── AppAuthTransfer.java
│ │ │ │ ├── ClusterMasterTransfer.java
│ │ │ │ ├── ConditionTransfer.java
│ │ │ │ ├── DashboardUserTransfer.java
│ │ │ │ ├── DiscoveryTransfer.java
│ │ │ │ ├── MetaDataTransfer.java
│ │ │ │ ├── NamespaceTransfer.java
│ │ │ │ ├── PluginTransfer.java
│ │ │ │ ├── ProxyApiKeyTransfer.java
│ │ │ │ └── RegistryTransfer.java
│ │ │ ├── utils/
│ │ │ │ ├── Assert.java
│ │ │ │ ├── BaseTrigger.java
│ │ │ │ ├── CommonUpstreamUtils.java
│ │ │ │ ├── FailI18nMessage.java
│ │ │ │ ├── HttpUtils.java
│ │ │ │ ├── JwtUtils.java
│ │ │ │ ├── NamespaceUtils.java
│ │ │ │ ├── PluginHandleH2Trigger.java
│ │ │ │ ├── ResourceUtil.java
│ │ │ │ ├── ResultUtil.java
│ │ │ │ ├── SelectorUtil.java
│ │ │ │ ├── SessionUtil.java
│ │ │ │ ├── ShenyuDictH2Trigger.java
│ │ │ │ ├── ShenyuDomain.java
│ │ │ │ ├── ShenyuResultMessage.java
│ │ │ │ ├── ShenyuSignatureUtils.java
│ │ │ │ ├── ThreadLocalUtils.java
│ │ │ │ ├── UploadUtils.java
│ │ │ │ ├── UrlSecurityUtils.java
│ │ │ │ ├── WebI18nAssert.java
│ │ │ │ └── ZipUtil.java
│ │ │ └── validation/
│ │ │ ├── ExistProvider.java
│ │ │ ├── annotation/
│ │ │ │ └── Existed.java
│ │ │ └── validator/
│ │ │ └── ExistedValidator.java
│ │ └── resources/
│ │ ├── META-INF/
│ │ │ ├── shenyu/
│ │ │ │ └── org.apache.shenyu.admin.register.ShenyuClientServerRegisterRepository
│ │ │ └── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ ├── application-h2.yml
│ │ ├── application-mysql.yml
│ │ ├── application-ob.yml
│ │ ├── application-og.yml
│ │ ├── application-oracle.yml
│ │ ├── application-pg.yml
│ │ ├── application.yml
│ │ ├── banner.txt
│ │ ├── logback.xml
│ │ ├── mappers/
│ │ │ ├── ai-proxy-api-key-sqlmap.xml
│ │ │ ├── alert-receiver-sqlmap.xml
│ │ │ ├── api-rule-relation-sqlmap.xml
│ │ │ ├── api-sqlmap.xml
│ │ │ ├── app-auth-sqlmap.xml
│ │ │ ├── auth-param-sqlmap.xml
│ │ │ ├── auth-path-sqlmap.xml
│ │ │ ├── cluster-master-sqlmap.xml
│ │ │ ├── dashboard-user-sqlmap.xml
│ │ │ ├── data-permission-sqlmap.xml
│ │ │ ├── detail-sqlmap.xml
│ │ │ ├── discovery-handler-sqlmap.xml
│ │ │ ├── discovery-rel-sqlmap.xml
│ │ │ ├── discovery-sqlmap.xml
│ │ │ ├── discovery-upstream-sqlmap.xml
│ │ │ ├── field-sqlmap.xml
│ │ │ ├── instance-info-sqlmap.xml
│ │ │ ├── meta-data-sqlmap.xml
│ │ │ ├── mock-request-record-sqlmap.xml
│ │ │ ├── model-sqlmap.xml
│ │ │ ├── namespace-plugin-rel-sqlmap.xml
│ │ │ ├── namespace-sqlmap.xml
│ │ │ ├── namespace-user-rel-sqlmap.xml
│ │ │ ├── operation-record-log-sqlmap.xml
│ │ │ ├── parameter-sqlmap.xml
│ │ │ ├── permission-sqlmap.xml
│ │ │ ├── plugin-handle-sqlmap.xml
│ │ │ ├── plugin-sqlmap.xml
│ │ │ ├── proxy-selector-sqlmap.xml
│ │ │ ├── registry-sqlmap.xml
│ │ │ ├── resouce-sqlmap.xml
│ │ │ ├── role-sqlmap.xml
│ │ │ ├── rule-condition-sqlmap.xml
│ │ │ ├── rule-sqlmap.xml
│ │ │ ├── scale-history-sqlmap.xml
│ │ │ ├── scale-policy-sqlmap.xml
│ │ │ ├── scale-rule-sqlmap.xml
│ │ │ ├── selector-condition-sqlmap.xml
│ │ │ ├── selector-sqlmap.xml
│ │ │ ├── shenyu-dict-sqlmap.xml
│ │ │ ├── tag-relation-sqlmap.xml
│ │ │ ├── tag-sqlmap.xml
│ │ │ └── user-role-sqlmap.xml
│ │ ├── message/
│ │ │ ├── i18n.properties
│ │ │ ├── i18n_en_US.properties
│ │ │ └── i18n_zh_CN.properties
│ │ ├── mybatis/
│ │ │ └── mybatis-config.xml
│ │ ├── sql-script/
│ │ │ └── h2/
│ │ │ └── schema.sql
│ │ └── static/
│ │ ├── index.7892d888.css
│ │ ├── index.814edc73.js
│ │ └── index.html
│ └── test/
│ ├── java/
│ │ └── org/
│ │ └── apache/
│ │ └── shenyu/
│ │ └── admin/
│ │ ├── AbstractConfigurationTest.java
│ │ ├── AbstractReflectGetterSetterTest.java
│ │ ├── AbstractSpringIntegrationTest.java
│ │ ├── aspect/
│ │ │ ├── DataPermissionAspectTest.java
│ │ │ ├── PageableAspectTest.java
│ │ │ └── PrintApiLogAspectTest.java
│ │ ├── config/
│ │ │ ├── DataBaseConfigurationTest.java
│ │ │ ├── HttpLongPollingSyncConfigurationTest.java
│ │ │ ├── LdapConfigurationTest.java
│ │ │ ├── MapperConfigTest.java
│ │ │ ├── RegisterCenterConfigurationTest.java
│ │ │ ├── SecretPropertiesTest.java
│ │ │ ├── ShenyuAdminConfigurationTest.java
│ │ │ ├── SwaggerConfigurationTest.java
│ │ │ ├── WebConfigurationTest.java
│ │ │ ├── WebSocketSyncConfigurationTest.java
│ │ │ └── properties/
│ │ │ ├── DashboardPropertiesTest.java
│ │ │ ├── HttpSyncPropertiesTest.java
│ │ │ ├── JwtPropertiesTest.java
│ │ │ ├── LdapPropertiesTest.java
│ │ │ └── WebsocketSyncPropertiesTest.java
│ │ ├── controller/
│ │ │ ├── ApiControllerTest.java
│ │ │ ├── ApiDocControllerTest.java
│ │ │ ├── AppAuthControllerTest.java
│ │ │ ├── ConfigControllerTest.java
│ │ │ ├── ConfigsExportImportControllerTest.java
│ │ │ ├── DashboardUserControllerTest.java
│ │ │ ├── DataPermissionControllerTest.java
│ │ │ ├── IndexControllerTest.java
│ │ │ ├── InstanceControllerTest.java
│ │ │ ├── MetaDataControllerTest.java
│ │ │ ├── MockRequestRecordControllerTest.java
│ │ │ ├── OperationRecordLogControllerTest.java
│ │ │ ├── PermissionControllerTest.java
│ │ │ ├── PlatformControllerTest.java
│ │ │ ├── PluginControllerTest.java
│ │ │ ├── PluginHandleControllerTest.java
│ │ │ ├── ResourceControllerTest.java
│ │ │ ├── RoleControllerTest.java
│ │ │ ├── RuleControllerTest.java
│ │ │ ├── SandboxControllerTest.java
│ │ │ ├── SelectorControllerTest.java
│ │ │ ├── ShenyuDictControllerTest.java
│ │ │ ├── ShenyuHttpRegistryControllerTest.java
│ │ │ ├── TagControllerTest.java
│ │ │ └── TagRelationControllerTest.java
│ │ ├── discovery/
│ │ │ ├── DefaultDiscoveryProcessorTest.java
│ │ │ ├── DiscoveryDataChangedEventSyncListenerTest.java
│ │ │ ├── DiscoveryLevelTest.java
│ │ │ ├── DiscoveryModeTest.java
│ │ │ ├── DiscoveryProcessorHolderTest.java
│ │ │ ├── LocalDiscoveryProcessorTest.java
│ │ │ └── parse/
│ │ │ └── CustomDiscoveryUpstreamParserTest.java
│ │ ├── disruptor/
│ │ │ └── subscriber/
│ │ │ ├── MetadataExecutorSubscriberTest.java
│ │ │ └── URIRegisterExecutorSubscriberTest.java
│ │ ├── exception/
│ │ │ └── ExceptionHandlersTest.java
│ │ ├── listener/
│ │ │ ├── AbstractDataChangedListenerTest.java
│ │ │ ├── ApplicationStartListenerTest.java
│ │ │ ├── ConfigDataCacheTest.java
│ │ │ ├── DataChangedEventDispatcherTest.java
│ │ │ ├── http/
│ │ │ │ └── HttpLongPollingDataChangedListenerTest.java
│ │ │ └── websocket/
│ │ │ ├── WebsocketCollectorTest.java
│ │ │ ├── WebsocketConfiguratorTest.java
│ │ │ ├── WebsocketDataChangedListenerTest.java
│ │ │ └── WebsocketListenerTest.java
│ │ ├── lock/
│ │ │ ├── ForUpdateBackedRegisterExecutionLockTest.java
│ │ │ └── RegisterExecutionRepositoryTest.java
│ │ ├── mapper/
│ │ │ ├── ApiMapperTest.java
│ │ │ ├── ApiRuleRelationMapperTest.java
│ │ │ ├── AppAuthMapperTest.java
│ │ │ ├── AuthParamMapperTest.java
│ │ │ ├── AuthPathMapperTest.java
│ │ │ ├── DashboardUserMapperTest.java
│ │ │ ├── DataPermissionMapperTest.java
│ │ │ ├── DetailMapperTest.java
│ │ │ ├── DiscoveryHandlerMapperTest.java
│ │ │ ├── DiscoveryUpstreamMapperTest.java
│ │ │ ├── FieldMapperTest.java
│ │ │ ├── InstanceInfoMapperTest.java
│ │ │ ├── MetaDataMapperTest.java
│ │ │ ├── MockRequestRecordMapperTest.java
│ │ │ ├── ModelMapperTest.java
│ │ │ ├── NamespacePluginRelMapperTest.java
│ │ │ ├── OperationRecordLogMapperTest.java
│ │ │ ├── ParameterMapperTest.java
│ │ │ ├── PermissionMapperTest.java
│ │ │ ├── PluginHandleMapperTest.java
│ │ │ ├── PluginMapperTest.java
│ │ │ ├── ProxySelectorMapperTest.java
│ │ │ ├── ResourceMapperTest.java
│ │ │ ├── RoleMapperTest.java
│ │ │ ├── RuleConditionMapperTest.java
│ │ │ ├── RuleMapperTest.java
│ │ │ ├── SelectorConditionMapperTest.java
│ │ │ ├── SelectorMapperTest.java
│ │ │ ├── ShenyuDictMapperTest.java
│ │ │ ├── TagMapperTest.java
│ │ │ ├── TagRelationMapperTest.java
│ │ │ └── UserRoleMapperTest.java
│ │ ├── model/
│ │ │ ├── bean/
│ │ │ │ ├── DocParameterTest.java
│ │ │ │ └── UpstreamInstanceTest.java
│ │ │ ├── dto/
│ │ │ │ └── AuthPathApplyDTOTest.java
│ │ │ ├── event/
│ │ │ │ ├── dict/
│ │ │ │ │ ├── BatchDictChangedEventTest.java
│ │ │ │ │ ├── BatchDictDeletedEventTest.java
│ │ │ │ │ ├── DictCreatedEventTest.java
│ │ │ │ │ └── DictUpdatedEventTest.java
│ │ │ │ ├── handle/
│ │ │ │ │ ├── BatchPluginHandleChangedEventTest.java
│ │ │ │ │ └── PluginHandleChangedEventTest.java
│ │ │ │ ├── instance/
│ │ │ │ │ └── InstanceInfoReportEventTest.java
│ │ │ │ ├── metadata/
│ │ │ │ │ ├── BatchMetaDataChangedEventTest.java
│ │ │ │ │ ├── BatchMetaDataDeletedEventTest.java
│ │ │ │ │ ├── MetaDataChangedEventTest.java
│ │ │ │ │ ├── MetaDataCreatedEventTest.java
│ │ │ │ │ └── MetadataUpdatedEventTest.java
│ │ │ │ ├── plugin/
│ │ │ │ │ ├── BatchNamespacePluginDeletedEventTest.java
│ │ │ │ │ ├── BatchPluginChangedEventTest.java
│ │ │ │ │ ├── PluginChangedEventTest.java
│ │ │ │ │ └── PluginCreatedEventTest.java
│ │ │ │ ├── resource/
│ │ │ │ │ ├── BatchResourceCreatedEventTest.java
│ │ │ │ │ ├── BatchResourceDeletedEventTest.java
│ │ │ │ │ ├── ResourceChangedEventTest.java
│ │ │ │ │ └── ResourceCreatedEventTest.java
│ │ │ │ ├── role/
│ │ │ │ │ ├── BatchRoleDeletedEventTest.java
│ │ │ │ │ ├── RoleChangedEventTest.java
│ │ │ │ │ ├── RoleCreatedEventTest.java
│ │ │ │ │ └── RoleUpdatedEventTest.java
│ │ │ │ ├── selector/
│ │ │ │ │ ├── BatchSelectorDeletedEventTest.java
│ │ │ │ │ ├── SelectorChangedEventTest.java
│ │ │ │ │ ├── SelectorCreatedEventTest.java
│ │ │ │ │ └── SelectorUpdatedEventTest.java
│ │ │ │ └── user/
│ │ │ │ ├── BatchUserDeletedEventTest.java
│ │ │ │ ├── UserCreatedEventTest.java
│ │ │ │ └── UserUpdatedEventTest.java
│ │ │ ├── page/
│ │ │ │ ├── PageParameterTest.java
│ │ │ │ └── PageResultUtilsTest.java
│ │ │ ├── query/
│ │ │ │ ├── AppAuthQueryTest.java
│ │ │ │ ├── DashboardUserQueryTest.java
│ │ │ │ ├── DataPermissionQueryTest.java
│ │ │ │ ├── InstanceQueryConditionTest.java
│ │ │ │ ├── MetaDataQueryTest.java
│ │ │ │ ├── PluginHandleQueryTest.java
│ │ │ │ ├── PluginQueryTest.java
│ │ │ │ ├── RuleConditionQueryTest.java
│ │ │ │ ├── RuleQueryTest.java
│ │ │ │ ├── SelectorConditionQueryTest.java
│ │ │ │ ├── SelectorQueryTest.java
│ │ │ │ ├── ShenyuDictQueryTest.java
│ │ │ │ └── TagRelationQueryTest.java
│ │ │ ├── result/
│ │ │ │ └── ShenyuAdminResultTest.java
│ │ │ └── vo/
│ │ │ ├── AppAuthVOTest.java
│ │ │ ├── AuthParamVOTest.java
│ │ │ ├── AuthPathVOTest.java
│ │ │ ├── DashboardUserVOTest.java
│ │ │ ├── EnumVOTest.java
│ │ │ ├── InstanceDataVisualLineVOTest.java
│ │ │ ├── InstanceDataVisualVOTest.java
│ │ │ ├── InstanceInfoVOTest.java
│ │ │ ├── MetaDataVOTest.java
│ │ │ ├── PluginHandleVOTest.java
│ │ │ ├── PluginVOTest.java
│ │ │ ├── RuleConditionVOTest.java
│ │ │ ├── RuleVOTest.java
│ │ │ ├── SelectorConditionVOTest.java
│ │ │ ├── SelectorVOTest.java
│ │ │ ├── ShenyuDictVOTest.java
│ │ │ └── UserRoleVOTest.java
│ │ ├── mybatis/
│ │ │ ├── og/
│ │ │ │ ├── handler/
│ │ │ │ │ └── OpenGaussSQLBooleanHandlerTest.java
│ │ │ │ └── interceptor/
│ │ │ │ ├── OpenGaussSQLPrepareInterceptorTest.java
│ │ │ │ ├── OpenGaussSQLQueryInterceptorTest.java
│ │ │ │ └── OpenGaussSqlUpdateInterceptorTest.java
│ │ │ ├── oracle/
│ │ │ │ └── OracleSQLPrepareInterceptorTest.java
│ │ │ └── pg/
│ │ │ ├── handler/
│ │ │ │ └── PostgreSQLBooleanHandlerTest.java
│ │ │ └── interceptor/
│ │ │ ├── PostgreSQLPrepareInterceptorTest.java
│ │ │ ├── PostgreSQLQueryInterceptorTest.java
│ │ │ └── PostgreSqlUpdateInterceptorTest.java
│ │ ├── service/
│ │ │ ├── AlertDispatchServiceTest.java
│ │ │ ├── AlertReceiverServiceTest.java
│ │ │ ├── ApiServiceTest.java
│ │ │ ├── AppAuthServiceTest.java
│ │ │ ├── ClusterSelectMasterServiceJdbcImplTest.java
│ │ │ ├── ConfigsServiceTest.java
│ │ │ ├── DashboardUserServiceTest.java
│ │ │ ├── DataPermissionServiceTest.java
│ │ │ ├── DetailServiceTest.java
│ │ │ ├── DiscoveryUpstreamServiceTest.java
│ │ │ ├── EnumServiceTest.java
│ │ │ ├── FieldServiceTest.java
│ │ │ ├── InstanceInfoServiceTest.java
│ │ │ ├── MetaDataServiceTest.java
│ │ │ ├── MockRequestRecordServiceTest.java
│ │ │ ├── NamespacePluginServiceTest.java
│ │ │ ├── PermissionServiceTest.java
│ │ │ ├── PluginHandleServiceTest.java
│ │ │ ├── PluginServiceTest.java
│ │ │ ├── ProxySelectorServiceTest.java
│ │ │ ├── ResourceServiceTest.java
│ │ │ ├── RoleServiceTest.java
│ │ │ ├── RuleServiceTest.java
│ │ │ ├── SelectorServiceTest.java
│ │ │ ├── ShenyuDictServiceTest.java
│ │ │ ├── SwaggerImportServiceTest.java
│ │ │ ├── SyncDataServiceTest.java
│ │ │ ├── TagRelationServiceTest.java
│ │ │ ├── TagServiceTest.java
│ │ │ ├── UpstreamCheckServiceTest.java
│ │ │ ├── impl/
│ │ │ │ ├── AiProxyApiKeyServiceImplTest.java
│ │ │ │ └── InstanceCheckServiceTest.java
│ │ │ ├── manager/
│ │ │ │ └── impl/
│ │ │ │ ├── DocManagerImplTest.java
│ │ │ │ ├── LoadServiceDocEntryImplTest.java
│ │ │ │ ├── SwaggerDocManagerImplTest.java
│ │ │ │ └── SwaggerDocParserTest.java
│ │ │ ├── publish/
│ │ │ │ └── InstanceInfoReportEventPublisherTest.java
│ │ │ ├── register/
│ │ │ │ ├── AbstractContextPathRegisterServiceTest.java
│ │ │ │ ├── AbstractShenyuClientRegisterServiceImplTest.java
│ │ │ │ ├── FallbackShenyuClientRegisterServiceTest.java
│ │ │ │ ├── ShenyuClientRegisterDivideServiceImplTest.java
│ │ │ │ ├── ShenyuClientRegisterDubboServiceImplTest.java
│ │ │ │ ├── ShenyuClientRegisterGrpcServiceImplTest.java
│ │ │ │ ├── ShenyuClientRegisterMotanServiceImplTest.java
│ │ │ │ ├── ShenyuClientRegisterSofaServiceImplTest.java
│ │ │ │ ├── ShenyuClientRegisterTarsServiceImplTest.java
│ │ │ │ └── ShenyuClientRegisterWebSocketServiceImplTest.java
│ │ │ └── support/
│ │ │ └── AiProxyRealKeyResolverTest.java
│ │ ├── shiro/
│ │ │ ├── bean/
│ │ │ │ └── StatelessAuthFilterTest.java
│ │ │ └── config/
│ │ │ ├── ShiroConfigurationTest.java
│ │ │ └── ShiroRealmTest.java
│ │ ├── spring/
│ │ │ ├── ShenyuApplicationContextAwareTest.java
│ │ │ └── SpringBeanUtilsTest.java
│ │ ├── transfer/
│ │ │ ├── AlertTransferTest.java
│ │ │ └── MetaDataTransferTest.java
│ │ └── utils/
│ │ ├── AssertTest.java
│ │ ├── BaseTriggerTest.java
│ │ ├── CommonUpstreamUtilsTest.java
│ │ ├── HttpUtilsTest.java
│ │ ├── JwtUtilsTest.java
│ │ ├── PluginHandleH2TriggerTest.java
│ │ ├── ResultUtilTest.java
│ │ ├── ShenyuDictH2TriggerTest.java
│ │ ├── ShenyuSignatureUtilsTest.java
│ │ └── UploadUtilsTest.java
│ └── resources/
│ ├── application-h2.yml
│ └── application.yml
├── shenyu-admin-listener/
│ ├── pom.xml
│ ├── shenyu-admin-listener-api/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── admin/
│ │ │ ├── listener/
│ │ │ │ ├── AbstractDataChangedInit.java
│ │ │ │ ├── AbstractNodeDataChangedListener.java
│ │ │ │ ├── AbstractPathDataChangedListener.java
│ │ │ │ ├── DataChangedInit.java
│ │ │ │ ├── DataChangedListener.java
│ │ │ │ └── utils/
│ │ │ │ └── NodeDataPathUtils.java
│ │ │ └── service/
│ │ │ └── SyncDataService.java
│ │ └── test/
│ │ └── java/
│ │ └── org/
│ │ └── apache/
│ │ └── shenyu/
│ │ └── admin/
│ │ └── listener/
│ │ ├── AbstractConfigurationTest.java
│ │ └── utils/
│ │ └── NodeDataPathUtilsTest.java
│ ├── shenyu-admin-listener-apollo/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── apache/
│ │ │ │ └── shenyu/
│ │ │ │ └── admin/
│ │ │ │ ├── config/
│ │ │ │ │ ├── ApolloSyncConfiguration.java
│ │ │ │ │ └── properties/
│ │ │ │ │ └── ApolloProperties.java
│ │ │ │ └── listener/
│ │ │ │ └── apollo/
│ │ │ │ ├── ApolloClient.java
│ │ │ │ ├── ApolloDataChangedInit.java
│ │ │ │ └── ApolloDataChangedListener.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ ├── spring/
│ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ │ ├── spring.factories
│ │ │ └── spring.provides
│ │ └── test/
│ │ └── java/
│ │ └── org/
│ │ └── apache/
│ │ └── shenyu/
│ │ └── admin/
│ │ └── listener/
│ │ └── apollo/
│ │ ├── ApolloClientTest.java
│ │ ├── ApolloDataChangedInitTest.java
│ │ └── ApolloDataChangedListenerTest.java
│ ├── shenyu-admin-listener-consul/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── apache/
│ │ │ │ └── shenyu/
│ │ │ │ └── admin/
│ │ │ │ ├── config/
│ │ │ │ │ ├── ConsulSyncConfiguration.java
│ │ │ │ │ └── properties/
│ │ │ │ │ └── ConsulProperties.java
│ │ │ │ └── listener/
│ │ │ │ └── consul/
│ │ │ │ ├── ConsulDataChangedInit.java
│ │ │ │ └── ConsulDataChangedListener.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ ├── spring/
│ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ │ ├── spring.factories
│ │ │ └── spring.provides
│ │ └── test/
│ │ └── java/
│ │ └── org/
│ │ └── apache/
│ │ └── shenyu/
│ │ └── admin/
│ │ ├── config/
│ │ │ ├── ConsulSyncConfigurationTest.java
│ │ │ └── properties/
│ │ │ └── ConsulPropertiesTest.java
│ │ └── listener/
│ │ └── consul/
│ │ ├── ConsulDataChangedInitTest.java
│ │ └── ConsulDataChangedListenerTest.java
│ ├── shenyu-admin-listener-etcd/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── apache/
│ │ │ │ └── shenyu/
│ │ │ │ └── admin/
│ │ │ │ ├── config/
│ │ │ │ │ └── EtcdSyncConfiguration.java
│ │ │ │ └── listener/
│ │ │ │ └── etcd/
│ │ │ │ ├── EtcdDataChangedInit.java
│ │ │ │ └── EtcdDataDataChangedListener.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ ├── spring/
│ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ │ ├── spring.factories
│ │ │ └── spring.provides
│ │ └── test/
│ │ └── java/
│ │ └── org/
│ │ └── apache/
│ │ └── shenyu/
│ │ └── admin/
│ │ ├── config/
│ │ │ └── EtcdSyncConfigurationTest.java
│ │ └── listener/
│ │ └── etcd/
│ │ ├── EtcdDataChangedInitTest.java
│ │ └── EtcdDataDataChangedListenerTest.java
│ ├── shenyu-admin-listener-nacos/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── apache/
│ │ │ │ └── shenyu/
│ │ │ │ └── admin/
│ │ │ │ ├── config/
│ │ │ │ │ └── NacosSyncConfiguration.java
│ │ │ │ └── listener/
│ │ │ │ └── nacos/
│ │ │ │ ├── NacosDataChangedInit.java
│ │ │ │ └── NacosDataChangedListener.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ ├── spring/
│ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ │ ├── spring.factories
│ │ │ └── spring.provides
│ │ └── test/
│ │ └── java/
│ │ └── org/
│ │ └── apache/
│ │ └── shenyu/
│ │ └── admin/
│ │ ├── config/
│ │ │ └── NacosSyncConfigurationTest.java
│ │ └── listener/
│ │ └── nacos/
│ │ ├── NacosDataChangedInitTest.java
│ │ └── NacosDataChangedListenerTest.java
│ ├── shenyu-admin-listener-polaris/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── apache/
│ │ │ │ └── shenyu/
│ │ │ │ └── admin/
│ │ │ │ ├── config/
│ │ │ │ │ ├── PolarisSyncConfiguration.java
│ │ │ │ │ └── properties/
│ │ │ │ │ └── PolarisProperties.java
│ │ │ │ └── listener/
│ │ │ │ └── polaris/
│ │ │ │ ├── PolarisDataChangedInit.java
│ │ │ │ └── PolarisDataChangedListener.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ ├── spring/
│ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ │ ├── spring.factories
│ │ │ └── spring.provides
│ │ └── test/
│ │ └── java/
│ │ └── org/
│ │ └── apache/
│ │ └── shenyu/
│ │ └── admin/
│ │ ├── config/
│ │ │ ├── PolarisSyncConfigurationTest.java
│ │ │ └── properties/
│ │ │ └── PolarisPropertiesTest.java
│ │ └── listener/
│ │ └── polaris/
│ │ ├── PolarisDataChangedInitTest.java
│ │ └── PolarisDataChangedListenerTest.java
│ └── shenyu-admin-listener-zookeeper/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── admin/
│ │ │ ├── config/
│ │ │ │ └── ZookeeperSyncConfiguration.java
│ │ │ └── listener/
│ │ │ └── zookeeper/
│ │ │ ├── ZookeeperDataChangedInit.java
│ │ │ └── ZookeeperDataChangedListener.java
│ │ └── resources/
│ │ └── META-INF/
│ │ ├── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ ├── spring.factories
│ │ └── spring.provides
│ └── test/
│ └── java/
│ └── org/
│ └── apache/
│ └── shenyu/
│ └── admin/
│ ├── config/
│ │ └── ZookeeperSyncConfigurationTest.java
│ └── listener/
│ └── zookeeper/
│ ├── ZookeeperDataChangedInitTest.java
│ └── ZookeeperDataChangedListenerTest.java
├── shenyu-alert/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── org/
│ │ └── apache/
│ │ └── shenyu/
│ │ └── alert/
│ │ ├── AlertAutoConfiguration.java
│ │ ├── AlertNotifyHandler.java
│ │ ├── config/
│ │ │ ├── HeaderRequestInterceptor.java
│ │ │ ├── RestTemplateConfig.java
│ │ │ └── ThymeleafConfig.java
│ │ ├── exception/
│ │ │ └── AlertNoticeException.java
│ │ ├── model/
│ │ │ └── AlertReceiverDTO.java
│ │ └── strategy/
│ │ ├── AbstractAlertNotifyHandler.java
│ │ ├── CommonRobotNotifyResp.java
│ │ ├── DingTalkRobotAlertNotifyStrategy.java
│ │ └── EmailAlertNotifyStrategy.java
│ └── resources/
│ ├── META-INF/
│ │ ├── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── spring.factories
│ └── static/
│ ├── alertNotifyDingTalkRobot.txt
│ └── mailAlarm.html
├── shenyu-bootstrap/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── org/
│ │ └── apache/
│ │ └── shenyu/
│ │ └── bootstrap/
│ │ └── ShenyuBootstrapApplication.java
│ └── resources/
│ ├── application.yml
│ ├── banner.txt
│ └── logback.xml
├── shenyu-client/
│ ├── pom.xml
│ ├── shenyu-client-api-docs-annotations/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── org/
│ │ └── apache/
│ │ └── shenyu/
│ │ └── client/
│ │ └── apidocs/
│ │ └── annotations/
│ │ ├── ApiDoc.java
│ │ └── ApiModule.java
│ ├── shenyu-client-autoconfig/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── org/
│ │ └── apache/
│ │ └── shenyu/
│ │ └── client/
│ │ └── auto/
│ │ └── config/
│ │ ├── ClientRegisterConfiguration.java
│ │ └── EnableClientRegister.java
│ ├── shenyu-client-core/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── client/
│ │ │ └── core/
│ │ │ ├── client/
│ │ │ │ └── AbstractContextRefreshedEventListener.java
│ │ │ ├── constant/
│ │ │ │ └── ShenyuClientConstants.java
│ │ │ ├── disruptor/
│ │ │ │ ├── ShenyuClientRegisterEventPublisher.java
│ │ │ │ ├── executor/
│ │ │ │ │ └── RegisterClientConsumerExecutor.java
│ │ │ │ └── subcriber/
│ │ │ │ ├── ShenyuClientApiDocExecutorSubscriber.java
│ │ │ │ ├── ShenyuClientMcpExecutorSubscriber.java
│ │ │ │ ├── ShenyuClientMetadataExecutorSubscriber.java
│ │ │ │ └── ShenyuClientURIExecutorSubscriber.java
│ │ │ ├── exception/
│ │ │ │ └── ShenyuClientIllegalArgumentException.java
│ │ │ ├── register/
│ │ │ │ ├── ApiBean.java
│ │ │ │ ├── ClientApiRefreshedEventListener.java
│ │ │ │ ├── ClientDiscoveryConfigRefreshedEventListener.java
│ │ │ │ ├── ClientRegisterConfig.java
│ │ │ │ ├── ClientRegisterConfigImpl.java
│ │ │ │ ├── InstanceRegisterListener.java
│ │ │ │ ├── ShenyuClientRegisterRepositoryFactory.java
│ │ │ │ ├── extractor/
│ │ │ │ │ ├── ApiBeansExtractor.java
│ │ │ │ │ ├── BaseAnnotationApiBeansExtractor.java
│ │ │ │ │ ├── BaseApiBeansExtractor.java
│ │ │ │ │ ├── MultiClientApiBeansExtractorImpl.java
│ │ │ │ │ └── RpcApiBeansExtractor.java
│ │ │ │ ├── matcher/
│ │ │ │ │ ├── AnnotatedApiBeanMatcher.java
│ │ │ │ │ ├── AnnotatedApiDefinitionMatcher.java
│ │ │ │ │ ├── ApiAnnotationProcessor.java
│ │ │ │ │ ├── ApiBeanMatcher.java
│ │ │ │ │ ├── ApiBeanProcessor.java
│ │ │ │ │ ├── ApiDefinitionMatcher.java
│ │ │ │ │ ├── ApiDocProcessorImpl.java
│ │ │ │ │ ├── ApiRegisterProcessor.java
│ │ │ │ │ ├── BaseAnnotationApiProcessor.java
│ │ │ │ │ ├── ExtractorProcessor.java
│ │ │ │ │ └── Matcher.java
│ │ │ │ └── registrar/
│ │ │ │ ├── AbstractApiDocRegistrar.java
│ │ │ │ ├── AbstractApiMetaRegistrar.java
│ │ │ │ ├── AbstractApiRegistrar.java
│ │ │ │ ├── ApiDocRegistrarImpl.java
│ │ │ │ ├── ApiRegistrar.java
│ │ │ │ ├── BaseApiRegistrarImpl.java
│ │ │ │ ├── HttpApiDocRegistrar.java
│ │ │ │ ├── MateDataApiRegistrarImpl.java
│ │ │ │ ├── NoHttpApiDocRegistrar.java
│ │ │ │ └── UriApiRegistrarImplImpl.java
│ │ │ ├── shutdown/
│ │ │ │ ├── ShenyuClientShutdownHook.java
│ │ │ │ └── ShutdownHookManager.java
│ │ │ └── utils/
│ │ │ ├── ApiBeanUtil.java
│ │ │ ├── OpenApiUtils.java
│ │ │ ├── PortUtils.java
│ │ │ ├── RequestMethodUtils.java
│ │ │ └── UrlPathUtils.java
│ │ └── test/
│ │ └── java/
│ │ └── org/
│ │ └── apache/
│ │ └── shenyu/
│ │ └── client/
│ │ └── core/
│ │ ├── disruptor/
│ │ │ └── subcriber/
│ │ │ ├── ShenyuClientApiDocExecutorSubscriberTest.java
│ │ │ ├── ShenyuClientMetadataExecutorSubscriberTest.java
│ │ │ ├── ShenyuClientRegisterEventPublisherTest.java
│ │ │ └── ShenyuClientURIExecutorSubscriberTest.java
│ │ ├── exception/
│ │ │ └── ShenyuClientIllegalArgumentExceptionTest.java
│ │ ├── register/
│ │ │ ├── ShenyuClientRegisterRepositoryFactoryTest.java
│ │ │ └── registrar/
│ │ │ ├── AbstractApiDocRegistrarTest.java
│ │ │ ├── HttpApiDocRegistrarTest.java
│ │ │ ├── NoHttpApiDocRegistrarTest.java
│ │ │ └── TestClientRegisterConfig.java
│ │ └── utils/
│ │ └── PortUtilsTest.java
│ ├── shenyu-client-dubbo/
│ │ ├── pom.xml
│ │ ├── shenyu-client-apache-dubbo/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ ├── main/
│ │ │ │ ├── java/
│ │ │ │ │ └── org/
│ │ │ │ │ └── apache/
│ │ │ │ │ └── shenyu/
│ │ │ │ │ └── client/
│ │ │ │ │ └── apache/
│ │ │ │ │ └── dubbo/
│ │ │ │ │ ├── ApacheDubboApiBeansExtractor.java
│ │ │ │ │ ├── ApacheDubboServiceBeanListener.java
│ │ │ │ │ ├── annotation/
│ │ │ │ │ │ ├── ShenyuDubboService.java
│ │ │ │ │ │ └── ShenyuService.java
│ │ │ │ │ ├── processor/
│ │ │ │ │ │ ├── extractor/
│ │ │ │ │ │ │ ├── DubboServiceProcessor.java
│ │ │ │ │ │ │ └── ServiceProcessor.java
│ │ │ │ │ │ └── register/
│ │ │ │ │ │ └── ShenyuDubboProcessor.java
│ │ │ │ │ └── validation/
│ │ │ │ │ ├── ApacheDubboClientValidation.java
│ │ │ │ │ └── ApacheDubboClientValidator.java
│ │ │ │ └── resources/
│ │ │ │ └── META-INF/
│ │ │ │ └── dubbo/
│ │ │ │ └── org.apache.dubbo.validation.Validation
│ │ │ └── test/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── client/
│ │ │ └── apache/
│ │ │ └── dubbo/
│ │ │ ├── annotation/
│ │ │ │ └── ShenyuDubboServiceDefaultValueTest.java
│ │ │ └── validation/
│ │ │ ├── ApacheDubboClientValidationTest.java
│ │ │ ├── ApacheDubboClientValidatorTest.java
│ │ │ ├── mock/
│ │ │ │ ├── MockConstraint.java
│ │ │ │ ├── MockConstraintValidator.java
│ │ │ │ ├── MockEnumType.java
│ │ │ │ ├── MockValidationParameter.java
│ │ │ │ └── MockValidatorTarget.java
│ │ │ └── service/
│ │ │ └── TestService.java
│ │ └── shenyu-client-dubbo-common/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── org/
│ │ └── apache/
│ │ └── shenyu/
│ │ └── client/
│ │ └── dubbo/
│ │ └── common/
│ │ ├── annotation/
│ │ │ └── ShenyuDubboClient.java
│ │ └── dto/
│ │ ├── DubboRpcExt.java
│ │ └── DubboRpcMethodExt.java
│ ├── shenyu-client-grpc/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── client/
│ │ │ └── grpc/
│ │ │ ├── GrpcClientEventListener.java
│ │ │ ├── common/
│ │ │ │ ├── annotation/
│ │ │ │ │ └── ShenyuGrpcClient.java
│ │ │ │ └── dto/
│ │ │ │ └── GrpcExt.java
│ │ │ ├── json/
│ │ │ │ ├── JsonForwardingServerCall.java
│ │ │ │ ├── JsonServerCallListener.java
│ │ │ │ └── JsonServerServiceInterceptor.java
│ │ │ └── server/
│ │ │ ├── GrpcServerBuilder.java
│ │ │ └── GrpcServerRunner.java
│ │ └── test/
│ │ └── java/
│ │ └── org/
│ │ └── apache/
│ │ └── shenyu/
│ │ └── client/
│ │ └── grpc/
│ │ ├── TestRequest.java
│ │ ├── TestResponse.java
│ │ ├── json/
│ │ │ ├── JsonForwardingServerCallTest.java
│ │ │ ├── JsonServerCallListenerTest.java
│ │ │ └── JsonServerServiceInterceptorTest.java
│ │ └── server/
│ │ └── GrpcServerRunnerTest.java
│ ├── shenyu-client-http/
│ │ ├── pom.xml
│ │ └── shenyu-client-springmvc/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── client/
│ │ │ └── springmvc/
│ │ │ ├── annotation/
│ │ │ │ ├── ShenyuDeleteMapping.java
│ │ │ │ ├── ShenyuGetMapping.java
│ │ │ │ ├── ShenyuPatchMapping.java
│ │ │ │ ├── ShenyuPostMapping.java
│ │ │ │ ├── ShenyuPutMapping.java
│ │ │ │ ├── ShenyuRequestMapping.java
│ │ │ │ └── ShenyuSpringMvcClient.java
│ │ │ ├── init/
│ │ │ │ └── SpringMvcClientEventListener.java
│ │ │ ├── proceeor/
│ │ │ │ ├── extractor/
│ │ │ │ │ └── RequestMappingProcessor.java
│ │ │ │ └── register/
│ │ │ │ └── ShenyuSpringMvcClientProcessorImpl.java
│ │ │ └── register/
│ │ │ ├── SpringMvcApiBeansExtractor.java
│ │ │ └── SpringMvcApiMetaRegister.java
│ │ └── test/
│ │ └── java/
│ │ └── org/
│ │ └── apache/
│ │ └── shenyu/
│ │ └── client/
│ │ └── springmvc/
│ │ ├── annotation/
│ │ │ ├── ShenyuDeleteMappingTest.java
│ │ │ ├── ShenyuGetMappingTest.java
│ │ │ ├── ShenyuPatchMappingTest.java
│ │ │ ├── ShenyuPostMappingTest.java
│ │ │ ├── ShenyuPutMappingTest.java
│ │ │ └── ShenyuRequestMappingTest.java
│ │ ├── init/
│ │ │ └── SpringMvcClientEventListenerTest.java
│ │ └── register/
│ │ ├── SpringMvcApiBeansExtractorTest.java
│ │ └── SpringMvcApiMetaRegisterTest.java
│ ├── shenyu-client-mcp/
│ │ ├── pom.xml
│ │ ├── shenyu-client-mcp-common/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── client/
│ │ │ └── mcp/
│ │ │ ├── common/
│ │ │ │ ├── annotation/
│ │ │ │ │ ├── ShenyuMcpHeader.java
│ │ │ │ │ ├── ShenyuMcpRequestConfig.java
│ │ │ │ │ ├── ShenyuMcpTool.java
│ │ │ │ │ └── ShenyuMcpToolParam.java
│ │ │ │ ├── constants/
│ │ │ │ │ ├── OpenApiConstants.java
│ │ │ │ │ ├── RequestTemplateConstants.java
│ │ │ │ │ └── ShenyuToolConfigConstants.java
│ │ │ │ ├── dto/
│ │ │ │ │ ├── ShenyuMcpRequestConfig.java
│ │ │ │ │ └── ShenyuMcpTool.java
│ │ │ │ └── eunm/
│ │ │ │ └── McpParameterType.java
│ │ │ ├── generator/
│ │ │ │ ├── McpOpenApiGenerator.java
│ │ │ │ ├── McpRequestConfigGenerator.java
│ │ │ │ └── McpToolsRegisterDTOGenerator.java
│ │ │ └── utils/
│ │ │ └── OpenApiConvertorUtil.java
│ │ └── shenyu-client-mcp-register/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── org/
│ │ └── apache/
│ │ └── shenyu/
│ │ └── client/
│ │ └── mcp/
│ │ └── McpServiceEventListener.java
│ ├── shenyu-client-motan/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── client/
│ │ │ └── motan/
│ │ │ ├── MotanServiceEventListener.java
│ │ │ └── common/
│ │ │ ├── annotation/
│ │ │ │ ├── ShenyuMotanClient.java
│ │ │ │ └── ShenyuMotanService.java
│ │ │ └── dto/
│ │ │ └── MotanRpcExt.java
│ │ └── test/
│ │ └── java/
│ │ └── org/
│ │ └── apache/
│ │ └── shenyu/
│ │ └── client/
│ │ └── motan/
│ │ └── MotanServiceEventListenerTest.java
│ ├── shenyu-client-sofa/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── client/
│ │ │ └── sofa/
│ │ │ ├── SofaServiceEventListener.java
│ │ │ └── common/
│ │ │ ├── annotation/
│ │ │ │ └── ShenyuSofaClient.java
│ │ │ └── dto/
│ │ │ └── SofaRpcExt.java
│ │ └── test/
│ │ └── java/
│ │ └── org/
│ │ └── apache/
│ │ └── shenyu/
│ │ └── client/
│ │ └── sofa/
│ │ └── SofaServiceEventListenerTest.java
│ ├── shenyu-client-tars/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── client/
│ │ │ └── tars/
│ │ │ ├── TarsServiceBeanEventListener.java
│ │ │ └── common/
│ │ │ ├── annotation/
│ │ │ │ ├── ShenyuTarsClient.java
│ │ │ │ └── ShenyuTarsService.java
│ │ │ └── dto/
│ │ │ └── TarsRpcExt.java
│ │ └── test/
│ │ └── java/
│ │ └── org/
│ │ └── apache/
│ │ └── shenyu/
│ │ └── client/
│ │ └── tars/
│ │ ├── TarsRpcExtTest.java
│ │ └── TarsServiceBeanPostProcessorTest.java
│ └── shenyu-client-websocket/
│ ├── pom.xml
│ └── shenyu-client-spring-websocket/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── org/
│ │ └── apache/
│ │ └── shenyu/
│ │ └── client/
│ │ └── spring/
│ │ └── websocket/
│ │ ├── annotation/
│ │ │ ├── ShenyuServerEndpoint.java
│ │ │ └── ShenyuSpringWebSocketClient.java
│ │ └── init/
│ │ ├── ShenyuServerEndpointerExporter.java
│ │ └── SpringWebSocketClientEventListener.java
│ └── test/
│ └── java/
│ └── org/
│ └── apache/
│ └── shenyu/
│ └── client/
│ └── spring/
│ └── websocket/
│ └── init/
│ ├── ShenyuServerEndpointerExporterTest.java
│ └── SpringWebSocketClientEventListenerTest.java
├── shenyu-common/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── org/
│ │ └── apache/
│ │ └── shenyu/
│ │ └── common/
│ │ ├── cache/
│ │ │ ├── MemorySafeLRUMap.java
│ │ │ ├── MemorySafeWindowTinyLFUMap.java
│ │ │ └── WindowTinyLFUMap.java
│ │ ├── concurrent/
│ │ │ ├── AbortPolicy.java
│ │ │ ├── DiscardOldestPolicy.java
│ │ │ ├── DiscardPolicy.java
│ │ │ ├── EagerExecutorService.java
│ │ │ ├── MemoryLimitCalculator.java
│ │ │ ├── MemoryLimitedLinkedBlockingQueue.java
│ │ │ ├── MemoryLimitedTaskQueue.java
│ │ │ ├── MemoryLimiter.java
│ │ │ ├── MemorySafeLinkedBlockingQueue.java
│ │ │ ├── MemorySafeTaskQueue.java
│ │ │ ├── RejectException.java
│ │ │ ├── Rejector.java
│ │ │ ├── ShenyuThreadFactory.java
│ │ │ ├── ShenyuThreadPoolExecutor.java
│ │ │ └── TaskQueue.java
│ │ ├── config/
│ │ │ ├── NettyChannelProperties.java
│ │ │ ├── NettyHttpProperties.java
│ │ │ ├── ShenyuConfig.java
│ │ │ └── ssl/
│ │ │ ├── ShenyuSniAsyncMapping.java
│ │ │ ├── SslCrtAndKey.java
│ │ │ ├── SslCrtAndKeyFile.java
│ │ │ └── SslCrtAndKeyStream.java
│ │ ├── constant/
│ │ │ ├── AdminConstants.java
│ │ │ ├── ApolloPathConstants.java
│ │ │ ├── Constants.java
│ │ │ ├── ConsulConstants.java
│ │ │ ├── DefaultNodeConstants.java
│ │ │ ├── DefaultPathConstants.java
│ │ │ ├── DubboParamConstants.java
│ │ │ ├── ExportImportConstants.java
│ │ │ ├── HttpConstants.java
│ │ │ ├── InstanceTypeConstants.java
│ │ │ ├── NacosPathConstants.java
│ │ │ ├── PolarisPathConstants.java
│ │ │ ├── RedisKeyConstants.java
│ │ │ ├── ResourceTypeConstants.java
│ │ │ ├── RuleHandleConstants.java
│ │ │ ├── RunningModeConstants.java
│ │ │ └── ShenyuModuleConstants.java
│ │ ├── dto/
│ │ │ ├── AlarmContent.java
│ │ │ ├── AppAuthData.java
│ │ │ ├── AuthParamData.java
│ │ │ ├── AuthPathData.java
│ │ │ ├── BaseData.java
│ │ │ ├── ConditionData.java
│ │ │ ├── ConfigData.java
│ │ │ ├── DiscoverySyncData.java
│ │ │ ├── DiscoveryUpstreamData.java
│ │ │ ├── MetaData.java
│ │ │ ├── PluginData.java
│ │ │ ├── ProxyApiKeyData.java
│ │ │ ├── ProxySelectorData.java
│ │ │ ├── RuleData.java
│ │ │ ├── SelectorData.java
│ │ │ ├── WebsocketData.java
│ │ │ └── convert/
│ │ │ ├── plugin/
│ │ │ │ ├── AiPromptConfig.java
│ │ │ │ ├── AiRequestTransformerConfig.java
│ │ │ │ ├── AiResponseTransformerConfig.java
│ │ │ │ ├── DubboRegisterConfig.java
│ │ │ │ ├── GrpcRegisterConfig.java
│ │ │ │ ├── MotanRegisterConfig.java
│ │ │ │ ├── SofaRegisterConfig.java
│ │ │ │ └── TarsRegisterConfig.java
│ │ │ ├── rule/
│ │ │ │ ├── AiPromptHandle.java
│ │ │ │ ├── AiProxyHandle.java
│ │ │ │ ├── AiRequestTransformerHandle.java
│ │ │ │ ├── AiResponseTransformerHandle.java
│ │ │ │ ├── AiTokenLimiterHandle.java
│ │ │ │ ├── GeneralContextHandle.java
│ │ │ │ ├── HystrixHandle.java
│ │ │ │ ├── MockHandle.java
│ │ │ │ ├── RateLimiterHandle.java
│ │ │ │ ├── RedirectHandle.java
│ │ │ │ ├── RequestHandle.java
│ │ │ │ ├── Resilience4JHandle.java
│ │ │ │ ├── RewriteHandle.java
│ │ │ │ ├── RuleHandle.java
│ │ │ │ ├── SentinelHandle.java
│ │ │ │ ├── WafHandle.java
│ │ │ │ └── impl/
│ │ │ │ ├── CacheRuleHandle.java
│ │ │ │ ├── ContextMappingRuleHandle.java
│ │ │ │ ├── DivideRuleHandle.java
│ │ │ │ ├── DubboRuleHandle.java
│ │ │ │ ├── GrpcRuleHandle.java
│ │ │ │ ├── KeyAuthRuleHandle.java
│ │ │ │ ├── ModifyResponseRuleHandle.java
│ │ │ │ ├── ParamMappingRuleHandle.java
│ │ │ │ ├── SofaRuleHandle.java
│ │ │ │ ├── SpringCloudRuleHandle.java
│ │ │ │ └── WebSocketRuleHandle.java
│ │ │ └── selector/
│ │ │ ├── CacheUpstream.java
│ │ │ ├── CommonUpstream.java
│ │ │ ├── DiscoveryUpstream.java
│ │ │ ├── DivideUpstream.java
│ │ │ ├── DubboUpstream.java
│ │ │ ├── GrpcUpstream.java
│ │ │ ├── MotanUpstream.java
│ │ │ ├── SofaUpstream.java
│ │ │ ├── SpringCloudSelectorHandle.java
│ │ │ ├── TarsUpstream.java
│ │ │ ├── WebSocketUpstream.java
│ │ │ └── ZombieUpstream.java
│ │ ├── enums/
│ │ │ ├── AdminDataPermissionTypeEnum.java
│ │ │ ├── AdminDataSourceEnum.java
│ │ │ ├── AdminPluginOperateEnum.java
│ │ │ ├── AdminResourceEnum.java
│ │ │ ├── AiModelProviderEnum.java
│ │ │ ├── AiTokenLimiterEnum.java
│ │ │ ├── ApiHttpMethodEnum.java
│ │ │ ├── ApiSourceEnum.java
│ │ │ ├── ApiStateEnum.java
│ │ │ ├── ConfigGroupEnum.java
│ │ │ ├── DataEventTypeEnum.java
│ │ │ ├── DataSyncEnum.java
│ │ │ ├── HeaderUniqueStrategyEnum.java
│ │ │ ├── HttpMethodEnum.java
│ │ │ ├── HttpRetryBackoffSpecEnum.java
│ │ │ ├── HttpSchemeEnum.java
│ │ │ ├── HystrixIsolationModeEnum.java
│ │ │ ├── InstanceStatusEnum.java
│ │ │ ├── LoadBalanceEnum.java
│ │ │ ├── MatchModeEnum.java
│ │ │ ├── OperatorEnum.java
│ │ │ ├── ParamTypeEnum.java
│ │ │ ├── PluginEnum.java
│ │ │ ├── PluginHandlerEventEnum.java
│ │ │ ├── PluginRoleEnum.java
│ │ │ ├── PluginTypeEnum.java
│ │ │ ├── RateLimitEnum.java
│ │ │ ├── RedisModeEnum.java
│ │ │ ├── ResultEnum.java
│ │ │ ├── RetryEnum.java
│ │ │ ├── RpcTypeEnum.java
│ │ │ ├── RunningModeEnum.java
│ │ │ ├── SelectorTypeEnum.java
│ │ │ ├── SerializeEnum.java
│ │ │ ├── SwaggerVersion.java
│ │ │ ├── TimeWindowEnum.java
│ │ │ ├── TrieCacheTypeEnum.java
│ │ │ ├── TrieEventEnum.java
│ │ │ ├── TrieMatchModeEnum.java
│ │ │ ├── UniqueHeaderEnum.java
│ │ │ ├── WafEnum.java
│ │ │ └── WafModelEnum.java
│ │ ├── exception/
│ │ │ ├── CommonErrorCode.java
│ │ │ ├── SerializerException.java
│ │ │ └── ShenyuException.java
│ │ ├── timer/
│ │ │ ├── AbstractRetryTask.java
│ │ │ ├── AbstractRoundTask.java
│ │ │ ├── HierarchicalWheelTimer.java
│ │ │ ├── TaskEntity.java
│ │ │ ├── Timer.java
│ │ │ ├── TimerTask.java
│ │ │ ├── TimerTaskList.java
│ │ │ ├── TimingWheel.java
│ │ │ └── WheelTimerFactory.java
│ │ └── utils/
│ │ ├── AesUtils.java
│ │ ├── ContextPathUtils.java
│ │ ├── DateUtils.java
│ │ ├── DigestUtils.java
│ │ ├── FreshBeanHolder.java
│ │ ├── GsonUtils.java
│ │ ├── HmacHexUtils.java
│ │ ├── IpUtils.java
│ │ ├── JarDependencyUtils.java
│ │ ├── JsonUtils.java
│ │ ├── ListUtil.java
│ │ ├── LogUtils.java
│ │ ├── MapUtils.java
│ │ ├── NamespaceIDUtils.java
│ │ ├── ObjectTypeUtils.java
│ │ ├── ParamCheckUtils.java
│ │ ├── PathUtils.java
│ │ ├── PluginNameAdapter.java
│ │ ├── ReflectUtils.java
│ │ ├── SignUtils.java
│ │ ├── Singleton.java
│ │ ├── SpiLoadFactory.java
│ │ ├── SystemInfoUtils.java
│ │ ├── ThreadUtils.java
│ │ ├── UUIDUtils.java
│ │ ├── UpstreamCheckUtils.java
│ │ ├── UriUtils.java
│ │ └── VersionUtils.java
│ └── test/
│ ├── java/
│ │ └── org/
│ │ └── apache/
│ │ └── shenyu/
│ │ └── common/
│ │ ├── cache/
│ │ │ ├── MemorySafeLRUMapTest.java
│ │ │ ├── MemorySafeWindowTinyLFUMapTest.java
│ │ │ └── WindowTinyLFUMapTest.java
│ │ ├── concurrent/
│ │ │ ├── MemoryLimitCalculatorTest.java
│ │ │ ├── MemoryLimitedLinkedBlockingQueueTest.java
│ │ │ ├── MemoryLimitedTaskQueueTest.java
│ │ │ ├── MemoryLimiterTest.java
│ │ │ ├── MemorySafeLinkedBlockingQueueTest.java
│ │ │ ├── ShenyuThreadFactoryTest.java
│ │ │ └── ShenyuThreadPoolExecutorTest.java
│ │ ├── config/
│ │ │ └── ShenyuConfigTest.java
│ │ ├── constant/
│ │ │ ├── DefaultPathConstantsTest.java
│ │ │ └── RedisKeyConstantsTest.java
│ │ ├── dto/
│ │ │ ├── AppAuthDataTest.java
│ │ │ ├── AuthParamDataTest.java
│ │ │ ├── AuthPathDataTest.java
│ │ │ ├── ConditionDataTest.java
│ │ │ ├── ConfigDataTest.java
│ │ │ ├── MetaDataTest.java
│ │ │ ├── PluginDataTest.java
│ │ │ ├── RuleDataTest.java
│ │ │ ├── SelectorDataTest.java
│ │ │ ├── WebsocketDataTest.java
│ │ │ └── convert/
│ │ │ ├── plugin/
│ │ │ │ ├── DubboRegisterConfigTest.java
│ │ │ │ ├── GrpcRegisterConfigTest.java
│ │ │ │ ├── MotanRegisterConfigTest.java
│ │ │ │ ├── SofaRegisterConfigTest.java
│ │ │ │ └── TarsRegisterConfigTest.java
│ │ │ ├── rule/
│ │ │ │ ├── GeneralContextHandleTest.java
│ │ │ │ ├── HystrixHandleTest.java
│ │ │ │ ├── MockHandleTest.java
│ │ │ │ ├── RateLimiterHandleTest.java
│ │ │ │ ├── RedirectHandleTest.java
│ │ │ │ ├── RequestHandleTest.java
│ │ │ │ ├── Resilience4JHandleTest.java
│ │ │ │ ├── RewriteHandleTest.java
│ │ │ │ ├── RuleHandleTest.java
│ │ │ │ ├── SentinelHandleTest.java
│ │ │ │ ├── WafHandleTest.java
│ │ │ │ └── impl/
│ │ │ │ ├── CacheRuleHandleTest.java
│ │ │ │ ├── ContextMappingRuleHandleTest.java
│ │ │ │ ├── DivideRuleHandleTest.java
│ │ │ │ ├── DubboRuleHandleTest.java
│ │ │ │ ├── KeyAuthRuleHandleTest.java
│ │ │ │ ├── ModifyResponseRuleHandleTest.java
│ │ │ │ ├── ParamMappingRuleHandleTest.java
│ │ │ │ ├── SofaRuleHandleTest.java
│ │ │ │ ├── SpringCloudRuleHandleTest.java
│ │ │ │ └── WebSocketRuleHandleTest.java
│ │ │ └── selector/
│ │ │ ├── CommonUpstreamTest.java
│ │ │ ├── DivideUpstreamTest.java
│ │ │ ├── DubboUpstreamTest.java
│ │ │ ├── GrpcUpstreamTest.java
│ │ │ ├── SpringCloudSelectorHandleTest.java
│ │ │ ├── TarsUpstreamTest.java
│ │ │ ├── WebSocketUpstreamTest.java
│ │ │ └── ZombieUpstreamTest.java
│ │ ├── enums/
│ │ │ ├── AdminDataPermissionTypeEnumTest.java
│ │ │ ├── AdminDataSourceEnumTest.java
│ │ │ ├── AdminPluginOperateEnumTest.java
│ │ │ ├── AdminResourceEnumTest.java
│ │ │ ├── ApiHttpMethodEnumTest.java
│ │ │ ├── ApiSourceEnumTest.java
│ │ │ ├── ApiStateEnumTest.java
│ │ │ ├── ConfigGroupEnumTest.java
│ │ │ ├── DataEventTypeEnumTest.java
│ │ │ ├── DataSyncEnumTest.java
│ │ │ ├── HttpMethodEnumTest.java
│ │ │ ├── HystrixIsolationModeEnumTest.java
│ │ │ ├── LoadBalanceEnumTest.java
│ │ │ ├── MatchModeEnumTest.java
│ │ │ ├── OperatorEnumTest.java
│ │ │ ├── ParamTypeEnumTest.java
│ │ │ ├── PluginEnumTest.java
│ │ │ ├── PluginHandlerEventEnumTest.java
│ │ │ ├── PluginRoleEnumTest.java
│ │ │ ├── PluginTypeEnumTest.java
│ │ │ ├── RateLimitEnumTest.java
│ │ │ ├── RedisModeEnumTest.java
│ │ │ ├── ResultEnumTest.java
│ │ │ ├── RetryEnumTest.java
│ │ │ ├── RpcTypeEnumTest.java
│ │ │ ├── SelectorTypeEnumTest.java
│ │ │ ├── SerializeEnumTest.java
│ │ │ ├── TrieEventEnumTest.java
│ │ │ ├── TrieMatchModeEnumTest.java
│ │ │ ├── WafEnumTest.java
│ │ │ └── WafModelEnumTest.java
│ │ ├── exception/
│ │ │ ├── CommonErrorCodeTest.java
│ │ │ ├── SerializerExceptionTest.java
│ │ │ └── ShenyuExceptionTest.java
│ │ ├── timer/
│ │ │ ├── HierarchicalWheelTimerTest.java
│ │ │ ├── TimerTaskListTest.java
│ │ │ └── WheelTimerFactoryTest.java
│ │ └── utils/
│ │ ├── AesUtilsTest.java
│ │ ├── ContextPathUtilsTest.java
│ │ ├── DateUtilsTest.java
│ │ ├── DigestUtilsTest.java
│ │ ├── FreshBeanHolderTest.java
│ │ ├── GsonUtilsTest.java
│ │ ├── HmacHexUtilsTest.java
│ │ ├── IpUtilsTest.java
│ │ ├── JarDependencyUtilsTest.java
│ │ ├── JsonUtilsTest.java
│ │ ├── ListUtilTest.java
│ │ ├── LogUtilsTest.java
│ │ ├── MapUtilsTest.java
│ │ ├── NamespaceIDUtilsTest.java
│ │ ├── ObjectTypeUtilsTest.java
│ │ ├── ParamCheckUtilsTest.java
│ │ ├── PathUtilsTest.java
│ │ ├── PluginNameAdapterTest.java
│ │ ├── ReflectUtilsTest.java
│ │ ├── SignUtilsTest.java
│ │ ├── SingletonTest.java
│ │ ├── SpiImpl.java
│ │ ├── SpiInterface.java
│ │ ├── SpiLoadFactoryTest.java
│ │ ├── ThreadUtilsTest.java
│ │ ├── UUIDUtilsTest.java
│ │ ├── UpstreamCheckUtilsTest.java
│ │ ├── UriUtilsTest.java
│ │ └── VersionUtilsTest.java
│ └── resources/
│ └── META-INF/
│ └── services/
│ └── org.apache.shenyu.common.utils.SpiInterface
├── shenyu-disruptor/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── org/
│ │ └── apache/
│ │ └── shenyu/
│ │ └── disruptor/
│ │ ├── DisruptorProviderManage.java
│ │ ├── common/
│ │ │ └── Data.java
│ │ ├── consumer/
│ │ │ ├── QueueConsumer.java
│ │ │ ├── QueueConsumerExecutor.java
│ │ │ └── QueueConsumerFactory.java
│ │ ├── event/
│ │ │ ├── DataEvent.java
│ │ │ ├── DisruptorEventFactory.java
│ │ │ ├── OrderlyDataEvent.java
│ │ │ └── OrderlyDisruptorEventFactory.java
│ │ ├── provider/
│ │ │ └── DisruptorProvider.java
│ │ └── thread/
│ │ ├── DisruptorThreadFactory.java
│ │ ├── OrderlyExecutor.java
│ │ └── SingletonExecutor.java
│ └── test/
│ └── java/
│ └── org/
│ └── apache/
│ └── shenyu/
│ └── disruptor/
│ ├── DisruptorProviderManagerTest.java
│ ├── consumer/
│ │ └── QueueConsumerTest.java
│ ├── provider/
│ │ └── DisruptorProviderTest.java
│ └── thread/
│ └── DisruptorThreadFactoryTest.java
├── shenyu-dist/
│ ├── README.md
│ ├── pom.xml
│ ├── release_check.py
│ ├── shenyu-admin-dist/
│ │ ├── docker/
│ │ │ ├── Dockerfile
│ │ │ ├── entrypoint.sh
│ │ │ └── logback.xml
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── assembly/
│ │ │ └── binary.xml
│ │ ├── release-docs/
│ │ │ ├── LICENSE
│ │ │ ├── NOTICE
│ │ │ ├── README.txt
│ │ │ └── licenses/
│ │ │ ├── LICENSE-HdrHistogram.txt
│ │ │ ├── LICENSE-LatencyUtils.txt
│ │ │ ├── LICENSE-animal-sniffer.txt
│ │ │ ├── LICENSE-asm.txt
│ │ │ ├── LICENSE-aspectjweaver.txt
│ │ │ ├── LICENSE-checker-qual.txt
│ │ │ ├── LICENSE-consul.txt
│ │ │ ├── LICENSE-encoder.txt
│ │ │ ├── LICENSE-h2.txt
│ │ │ ├── LICENSE-jakarta.activation-api.txt
│ │ │ ├── LICENSE-jakarta.annotation-api.txt
│ │ │ ├── LICENSE-jakarta.xml.bind-api.txt
│ │ │ ├── LICENSE-java-jwt.txt
│ │ │ ├── LICENSE-jaxb-api.txt
│ │ │ ├── LICENSE-jcl-over-slf4j.txt
│ │ │ ├── LICENSE-jul-to-slf4j.txt
│ │ │ ├── LICENSE-k8sio.txt
│ │ │ ├── LICENSE-kryo-shaded.txt
│ │ │ ├── LICENSE-logback.txt
│ │ │ ├── LICENSE-micrometer.txt
│ │ │ ├── LICENSE-minlog.txt
│ │ │ ├── LICENSE-pagehelper.txt
│ │ │ ├── LICENSE-protobuf-java.txt
│ │ │ ├── LICENSE-reflections.txt
│ │ │ ├── LICENSE-slf4j.txt
│ │ │ └── ui-licenses/
│ │ │ ├── LICENSE-@babel-polyfill.txt
│ │ │ ├── LICENSE-antd.txt
│ │ │ ├── LICENSE-babel-eslint.txt
│ │ │ ├── LICENSE-babel-plugin-dva-hmr.txt
│ │ │ ├── LICENSE-babel-plugin-import.txt
│ │ │ ├── LICENSE-babel-plugin-module-resolver.txt
│ │ │ ├── LICENSE-babel-plugin-transform-decorators-legacy.txt
│ │ │ ├── LICENSE-classnames.txt
│ │ │ ├── LICENSE-cross-env.txt
│ │ │ ├── LICENSE-cross-port-killer.txt
│ │ │ ├── LICENSE-dayjs.txt
│ │ │ ├── LICENSE-dva-loading.txt
│ │ │ ├── LICENSE-dva.txt
│ │ │ ├── LICENSE-enquire-js.txt
│ │ │ ├── LICENSE-enzyme.txt
│ │ │ ├── LICENSE-eslint-config-airbnb.txt
│ │ │ ├── LICENSE-eslint-config-prettier.txt
│ │ │ ├── LICENSE-eslint-plugin-babel.txt
│ │ │ ├── LICENSE-eslint-plugin-compat.txt
│ │ │ ├── LICENSE-eslint-plugin-import.txt
│ │ │ ├── LICENSE-eslint-plugin-jsx-ally.txt
│ │ │ ├── LICENSE-eslint-plugin-markdown.txt
│ │ │ ├── LICENSE-eslint-plugin-react.txt
│ │ │ ├── LICENSE-eslint.txt
│ │ │ ├── LICENSE-gh-pages.txt
│ │ │ ├── LICENSE-husky.txt
│ │ │ ├── LICENSE-lint-staged.txt
│ │ │ ├── LICENSE-lodash-decorators.txt
│ │ │ ├── LICENSE-lodash.txt
│ │ │ ├── LICENSE-mockjs.txt
│ │ │ ├── LICENSE-omit.js.txt
│ │ │ ├── LICENSE-path-to-regexp.txt
│ │ │ ├── LICENSE-postgresql.txt
│ │ │ ├── LICENSE-prettier.txt
│ │ │ ├── LICENSE-pro-download.txt
│ │ │ ├── LICENSE-prop-types.txt
│ │ │ ├── LICENSE-qs.txt
│ │ │ ├── LICENSE-react-container-query.txt
│ │ │ ├── LICENSE-react-document-title.txt
│ │ │ ├── LICENSE-react-dom.txt
│ │ │ ├── LICENSE-react-fittext.txt
│ │ │ ├── LICENSE-react-intl-universal.txt
│ │ │ ├── LICENSE-react-loadable.txt
│ │ │ ├── LICENSE-react-logger.txt
│ │ │ ├── LICENSE-react-resizable.txt
│ │ │ ├── LICENSE-react.txt
│ │ │ ├── LICENSE-redbox-react.txt
│ │ │ ├── LICENSE-redux-logger.txt
│ │ │ ├── LICENSE-regenerator-runtime.txt
│ │ │ ├── LICENSE-roadhog.txt
│ │ │ ├── LICENSE-setprototypeof.txt
│ │ │ ├── LICENSE-stylelint-config-prettier.txt
│ │ │ ├── LICENSE-stylelint-config-standard.txt
│ │ │ ├── LICENSE-stylelint.txt
│ │ │ └── LICENSE-url-polyfill.txt
│ │ └── resources/
│ │ ├── bin/
│ │ │ ├── start.bat
│ │ │ ├── start.sh
│ │ │ ├── stop.bat
│ │ │ └── stop.sh
│ │ └── logback.xml
│ ├── shenyu-bootstrap-dist/
│ │ ├── docker/
│ │ │ ├── Dockerfile
│ │ │ ├── entrypoint.sh
│ │ │ └── logback.xml
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── assembly/
│ │ │ └── binary.xml
│ │ ├── release-docs/
│ │ │ ├── LICENSE
│ │ │ ├── NOTICE
│ │ │ ├── README.txt
│ │ │ └── licenses/
│ │ │ ├── LICENSE-HdrHistogram.txt
│ │ │ ├── LICENSE-Java-WebSocket.txt
│ │ │ ├── LICENSE-LatencyUtils.txt
│ │ │ ├── LICENSE-activation.txt
│ │ │ ├── LICENSE-animal-sniffer.txt
│ │ │ ├── LICENSE-antlr.txt
│ │ │ ├── LICENSE-asm.txt
│ │ │ ├── LICENSE-aspectjweaver.txt
│ │ │ ├── LICENSE-bcpkix-jdk15on.txt
│ │ │ ├── LICENSE-bcprov-jdk15on.txt
│ │ │ ├── LICENSE-checker-qual.txt
│ │ │ ├── LICENSE-consul.txt
│ │ │ ├── LICENSE-google-auth-library-java.txt
│ │ │ ├── LICENSE-jakarta.activation-api.txt
│ │ │ ├── LICENSE-jakarta.annotation-api.txt
│ │ │ ├── LICENSE-jakarta.el.txt
│ │ │ ├── LICENSE-jakarta.xml.bind-api.txt
│ │ │ ├── LICENSE-javax.mail.txt
│ │ │ ├── LICENSE-javax.servlet-api.txt
│ │ │ ├── LICENSE-jaxb-api.txt
│ │ │ ├── LICENSE-jboss.txt
│ │ │ ├── LICENSE-jcl-over-slf4j.txt
│ │ │ ├── LICENSE-jersey.txt
│ │ │ ├── LICENSE-jni-rs.txt
│ │ │ ├── LICENSE-jul-to-slf4j.txt
│ │ │ ├── LICENSE-logback.txt
│ │ │ ├── LICENSE-motan.txt
│ │ │ ├── LICENSE-mxparser.txt
│ │ │ ├── LICENSE-perfmark.txt
│ │ │ ├── LICENSE-protobuf-java.txt
│ │ │ ├── LICENSE-reactive-streams.txt
│ │ │ ├── LICENSE-slf4j.txt
│ │ │ ├── LICENSE-stringtemplate4.txt
│ │ │ ├── LICENSE-tars.txt
│ │ │ ├── LICENSE-wasi-cap-std-sync.txt
│ │ │ ├── LICENSE-wasi-common.txt
│ │ │ ├── LICENSE-wasmtime-wasi.txt
│ │ │ ├── LICENSE-wasmtime.txt
│ │ │ ├── LICENSE-xstream.txt
│ │ │ └── LICENSE-zstd-jni.txt
│ │ └── resources/
│ │ ├── bin/
│ │ │ ├── start.bat
│ │ │ ├── start.sh
│ │ │ ├── stop.bat
│ │ │ └── stop.sh
│ │ └── logback.xml
│ ├── shenyu-docker-compose-dist/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── assembly/
│ │ │ └── source.xml
│ │ └── resources/
│ │ ├── docker-compose.yaml
│ │ └── install.sh
│ └── shenyu-src-dist/
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── assembly/
│ └── source.xml
├── shenyu-e2e/
│ ├── .gitignore
│ ├── pom.xml
│ ├── script/
│ │ ├── storage_init.sh
│ │ ├── storage_init_mysql.sh
│ │ └── storage_init_postgres.sh
│ ├── shenyu-e2e-case/
│ │ ├── compose/
│ │ │ ├── storage/
│ │ │ │ ├── shenyu-storage-h2.yml
│ │ │ │ ├── shenyu-storage-mysql.yml
│ │ │ │ ├── shenyu-storage-opengauss.yml
│ │ │ │ └── shenyu-storage-postgres.yml
│ │ │ └── sync/
│ │ │ ├── shenyu-nacos.yml
│ │ │ ├── shenyu-sync-etcd-eureka.yml
│ │ │ ├── shenyu-sync-etcd.yml
│ │ │ ├── shenyu-sync-http-eureka.yml
│ │ │ ├── shenyu-sync-http.yml
│ │ │ ├── shenyu-sync-websocket-cluster-jdbc.yml
│ │ │ ├── shenyu-sync-websocket-cluster-zookeeper.yml
│ │ │ ├── shenyu-sync-websocket-eureka.yml
│ │ │ ├── shenyu-sync-websocket.yml
│ │ │ ├── shenyu-sync-zookeeper-eureka.yml
│ │ │ └── shenyu-sync-zookeeper.yml
│ │ ├── k8s/
│ │ │ ├── script/
│ │ │ │ ├── healthcheck.sh
│ │ │ │ ├── init/
│ │ │ │ │ ├── mysql_container_init.sh
│ │ │ │ │ ├── opengauss_container_init.sh
│ │ │ │ │ └── postgres_container_init.sh
│ │ │ │ └── storage/
│ │ │ │ ├── storage_init_mysql.sh
│ │ │ │ ├── storage_init_opengauss.sh
│ │ │ │ └── storage_init_postgres.sh
│ │ │ ├── shenyu-etcd.yml
│ │ │ ├── shenyu-mysql.yml
│ │ │ ├── shenyu-nacos.yml
│ │ │ ├── shenyu-opengauss.yml
│ │ │ ├── shenyu-postgres.yml
│ │ │ ├── shenyu-zookeeper.yml
│ │ │ └── sync/
│ │ │ ├── shenyu-admin-etcd.yml
│ │ │ ├── shenyu-admin-http.yml
│ │ │ ├── shenyu-admin-nacos.yml
│ │ │ ├── shenyu-admin-websocket.yml
│ │ │ ├── shenyu-admin-zookeeper.yml
│ │ │ ├── shenyu-bootstrap-etcd.yml
│ │ │ ├── shenyu-bootstrap-http.yml
│ │ │ ├── shenyu-bootstrap-nacos.yml
│ │ │ ├── shenyu-bootstrap-websocket.yml
│ │ │ ├── shenyu-bootstrap-zookeeper.yml
│ │ │ └── shenyu-cm.yml
│ │ ├── pom.xml
│ │ ├── shenyu-e2e-case-apache-dubbo/
│ │ │ ├── compose/
│ │ │ │ ├── script/
│ │ │ │ │ └── e2e-apache-dubbo-sync-compose.sh
│ │ │ │ └── shenyu-examples-dubbo-compose.yml
│ │ │ ├── docker-compose.yml
│ │ │ ├── k8s/
│ │ │ │ ├── script/
│ │ │ │ │ └── e2e-apache-dubbo-sync.sh
│ │ │ │ └── shenyu-examples-dubbo.yml
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── test/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── e2e/
│ │ │ └── testcase/
│ │ │ └── apachedubbo/
│ │ │ ├── ApacheDubboPluginCases.java
│ │ │ ├── ApacheDubboPluginTest.java
│ │ │ └── DataSynTest.java
│ │ ├── shenyu-e2e-case-cluster/
│ │ │ ├── compose/
│ │ │ │ ├── script/
│ │ │ │ │ ├── e2e-cluster-jdbc-compose.sh
│ │ │ │ │ └── e2e-cluster-zookeeper-compose.sh
│ │ │ │ └── shenyu-examples-http-compose.yml
│ │ │ ├── k8s/
│ │ │ │ ├── script/
│ │ │ │ │ ├── e2e-cluster-jdbc.sh
│ │ │ │ │ ├── e2e-cluster-zookeeper.sh
│ │ │ │ │ ├── healthcheck.sh
│ │ │ │ │ └── services-cluster.list
│ │ │ │ ├── shenyu-cluster-jdbc.yml
│ │ │ │ └── shenyu-cluster-zookeeper.yml
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── test/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyue/
│ │ │ └── e2e/
│ │ │ └── testcase/
│ │ │ └── cluster/
│ │ │ ├── DividePluginCases.java
│ │ │ └── DividePluginTest.java
│ │ ├── shenyu-e2e-case-grpc/
│ │ │ ├── compose/
│ │ │ │ ├── script/
│ │ │ │ │ └── e2e-grpc-sync-compose.sh
│ │ │ │ └── shenyu-examples-grpc-compose.yml
│ │ │ ├── k8s/
│ │ │ │ ├── script/
│ │ │ │ │ └── e2e-grpc-sync.sh
│ │ │ │ └── shenyu-examples-grpc.yml
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── test/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── e2e/
│ │ │ └── testcase/
│ │ │ └── grpc/
│ │ │ ├── DataSynTest.java
│ │ │ ├── GrpcPluginCases.java
│ │ │ └── GrpcPluginTest.java
│ │ ├── shenyu-e2e-case-http/
│ │ │ ├── compose/
│ │ │ │ ├── script/
│ │ │ │ │ └── e2e-http-sync-compose.sh
│ │ │ │ ├── shenyu-examples-http-compose.yml
│ │ │ │ └── shenyu-rocketmq-compose.yml
│ │ │ ├── k8s/
│ │ │ │ ├── script/
│ │ │ │ │ └── e2e-http-sync.sh
│ │ │ │ ├── shenyu-examples-http.yml
│ │ │ │ └── shenyu-rocketmq.yml
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── test/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── e2e/
│ │ │ └── testcase/
│ │ │ └── http/
│ │ │ ├── DataSynTest.java
│ │ │ ├── DividePluginCases.java
│ │ │ └── DividePluginTest.java
│ │ ├── shenyu-e2e-case-logging-kafka/
│ │ │ ├── compose/
│ │ │ │ ├── script/
│ │ │ │ │ └── e2e-logging-kafka-compose.sh
│ │ │ │ ├── shenyu-examples-http-compose.yml
│ │ │ │ └── shenyu-kafka-compose.yml
│ │ │ ├── k8s/
│ │ │ │ ├── script/
│ │ │ │ │ └── e2e-http-sync.sh
│ │ │ │ └── shenyu-kafka.yml
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── test/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── e2e/
│ │ │ └── testcase/
│ │ │ └── logging/
│ │ │ └── kafka/
│ │ │ ├── DividePluginCases.java
│ │ │ └── DividePluginTest.java
│ │ ├── shenyu-e2e-case-logging-rocketmq/
│ │ │ ├── compose/
│ │ │ │ ├── script/
│ │ │ │ │ └── e2e-logging-rocketmq-compose.sh
│ │ │ │ ├── shenyu-examples-http-compose.yml
│ │ │ │ └── shenyu-rocketmq-compose.yml
│ │ │ ├── k8s/
│ │ │ │ ├── script/
│ │ │ │ │ └── e2e-http-sync.sh
│ │ │ │ └── shenyu-kafka.yml
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── test/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── e2e/
│ │ │ └── testcase/
│ │ │ └── logging/
│ │ │ └── rocketmq/
│ │ │ ├── DividePluginCases.java
│ │ │ └── DividePluginTest.java
│ │ ├── shenyu-e2e-case-motan/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── test/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── e2e/
│ │ │ └── testcase/
│ │ │ └── motan/
│ │ │ ├── MotanPluginCases.java
│ │ │ └── MotanPluginTest.java
│ │ ├── shenyu-e2e-case-sofa/
│ │ │ ├── compose/
│ │ │ │ ├── script/
│ │ │ │ │ └── e2e-sofa-sync-compose.sh
│ │ │ │ └── shenyu-examples-sofa-compose.yml
│ │ │ ├── k8s/
│ │ │ │ ├── script/
│ │ │ │ │ └── e2e-sofa-sync.sh
│ │ │ │ └── shenyu-examples-sofa.yml
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── test/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── e2e/
│ │ │ └── testcase/
│ │ │ └── sofa/
│ │ │ ├── DataSynTest.java
│ │ │ ├── SofaPluginCases.java
│ │ │ └── SofaPluginTest.java
│ │ ├── shenyu-e2e-case-spring-cloud/
│ │ │ ├── compose/
│ │ │ │ ├── script/
│ │ │ │ │ └── e2e-springcloud-sync-compose.sh
│ │ │ │ └── shenyu-examples-springcloud-compose.yml
│ │ │ ├── k8s/
│ │ │ │ ├── script/
│ │ │ │ │ └── e2e-springcloud-sync.sh
│ │ │ │ ├── shenyu-cm.yml
│ │ │ │ ├── shenyu-examples-eureka.yml
│ │ │ │ └── shenyu-examples-springcloud.yml
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── test/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── e2e/
│ │ │ └── testcase/
│ │ │ └── springcloud/
│ │ │ ├── DataSynTest.java
│ │ │ ├── SpringCloudPluginCases.java
│ │ │ └── SpringCloudPluginTest.java
│ │ ├── shenyu-e2e-case-storage/
│ │ │ ├── compose/
│ │ │ │ └── script/
│ │ │ │ ├── e2e-h2-compose.sh
│ │ │ │ ├── e2e-mysql-compose.sh
│ │ │ │ ├── e2e-opengauss-compose.sh
│ │ │ │ ├── e2e-postgres-compose.sh
│ │ │ │ └── e2e-storage-compose.sh
│ │ │ ├── k8s/
│ │ │ │ ├── script/
│ │ │ │ │ ├── e2e-h2.sh
│ │ │ │ │ ├── e2e-mysql.sh
│ │ │ │ │ ├── e2e-opengauss.sh
│ │ │ │ │ ├── e2e-postgres.sh
│ │ │ │ │ ├── healthcheck.sh
│ │ │ │ │ ├── services-h2.list
│ │ │ │ │ ├── services-mysql.list
│ │ │ │ │ └── services-postgres.list
│ │ │ │ ├── shenyu-app-service-h2.yml
│ │ │ │ ├── shenyu-app-service-mysql.yml
│ │ │ │ ├── shenyu-app-service-opengauss.yml
│ │ │ │ ├── shenyu-app-service-postgres.yml
│ │ │ │ ├── shenyu-deployment-h2.yml
│ │ │ │ ├── shenyu-deployment-mysql.yml
│ │ │ │ ├── shenyu-deployment-opengauss.yml
│ │ │ │ └── shenyu-deployment-postgres.yml
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── test/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── e2e/
│ │ │ └── testcase/
│ │ │ └── divide/
│ │ │ ├── DividePluginCases.java
│ │ │ └── DividePluginTest.java
│ │ └── shenyu-e2e-case-websocket/
│ │ ├── compose/
│ │ │ ├── script/
│ │ │ │ └── e2e-websocket-sync-compose.sh
│ │ │ └── shenyu-examples-websocket-compose.yml
│ │ ├── k8s/
│ │ │ ├── script/
│ │ │ │ └── e2e-websocket-sync.sh
│ │ │ └── shenyu-examples-websocket.yml
│ │ ├── pom.xml
│ │ └── src/
│ │ └── test/
│ │ └── java/
│ │ └── org/
│ │ └── apache/
│ │ └── shenyue/
│ │ └── e2e/
│ │ └── testcase/
│ │ └── websocket/
│ │ ├── DataSynTest.java
│ │ ├── WebSocketPluginCases.java
│ │ └── WebSocketPluginTest.java
│ ├── shenyu-e2e-client/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── e2e/
│ │ │ ├── client/
│ │ │ │ ├── BaseClient.java
│ │ │ │ ├── EnvironmentClient.java
│ │ │ │ ├── ExternalServiceClient.java
│ │ │ │ ├── WaitDataSync.java
│ │ │ │ ├── admin/
│ │ │ │ │ └── AdminClient.java
│ │ │ │ └── gateway/
│ │ │ │ └── GatewayClient.java
│ │ │ └── matcher/
│ │ │ ├── RuleMatcher.java
│ │ │ └── SelectorMatcher.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── e2e/
│ │ │ └── client/
│ │ │ └── admin/
│ │ │ └── AdminClientTest.java
│ │ └── resources/
│ │ └── log4j2.xml
│ ├── shenyu-e2e-common/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── e2e/
│ │ │ ├── annotation/
│ │ │ │ ├── ExternalService.java
│ │ │ │ ├── ShenYuAdminClient.java
│ │ │ │ ├── ShenYuEnvironmentClient.java
│ │ │ │ ├── ShenYuGatewayClient.java
│ │ │ │ └── ShenYuInjectable.java
│ │ │ ├── common/
│ │ │ │ ├── IdGenerator.java
│ │ │ │ ├── IdManagers.java
│ │ │ │ ├── NameUtils.java
│ │ │ │ ├── RequestLogConsumer.java
│ │ │ │ └── TableView.java
│ │ │ ├── config/
│ │ │ │ └── ServiceConfigure.java
│ │ │ ├── constant/
│ │ │ │ └── Constants.java
│ │ │ ├── enums/
│ │ │ │ └── ServiceTypeEnum.java
│ │ │ ├── model/
│ │ │ │ ├── MatchMode.java
│ │ │ │ ├── Plugin.java
│ │ │ │ ├── ResourcesData.java
│ │ │ │ ├── SelectorType.java
│ │ │ │ ├── ShenYuResult.java
│ │ │ │ ├── data/
│ │ │ │ │ ├── BindingData.java
│ │ │ │ │ ├── Condition.java
│ │ │ │ │ ├── ConditionData.java
│ │ │ │ │ ├── MetaData.java
│ │ │ │ │ ├── NamespaceSyncData.java
│ │ │ │ │ ├── PluginData.java
│ │ │ │ │ ├── QueryCondition.java
│ │ │ │ │ ├── ResourceData.java
│ │ │ │ │ ├── RuleCacheData.java
│ │ │ │ │ ├── RuleData.java
│ │ │ │ │ ├── RuleQueryCondition.java
│ │ │ │ │ ├── SearchCondition.java
│ │ │ │ │ ├── SelectorCacheData.java
│ │ │ │ │ ├── SelectorData.java
│ │ │ │ │ └── SelectorQueryCondition.java
│ │ │ │ ├── handle/
│ │ │ │ │ ├── DivideRuleHandle.java
│ │ │ │ │ ├── DivideUpstream.java
│ │ │ │ │ ├── DubboHandler.java
│ │ │ │ │ ├── DubboRuleHandle.java
│ │ │ │ │ ├── DubboSelectorHandle.java
│ │ │ │ │ ├── GrpcSelectorHandle.java
│ │ │ │ │ ├── PluginHandle.java
│ │ │ │ │ ├── RuleHandle.java
│ │ │ │ │ ├── SpringCloudRuleHandle.java
│ │ │ │ │ ├── SpringCloudSelectorHandle.java
│ │ │ │ │ └── Upstreams.java
│ │ │ │ ├── request/
│ │ │ │ │ └── RequestVO.java
│ │ │ │ └── response/
│ │ │ │ ├── FakeResourceDTO.java
│ │ │ │ ├── LoginInfo.java
│ │ │ │ ├── MetaDataDTO.java
│ │ │ │ ├── NamespacePluginDTO.java
│ │ │ │ ├── PaginatedResources.java
│ │ │ │ ├── Pagination.java
│ │ │ │ ├── PluginDTO.java
│ │ │ │ ├── ResourceDTO.java
│ │ │ │ ├── RuleDTO.java
│ │ │ │ ├── SearchedResources.java
│ │ │ │ └── SelectorDTO.java
│ │ │ └── template/
│ │ │ └── ResourceDataTemplate.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── e2e/
│ │ │ └── common/
│ │ │ └── TableViewTest.java
│ │ └── resources/
│ │ └── log4j2.xml
│ └── shenyu-e2e-engine/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── e2e/
│ │ │ └── engine/
│ │ │ ├── ShenYuExtension.java
│ │ │ ├── ShenYuExtensionContext.java
│ │ │ ├── ShenYuLogExtension.java
│ │ │ ├── annotation/
│ │ │ │ ├── ShenYuScenario.java
│ │ │ │ ├── ShenYuScenarioParameter.java
│ │ │ │ ├── ShenYuTest.java
│ │ │ │ └── ShenYuValue.java
│ │ │ ├── config/
│ │ │ │ └── ShenYuEngineConfigure.java
│ │ │ ├── scenario/
│ │ │ │ ├── ShenYuScenarioInvocationContextProvider.java
│ │ │ │ ├── ShenYuScenarioParameterResolver.java
│ │ │ │ ├── ShenYuScenarioProvider.java
│ │ │ │ ├── ShenYuScenarioSupplier.java
│ │ │ │ ├── function/
│ │ │ │ │ ├── Checker.java
│ │ │ │ │ ├── Deleter.java
│ │ │ │ │ ├── HttpChecker.java
│ │ │ │ │ ├── HttpCheckers.java
│ │ │ │ │ ├── HttpVerifier.java
│ │ │ │ │ ├── HttpWaiting.java
│ │ │ │ │ ├── Verifier.java
│ │ │ │ │ ├── WaitForHelper.java
│ │ │ │ │ ├── Waiting.java
│ │ │ │ │ ├── WebSocketChecker.java
│ │ │ │ │ ├── WebSocketCheckers.java
│ │ │ │ │ └── WebSocketVerifier.java
│ │ │ │ └── specification/
│ │ │ │ ├── AfterEachSpec.java
│ │ │ │ ├── BeforeEachSpec.java
│ │ │ │ ├── CaseSpec.java
│ │ │ │ ├── ScenarioSpec.java
│ │ │ │ ├── ScenarioSpecLogProxy.java
│ │ │ │ ├── ShenYuAfterEachSpec.java
│ │ │ │ ├── ShenYuBeforeEachSpec.java
│ │ │ │ ├── ShenYuCaseSpec.java
│ │ │ │ └── ShenYuScenarioSpec.java
│ │ │ └── utils/
│ │ │ └── SocketUtils.java
│ │ └── resources/
│ │ └── log4j2.xml
│ └── test/
│ ├── java/
│ │ └── org/
│ │ └── apache/
│ │ └── shenyu/
│ │ └── e2e/
│ │ ├── engine/
│ │ │ ├── ShenYuEngineTest.java
│ │ │ └── function/
│ │ │ └── WaitForHelperTest.java
│ │ └── k8s/
│ │ └── engine/
│ │ └── ShenYuE2eExtensionTest.java
│ └── resources/
│ └── docker-compose.yml
├── shenyu-examples/
│ ├── pom.xml
│ ├── shenyu-examples-common/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── examples/
│ │ │ └── common/
│ │ │ └── aop/
│ │ │ ├── InterceptorConfiguration.java
│ │ │ ├── Log.java
│ │ │ ├── LogInterceptor.java
│ │ │ └── package-info.java
│ │ └── resources/
│ │ ├── 1.txt
│ │ ├── 2.txt
│ │ └── META-INF/
│ │ ├── spring.factories
│ │ └── spring.provides
│ ├── shenyu-examples-dubbo/
│ │ ├── pom.xml
│ │ ├── shenyu-examples-apache-dubbo-service/
│ │ │ ├── Dockerfile
│ │ │ ├── k8s/
│ │ │ │ ├── ingress.yml
│ │ │ │ ├── shenyu-examples-dubbo.yml
│ │ │ │ └── shenyu-zookeeper.yml
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── http/
│ │ │ │ └── apache-dubbo-test-api.http
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── apache/
│ │ │ │ └── shenyu/
│ │ │ │ └── examples/
│ │ │ │ └── apache/
│ │ │ │ └── dubbo/
│ │ │ │ └── service/
│ │ │ │ ├── TestApacheDubboApplication.java
│ │ │ │ └── impl/
│ │ │ │ ├── DubboMultiParamServiceImpl.java
│ │ │ │ ├── DubboProtobufServiceImpl.java
│ │ │ │ └── DubboTestServiceImpl.java
│ │ │ └── resources/
│ │ │ ├── application.yml
│ │ │ └── spring-dubbo.xml
│ │ ├── shenyu-examples-apache-dubbo-service-annotation/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── http/
│ │ │ │ ├── apache-dubbo-class-test-api.http
│ │ │ │ └── apache-dubbo-test-api.http
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── apache/
│ │ │ │ └── shenyu/
│ │ │ │ └── examples/
│ │ │ │ └── apache/
│ │ │ │ └── dubbo/
│ │ │ │ └── service/
│ │ │ │ └── annotation/
│ │ │ │ ├── TestApacheDubboAnnotationApplication.java
│ │ │ │ └── impl/
│ │ │ │ ├── DubboClassMultiParamServiceImpl.java
│ │ │ │ ├── DubboClassTestServiceImpl.java
│ │ │ │ ├── DubboMultiParamServiceImpl.java
│ │ │ │ ├── DubboProtobufServiceImpl.java
│ │ │ │ └── DubboTestServiceImpl.java
│ │ │ └── resources/
│ │ │ └── application.yml
│ │ ├── shenyu-examples-apache-dubbo-service-xml/
│ │ │ ├── Dockerfile
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── http/
│ │ │ │ ├── apache-dubbo-class-test-api.http
│ │ │ │ └── apache-dubbo-test-api.http
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── apache/
│ │ │ │ └── shenyu/
│ │ │ │ └── examples/
│ │ │ │ └── apache/
│ │ │ │ └── dubbo/
│ │ │ │ └── service/
│ │ │ │ └── xml/
│ │ │ │ ├── TestApacheDubboXmlApplication.java
│ │ │ │ └── impl/
│ │ │ │ ├── DubboClassMultiParamServiceImpl.java
│ │ │ │ ├── DubboClassTestServiceImpl.java
│ │ │ │ ├── DubboMultiParamServiceImpl.java
│ │ │ │ ├── DubboProtobufServiceImpl.java
│ │ │ │ └── DubboTestServiceImpl.java
│ │ │ └── resources/
│ │ │ ├── application.yml
│ │ │ ├── shenyu.xml
│ │ │ └── spring-dubbo.xml
│ │ └── shenyu-examples-dubbo-api/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── examples/
│ │ │ └── dubbo/
│ │ │ └── api/
│ │ │ ├── entity/
│ │ │ │ ├── ComplexBeanTest.java
│ │ │ │ ├── DubboTest.java
│ │ │ │ └── ListResp.java
│ │ │ └── service/
│ │ │ ├── DubboClassMultiParamService.java
│ │ │ ├── DubboClassTestService.java
│ │ │ ├── DubboMultiParamService.java
│ │ │ └── DubboTestService.java
│ │ └── proto/
│ │ └── DubboTestProto.proto
│ ├── shenyu-examples-eureka/
│ │ ├── Dockerfile
│ │ ├── k8s/
│ │ │ └── shenyu-examples-eureka.yml
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── examples/
│ │ │ └── eureka/
│ │ │ └── EurekaServerApplication.java
│ │ └── resources/
│ │ └── bootstrap.yml
│ ├── shenyu-examples-grpc/
│ │ ├── Dockerfile
│ │ ├── k8s/
│ │ │ ├── ingress.yml
│ │ │ └── shenyu-examples-grpc.yml
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── http/
│ │ │ ├── grpc-class-annotation-test-api.http
│ │ │ └── grpc-test-api.http
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── examples/
│ │ │ └── grpc/
│ │ │ ├── ShenyuGrpcServerBuilder.java
│ │ │ ├── ShenyuTestGrpcApplication.java
│ │ │ ├── controller/
│ │ │ │ └── GrpcTestController.java
│ │ │ ├── demo/
│ │ │ │ ├── EventServiceImpl.java
│ │ │ │ └── HelloServiceImpl.java
│ │ │ ├── echo/
│ │ │ │ └── EchoServiceImpl.java
│ │ │ └── stream/
│ │ │ └── StreamServiceImpl.java
│ │ └── resources/
│ │ ├── application.yml
│ │ └── proto/
│ │ ├── echo.proto
│ │ ├── event.proto
│ │ ├── hello.proto
│ │ └── stream.proto
│ ├── shenyu-examples-http/
│ │ ├── Dockerfile
│ │ ├── k8s/
│ │ │ ├── ingress.yml
│ │ │ ├── script/
│ │ │ │ ├── healthcheck.sh
│ │ │ │ └── services.list
│ │ │ ├── shenyu-deployment.yml
│ │ │ ├── shenyu-examples-http.yml
│ │ │ ├── shenyu-service.yml
│ │ │ └── shenyu-zookeeper.yml
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── http/
│ │ │ ├── http-test-api-local.http
│ │ │ └── http-test-api.http
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── examples/
│ │ │ └── http/
│ │ │ ├── ShenyuTestHttpApplication.java
│ │ │ ├── config/
│ │ │ │ └── HttpServerConfig.java
│ │ │ ├── controller/
│ │ │ │ ├── HttpTestController.java
│ │ │ │ ├── OauthController.java
│ │ │ │ ├── OrderController.java
│ │ │ │ ├── RequestController.java
│ │ │ │ ├── ShenyuClientPathController.java
│ │ │ │ ├── SpringMvcMappingPathController.java
│ │ │ │ └── UploadController.java
│ │ │ ├── dto/
│ │ │ │ ├── BigObject.java
│ │ │ │ ├── OAuth2DTO.java
│ │ │ │ ├── OrderDTO.java
│ │ │ │ ├── RequestDTO.java
│ │ │ │ └── UserDTO.java
│ │ │ ├── result/
│ │ │ │ └── ResultBean.java
│ │ │ └── router/
│ │ │ └── ShenyuTestHttpRouter.java
│ │ └── resources/
│ │ └── application.yml
│ ├── shenyu-examples-http-swagger3/
│ │ ├── Dockerfile
│ │ ├── k8s/
│ │ │ ├── script/
│ │ │ │ ├── healthcheck.sh
│ │ │ │ └── services.list
│ │ │ ├── shenyu-deployment.yml
│ │ │ ├── shenyu-examples-http-deployment.yml
│ │ │ ├── shenyu-examples-http-service.yml
│ │ │ └── shenyu-service.yml
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── examples/
│ │ │ └── http/
│ │ │ ├── ShenyuTestSwaggerApplication.java
│ │ │ ├── config/
│ │ │ │ ├── HttpServerConfig.java
│ │ │ │ └── SwaggerConfiguration.java
│ │ │ ├── controller/
│ │ │ │ ├── HttpTestController.java
│ │ │ │ ├── OauthController.java
│ │ │ │ ├── OrderController.java
│ │ │ │ ├── RequestController.java
│ │ │ │ ├── ShenyuClientPathController.java
│ │ │ │ ├── SpringMvcMappingPathController.java
│ │ │ │ └── UploadController.java
│ │ │ ├── dto/
│ │ │ │ ├── OAuth2DTO.java
│ │ │ │ ├── OrderDTO.java
│ │ │ │ ├── RequestDTO.java
│ │ │ │ └── UserDTO.java
│ │ │ ├── result/
│ │ │ │ ├── ResultBean.java
│ │ │ │ └── TreeResult.java
│ │ │ └── router/
│ │ │ └── ShenyuTestHttpRouter.java
│ │ └── resources/
│ │ └── application.yml
│ ├── shenyu-examples-https/
│ │ ├── Dockerfile
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── http/
│ │ │ ├── https-test-api-local.http
│ │ │ └── https-test-api.http
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── examples/
│ │ │ └── https/
│ │ │ ├── ShenyuTestHttpsApplication.java
│ │ │ ├── configuration/
│ │ │ │ └── HttpsConfiguration.java
│ │ │ ├── controller/
│ │ │ │ ├── OrderController.java
│ │ │ │ └── UploadController.java
│ │ │ └── dto/
│ │ │ └── OrderDTO.java
│ │ └── resources/
│ │ ├── application.yml
│ │ └── keystore.p12
│ ├── shenyu-examples-mcp/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ ├── ShenyuTestMcpApplication.java
│ │ │ ├── controller/
│ │ │ │ └── OrderController.java
│ │ │ └── dto/
│ │ │ └── OrderDTO.java
│ │ └── resources/
│ │ └── application.yml
│ ├── shenyu-examples-motan/
│ │ ├── pom.xml
│ │ ├── shenyu-examples-motan-api/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── examples/
│ │ │ └── motan/
│ │ │ └── service/
│ │ │ ├── MotanClassDemoService.java
│ │ │ ├── MotanDemoService.java
│ │ │ └── MotanTest.java
│ │ └── shenyu-examples-motan-service/
│ │ ├── Dockerfile
│ │ ├── k8s/
│ │ │ ├── ingress.yml
│ │ │ ├── shenyu-examples-motan.yml
│ │ │ └── shenyu-zookeeper.yml
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── http/
│ │ │ ├── motan-class-test-api.http
│ │ │ └── motan-test-api.http
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── examples/
│ │ │ └── motan/
│ │ │ └── service/
│ │ │ ├── TestMotanApplication.java
│ │ │ └── impl/
│ │ │ ├── MotanClassDemoServiceImpl.java
│ │ │ └── MotanDemoServiceImpl.java
│ │ └── resources/
│ │ └── application.yml
│ ├── shenyu-examples-plugin/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── org/
│ │ └── apache/
│ │ └── shenyu/
│ │ └── examples/
│ │ └── plugin/
│ │ ├── ext/
│ │ │ ├── ExtPluginDataHandler.java
│ │ │ ├── ExtendsShenyuBerBean.java
│ │ │ ├── ExtendsShenyuPlugin.java
│ │ │ └── ExtendsShenyuZerBean.java
│ │ └── simple/
│ │ └── CustomShenyuPlugin.java
│ ├── shenyu-examples-sdk/
│ │ ├── pom.xml
│ │ ├── shenyu-examples-sdk-dubbo/
│ │ │ ├── pom.xml
│ │ │ ├── shenyu-examples-sdk-apache-dubbo-consumer/
│ │ │ │ ├── Dockerfile
│ │ │ │ ├── pom.xml
│ │ │ │ └── src/
│ │ │ │ └── main/
│ │ │ │ ├── http/
│ │ │ │ │ └── sdk-apache-dubbo-test-api.http
│ │ │ │ ├── java/
│ │ │ │ │ └── org/
│ │ │ │ │ └── apache/
│ │ │ │ │ └── shenyu/
│ │ │ │ │ └── examples/
│ │ │ │ │ └── sdk/
│ │ │ │ │ └── apache/
│ │ │ │ │ └── dubbo/
│ │ │ │ │ └── consumer/
│ │ │ │ │ ├── ShenyuSdkApacheDubboExampleApplication.java
│ │ │ │ │ ├── api/
│ │ │ │ │ │ └── ShenyuApacheDubboClientApi.java
│ │ │ │ │ ├── controller/
│ │ │ │ │ │ └── ShenyuApacheDubboSdkExampleController.java
│ │ │ │ │ ├── dto/
│ │ │ │ │ │ ├── DubboRequestBody.java
│ │ │ │ │ │ └── DubboTestSaveRequest.java
│ │ │ │ │ └── impl/
│ │ │ │ │ └── ShenyuApacheDubboClientAplFallBack.java
│ │ │ │ └── resources/
│ │ │ │ └── application.yml
│ │ │ └── shenyu-examples-sdk-apache-dubbo-provider/
│ │ │ ├── Dockerfile
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── http/
│ │ │ │ └── sdk-apache-dubbo-test-api.http
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── apache/
│ │ │ │ └── shenyu/
│ │ │ │ └── examples/
│ │ │ │ └── sdk/
│ │ │ │ └── apache/
│ │ │ │ └── provider/
│ │ │ │ └── ShenyuApacheDubboXmlProviderApplication.java
│ │ │ └── resources/
│ │ │ ├── application.yml
│ │ │ ├── shenyu.xml
│ │ │ └── spring-dubbo.xml
│ │ ├── shenyu-examples-sdk-feign/
│ │ │ ├── Dockerfile
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── http/
│ │ │ │ └── sdk-http-test-api.http
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── apache/
│ │ │ │ └── shenyu/
│ │ │ │ └── examples/
│ │ │ │ └── sdk/
│ │ │ │ └── feign/
│ │ │ │ ├── ShenyuSdkHttpExampleApplication.java
│ │ │ │ ├── api/
│ │ │ │ │ └── ShenyuHttpClientApi.java
│ │ │ │ ├── config/
│ │ │ │ │ └── SdkConfig.java
│ │ │ │ ├── controller/
│ │ │ │ │ ├── HttpServiceController.java
│ │ │ │ │ └── ShenyuHttpSdkExampleController.java
│ │ │ │ └── dto/
│ │ │ │ └── SdkTestDto.java
│ │ │ └── resources/
│ │ │ └── application.yaml
│ │ ├── shenyu-examples-sdk-grpc/
│ │ │ ├── pom.xml
│ │ │ ├── shenyu-examples-sdk-grpc-consumer/
│ │ │ │ ├── Dockerfile
│ │ │ │ ├── pom.xml
│ │ │ │ └── src/
│ │ │ │ └── main/
│ │ │ │ ├── http/
│ │ │ │ │ └── sdk-grpc-test-api.http
│ │ │ │ ├── java/
│ │ │ │ │ └── org/
│ │ │ │ │ └── apache/
│ │ │ │ │ └── shenyu/
│ │ │ │ │ └── examples/
│ │ │ │ │ └── sdk/
│ │ │ │ │ └── grpc/
│ │ │ │ │ └── consumer/
│ │ │ │ │ ├── ShenyuSdkGrpcConsumerApplication.java
│ │ │ │ │ ├── api/
│ │ │ │ │ │ └── ShenyuGrpcClientApi.java
│ │ │ │ │ ├── controller/
│ │ │ │ │ │ └── ShenyuSdkGrpcConsumerController.java
│ │ │ │ │ └── dto/
│ │ │ │ │ ├── EchoRequest.java
│ │ │ │ │ ├── EchoResponse.java
│ │ │ │ │ ├── GrpcData.java
│ │ │ │ │ ├── HelloRequest.java
│ │ │ │ │ └── HelloResponse.java
│ │ │ │ └── resources/
│ │ │ │ └── application.yaml
│ │ │ └── shenyu-examples-sdk-grpc-provider/
│ │ │ ├── Dockerfile
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── apache/
│ │ │ │ └── shenyu/
│ │ │ │ └── examples/
│ │ │ │ └── sdk/
│ │ │ │ └── grpc/
│ │ │ │ └── provider/
│ │ │ │ └── ShenyuSdkGrpcProviderApplication.java
│ │ │ └── resources/
│ │ │ └── application.yml
│ │ ├── shenyu-examples-sdk-http/
│ │ │ ├── Dockerfile
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── http/
│ │ │ │ └── sdk-http-test-api.http
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── apache/
│ │ │ │ └── shenyu/
│ │ │ │ └── examples/
│ │ │ │ └── sdk/
│ │ │ │ └── http/
│ │ │ │ ├── ShenyuSdkHttpExampleApplication.java
│ │ │ │ ├── api/
│ │ │ │ │ └── ShenyuHttpClientApi.java
│ │ │ │ ├── config/
│ │ │ │ │ └── SdkConfig.java
│ │ │ │ ├── controller/
│ │ │ │ │ ├── HttpServiceController.java
│ │ │ │ │ └── ShenyuHttpSdkExampleController.java
│ │ │ │ └── dto/
│ │ │ │ └── SdkTestDto.java
│ │ │ └── resources/
│ │ │ └── application.yaml
│ │ └── shenyu-examples-sdk-springcloud/
│ │ ├── pom.xml
│ │ ├── shenyu-examples-sdk-springcloud-consumer/
│ │ │ ├── Dockerfile
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── http/
│ │ │ │ └── sdk-spring-cloud-test-api.http
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── apache/
│ │ │ │ └── shenyu/
│ │ │ │ └── examples/
│ │ │ │ └── sdk/
│ │ │ │ └── springcloud/
│ │ │ │ └── consumer/
│ │ │ │ ├── ShenyuSdkSpringCloudConsumerExampleApplication.java
│ │ │ │ ├── api/
│ │ │ │ │ └── ShenyuSpringCloudClientApi.java
│ │ │ │ ├── controller/
│ │ │ │ │ └── ShenyuSdkSpringCloudConsumerController.java
│ │ │ │ ├── dto/
│ │ │ │ │ └── OrderDTO.java
│ │ │ │ └── impl/
│ │ │ │ ├── ShenyuSpringCloudClientApiFallback.java
│ │ │ │ └── ShenyuSpringCloudClientApiFallbackFactory.java
│ │ │ └── resources/
│ │ │ └── application.yaml
│ │ └── shenyu-examples-sdk-springcloud-provider/
│ │ ├── Dockerfile
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── examples/
│ │ │ └── sdk/
│ │ │ └── springcloud/
│ │ │ └── provider/
│ │ │ └── ShenyuSdkSpringCloudProviderApplication.java
│ │ └── resources/
│ │ └── application.yml
│ ├── shenyu-examples-sofa/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ ├── shenyu-examples-sofa-api/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── examples/
│ │ │ └── sofa/
│ │ │ └── api/
│ │ │ ├── entity/
│ │ │ │ ├── SofaComplexTypeBean.java
│ │ │ │ └── SofaSimpleTypeBean.java
│ │ │ └── service/
│ │ │ ├── SofaClientMultiParamService.java
│ │ │ ├── SofaClientSingleParamService.java
│ │ │ ├── SofaMultiParamService.java
│ │ │ └── SofaSingleParamService.java
│ │ └── shenyu-examples-sofa-service/
│ │ ├── Dockerfile
│ │ ├── k8s/
│ │ │ ├── ingress.yml
│ │ │ ├── shenyu-examples-sofa.yml
│ │ │ └── shenyu-zookeeper.yml
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── http/
│ │ │ └── sofa-test-api.http
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── examples/
│ │ │ └── sofa/
│ │ │ └── service/
│ │ │ ├── TestSofaApplication.java
│ │ │ └── impl/
│ │ │ ├── SofaClientMultiParamServiceImpl.java
│ │ │ ├── SofaClientSingleParamServiceImpl.java
│ │ │ ├── SofaMultiParamServiceImpl.java
│ │ │ └── SofaSingleParamServiceImpl.java
│ │ └── resources/
│ │ ├── application.yml
│ │ └── invoke-server-example.xml
│ ├── shenyu-examples-springcloud/
│ │ ├── Dockerfile
│ │ ├── README.md
│ │ ├── k8s/
│ │ │ ├── ingress.yml
│ │ │ └── shenyu-examples-springcloud.yml
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── http/
│ │ │ ├── spring-cloud-test-api-local.http
│ │ │ └── spring-cloud-test-api.http
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── examples/
│ │ │ └── springcloud/
│ │ │ ├── ShenyuTestSpringCloudApplication.java
│ │ │ ├── controller/
│ │ │ │ ├── AllController.java
│ │ │ │ ├── NewFeatureController.java
│ │ │ │ ├── OrderController.java
│ │ │ │ ├── TestController.java
│ │ │ │ └── UploadController.java
│ │ │ └── dto/
│ │ │ ├── EntityResult.java
│ │ │ ├── OrderDTO.java
│ │ │ └── UserDTO.java
│ │ └── resources/
│ │ └── application.yml
│ ├── shenyu-examples-springmvc/
│ │ ├── Dockerfile
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── http/
│ │ │ ├── http-test-api-local.http
│ │ │ └── http-test-api.http
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── examples/
│ │ │ └── springmvc/
│ │ │ ├── TestSpringMvcApplication.java
│ │ │ ├── controller/
│ │ │ │ ├── HttpTestController.java
│ │ │ │ ├── OrderController.java
│ │ │ │ └── UploadController.java
│ │ │ ├── dto/
│ │ │ │ ├── OAuth2DTO.java
│ │ │ │ ├── OrderDTO.java
│ │ │ │ └── UserDTO.java
│ │ │ └── result/
│ │ │ └── ResultBean.java
│ │ └── resources/
│ │ ├── application.yml
│ │ └── context/
│ │ └── shenyu.xml
│ ├── shenyu-examples-springmvc-tomcat/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── http/
│ │ │ ├── http-test-api-local.http
│ │ │ └── http-test-api.http
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── shenyu/
│ │ │ └── examples/
│ │ │ └── springmvc/
│ │ │ ├── controller/
│ │ │ │ ├── HttpTestController.java
│ │ │ │ ├── OrderController.java
│ │ │ │ └── UploadController.java
│ │ │ ├── dto/
│ │ │ │ ├── OAuth2DTO.java
│ │ │ │ ├── OrderDTO.java
│ │ │ │ └── UserDTO.java
│ │ │ └── result/
│ │ │ └── ResultBean.java
│ │ ├── resources/
│ │ │ ├── application.properties
│ │ │ ├── context/
│ │ │ │ └── shenyu.xml
│ │ │ └── spring-mvc.xml
│ │ └── webapp/
│ │
================================================
FILE CONTENTS
================================================
================================================
FILE: .asf.yaml
================================================
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
#
github:
description: Apache ShenYu is a Java native API Gateway for service proxy, protocol conversion and API governance.
homepage: https://shenyu.apache.org/
labels:
- api-gateway
- http-proxy
- spring-cloud-proxy
- grpc-proxy
- dubbo-proxy
- sofa-proxy
- motan-proxy
- reactor-java
enabled_merge_buttons:
squash: true
merge: false
rebase: false
protected_branches:
master:
required_status_checks:
strict: true
contexts:
- check-license-header
- build
- e2e
required_pull_request_reviews:
dismiss_stale_reviews: true
required_approving_review_count: 1
notifications:
commits: notifications@shenyu.apache.org
issues: notifications@shenyu.apache.org
pullrequests: notifications@shenyu.apache.org
================================================
FILE: .devcontainer/devcontainer.json
================================================
{
"name": "Shenyu DevContainer",
"image": "mcr.microsoft.com/devcontainers/base:ubuntu",
"features": {
"ghcr.io/devcontainers/features/java:1": {
"version": "17",
"installMaven": "true",
"installGradle": "false"
},
"ghcr.io/devcontainers/features/node:1": {
"version": "20"
},
"ghcr.io/devcontainers/features/git-lfs:1.1.0": {}
},
"customizations": {
"vscode": {
"settings": {},
// same extensions as Gitpod, should match /.gitpod.yml
"extensions": [
"vscjava.vscode-java-pack",
"editorconfig.editorconfig",
"dbaeumer.vscode-eslint",
"stylelint.vscode-stylelint",
"DavidAnson.vscode-markdownlint",
"ms-azuretools.vscode-docker",
"cweijan.vscode-database-client2",
"GitHub.vscode-pull-request-github"
]
}
},
"portsAttributes": {
"8000": {
"label": "Shenyu Admin",
"onAutoForward": "notify"
}
},
"postCreateCommand": "java -version"
}
================================================
FILE: .github/ISSUE_TEMPLATE/bug-report.yml
================================================
name: 🐛 Bug Report
description: Problems and issues with code of Apache ShenYu 🤔.
title: "[BUG] <title>"
labels: ["type: bug"]
body:
- type: checkboxes
attributes:
label: Is there an existing issue for this?
description: Please search to see if an issue already exists for the bug you encountered.
options:
- label: I have searched the existing issues
required: true
- type: textarea
attributes:
label: Current Behavior
description: A concise description of what you're experiencing.
validations:
required: false
- type: textarea
attributes:
label: Expected Behavior
description: A concise description of what you expected to happen.
validations:
required: false
- type: textarea
attributes:
label: Steps To Reproduce
description: Steps to reproduce the behavior.
placeholder: |
1. In this environment...
2. With this config...
3. Run '...'
4. See error...
validations:
required: false
- type: textarea
attributes:
label: Environment
description: |
examples:
- **ShenYu version(s)**: 2.4.0
value: "ShenYu version(s):"
render: markdown
validations:
required: false
- type: textarea
attributes:
label: Debug logs
description: |
Add your debug logs here.
validations:
required: false
- type: textarea
attributes:
label: Anything else?
description: |
Links? References? Anything that will give us more context about the issue you are encountering!
Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in.
validations:
required: false
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
#
blank_issues_enabled: false
================================================
FILE: .github/ISSUE_TEMPLATE/feature-request.yml
================================================
name: 🚀 Feature Request
description: I have a suggestion (and may want to implement it 🙂)!
title: "[Feature] <title>"
labels: ["type: new feature"]
body:
- type: textarea
attributes:
label: Feature Request
description: >
Tip: Have you checked the docs https://shenyu.apache.org/docs/index/, GitHub issues whether someone else has already reported your issue? Maybe the feature already exists?
placeholder: >
A concise description of what you're experiencing.
validations:
required: false
- type: textarea
attributes:
label: Is your feature request related to a problem? Please describe
description: A clear and concise description of what the problem is. Ex. I have an issue when [...]
validations:
required: false
- type: textarea
attributes:
label: Describe the solution you'd like
description: A clear and concise description of what you want to happen. Add any considered drawbacks.
validations:
required: false
- type: textarea
attributes:
label: Describe alternatives you've considered
description: A clear and concise description of any alternative solutions or features you've considered.
validations:
required: false
- type: textarea
attributes:
label: Additional context
validations:
required: false
- type: markdown
value: "Please read the [Contribution Guideline](https://shenyu.apache.org/community/contributor) before submitting the PR"
================================================
FILE: .github/ISSUE_TEMPLATE/question.yml
================================================
name: 🤔 Question
description: Usage question that isn't answered in docs or discussion
title: "[Question] <title>"
labels: ["type: question"]
body:
- type: textarea
attributes:
label: Question
placeholder: >
your question here;
validations:
required: true
- type: markdown
attributes:
value: |
Please pay attention on issues you submitted, because we maybe need more details.
If no response anymore and we cannot reproduce it on current information, we will **close it**.
================================================
FILE: .github/ISSUE_TEMPLATE/task.yml
================================================
name: 🚀 Task
description: Used to create tasks for the community.
title: "[Task] <title>"
labels: ["status: volunteer wanted"]
body:
- type: textarea
attributes:
label: Description
placeholder: A clear and concise description of Task
validations:
required: true
- type: textarea
attributes:
label: Task List
placeholder: |
1. Task1...
2. Task2...
3. Task3...
4. Task4...
validations:
required: false
- type: markdown
attributes:
value: |
Please read the [Contribution Guideline](https://shenyu.apache.org/community/contributor) before submitting the PR
================================================
FILE: .github/ISSUE_TEMPLATE/volunteer.yml
================================================
name: 🤔 Volunteer
description: Some volunteer help
title: "[Volunteer] <title>"
labels: ["status: volunteer wanted"]
body:
- type: textarea
attributes:
label: Volunteer help
placeholder: >
your need volunteer help here;
validations:
required: true
- type: markdown
attributes:
value: |
Please read the [Contribution Guideline](https://shenyu.apache.org/community/contributor) before submitting the PR
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!-- Describe your PR here; e.g. Fixes #issueNo -->
<!--
Thank you for proposing a pull request. This template will guide you through the essential steps necessary for a pull request.
-->
Make sure that:
- [ ] You have read the [contribution guidelines](https://shenyu.apache.org/community/contributor-guide).
- [ ] You submit test cases (unit or integration tests) that back your changes.
- [ ] Your local test passed `./mvnw clean install -Dmaven.javadoc.skip=true`.
================================================
FILE: .github/activie-committers.yml
================================================
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
# Apache ShenYu active committers list.
@yuluo-yx
@Aias00
================================================
FILE: .github/filters.yml
================================================
# Path filters for GitHub Actions workflows
# Each filter defines conditions for when certain workflows should run
# Core source code changes that should trigger main CI
code:
- 'shenyu-*/**/*.java'
- 'shenyu-*/**/*.xml'
- 'shenyu-*/**/*.yml'
- 'shenyu-*/**/*.yaml'
- 'shenyu-*/**/*.properties'
- 'shenyu-*/**/*.sh'
- 'shenyu-*/**/Dockerfile'
- 'shenyu-*/**/docker-compose.yml'
- 'shenyu-*/**/pom.xml'
- 'pom.xml'
- 'mvnw'
- 'mvnw.cmd'
- '.mvn/**'
# Documentation changes that can skip heavy builds
docs:
- '**/*.md'
- '**/*.txt'
- 'docs/**'
- '**/*.rst'
- '**/*.adoc'
# Configuration changes
config:
- '.github/**'
- '**/*.yaml'
- '**/*.yml'
- '**/*.properties'
- '**/*.conf'
- '**/*.config'
# Frontend/UI changes
frontend:
- '**/resources/static/**'
- '**/resources/templates/**'
- '**/*.html'
- '**/*.css'
- '**/*.js'
- '**/*.ts'
- '**/*.vue'
- '**/package.json'
- '**/package-lock.json'
- '**/yarn.lock'
# Test changes
tests:
- '**/test/**'
- '**/src/test/**'
- '**/*Test.java'
- '**/*Tests.java'
- '**/testng.xml'
- '**/junit-platform.properties'
# Build and CI configuration
build:
- 'pom.xml'
- '**/pom.xml'
- '.github/workflows/**'
- 'mvnw'
- 'mvnw.cmd'
- '.mvn/**'
- 'Makefile'
- '**/*.gradle'
- 'build.gradle'
- 'settings.gradle'
# Docker and deployment files
docker:
- '**/Dockerfile'
- '**/docker-compose.yml'
- '**/docker-compose.yaml'
- '**/k8s/**'
- '**/kubernetes/**'
- '**/helm/**'
- '**/*.dockerfile'
# E2E test related changes
e2e:
- 'shenyu-e2e/**'
- '**/e2e/**'
- '**/end-to-end/**'
- '**/*E2E*.java'
- '**/*E2ETest*.java'
# Integration test changes
integration:
- 'shenyu-integrated-test/**'
- '**/integrated-test/**'
- '**/*Integration*.java'
- '**/*IntegrationTest*.java'
- '**/integration/**'
# Maven POM changes
pom:
- '**/pom.xml'
- 'pom.xml'
# License and legal files (can skip most builds)
legal:
- 'LICENSE'
- 'NOTICE'
- 'DISCLAIMER'
- '**/*.license'
- '.licenserc.yaml'
- '.asf.yaml'
# Git and repository configuration
git:
- '.gitignore'
- '.gitattributes'
- '.gitmodules'
# Files that should not trigger builds (exclusions)
skip-build:
- '**/*.md'
- '**/*.txt'
- '**/*.png'
- '**/*.jpg'
- '**/*.jpeg'
- '**/*.gif'
- '**/*.svg'
- '**/*.ico'
- '**/*.pdf'
- '**/*.doc'
- '**/*.docx'
- 'LICENSE'
- 'NOTICE'
- 'DISCLAIMER'
- '.asf.yaml'
- '.gitignore'
- '.licenserc.yaml'
- '.github/ISSUE_TEMPLATE/**'
- '.github/PULL_REQUEST_TEMPLATE'
- 'resources/static/**'
# Main filter for general code changes (used by most workflows)
changed:
- 'shenyu-*/**'
- 'pom.xml'
- 'mvnw'
- 'mvnw.cmd'
- '.mvn/**'
- '.github/workflows/**'
- '!**/*.md'
- '!**/*.txt'
- '!resources/static/**'
- '!.asf.yaml'
- '!.gitignore'
- '!.licenserc.yaml'
- '!LICENSE'
- '!NOTICE'
- '!DISCLAIMER'
- '!shenyu-e2e/**'
- '!.github/ISSUE_TEMPLATE/**'
- '!.github/PULL_REQUEST_TEMPLATE'
================================================
FILE: .github/workflows/auto-notify.yml
================================================
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
# When issue opened, notify ShenYu active committers.
# And randomly select one from the list, not all.
# See .github/activie-committers.yml for the list of active committers.
name: Auto Notify
on:
issues:
types: [opened]
jobs:
notify-committers:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Read active committers list and select random one
id: read-committers
run: |
# Read committers from the YAML file and extract GitHub usernames
committers=$(grep -E "^@" .github/activie-committers.yml)
# Randomly select one committer
selected_committer=$(echo "$committers" | shuf -n 1)
echo "committer=$selected_committer" >> $GITHUB_OUTPUT
- name: Notify randomly selected committer
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const committer = '${{ steps.read-committers.outputs.committer }}';
const issueNumber = context.issue.number;
const issueTitle = context.payload.issue.title;
const issueAuthor = context.payload.issue.user.login;
const issueUrl = context.payload.issue.html_url;
const commentBody = [
`👋 Hello ${committer}`,
'',
`A new issue has been opened by @${issueAuthor}:`,
`- **Title**: ${issueTitle}`,
`- **Link**: ${issueUrl}`,
'',
'Please review when you have time. Thank you! 🙏'
].join('\n');
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
body: commentBody
});
================================================
FILE: .github/workflows/ci.yml
================================================
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
name: ci
on:
pull_request:
push:
branches:
- master
jobs:
build:
strategy:
matrix:
java: [17]
os: [ubuntu-latest, windows-latest]
include:
- java: 17
os: ubuntu-latest
- java: 18
os: ubuntu-latest
- java: 19
os: ubuntu-latest
- java: 20
os: ubuntu-latest
- java: 21
os: ubuntu-latest
runs-on: ${{ matrix.os }}
if: (github.repository == 'apache/shenyu')
steps:
- name: Support longpaths
if: ${{ matrix.os == 'windows-latest'}}
run: git config --system core.longpaths true
- uses: actions/checkout@v3
with:
submodules: true
- uses: ./actions/paths-filter
id: filter
with:
list-files: "csv"
filters: |
code:
- '!**/*.md'
- '!**/*.txt'
- '!resources/static/**'
- '!.asf.yaml'
- '!.gitignore'
- '!.licenserc.yaml'
- '!LICENSE'
- '!**/LICENSE'
- '!shenyu-*/**/LICENSE'
- '!shenyu-*/**/release-docs/LICENSE'
- '!NOTICE'
- '!**/NOTICE'
- '!shenyu-*/**/NOTICE'
- '!shenyu-*/**/release-docs/NOTICE'
- '!.github/ISSUE_TEMPLATE/**'
- '!.github/PULL_REQUEST_TEMPLATE'
- 'shenyu-*/**'
- 'pom.xml'
- '**/pom.xml'
- 'mvnw'
- 'mvnw.cmd'
- '.mvn/**'
- '.github/workflows/**'
- name: Debug - Show matched files
if: steps.filter.outputs.code == 'true'
run: |
echo "Matched files: ${{ steps.filter.outputs.code_files }}"
- name: Restore ShenYu Maven Repos
if: steps.filter.outputs.code == 'true'
id: restore-maven-cache
uses: actions/cache/restore@v3
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- uses: actions/setup-java@v4
if: steps.filter.outputs.code == 'true'
with:
java-version: ${{ matrix.java }}
distribution: "temurin"
- name: Install mvnd
if: steps.filter.outputs.code == 'true'
shell: bash
run: |
MVND_VERSION=1.0.2
if [[ "${{ runner.os }}" == "Windows" ]]; then
curl -sL https://downloads.apache.org/maven/mvnd/${MVND_VERSION}/maven-mvnd-${MVND_VERSION}-windows-amd64.zip -o mvnd.zip
unzip -q mvnd.zip
mkdir -p $HOME/.local
mv maven-mvnd-${MVND_VERSION}-windows-amd64 $HOME/.local/mvnd
echo "$HOME/.local/mvnd/bin" >> $GITHUB_PATH
echo "MVND_HOME=$HOME/.local/mvnd" >> $GITHUB_ENV
else
curl -sL https://downloads.apache.org/maven/mvnd/${MVND_VERSION}/maven-mvnd-${MVND_VERSION}-linux-amd64.zip -o mvnd.zip
unzip -q mvnd.zip
mkdir -p $HOME/.local
mv maven-mvnd-${MVND_VERSION}-linux-amd64 $HOME/.local/mvnd
echo "$HOME/.local/mvnd/bin" >> $GITHUB_PATH
echo "MVND_HOME=$HOME/.local/mvnd" >> $GITHUB_ENV
fi
- name: Verify mvnd installation
if: steps.filter.outputs.code == 'true'
shell: bash
run: mvnd --version || echo "mvnd version check failed, will use maven wrapper as fallback"
- name: Build with Maven
if: steps.filter.outputs.code == 'true'
shell: bash
run: |
if mvnd --version > /dev/null 2>&1; then
echo "Using mvnd for build"
mvnd -B clean test -Prelease
else
echo "Falling back to maven wrapper"
if [[ "${{ runner.os }}" == "Windows" ]]; then
./mvnw.cmd -B clean test -Prelease
else
./mvnw -B clean test -Prelease
fi
fi
- uses: codecov/codecov-action@v1
with:
token: 2760af6a-3405-4882-9e61-04c5176fecfa
if: steps.filter.outputs.code == 'true'
- name: Save ShenYu Maven Repos
if: steps.filter.outputs.code == 'true' && steps.restore-maven-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v3
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
check-license-header:
name: check-license-header
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Check License Header
uses: apache/skywalking-eyes@9bd5feb86b5817aa6072b008f9866a2c3bbc8587
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
requirement:
name: build
if: always()
needs:
- build
runs-on: ubuntu-latest
steps:
- name: checking job status
run: |
[[ "${{ needs.build.result }}" == "success" ]] || exit -1
================================================
FILE: .github/workflows/codeql-analysis.yml
================================================
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
name: "CodeQL"
on:
push:
branches:
- master
paths:
- '**/*.java'
pull_request:
paths:
- '**/*.java'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
if: (github.repository == 'apache/shenyu')
strategy:
fail-fast: false
matrix:
language: ['java']
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
submodules: true
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: 17
distribution: 'temurin'
- name: Restore ShenYu Maven Repos
id: restore-maven-cache
uses: actions/cache/restore@v3
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
- name: Autobuild
uses: github/codeql-action/autobuild@v3
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
================================================
FILE: .github/workflows/docker-publish-dockerhub.yml
================================================
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
name: docker-publish-dockerhub
on:
release:
# pre-release or draft status don't trigger this job.
# this job called if and only if pre-release -> release or release directly.
types: ["released"]
env:
REPOSITORY: ${{ github.repository }}
TAG: ${{ github.ref_name }}
jobs:
dockerhub:
runs-on: ubuntu-latest
if: (github.repository == 'apache/shenyu')
permissions:
contents: read
packages: write
id-token: write
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USER }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Available platforms
run: echo ${{ steps.buildx.outputs.platforms }}
- name: Restore ShenYu Maven Repos
id: restore-maven-cache
uses: actions/cache/restore@v3
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- uses: actions/setup-java@v4
with:
java-version: 17
distribution: "temurin"
- name: Install mvnd
shell: bash
run: |
MVND_VERSION=1.0.2
if [[ "${{ runner.os }}" == "Windows" ]]; then
curl -sL https://downloads.apache.org/maven/mvnd/${MVND_VERSION}/maven-mvnd-${MVND_VERSION}-windows-amd64.zip -o mvnd.zip
unzip -q mvnd.zip
mkdir -p $HOME/.local
mv maven-mvnd-${MVND_VERSION}-windows-amd64 $HOME/.local/mvnd
echo "$HOME/.local/mvnd/bin" >> $GITHUB_PATH
echo "MVND_HOME=$HOME/.local/mvnd" >> $GITHUB_ENV
else
curl -sL https://downloads.apache.org/maven/mvnd/${MVND_VERSION}/maven-mvnd-${MVND_VERSION}-linux-amd64.zip -o mvnd.zip
unzip -q mvnd.zip
mkdir -p $HOME/.local
mv maven-mvnd-${MVND_VERSION}-linux-amd64 $HOME/.local/mvnd
echo "$HOME/.local/mvnd/bin" >> $GITHUB_PATH
echo "MVND_HOME=$HOME/.local/mvnd" >> $GITHUB_ENV
fi
- name: Build with Maven
shell: bash
run: |
if mvnd --version > /dev/null 2>&1; then
echo "Using mvnd for build"
mvnd -B clean -Prelease -Dmaven.javadoc.skip=true -B -Drat.skip=true -Djacoco.skip=true -DskipITs -DskipTests package
else
echo "Falling back to maven wrapper"
if [[ "${{ runner.os }}" == "Windows" ]]; then
./mvnw.cmd -B clean -Prelease -Dmaven.javadoc.skip=true -B -Drat.skip=true -Djacoco.skip=true -DskipITs -DskipTests package
else
./mvnw -B clean -Prelease -Dmaven.javadoc.skip=true -B -Drat.skip=true -Djacoco.skip=true -DskipITs -DskipTests package
fi
fi
- name: Build and push (admin) (dockerhub)
uses: docker/build-push-action@v3
with:
context: ./shenyu-dist/shenyu-admin-dist
file: ./shenyu-dist/shenyu-admin-dist/docker/Dockerfile
build-args: APP_NAME=apache-shenyu-*-admin-bin
platforms: linux/amd64,linux/arm64
push: true
tags: |
apache/shenyu-admin:latest
apache/shenyu-admin:${{ env.TAG }}
- name: Build and push (bootstrap) (dockerhub)
uses: docker/build-push-action@v3
with:
context: ./shenyu-dist/shenyu-bootstrap-dist
file: ./shenyu-dist/shenyu-bootstrap-dist/docker/Dockerfile
build-args: APP_NAME=apache-shenyu-*-bootstrap-bin
platforms: linux/amd64,linux/arm64
push: true
tags: |
apache/shenyu-bootstrap:latest
apache/shenyu-bootstrap:${{ env.TAG }}
================================================
FILE: .github/workflows/docker-publish.yml
================================================
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
name: docker-publish-ghcr
on:
push:
branches: ["master"]
tags: ["v*.*.*"]
paths-ignore:
- "**.md"
- "**/resources/static/"
env:
REGISTRY: ghcr.io
REPOSITORY: ${{ github.repository }}
TAG: ${{ github.sha }}
jobs:
build:
runs-on: ubuntu-latest
if: (github.repository == 'apache/shenyu')
permissions:
contents: read
packages: write
id-token: write
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Available platforms
run: echo ${{ steps.buildx.outputs.platforms }}
- name: Restore ShenYu Maven Repos
id: restore-maven-cache
uses: actions/cache/restore@v3
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- uses: actions/setup-java@v4
with:
java-version: 17
distribution: "temurin"
- name: Install mvnd
shell: bash
run: |
MVND_VERSION=1.0.2
if [[ "${{ runner.os }}" == "Windows" ]]; then
curl -sL https://downloads.apache.org/maven/mvnd/${MVND_VERSION}/maven-mvnd-${MVND_VERSION}-windows-amd64.zip -o mvnd.zip
unzip -q mvnd.zip
mkdir -p $HOME/.local
mv maven-mvnd-${MVND_VERSION}-windows-amd64 $HOME/.local/mvnd
echo "$HOME/.local/mvnd/bin" >> $GITHUB_PATH
echo "MVND_HOME=$HOME/.local/mvnd" >> $GITHUB_ENV
else
curl -sL https://downloads.apache.org/maven/mvnd/${MVND_VERSION}/maven-mvnd-${MVND_VERSION}-linux-amd64.zip -o mvnd.zip
unzip -q mvnd.zip
mkdir -p $HOME/.local
mv maven-mvnd-${MVND_VERSION}-linux-amd64 $HOME/.local/mvnd
echo "$HOME/.local/mvnd/bin" >> $GITHUB_PATH
echo "MVND_HOME=$HOME/.local/mvnd" >> $GITHUB_ENV
fi
- name: Build with Maven
shell: bash
run: |
if mvnd --version > /dev/null 2>&1; then
echo "Using mvnd for build"
mvnd -B clean -Prelease -Dmaven.javadoc.skip=true -B -Drat.skip=true -Djacoco.skip=true -DskipITs -DskipTests package
else
echo "Falling back to maven wrapper"
if [[ "${{ runner.os }}" == "Windows" ]]; then
./mvnw.cmd -B clean -Prelease -Dmaven.javadoc.skip=true -B -Drat.skip=true -Djacoco.skip=true -DskipITs -DskipTests package
else
./mvnw -B clean -Prelease -Dmaven.javadoc.skip=true -B -Drat.skip=true -Djacoco.skip=true -DskipITs -DskipTests package
fi
fi
- name: Build and push (admin) (ghcr.io)
uses: docker/build-push-action@v3
with:
context: ./shenyu-dist/shenyu-admin-dist
file: ./shenyu-dist/shenyu-admin-dist/docker/Dockerfile
build-args: APP_NAME=apache-shenyu-*-admin-bin
platforms: linux/amd64,linux/arm64
push: true
tags: |
${{ env.REGISTRY }}/${{ env.REPOSITORY }}/admin:latest
${{ env.REGISTRY }}/${{ env.REPOSITORY }}/admin:${{ env.TAG }}
- name: Build and push (bootstrap) (ghcr.io)
uses: docker/build-push-action@v3
with:
context: ./shenyu-dist/shenyu-bootstrap-dist
file: ./shenyu-dist/shenyu-bootstrap-dist/docker/Dockerfile
build-args: APP_NAME=apache-shenyu-*-bootstrap-bin
platforms: linux/amd64,linux/arm64
push: true
tags: |
${{ env.REGISTRY }}/${{ env.REPOSITORY }}/bootstrap:latest
${{ env.REGISTRY }}/${{ env.REPOSITORY }}/bootstrap:${{ env.TAG }}
================================================
FILE: .github/workflows/e2e-k8s.yml
================================================
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
name: e2e
on:
pull_request:
push:
branches:
- master
jobs:
changes:
runs-on: ubuntu-latest
outputs:
e2e: ${{ steps.filter.outputs.e2e }}
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Free disk space
run: |
df --human-readable
sudo apt clean
for image in $(docker image ls --all --quiet); do
docker rmi $image
done
rm --recursive --force "$AGENT_TOOLSDIRECTORY"
df --human-readable
- uses: ./actions/paths-filter
id: filter
with:
filters: |
e2e:
- 'shenyu-e2e/**'
- '**/e2e/**'
- 'shenyu-*/**'
- 'pom.xml'
- '**/pom.xml'
- '!**/*.md'
- '!**/*.txt'
- '!resources/static/**'
- '!.asf.yaml'
- '!.gitignore'
- '!.licenserc.yaml'
- '!LICENSE'
- '!NOTICE'
- '!.github/ISSUE_TEMPLATE/**'
- '!.github/PULL_REQUEST_TEMPLATE'
build-docker-images:
needs: changes
if: ${{ needs.changes.outputs.e2e == 'true' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Free disk space
run: |
df --human-readable
sudo apt clean
for image in $(docker image ls --all --quiet); do
docker rmi $image
done
rm --recursive --force "$AGENT_TOOLSDIRECTORY"
df --human-readable
- name: Set up JDK 17 for Building ShenYu
uses: actions/setup-java@v4
with:
java-version: "17"
distribution: "temurin"
- name: Install mvnd
shell: bash
run: |
MVND_VERSION=1.0.2
if [[ "${{ runner.os }}" == "Windows" ]]; then
curl -sL https://downloads.apache.org/maven/mvnd/${MVND_VERSION}/maven-mvnd-${MVND_VERSION}-windows-amd64.zip -o mvnd.zip
unzip -q mvnd.zip
mkdir -p $HOME/.local
mv maven-mvnd-${MVND_VERSION}-windows-amd64 $HOME/.local/mvnd
echo "$HOME/.local/mvnd/bin" >> $GITHUB_PATH
echo "MVND_HOME=$HOME/.local/mvnd" >> $GITHUB_ENV
else
curl -sL https://downloads.apache.org/maven/mvnd/${MVND_VERSION}/maven-mvnd-${MVND_VERSION}-linux-amd64.zip -o mvnd.zip
unzip -q mvnd.zip
mkdir -p $HOME/.local
mv maven-mvnd-${MVND_VERSION}-linux-amd64 $HOME/.local/mvnd
echo "$HOME/.local/mvnd/bin" >> $GITHUB_PATH
echo "MVND_HOME=$HOME/.local/mvnd" >> $GITHUB_ENV
fi
- name: Build with Maven
shell: bash
run: |
if mvnd --version > /dev/null 2>&1; then
echo "Using mvnd for build"
mvnd -B clean install -Prelease,docker -Dmaven.javadoc.skip=true -B -Drat.skip=true -Dmaven.test.skip=true -Djacoco.skip=true -DskipITs -DskipTests package -T1C
else
echo "Falling back to maven wrapper"
if [[ "${{ runner.os }}" == "Windows" ]]; then
./mvnw.cmd -B clean install -Prelease,docker -Dmaven.javadoc.skip=true -B -Drat.skip=true -Dmaven.test.skip=true -Djacoco.skip=true -DskipITs -DskipTests package -T1C
else
./mvnw -B clean install -Prelease,docker -Dmaven.javadoc.skip=true -B -Drat.skip=true -Dmaven.test.skip=true -Djacoco.skip=true -DskipITs -DskipTests package -T1C
fi
fi
- name: Save ShenYu Maven Repos
uses: actions/cache/save@v3
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
# - name: Build shenyu-e2e-engine with Maven
# run: ./mvnw -B -f ./shenyu-e2e/pom.xml -pl shenyu-e2e-engine -am clean install
# - name: Save ShenYu E2E Maven Repos
# if: steps.restore-e2e-maven-cache.outputs.cache-hit != 'true'
# uses: actions/cache/save@v3
# with:
# path: ~/.m2/repository
# key: ${{ runner.os }}-e2e-maven-${{ hashFiles('**/pom.xml') }}
- name: Build Docker Image
run: |
docker save apache/shenyu-bootstrap:latest > /tmp/apache-shenyu-bootstrap.tar
docker save apache/shenyu-admin:latest > /tmp/apache-shenyu-admin.tar
- name: Upload Docker Image Artifacts
uses: actions/upload-artifact@v4
with:
name: shenyu-images
path: /tmp/apache-shenyu-*.tar
retention-days: 1
e2e-storage:
runs-on: ubuntu-latest
needs:
- changes
- build-docker-images
if: (github.repository == 'apache/shenyu' && ${{ needs.changes.outputs.e2e == 'true' }})
# if: (github.repository == 'apache/shenyu')
strategy:
matrix:
include:
- case: shenyu-e2e-case-storage
script: e2e-h2-compose
- case: shenyu-e2e-case-storage
script: e2e-mysql-compose
- case: shenyu-e2e-case-storage
script: e2e-postgres-compose
- case: shenyu-e2e-case-storage
script: e2e-opengauss-compose
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Free disk space
run: |
df --human-readable
sudo apt clean
for image in $(docker image ls --all --quiet); do
docker rmi $image
done
rm --recursive --force "$AGENT_TOOLSDIRECTORY"
df --human-readable
rm -rf /tmp/shenyu
mkdir -p /tmp/shenyu
# - name: Install k8s
# if: steps.filter.outputs.changed == 'true'
# run: |
# curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.29.6+k3s2 K3S_KUBECONFIG_MODE=777 sh -
# cat /etc/rancher/k3s/k3s.yaml
# mkdir -p ~/.kube
# cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
- name: Set up JDK 17 for Building ShenYu
uses: actions/setup-java@v4
with:
java-version: "17"
distribution: "temurin"
- name: Restore ShenYu Maven Repos
uses: actions/cache/restore@v3
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- uses: actions/download-artifact@v4
with:
name: shenyu-images
path: /tmp/shenyu/
- name: Load ShenYu Docker Images
run: |
docker load --input /tmp/shenyu/apache-shenyu-admin.tar
docker load --input /tmp/shenyu/apache-shenyu-bootstrap.tar
docker image ls -a
# - name: Build k8s Cluster
# if: steps.filter.outputs.changed == 'true'
# run: |
# sudo k3s ctr images import /tmp/shenyu/apache-shenyu-admin.tar
# sudo k3s ctr images import /tmp/shenyu/apache-shenyu-bootstrap.tar
- name: Run E2E Tests
run: |
bash ./shenyu-e2e/shenyu-e2e-case/${{ matrix.case }}/compose/script/${{ matrix.script }}.sh
# - name: Cluster Test after Healthcheck
# if: steps.filter.outputs.changed == 'true'
# run: |
# kubectl get all
# kubectl get events --all-namespaces
e2e-case:
runs-on: ubuntu-latest
needs:
- changes
- build-docker-images
if: (github.repository == 'apache/shenyu' && ${{ needs.changes.outputs.e2e == 'true' }})
# if: (github.repository == 'apache/shenyu')
strategy:
matrix:
include:
- case: shenyu-e2e-case-http
script: e2e-http-sync-compose
- case: shenyu-e2e-case-spring-cloud
script: e2e-springcloud-sync-compose
- case: shenyu-e2e-case-apache-dubbo
script: e2e-apache-dubbo-sync-compose
- case: shenyu-e2e-case-sofa
script: e2e-sofa-sync-compose
- case: shenyu-e2e-case-grpc
script: e2e-grpc-sync-compose
- case: shenyu-e2e-case-websocket
script: e2e-websocket-sync-compose
# - case: shenyu-e2e-case-cluster
# script: e2e-cluster-jdbc-compose
# - case: shenyu-e2e-case-cluster
# script: e2e-cluster-zookeeper-compose
- case: shenyu-e2e-case-logging-rocketmq
script: e2e-logging-rocketmq-compose
# - case: shenyu-e2e-case-logging-kafka
# script: e2e-logging-kafka-compose
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Free disk space
run: |
df --human-readable
sudo apt clean
for image in $(docker image ls --all --quiet); do
docker rmi $image
done
rm --recursive --force "$AGENT_TOOLSDIRECTORY"
df --human-readable
rm -rf /tmp/shenyu
mkdir -p /tmp/shenyu
# - name: Install k8s
# if: steps.filter.outputs.changed == 'true'
# run: |
# curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.29.6+k3s2 K3S_KUBECONFIG_MODE=777 sh -
# cat /etc/rancher/k3s/k3s.yaml
# mkdir -p ~/.kube
# cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
- name: Set up JDK 17 for Building ShenYu
uses: actions/setup-java@v4
with:
java-version: "17"
distribution: "temurin"
- name: Restore ShenYu Maven Repos
uses: actions/cache/restore@v3
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- name: Install mvnd
shell: bash
run: |
MVND_VERSION=1.0.2
if [[ "${{ runner.os }}" == "Windows" ]]; then
curl -sL https://downloads.apache.org/maven/mvnd/${MVND_VERSION}/maven-mvnd-${MVND_VERSION}-windows-amd64.zip -o mvnd.zip
unzip -q mvnd.zip
mkdir -p $HOME/.local
mv maven-mvnd-${MVND_VERSION}-windows-amd64 $HOME/.local/mvnd
echo "$HOME/.local/mvnd/bin" >> $GITHUB_PATH
echo "MVND_HOME=$HOME/.local/mvnd" >> $GITHUB_ENV
else
curl -sL https://downloads.apache.org/maven/mvnd/${MVND_VERSION}/maven-mvnd-${MVND_VERSION}-linux-amd64.zip -o mvnd.zip
unzip -q mvnd.zip
mkdir -p $HOME/.local
mv maven-mvnd-${MVND_VERSION}-linux-amd64 $HOME/.local/mvnd
echo "$HOME/.local/mvnd/bin" >> $GITHUB_PATH
echo "MVND_HOME=$HOME/.local/mvnd" >> $GITHUB_ENV
fi
- uses: actions/download-artifact@v4
with:
name: shenyu-images
path: /tmp/shenyu/
# - name: Restore ShenYu E2E Maven Repos
# uses: actions/cache/restore@v3
# with:
# path: ~/.m2/repository
# key: ${{ runner.os }}-e2e-maven-${{ hashFiles('**/pom.xml') }}
# restore-keys: |
# ${{ runner.os }}-e2e-maven-
- name: Build examples with Maven
shell: bash
run: |
echo "Falling back to maven wrapper for examples"
if [[ "${{ runner.os }}" == "Windows" ]]; then
./mvnw.cmd -B clean install -Pexample -Dmaven.javadoc.skip=true -Dmaven.test.skip=true -am -f ./shenyu-examples/pom.xml
else
./mvnw -B clean install -Pexample -Dmaven.javadoc.skip=true -Dmaven.test.skip=true -am -f ./shenyu-examples/pom.xml
fi
- uses: actions/download-artifact@v4
with:
name: shenyu-images
path: /tmp/shenyu/
- name: Load ShenYu Docker Images
run: |
docker load --input /tmp/shenyu/apache-shenyu-admin.tar
docker load --input /tmp/shenyu/apache-shenyu-bootstrap.tar
docker image ls -a
# - name: Build k8s Cluster
# if: steps.filter.outputs.changed == 'true'
# run: |
# sudo k3s ctr images import /tmp/shenyu/apache-shenyu-admin.tar
# sudo k3s ctr images import /tmp/shenyu/apache-shenyu-bootstrap.tar
# - name: Setup Debug Session
# uses: mxschmitt/action-tmate@v3
# timeout-minutes: 15
# with:
# detached: true
- name: Run E2E Tests
run: |
bash ./shenyu-e2e/shenyu-e2e-case/${{ matrix.case }}/compose/script/${{ matrix.script }}.sh
# - name: Cluster Test after Healthcheck
# if: steps.filter.outputs.changed == 'true'
# run: |
# kubectl get all
# kubectl get events --all-namespaces
requirement:
name: e2e
if: ${{ needs.changes.outputs.e2e == 'true' }}
needs:
- changes
- e2e-storage
- e2e-case
runs-on: ubuntu-latest
steps:
- name: checking job status
run: |
[[ "${{ needs.e2e-storage.result }}" == "success" ]] || exit -1
[[ "${{ needs.e2e-case.result }}" == "success" ]] || exit -1
================================================
FILE: .github/workflows/integrated-test-k8s-ingress.yml
================================================
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
name: it-k8s
on:
pull_request:
push:
branches:
- master
jobs:
build:
strategy:
matrix:
case:
- shenyu-integrated-test-k8s-ingress-http
- shenyu-integrated-test-k8s-ingress-apache-dubbo
- shenyu-integrated-test-k8s-ingress-motan
- shenyu-integrated-test-k8s-ingress-websocket
- shenyu-integrated-test-k8s-ingress-grpc
# - shenyu-integrated-test-k8s-ingress-sofa
runs-on: ubuntu-latest
if: github.repository == 'apache/shenyu'
steps:
- uses: actions/checkout@v3
with:
submodules: true
- uses: ./actions/paths-filter
id: filter
with:
filters: |
k8s-ingress:
- 'shenyu-integrated-test-k8s-ingress*/**'
- 'shenyu-*/**'
- 'pom.xml'
- '**/pom.xml'
- 'shenyu-examples/**'
- '!**/*.md'
- '!**/*.txt'
- '!resources/static/**'
- '!.asf.yaml'
- '!.gitignore'
- '!.licenserc.yaml'
- '!LICENSE'
- '!NOTICE'
- '!.github/ISSUE_TEMPLATE/**'
- '!.github/PULL_REQUEST_TEMPLATE'
- name: Clean Space
if: steps.filter.outputs.k8s-ingress == 'true'
run: |
sudo rm -rf /usr/share/dotnet
sudo rm -rf /opt/ghc
sudo rm -rf "/usr/local/share/boost"
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
- name: Cache Maven Repos
if: steps.filter.outputs.k8s-ingress == 'true'
uses: actions/cache@v3
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- uses: actions/setup-java@v4
if: steps.filter.outputs.k8s-ingress == 'true'
with:
java-version: 17
distribution: "temurin"
- name: Install Go
uses: actions/setup-go@v3
with:
go-version: 1.17.x
- name: Install k8s
if: steps.filter.outputs.k8s-ingress == 'true'
run: |
go install sigs.k8s.io/kind@v0.14.0
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.24.14/bin/linux/amd64/kubectl && sudo install kubectl /usr/local/bin/kubectl
kind create cluster --image=kindest/node:v1.21.1 --config=./shenyu-integrated-test/${{ matrix.case }}/deploy/kind-config.yaml
- name: Cache Maven Repos
if: steps.filter.outputs.k8s-ingress == 'true'
uses: actions/cache@v3
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- uses: actions/setup-java@v4
if: steps.filter.outputs.k8s-ingress == 'true'
with:
java-version: 17
distribution: "temurin"
- name: Install mvnd
if: steps.filter.outputs.k8s-ingress == 'true'
shell: bash
run: |
MVND_VERSION=1.0.2
if [[ "${{ runner.os }}" == "Windows" ]]; then
curl -sL https://downloads.apache.org/maven/mvnd/${MVND_VERSION}/maven-mvnd-${MVND_VERSION}-windows-amd64.zip -o mvnd.zip
unzip -q mvnd.zip
mkdir -p $HOME/.local
mv maven-mvnd-${MVND_VERSION}-windows-amd64 $HOME/.local/mvnd
echo "$HOME/.local/mvnd/bin" >> $GITHUB_PATH
echo "MVND_HOME=$HOME/.local/mvnd" >> $GITHUB_ENV
else
curl -sL https://downloads.apache.org/maven/mvnd/${MVND_VERSION}/maven-mvnd-${MVND_VERSION}-linux-amd64.zip -o mvnd.zip
unzip -q mvnd.zip
mkdir -p $HOME/.local
mv maven-mvnd-${MVND_VERSION}-linux-amd64 $HOME/.local/mvnd
echo "$HOME/.local/mvnd/bin" >> $GITHUB_PATH
echo "MVND_HOME=$HOME/.local/mvnd" >> $GITHUB_ENV
fi
- name: Build with Maven
if: steps.filter.outputs.k8s-ingress == 'true'
shell: bash
run: |
if mvnd --version > /dev/null 2>&1; then
echo "Using mvnd for build"
mvnd -B clean install -Dmaven.javadoc.skip=true -Dmaven.test.skip=true
else
echo "Falling back to maven wrapper"
if [[ "${{ runner.os }}" == "Windows" ]]; then
./mvnw.cmd -B clean install -Dmaven.javadoc.skip=true -Dmaven.test.skip=true
else
./mvnw -B clean install -Dmaven.javadoc.skip=true -Dmaven.test.skip=true
fi
fi
- name: Build integrated tests
if: steps.filter.outputs.k8s-ingress == 'true'
shell: bash
run: |
if mvnd --version > /dev/null 2>&1; then
echo "Using mvnd for build integrated tests"
mvnd -B clean install -Pit -DskipTests -am -f ./shenyu-integrated-test/pom.xml
else
echo "Falling back to maven wrapper for integrated tests"
if [[ "${{ runner.os }}" == "Windows" ]]; then
./mvnw.cmd -B clean install -Pit -DskipTests -am -f ./shenyu-integrated-test/pom.xml
else
./mvnw -B clean install -Pit -DskipTests -am -f ./shenyu-integrated-test/pom.xml
fi
fi
- name: Build examples
if: steps.filter.outputs.k8s-ingress == 'true'
shell: bash
run: |
if mvnd --version > /dev/null 2>&1; then
echo "Using mvnd for build examples"
mvnd -B clean install -Pexample -Dmaven.javadoc.skip=true -Dmaven.test.skip=true -am -f ./shenyu-examples/pom.xml
else
echo "Falling back to maven wrapper for examples"
if [[ "${{ runner.os }}" == "Windows" ]]; then
./mvnw.cmd -B clean install -Pexample -Dmaven.javadoc.skip=true -Dmaven.test.skip=true -am -f ./shenyu-examples/pom.xml
else
./mvnw -B clean install -Pexample -Dmaven.javadoc.skip=true -Dmaven.test.skip=true -am -f ./shenyu-examples/pom.xml
fi
fi
- name: Build k8s Cluster
if: steps.filter.outputs.k8s-ingress == 'true'
run: bash ./shenyu-integrated-test/${{ matrix.case }}/script/build_k8s_cluster.sh
- name: Wait for k8s Cluster Start up
if: steps.filter.outputs.k8s-ingress == 'true'
timeout-minutes: 15
run: |
bash ./shenyu-integrated-test/${{ matrix.case }}/script/healthcheck.sh
- name: Run test
id: test
if: steps.filter.outputs.k8s-ingress == 'true'
shell: bash
run: |
if mvnd --version > /dev/null 2>&1; then
echo "Using mvnd for running tests"
mvnd test -Pit -f ./shenyu-integrated-test/${{ matrix.case }}/pom.xml
else
echo "Falling back to maven wrapper for tests"
if [[ "${{ runner.os }}" == "Windows" ]]; then
./mvnw.cmd test -Pit -f ./shenyu-integrated-test/${{ matrix.case }}/pom.xml
else
./mvnw test -Pit -f ./shenyu-integrated-test/${{ matrix.case }}/pom.xml
fi
fi
continue-on-error: true
- name: Cluster Test after Healthcheck
if: steps.filter.outputs.k8s-ingress == 'true'
run: |
echo "----------kubectl get all -o wide----------"
kubectl get all -o wide
echo "----------kubectl get all -n shenyu-ingress -o wide----------"
kubectl get all -n shenyu-ingress -o wide
echo "----------kubectl get events --all-namespaces----------"
kubectl get events --all-namespaces
echo "----------kubectl logs -l app=shenyu-ingress-controller -n shenyu-ingress --tail=-1----------"
kubectl logs -l app=shenyu-ingress-controller -n shenyu-ingress --tail=-1
if [[ ${{steps.test.outcome}} == "failure" ]]; then
echo "Test Failed"
exit 1
else
echo "Test Successful"
exit 0
fi
================================================
FILE: .github/workflows/integrated-test.yml
================================================
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
name: it
on:
pull_request:
push:
branches:
- master
jobs:
build:
strategy:
matrix:
case:
- shenyu-integrated-test-apache-dubbo
- shenyu-integrated-test-grpc
- shenyu-integrated-test-http
- shenyu-integrated-test-https
- shenyu-integrated-test-motan
- shenyu-integrated-test-spring-cloud
- shenyu-integrated-test-sofa
- shenyu-integrated-test-websocket
- shenyu-integrated-test-rewrite
- shenyu-integrated-test-combination
- shenyu-integrated-test-sdk-apache-dubbo
- shenyu-integrated-test-sdk-http
runs-on: ubuntu-latest
if: (github.repository == 'apache/shenyu')
steps:
- uses: actions/checkout@v3
with:
submodules: true
# Copied from https://github.com/jens-maus/RaspberryMatic/blob/ea6b8ce0dd2d53ea88b2766ba8d7f8e1d667281f/.github/workflows/ci.yml#L34-L40
# and https://github.com/actions/virtual-environments/issues/709#issuecomment-612569242
- name: Free disk space
run: |
df --human-readable
sudo apt clean
for image in $(docker image ls --all --quiet); do
docker rmi $image
done
rm --recursive --force "$AGENT_TOOLSDIRECTORY"
df --human-readable
- uses: ./actions/paths-filter
id: filter
with:
filters: |
integration:
- 'shenyu-integrated-test/**'
- 'shenyu-*/**'
- 'pom.xml'
- '**/pom.xml'
- 'shenyu-examples/**'
- '!**/*.md'
- '!**/*.txt'
- '!resources/static/**'
- '!.asf.yaml'
- '!.gitignore'
- '!.licenserc.yaml'
- '!LICENSE'
- '!NOTICE'
- '!.github/ISSUE_TEMPLATE/**'
- '!.github/PULL_REQUEST_TEMPLATE'
- name: Restore ShenYu Maven Repos
if: steps.filter.outputs.integration == 'true'
uses: actions/cache/restore@v3
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- uses: actions/setup-java@v4
if: steps.filter.outputs.integration == 'true'
with:
java-version: 17
distribution: "temurin"
- name: Install mvnd
if: steps.filter.outputs.integration == 'true'
shell: bash
run: |
MVND_VERSION=1.0.2
if [[ "${{ runner.os }}" == "Windows" ]]; then
curl -sL https://downloads.apache.org/maven/mvnd/${MVND_VERSION}/maven-mvnd-${MVND_VERSION}-windows-amd64.zip -o mvnd.zip
unzip -q mvnd.zip
mkdir -p $HOME/.local
mv maven-mvnd-${MVND_VERSION}-windows-amd64 $HOME/.local/mvnd
echo "$HOME/.local/mvnd/bin" >> $GITHUB_PATH
echo "MVND_HOME=$HOME/.local/mvnd" >> $GITHUB_ENV
else
curl -sL https://downloads.apache.org/maven/mvnd/${MVND_VERSION}/maven-mvnd-${MVND_VERSION}-linux-amd64.zip -o mvnd.zip
unzip -q mvnd.zip
mkdir -p $HOME/.local
mv maven-mvnd-${MVND_VERSION}-linux-amd64 $HOME/.local/mvnd
echo "$HOME/.local/mvnd/bin" >> $GITHUB_PATH
echo "MVND_HOME=$HOME/.local/mvnd" >> $GITHUB_ENV
fi
- name: Build with Maven
if: steps.filter.outputs.integration == 'true'
shell: bash
run: |
if mvnd --version > /dev/null 2>&1; then
echo "Using mvnd for build"
mvnd -B clean install -Prelease,docker -Dmaven.javadoc.skip=true -Dmaven.test.skip=true
else
echo "Falling back to maven wrapper"
if [[ "${{ runner.os }}" == "Windows" ]]; then
./mvnw.cmd -B clean install -Prelease,docker -Dmaven.javadoc.skip=true -Dmaven.test.skip=true
else
./mvnw -B clean install -Prelease,docker -Dmaven.javadoc.skip=true -Dmaven.test.skip=true
fi
fi
- name: Build examples
if: steps.filter.outputs.integration == 'true'
shell: bash
run: |
if mvnd --version > /dev/null 2>&1; then
echo "Using mvnd for build examples"
mvnd -B clean install -Pexample -Dmaven.javadoc.skip=true -Dmaven.test.skip=true -am -f ./shenyu-examples/pom.xml
else
echo "Falling back to maven wrapper for examples"
if [[ "${{ runner.os }}" == "Windows" ]]; then
./mvnw.cmd -B clean install -Pexample -Dmaven.javadoc.skip=true -Dmaven.test.skip=true -am -f ./shenyu-examples/pom.xml
else
./mvnw -B clean install -Pexample -Dmaven.javadoc.skip=true -Dmaven.test.skip=true -am -f ./shenyu-examples/pom.xml
fi
fi
- name: Build integrated tests
if: steps.filter.outputs.integration == 'true'
shell: bash
run: |
if mvnd --version > /dev/null 2>&1; then
echo "Using mvnd for build integrated tests"
mvnd -B clean install -Pit -DskipTests -f ./shenyu-integrated-test/pom.xml
else
echo "Falling back to maven wrapper for integrated tests"
if [[ "${{ runner.os }}" == "Windows" ]]; then
./mvnw.cmd -B clean install -Pit -DskipTests -f ./shenyu-integrated-test/pom.xml
else
./mvnw -B clean install -Pit -DskipTests -f ./shenyu-integrated-test/pom.xml
fi
fi
- name: Start docker compose
if: steps.filter.outputs.integration == 'true'
run: docker compose -f ./shenyu-integrated-test/${{ matrix.case }}/docker-compose.yml up -d
- name: Wait for docker compose start up completely
if: steps.filter.outputs.integration == 'true'
run: bash ./shenyu-integrated-test/${{ matrix.case }}/script/healthcheck.sh
- name: Disk space info
run: |
df --human-readable
- name: Run test
id: test
if: steps.filter.outputs.integration == 'true'
shell: bash
run: |
if mvnd --version > /dev/null 2>&1; then
echo "Using mvnd for running tests"
mvnd test -Pit -f ./shenyu-integrated-test/${{ matrix.case }}/pom.xml
else
echo "Falling back to maven wrapper for tests"
if [[ "${{ runner.os }}" == "Windows" ]]; then
./mvnw.cmd test -Pit -f ./shenyu-integrated-test/${{ matrix.case }}/pom.xml
else
./mvnw test -Pit -f ./shenyu-integrated-test/${{ matrix.case }}/pom.xml
fi
fi
continue-on-error: true
- name: Check test result
if: steps.filter.outputs.integration == 'true'
run: |
docker compose -f ./shenyu-integrated-test/${{ matrix.case }}/docker-compose.yml logs --tail="all"
if [[ ${{steps.test.outcome}} == "failure" ]]; then
echo "Test Failed"
exit 1
else
echo "Test Successful"
exit 0
fi
================================================
FILE: .github/workflows/issue-label.yml
================================================
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
name: Issue Manager
permissions: {}
on:
issue_comment:
types:
- created
- edited
jobs:
execute:
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write
steps:
- uses: actions/checkout@v3
- name: Run issue manager script
run: |
echo "Running issue manager script"
bash actions/scripts/issue-manager.sh
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_EVENT_PATH: ${{ github.event_path }}
GITHUB_REPOSITORY: ${{ github.repository }}
================================================
FILE: .github/workflows/k8s-examples-http.yml
================================================
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
name: k8s-examples-http
on:
pull_request:
push:
branches:
- master
jobs:
k8s-examples-http:
runs-on: ubuntu-latest
if: (github.repository == 'apache/shenyu')
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Free disk space
run: |
df --human-readable
sudo apt clean
for image in $(docker image ls --all --quiet); do
docker rmi $image
done
rm --recursive --force "$AGENT_TOOLSDIRECTORY"
df --human-readable
- uses: ./actions/paths-filter
id: filter
with:
filters: |
k8s-examples:
- 'shenyu-examples/**'
- 'shenyu-*/**'
- 'pom.xml'
- '**/pom.xml'
- '!**/*.md'
- '!**/*.txt'
- '!resources/static/**'
- '!.asf.yaml'
- '!.gitignore'
- '!.licenserc.yaml'
- '!LICENSE'
- '!NOTICE'
- '!.github/ISSUE_TEMPLATE/**'
- '!.github/PULL_REQUEST_TEMPLATE'
- name: Install k8s
if: steps.filter.outputs.k8s-examples == 'true'
run: |
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.29.6+k3s2 K3S_KUBECONFIG_MODE=777 sh -
cat /etc/rancher/k3s/k3s.yaml
mkdir -p ~/.kube
cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
- name: Restore ShenYu Maven Repos
if: steps.filter.outputs.k8s-examples == 'true'
uses: actions/cache/restore@v3
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- uses: actions/setup-java@v4
if: steps.filter.outputs.k8s-examples == 'true'
with:
java-version: 17
distribution: "temurin"
- name: Install mvnd
if: steps.filter.outputs.k8s-examples == 'true'
shell: bash
run: |
MVND_VERSION=1.0.2
if [[ "${{ runner.os }}" == "Windows" ]]; then
curl -sL https://downloads.apache.org/maven/mvnd/${MVND_VERSION}/maven-mvnd-${MVND_VERSION}-windows-amd64.zip -o mvnd.zip
unzip -q mvnd.zip
mkdir -p $HOME/.local
mv maven-mvnd-${MVND_VERSION}-windows-amd64 $HOME/.local/mvnd
echo "$HOME/.local/mvnd/bin" >> $GITHUB_PATH
echo "MVND_HOME=$HOME/.local/mvnd" >> $GITHUB_ENV
else
curl -sL https://downloads.apache.org/maven/mvnd/${MVND_VERSION}/maven-mvnd-${MVND_VERSION}-linux-amd64.zip -o mvnd.zip
unzip -q mvnd.zip
mkdir -p $HOME/.local
mv maven-mvnd-${MVND_VERSION}-linux-amd64 $HOME/.local/mvnd
echo "$HOME/.local/mvnd/bin" >> $GITHUB_PATH
echo "MVND_HOME=$HOME/.local/mvnd" >> $GITHUB_ENV
fi
- name: Build with Maven
if: steps.filter.outputs.k8s-examples == 'true'
shell: bash
run: |
if mvnd --version > /dev/null 2>&1; then
echo "Using mvnd for build"
mvnd -B clean install -Prelease,docker -Dmaven.javadoc.skip=true -Dmaven.test.skip=true
else
echo "Falling back to maven wrapper"
if [[ "${{ runner.os }}" == "Windows" ]]; then
./mvnw.cmd -B clean install -Prelease,docker -Dmaven.javadoc.skip=true -Dmaven.test.skip=true
else
./mvnw -B clean install -Prelease,docker -Dmaven.javadoc.skip=true -Dmaven.test.skip=true
fi
fi
- name: Build examples
if: steps.filter.outputs.k8s-examples == 'true'
shell: bash
run: |
if mvnd --version > /dev/null 2>&1; then
echo "Using mvnd for build examples"
mvnd -B clean install -Pexample -Dmaven.javadoc.skip=true -Dmaven.test.skip=true -f ./shenyu-examples/pom.xml
else
echo "Falling back to maven wrapper for examples"
if [[ "${{ runner.os }}" == "Windows" ]]; then
./mvnw.cmd -B clean install -Pexample -Dmaven.javadoc.skip=true -Dmaven.test.skip=true -f ./shenyu-examples/pom.xml
else
./mvnw -B clean install -Pexample -Dmaven.javadoc.skip=true -Dmaven.test.skip=true -f ./shenyu-examples/pom.xml
fi
fi
- name: Build k8s Cluster
if: steps.filter.outputs.k8s-examples == 'true'
run: |
docker save apache/shenyu-admin:latest apache/shenyu-bootstrap:latest shenyu-examples-http:latest | sudo k3s ctr images import -
kubectl apply -f ./shenyu-examples/shenyu-examples-http/k8s/shenyu-deployment.yml
kubectl apply -f ./shenyu-examples/shenyu-examples-http/k8s/shenyu-service.yml
kubectl apply -f ./shenyu-examples/shenyu-examples-http/k8s/shenyu-zookeeper.yml
kubectl apply -f ./shenyu-examples/shenyu-examples-http/k8s/shenyu-examples-http.yml
- name: Wait for k8s Cluster Start up
if: steps.filter.outputs.k8s-examples == 'true'
run: |
bash ./shenyu-examples/shenyu-examples-http/k8s/script/healthcheck.sh
- name: Cluster Test after Healthcheck
if: steps.filter.outputs.k8s-examples == 'true'
run: |
kubectl get all
kubectl get events --all-namespaces
kubectl logs -l all=shenyu-examples-http
================================================
FILE: .gitignore
================================================
# maven ignore
target/
*.class
*.jar
*.war
*.zip
*.tar
*.tar.gz
.flattened-pom.xml
dependency-reduced-pom.xml
# maven plugin ignore
release.properties
cobertura.ser
*.gpg
# eclipse ignore
.settings/
.project
.classpath
# idea ignore
.idea/
!/.idea/icon.svg
!/.idea/vcs.xml
*.ipr
*.iml
*.iws
# temp ignore
logs/
*.log
*.doc
*.cache
*.diff
*.patch
*.tmp
# system ignore
.DS_Store
Thumbs.db
# agent build ignore
/agent/
# rust ignore
*.lock
.factorypath
# Private individual user cursor rules
.cursor/rules/_*.mdc
================================================
FILE: .gitpod.Dockerfile
================================================
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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.
FROM gitpod/workspace-full
USER gitpod
RUN bash -c ". /home/gitpod/.sdkman/bin/sdkman-init.sh && \
sdk install java 17.0.3-ms && \
sdk default java 17.0.3-ms"
================================================
FILE: .gitpod.yml
================================================
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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.
image:
file: .gitpod.Dockerfile
additionalRepositories:
- url: https://github.com/apache/shenyu-dashboard.git
checkoutLocation: frontend
tasks:
- name: Run backend
before: cd ./shenyu-admin
command: |
gp sync-await setup-backend
mvn spring-boot:run
- name: Run frontend
before: cd ../frontend
command: |
gp sync-await setup-frontend && gp ports await 9095
npm start
openMode: split-right
- name: Setup backend
init: |
mvn clean install -DskipTests
command: |
gp sync-done setup-backend
exit 0
- name: Setup frontend
before: cd ../frontend
init: |
npm install
command: |
gp sync-done setup-frontend
exit 0
openMode: split-right
vscode:
extensions:
- vscjava.vscode-java-pack
- editorconfig.editorconfig
- dbaeumer.vscode-eslint
- stylelint.vscode-stylelint
- DavidAnson.vscode-markdownlint
- ms-azuretools.vscode-docker
- cweijan.vscode-database-client2
- GitHub.vscode-pull-request-github
ports:
- port: 9095
onOpen: ignore
================================================
FILE: .idea/vcs.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>
================================================
FILE: .licenserc.yaml
================================================
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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.
#
header:
license:
spdx-id: Apache-2.0
copyright-owner: Apache Software Foundation
paths-ignore:
- '**/target/**'
- '**/logs/**'
- '**/*.log'
- '**/*.tar.gz'
- '**/spring.factories'
- '**/spring.provides'
- '/script/**'
- '**/*.json'
- '**/*.iml'
- '**/.idea/**'
- '**/*.classpath'
- '**/.project'
- '**/.settings/**'
- '**/dependency-reduced-pom.xml'
- '**/.gitignore'
- '**/.gitmodules'
- '**/.git/**'
- '**/.gitpod.Dockerfile'
- '**/.gitpod.yml'
- '**/.travis.yml'
- '**/.codecov.yml'
- '**/.mvn/jvm.config'
- '**/.mvn/wrapper/maven-wrapper.properties'
- '**/.github/**'
- '**/*.md'
- '**/*.MD'
- '**/*.txt'
- '**/docs/**'
- '**/.babelrc'
- '**/.editorconfig'
- '**/.eslintignore'
- '**/assets/**'
- '**/dist/**'
- '**/etc/**'
- '**/node/**'
- '**/node_modules/**'
- '**/test/coverage/**'
- '.mvn'
- 'shenyu-dist'
- 'shenyu-dashboard'
- 'licenses'
- 'LICENSE'
- 'NOTICE'
- '**/static/**'
comment: on-failure
================================================
FILE: .mvn/wrapper/maven-wrapper.properties
================================================
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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.
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar
================================================
FILE: .prowlabels.yaml
================================================
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
area:
- core
- observability
- networking
- bench
- environment
- docs
- infra
- db
- data-sync
- admin
- testing
- community
priority:
- P0
- P1
- P2
================================================
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.
=======================================================================
Apache ShenYu Subcomponents:
The Apache ShenYu project contains subcomponents with separate copyright
notices and license terms. Your use of the source code for these
subcomponents is subject to the terms and conditions of the following
licenses.
========================================================================
Apache 2.0 licenses
========================================================================
The following components are provided under the Apache License. See project link for details.
The text of each license is the standard Apache 2.0 license.
Maven Wrapper(mvnw, mvnw.cmd files in root path), https://github.com/apache/maven-wrapper Apache 2.0
================================================
FILE: MATURITY.md
================================================
# Maturity Assessment for Apache ShenYu
The [Apache Project Maturity Model](https://community.apache.org/apache-way/apache-project-maturity-model.html) provides a suggested framework for evaluating the overall maturity of an Apache project community and the codebase that it maintains.
All the items of the mode are updated to the latest status of the project in the following table.
**CODE**
| **ID** | **Description** | **Status** |
|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|
| **CD10** | The project produces Open Source software for distribution to the public, at no charge. | **YES.** |
| **CD20** | Anyone can easily discover and access the project's code. | **YES.** |
| **CD30** | Anyone using standard, widely-available tools, can build the code in a reproducible way. | **YES.** |
| **CD40** | The full history of the project's code is available via a source code control system, in a way that allows anyone to recreate any released version. | **YES.** |
| **CD50** | The source code control system establishes the provenance of each line of code in a reliable way, based on strong authentication of the committer. When third parties contribute code, commit messages provide reliable information about the code provenance. | **YES.** |
**Licenses and Copyright**
| **ID** | **Description** | **Status** |
|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|
| **LC10** | The Apache License, version 2.0, covers the released code. | **YES.** |
| **LC20** | Libraries that are mandatory dependencies of the project's code do not create more restrictions than the Apache License does. | **YES.** |
| **LC30** | The libraries mentioned in LC20 are available as Open Source software. | **YES.** |
| **LC40** | Committers are bound by an Individual Contributor Agreement (the "Apache iCLA") that defines which code they may commit and how they need to identify code that is not their own. | **YES.** |
| **LC50** | The project clearly defines and documents the copyright ownership of everything that the project produces. | **YES.** |
**Releases**
| **ID** | **Description** | **Status** |
|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|
| **RE10** | Releases consist of source code, distributed using standard and open archive formats that are expected to stay readable in the long term. | **YES.** |
| **RE20** | The project's PMC (Project Management Committee, see CS10) approves each software release in order to make the release an act of the Foundation. | **YES.** |
| **RE30** | Releases are signed and/or distributed along with digests that anyone can reliably use to validate the downloaded archives. | **YES.** |
| **RE40** | The project can distribute convenience binaries alongside source code, but they are not Apache Releases, they are provided with no guarantee. | **YES.** |
| **RE50** | The project documents a repeatable release process so that someone new to the project can independently generate the complete set of artifacts required for a release. | **YES.** |
**Quality**
| **ID** | **Description** | **Status** |
|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|
| **QU10** | The project is open and honest about the quality of its code. Various levels of quality and maturity for various modules are natural and acceptable as long as they are clearly communicated. | **YES.** |
| **QU20** | The project puts a very high priority on producing secure software. | **YES.** |
| **QU30** | The project provides a well-documented, secure and private channel to report security issues, along with a documented way of responding to them. | **YES.** |
| **QU40** | The project puts a high priority on backwards compatibility and aims to document any incompatible changes and provide tools and documentation to help users transition to new features. | **YES.** |
| **QU50** | The project strives to respond to documented bug reports in a timely manner. | **YES.** |
**Community**
| **ID** | **Description** | **Status** |
|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|
| **CO10** | The project has a well-known homepage that points to all the information required to operate according to this maturity model. | **YES.** |
| **CO20** | The community welcomes contributions from anyone who acts in good faith and in a respectful manner, and who adds value to the project. | **YES.** |
| **CO30** | Contributions include source code, documentation, constructive bug reports, constructive discussions, marketing and generally anything that adds value to the project. | **YES.** |
| **CO40** | The community strives to be meritocratic and gives more rights and responsibilities to contributors who, over time, add value to the project. | **YES.** |
| **CO50** | The project documents how contributors can earn more rights such as commit access or decision power, and applies these principles consistently. | **YES.** |
| **CO60** | The community operates based on consensus of its members (see CS10) who have decision power. Dictators, benevolent or not, are not welcome in Apache projects. | **YES.** |
| **CO70** | The project strives to answer user questions in a timely manner. | **YES.** |
**Consensus**
| **ID** | **Description** | **Status** |
|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|
| **CS10** | The project maintains a public list of its contributors who have decision power. The project's PMC (Project Management Committee) consists of those contributors. | **YES.** |
| **CS20** | Decisions require a consensus among PMC members and are documented on the project's main communications channel. The PMC takes community opinions into account, but the PMC has the final word. | **YES.** |
| **CS30** | The project uses documented voting rules to build consensus when discussion is not sufficient. | **YES.** |
| **CS40** | In Apache projects, vetoes are only valid for code commits. The person exercising the veto must justify it with a technical explanation, as per the Apache voting rules defined in CS30. | **YES.** |
| **CS50** | All "important" discussions happen asynchronously in written form on the project's main communications channel. Offline, face-to-face or private discussions that affect the project are also documented on that channel. | **YES.** |
**Independence**
| **ID** | **Description** | **Status** |
|----------|------------------------------------------------------------------------------------------|------------|
| **IN10** | The project is independent from any corporate or organizational influence. | **YES.** |
| **IN20** | Contributors act as themselves, not as representatives of a corporation or organization. | **YES.** |
================================================
FILE: Makefile
================================================
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
SHENYU_HOME := "."
VERSION ?= "2.7.1-SNAPSHOT"
REGISTRY ?= "docker.io"
REPOSITORY_PREF ?= "apache/shenyu"
ADMIN_REPOSITORY ?= "${REPOSITORY_PREF}-admin"
BOOTSTRAP_REPOSITORY ?= "${REPOSITORY_PREF}-bootstrap"
TAG ?= latest
COMMIT_ID := $(shell git rev-parse HEAD)
default: build-all-image
build-all: build-admin build-bootstrap
@echo "build all"
build-admin:
@echo "build admin"
@${SHENYU_HOME}/mvnw -am \
-pl shenyu-dist/shenyu-admin-dist \
-Dmaven.javadoc.skip=true \
-Drat.skip=true \
-Djacoco.skip=true \
-DskipTests \
-Prelease \
clean package
build-bootstrap:
@echo "build bootstrap"
@${SHENYU_HOME}/mvnw -am \
-pl shenyu-dist/shenyu-bootstrap-dist \
-Dmaven.javadoc.skip=true \
-Drat.skip=true \
-Djacoco.skip=true \
-DskipTests \
-Prelease \
clean package
build-all-image: build-admin-image build-bootstrap-image ## build images on local, does not support multi platforms.
@echo "build images"
build-admin-image: build-admin ## build admin image for local
@echo "build admin image"
@docker buildx build --load \
-t ${REGISTRY}/${ADMIN_REPOSITORY}:${TAG} \
-f ${SHENYU_HOME}/shenyu-dist/shenyu-admin-dist/docker/Dockerfile \
--build-arg APP_NAME=apache-shenyu-${VERSION}-admin-bin \
--label "commit.id=${COMMIT_ID}" \
${SHENYU_HOME}/shenyu-dist/shenyu-admin-dist
build-bootstrap-image: build-bootstrap ## build bootstrap image for local
@echo "build bootstrap image"
@docker buildx build --load \
-t ${REGISTRY}/${BOOTSTRAP_REPOSITORY}:${TAG} \
-f ${SHENYU_HOME}/shenyu-dist/shenyu-bootstrap-dist/docker/Dockerfile \
--build-arg APP_NAME=apache-shenyu-${VERSION}-bootstrap-bin \
--label "commit.id=${COMMIT_ID}" \
${SHENYU_HOME}/shenyu-dist/shenyu-bootstrap-dist
publish-all-images: init publish-admin-image publish-bootstrap-image ## build and publish images on buildx, for producing multi platform images
@docker buildx rm shenyu
.PHONY: init
init:
@docker buildx create --name shenyu
@docker buildx use shenyu
publish-admin-image: build-admin
@echo "build and push admin image"
@docker buildx build --push \
--platform=linux/arm64,linux/amd64 \
-t ${REGISTRY}/${ADMIN_REPOSITORY}:latest \
-t ${REGISTRY}/${ADMIN_REPOSITORY}:${VERSION} \
--build-arg APP_NAME=apache-shenyu-${VERSION}-admin-bin \
--label "commit.id=${COMMIT_ID}" \
-f ${SHENYU_HOME}/shenyu-dist/shenyu-admin-dist/docker/Dockerfile \
${SHENYU_HOME}/shenyu-dist/shenyu-admin-dist
publish-bootstrap-image: build-bootstrap
@echo "build and push bootstrap image"
@docker buildx build --push \
--platform=linux/arm64,linux/amd64 \
-t ${REGISTRY}/${BOOSTRAP_REPOSITORY}:latest \
-t ${REGISTRY}/${BOOSTRAP_REPOSITORY}:${VERSION} \
--build-arg APP_NAME=apache-shenyu-${VERSION}-bootstrap-bin \
--label "commit.id=${COMMIT_ID}" \
-f ${SHENYU_HOME}/shenyu-dist/shenyu-bootstrap-dist/docker/Dockerfile \
${SHENYU_HOME}/shenyu-dist/shenyu-bootstrap-dist
================================================
FILE: NOTICE
================================================
Apache ShenYu
Copyright 2021-2024 The Apache Software Foundation
This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).
================================================
FILE: README.md
================================================


<p align="center">
<strong>Scalable, High Performance, Responsive API Gateway Solution for all MicroServices</strong>
</p>
<p align="center">
<a href="https://shenyu.apache.org/">https://shenyu.apache.org/</a>
</p>
<p align="center">
<a href="https://shenyu.apache.org/docs/index" >
<img src="https://img.shields.io/badge/document-English-blue.svg" alt="EN docs" />
</a>
<a href="https://shenyu.apache.org/zh/docs/index">
<img src="https://img.shields.io/badge/文档-简体中文-blue.svg" alt="简体中文文档" />
</a>
</p>
<p align="center">
<a target="_blank" href="https://search.maven.org/search?q=g:org.apache.shenyu%20AND%20a:shenyu">
<img src="https://img.shields.io/maven-central/v/org.apache.shenyu/shenyu.svg?label=maven%20central" />
</a>
<a target="_blank" href="https://github.com/apache/shenyu/blob/master/LICENSE">
<img src="https://img.shields.io/badge/License-Apache%202.0-blue.svg?label=license" />
</a>
<a target="_blank" href="https://www.oracle.com/technetwork/java/javase/downloads/index.html">
<img src="https://img.shields.io/badge/JDK-17+-green.svg" />
</a>
<a target="_blank" href="https://github.com/apache/shenyu/actions">
<img src="https://github.com/apache/shenyu/workflows/ci/badge.svg" />
</a>
<a target="_blank" href='https://github.com/apache/shenyu'>
<img src="https://img.shields.io/github/forks/apache/shenyu.svg" alt="github forks"/>
</a>
<a target="_blank" href='https://github.com/apache/shenyu'>
<img src="https://img.shields.io/github/stars/apache/shenyu.svg" alt="github stars"/>
</a>
<a target="_blank" href='https://github.com/apache/shenyu'>
<img src="https://img.shields.io/github/contributors/apache/shenyu.svg" alt="github contributors"/>
</a>
<a target="_blank" href="https://codecov.io/gh/apache/shenyu">
<img src="https://codecov.io/gh/apache/shenyu/branch/master/graph/badge.svg" />
</a>
<a target="_blank" href="https://hub.docker.com/r/apache/shenyu-bootstrap/tags">
<image src="https://img.shields.io/docker/pulls/apache/shenyu-bootstrap" alt="Docker Pulls"/>
</a>
<a target="_blank" href="https://gitpod.io/#https://github.com/apache/shenyu">
<image src="https://img.shields.io/badge/Contribute%20with-Gitpod-908a85?logo=gitpod&color=green"/>
</a>
<a target="_blank" href="https://deepwiki.com/apache/shenyu">
<img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki">
</a>
</p>
<br/>
---
# Architecture

----
# Why named Apache ShenYu
ShenYu (神禹) is the honorific name of Chinese ancient monarch Xia Yu (also known in later times as Da Yu),
who left behind the touching story of the three times he crossed the Yellow River for the benefit of the people and successfully managed the flooding of the river.
He is known as one of the three greatest kings of ancient China, along with Yao and Shun.
* Firstly, the name ShenYu is to promote the traditional virtues of our Chinese civilisation.
* Secondly, the most important thing about the gateway is the governance of the traffic.
* Finally, the community will do things in a fair, just, open and meritocratic way, paying tribute to ShenYu while also conforming to the Apache Way.
---
# Features
* Proxy: Support for Apache® Dubbo™, Spring Cloud, gRPC, Motan, SOFA, TARS, WebSocket, MQTT
* Security: Sign, OAuth 2.0, JSON Web Tokens, WAF plugin
* API governance: Request, response, parameter mapping, Hystrix, RateLimiter plugin
* Observability: Tracing, metrics, logging plugin
* Dashboard: Dynamic traffic control, visual backend for user menu permissions
* Extensions: Plugin hot-swapping, dynamic loading
* Cluster: NGINX, Docker, Kubernetes
* Language: provides .NET, Python, Go, Java client for API register
---
# Quick Start (docker)
### Create network for Shenyu
```
> docker network create shenyu
```
### Run Apache ShenYu Admin
```
> docker pull apache/shenyu-admin
> docker run -d --name shenyu-admin-quickstart -p 9095:9095 --net shenyu apache/shenyu-admin
```
### Run Apache ShenYu Bootstrap
```
> docker pull apache/shenyu-bootstrap
> docker run -d --name shenyu-quickstart -p 9195:9195 -e "shenyu.local.enabled=true" -e SHENYU_SYNC_WEBSOCKET_URLS=ws://shenyu-admin-quickstart:9095/websocket --net shenyu apache/shenyu-bootstrap
```
### Set router
* Real request :http://127.0.0.1:8080/helloworld,
```json
{
"name" : "Shenyu",
"data" : "hello world"
}
```
* Set routing rules (Standalone)
Add `localKey: 123456` to Headers. If you need to customize the localKey, you can use the sha512 tool to generate the key based on plaintext and update the `shenyu.local.sha512Key` property.
```
curl --location --request POST 'http://localhost:9195/shenyu/plugin/selectorAndRules' \
--header 'Content-Type: application/json' \
--header 'localKey: 123456' \
--data-raw '{
"pluginName": "divide",
"selectorHandler": "[{\"upstreamUrl\":\"127.0.0.1:8080\"}]",
"conditionDataList": [{
"paramType": "uri",
"operator": "match",
"paramValue": "/**"
}],
"ruleDataList": [{
"ruleHandler": "{\"loadBalance\":\"random\"}",
"conditionDataList": [{
"paramType": "uri",
"operator": "match",
"paramValue": "/**"
}]
}]
}'
```
> If the backend service handling the request is running on your host machine, please set `upstreamUrl` to `host.docker.internal:8080` or specify IP address if reachable from the container in the above command.
>
> Add `--network host` to docker run command instead of `--net shenyu` also works correctly.
* Proxy request :http://localhost:9195/helloworld
```json
{
"name" : "Shenyu",
"data" : "hello world"
}
```
---
# Plugin
Whenever a request comes in, Apache ShenYu will execute it by all enabled plugins through the chain of responsibility.
As the heart of Apache ShenYu, plugins are extensible and hot-pluggable.
Different plugins do different things.
Of course, users can also customize plugins to meet their own needs.
If you want to customize, see [custom-plugin](https://shenyu.apache.org/docs/developer/custom-plugin/) .
---
# Selector & Rule
According to your HTTP request headers, selectors and rules are used to route your requests.
Selector is your first route, It is coarser grained, for example, at the module level.
Rule is your second route and what do you think your request should do. For example a method level in a module.
The selector and the rule match only once, and the match is returned. So the coarsest granularity should be sorted last.
---
# Data Caching & Data Sync
Since all data have been cached using ConcurrentHashMap in the JVM, it's very fast.
Apache ShenYu dynamically updates the cache by listening to the ZooKeeper node (or WebSocket push, HTTP long polling) when the user changes configuration information in the background management.


---
# Prerequisite
* JDK 17+
---
# Stargazers over time
[](https://starchart.cc/apache/shenyu.svg)
---
# Contributor and Support
* [How to Contribute](https://shenyu.apache.org/community/contributor-guide)
* [Mailing Lists](mailto:dev@shenyu.apache.org)
---
# Known Users
In order of registration, More access companies are welcome to register at [https://github.com/apache/shenyu/issues/68](https://github.com/apache/shenyu/issues/68) (For open source users only) .
All Users : [Known Users](https://shenyu.apache.org/community/user-registration)
================================================
FILE: RELEASE-NOTES.md
================================================
## [v2.7.0]- 2024-12-23
### ✨ New Features
1. Upgrade dockerfile java runtime version 8 to 17
2. Upgrade SpringBoot to 3.x
3. Support ShenYu Admin Cluster
4. Upgrade checkstyle plugin to 3.4.0
5. Datasource support OceanBase
6. Supports batch modification of selector/rule status
7. Supports batch modification of PathAuth status
8. Upgrade apache dubbo version
9. Support `Contribute with Gitpod`
10. Support Configs Export And Import
11. Add shenyu client heartbeat
12. Support Namespace
13. Support k8s dynamically scale
14. Invalidate Previous Tokens on New Login by Implementing Client ID Validation
15. Support for gray release in divide-plugin
16. Support Kubernetes registry
17. Add shenyu-plugin-wasm
### ⚡Enhancement
1. Add rocketmq logging e2e test
2. Enhance metrics-ratelimiter collect
3. Enhance metrics collection for Sentinel, Resilience4j, and Hystrix
4. Arrange sofa common tools dependencies
5. Remove expired comments
6. Add missing license
7. Set up callback for send message on Kafka
8. Use the loadbalance configuration from metadata for Dubbo
9. Add non null validation for upstream which obtained from select
10. Set timeout which from rule handle to dubbo rpc context
11. Publish event when enable selector and rule
12. Remove closed session from the NAMESPACE_SESSION_MAP
13. Add test case for ShenyuClientURIExecutorSubscriber
14. Add test case for `ShenyuClientIllegalArgumentException`
15. Add test case for `ShenyuClientRegisterEventPublisher`
16. Add test case for `ShenyuClientMetadataExecutorSubscriber`
17. Add test case for `AbstractWasmPluginDataHandler`
18. Add test case for `ShenyuClientRegisterRepositoryFactoryTest`
19. Add test case for `AbstractWasmDiscoveryHandler`
20. Upgrade sofa rpc version support
21. Add header key of Sign plugin to CrossFilter config
22. Encrypt the password
23. Add AbstractShenyuWasmPluginTest
24. RewritePlugin/ContextPathPlugin supports across application and plugin
25. Remove duplicate path check
26. Remove Alibaba Dubbo Support
27. Support docker env set http path
28. Add some code refactor improve
29. Support get token from cookie\header\param
30. Make the default value of ShenyuDubboService annotation equal to that of DubboService annotation
31. Add db script into admin package
32. Get rid of the dead code and add some improvements
33. MotanServiceEventListenerTest case optimization
34. Delete duplicate maven in shenyu-registry-eureka.xml
35. Jwt dependency updated
36. Print plugin execute time
37. Discovery Local support upstream health check in Admin
38. Close rule cache
39. Less concurrency
40. Optimize logic to avoid "orElse" execution,Update VersionTwoExtractor.java
### ♻️Refactor
1. Admin distributed lock by spring-integration-jdbc
2. Refactor beanUtils
3. Remove macos ci
4. Update logging plugin DataBuffer deprecated method
5. Modify e2e k8s to docker compose
6. Migrate Admin swagger from springfox to springdoc
7. Refactor springcloud plugin
8. Refactor some code
9. Delete SO_SNDBUF & SO_RCVBUF
10. Refactor shenyu-sync-data-http : replace log %s -> {}.
11. Optimizing the node type listener
12. Refactor plugin lifecycle
13. Adjust code order and remove invalid input parameters
### 🐛Bug Fix
1. Fix duplicate header for request plugin
2. Fix proxy.selector and discovery not delete when delete divide selector
3. Fix LoggingPlugin error log catch
4. Fix logging plugin sample bug
5. Fix memory overflow
6. Fix rewrite integrated test
7. Fix AbstractWasmPluginDataHandlerTest
8. Fix missing PRIMARY KEY in sql-script/h2/schema.sql
9. Fix Data dictionary page data sorting exception
10. FIx doc error
11. Resolve dashboard routing mismatch post context-path update
12. Fix etcd sync config problem
13. Fix consul sync problem
14. Fix the bug of being unable to query without registration
15. Fix Plugin Edit Page Issue by Correcting Plugin ID Query and Updating Data Type
16. Fix class AdminConstants has word spelling error
17. Fix shenyu-examples-springmvc start failed
18. Fix dashboard menu children sort not working problem
19. Fix ShenyuApacheDubboXmlProviderApplication config
20. Fix data sync dataId for proxy selector and discovery is not unique
21. Filter disable dict option
22. Fix SpringCloudParser MetaData null data
23. Fix client register validation
24. Config dubbo serialize-check-status=DISABLE
25. Fix example TestApacheDubboXmlApplication start failed
26. Fix the nacos data sync model missing the contextPath configuration
27. Fix SPI create non singleton objects in multi-threaded scenarios
28. Fix BadSqlGrammarException
29. Fix some word typo error
30. Fix ListUtil->merge exception
31. Fix metaData disable not filtered
32. Fix divide logging request method
33. Fix e2e chunk header error
34. Fix cookie error and sql check
35. Fixed NPE issue
36. Fix Invalid path error
37. Fix hot load issue
38. Fix e2e test case can not run wget command
39. Fix fallback issue
40. Fix some ci bugs
41. Resolve the sql error in rule-sqlmap.xml
42. Fix readYmlBuildRepository NPE
43. Fix nacos cannot be registered in the Shenyu-examples-SpringCloud project
44. Fix springCloud ruleData path setting didn't used
45. Fix shenyu-plugin-logging-elasticsearch : modify setIndexName of ElasticSearchLogConfig
46. Fix Not first offline from the gateway when stopping service
47. Fix k8s liveness probe can not run wget command error
48. Fix AbstractNodeDataSyncService load discoverUpstream on startup
## 2.6.1
### New Features
1. Add dubbo annotation analysis for shenyu ingress controller
2. Support plugin lifecycle
3. Support shenyu-sdk-client by openFeign
4. Adding a Motan plugin and Spring Cloud to shenyu ingress-controller
5. Support alert notice
6. Shenyu client add discovery register center
7. Add shenyu context-path plugin ingress controller
8. Add shenyu grpc plugin ingress controller
9. Add shenyu sofa ingress controller
10. Add nacos, etcd, eureka as discovery service
11. Add new plugin: basic-auth
12. Add shenyu logging-rabbitmq plugin
13. Binding selector by shenyu-discovery
### API Changes
1. Refactor shenyu sync data data structure
```
plugin.list ["plugin.sign", "plugin.dubbo", "plugin.pluginName"]
-> plugin.sign
-> plugin.dubbo
-> plugin.pluginName
examples data:
selector.key1.list ["selector.key1.value1", "selector.key1.value2", "selector.key1.value3"]
-> selector.key1.value1
-> selector.key1.value2
-> selector.key1.value3
selector.key2.list ["selector.key2.value1", "selector.key2.value2", "selector.key2.value3"]
-> selector.key2.value4
-> selector.key2.value5
-> selector.key2.value6
```
2. Support NettyClient as default httpclient
3. Refactor admin-listener to support admin data sync
4. Remove brpc supports including brpc plugin, brpc example, brpc integrated test
5. Remove Apollo dependency to support Java 17(add jar by yourself)
6. Remove shenyu middleware register client
### Enhancement
1. Add test cases for shenyu model event
2. Add selector event test cases
3. Add motan e2e test cases
4. Support the motan protocol
5. Add Grpc e2e test cases
6. Bump apache-rat-plugin to 0.15
7. Support String isBlank in match condition
8. Clickhouse support ttl field
9. Support HttpUtils log level
10. Add unit test for Ingress Reconciler
11. Support checksum when packing distribution
12. Implement zero-copy in TCP plugin
13. shenyu-client-springmvc supports default appName and contextPath
14. Add sdk-feign example and integrated test case
15. ElasticSearch logging support for custom index
16. Enhance grpc plugin to support shenyu loadbalancer
17. Support http2 upstream server
18. Enhance Dubbo plugin support shenyu loadbalancer
19. Add ingress-controller integration springCloud test case
20. Add WebSocket plugin proxy ping configuration
21. Add ingress-controller integration websocket test
22. RewritePlugin supports percentage
23. Admin use discovery config init discovery-service
24. Divide plugin adapt shenyu discovery
25. Alert report support config admin cluster multi servers
26. WebSocket plugin adapt shenyu discovery
27. Register service instance into discovery
28. Admin adapter discovery local mode
29. Add test case for ShenYu sdk core
30. Add unit test for shenyu-discovery
31. Add opengauss e2e test case
32. Add upload plugin jar size limit
33. Add unit test for shenyu-client-spring-websocket
34. Upgrade Shiro version to a secure version(1.18.0)
35. Update license and upgrade springboot(2.7.17)
36. Send alarm message when gateway global error happen
37. Add EurekaDiscoveryService unit test
### Refactor
1. Refactor 2.6.1 version(pom.xml)
2. Simplify Map operations by computeIfAbsent
3. Refactor polaris test cases
4. Migrate Maven Wrapper from io.takari to official release
5. Use compiled Pattern in WebClientMessageWriter
6. Refactor HttpUtils request method
7. Update github action version
8. Refactor Sync data center abstract template method
9. Update MenuProject, MenuModule, MenuDocItem to VO
10. Unified dubbo version
11. Refactor Httpclient's package
12. Refactor github ci action cache
13. Refactor motan pojo as rpc method parameter
14. Upgrade Kafka client version to 3.4.0
15. Migrate Admin swagger from springfox to springdoc
16. Upgrade Dubbo version to 3.2.5 and refactor some methods
17. Refactor AbstractShenyuSdkClient getOrDefault method
18. Refactor http client properties
19. Refactor webclient plugin implement
20. Upgrade com.google.guava:guava to 32.0.0-jre
21. support k8s as e2e test case environment
22. Refactor @Restapi as rest api request mapping
23. String concatenation recommended using StringBuilder
24. Set the netty allocator to unpooled
25. Refactor startup banner
26. Removing duplicate code and extracting the same code for common use
27. Standardized null detection coding
28. Refactor log plugin selector handler
29. Refactor plugin classloader
30. Refactor Logging plugin to support sampleRate at plugin level
31. Refactor context-path register to avoid repeat context-path(use select for update)
### Bug Fix
1. Avoid the permanent overhead of creating TimeoutException
2. Fix example module main class path
3. Fix plugin page sorting bug
4. Update Makefile SNAPSHOT version
5. Fix typo in RELEASE-NOTES.md
6. Fix the error package name of shenyu-example
7. Fix password rules, add special characters '#' and '.'
8. Fix health check for zookeeper:3.8.0 in e2e
9. Fix unstable ci check
10. Add e2e WaitForHelper exception log
11. Fix springcloud plugin can't get scheme
12. Fix javadoc build errors
13. Fix the wrong request type in HttpUtils
14. Fix userId can not update success when update auth
15. Fix thread leak in TCP plugin
16. Format "Quick start" part in shenyu-integrated-test/README
17. Fix SQL script error
18. Fix uri plugin path error and change path to rawpath
19. Fix WebSocket plugin to support rewrite plugin
20. Fix indexName not working for es-logging
21. Fix the error of context-path plugin
22. Fix shenyu-admin cpu surge
23. Fix alert localDateTime format problem
24. shenyu-client persist ApiDoc error retry
25. Fix applicationContextAware initialization too late
26. Fix duplicate response header
27. Set the maximum time to wait for the k8s cluster to start up
28. Fix type for status field for clickhouse log plugin
29. Fix response plugin memory leak
30. Fix dataType contrast error
31. Fix http data sync error
32. Fix spelling error
33. Fix shenyu-dubbo register status
34. Fix buildDiscoveryUpstreamPath causing multiple `/`
35. Fix bug when registering with Eureka through EurekaInstanceRegisterRepository#persistInstance
36. Fix AbstractLogPluginDataHandler hashcode error
37. Fix Ratelimit plugin key error in redis cluster mode
38. Fix multi shenyu client register repeat context path
39. Fix shenyu can't load ext plugin after close the plugin
40. Fix upload plugin jar bug in shenyu admin
41. Fix plugin can not load resource path file
42. Fix Admin script to show dictionary code
43. Fix authorization conflict in sign plugin
44. Fix sign plugin context path match error
## 2.6.0
### New Features
1. Support shenyu-admin expose prometheus metrics
2. Add shenyu Level-1 cache and Level-2 cache
3. Save extend plugin jar to shenyu admin
4. Support shenyu upload plugin hot load in gateway
5. Support apollo sync data and register data
6. Initializes client information collection
7. Support spring-boot-client auto config in shenyu client
8. Add TCP plugin
9. Super admin forces password change
10. Spring-mvc(boot) client support collect api-meta
11. Add zookeeper discovery sync
12. Initializes Shenyu ingress controller
13. Add discovery upstream and proxy selector proxy
14. Expose shenyu actuator endpoint
15. Add naocs discovery sync
16. Add apollo discovery sync
17. Add HttpLongPolling discovery sync
18. Add consul discovery sync
19. Add huawei cloud lts logging plugin
20. Support openGauss database for shenyu admin
21. Support polaris config sync and register center
### API Changes
### Enhancement
1. Add tags for shenyu api doc client
2. Add brpc integrated test
3. Brpc support shared thread pool
4. Add mapType to cryptor request and response plugin
5. Crypto plugin supports multi field names
6. Add p2c loadbalancer
7. Modify plugin jar to Base64-string in plugin data
8. Add shortest response load balancer
9. Add hash load balancer test case
10. Add DetailSerivice test case
11. Tolerant path slash for shenyu
12. Add shenyu-common enums test case
13. Add shenyu-common dto test case
14. Add shenyu-admin model test case
15. Add shenyu match cache test case
16. Support k8s probes
17. Add shenyu-admin service test case
18. Add document json data in api doc
19. The SPEL in the mock plugin is secure by default
20. Add test cases for ShenyuClientApiDocExecutorSubscriber
21. Add test case for shenyu-client-sofa module
22. Add tag relation for shenyu api doc
23. Support shenyu admin, bootstrap service stop script bat in windows
24. Add test case for ShenyuSdkClientFactory
25. Add websocket synchronization method for e2e-springcloud
26. Support divide plugin active offline
27. Add springcloud service instance cache
28. Change password support i18n
29. Add websocket sync for shenyu discovery
30. Update springboot to 2.7.13
31. Add other syn method e2e-spring-cloud
32. Add api doc client generated annotation attribute
33. Update zookeeper client register repository active offline
34. Update apollo client register repository active offline
35. Storage adjustment for swagger type API documents, change from local cache to database
36. Support nacos client offline
37. Add e2e alibaba dubbo test case
38. Add e2e apache dubbo test case
39. Add shenyu-spring-sdk test cases
40. Add e2e sofa test cases
41. Add apollo config sync test case
42. Add database connection pool
43. Add idea icon for shenyu project
### Refactor
1. Optimize shenyu-admin
2. Refactor least active balance algorithm
3. Optimized version-one for sign-plugin
4. Optimize upstream check service
5. Resolve shenyu project global version
6. Refactor ShenyuConsulConfigWatch code
7. Refactor shenyu trie codes
8. Check uri condition of rule when saving
9. Optimize shenyu-client code for shenyu-client-websocket
10. Add license for admin dependency micrometer
11. Update maven-assembly-plugin to 3.5.0
12. Optimize global plugin sorting
13. Use BearerToken replace StatelessToken in shenyu-admin
14. Refactor shenyu-logging module
15. Add validation for api doc
16. Optimize Trie code and improve wildcard * supporting
17. Refactor the custom plugin support hot load
18. Refactor ShenyuWebHandler putPlugin methods
19. Refactor Shenyu webfilter
20. Reactor oauth2 plugin
21. Refactor shenyu selector data continued field
22. Refactor shenyu selector and rule cache
23. Removed unused generics in shenyu client
24. Refactor shenyu-plugin-sentinel plugin
25. Refactor cache and add endpoint to expose cache
26. Refactor checkUserPassword, not print known error log when startup
27. Add some parameters for log
28. Refactor shenyu global exception handler
29. Add shenyu upload plugin integrated test case
30. Optimize some syntactic sugar
31. Change discovery_upstream discovery_handler_id
32. Refactor shenyu global exception handlers
33. Refactor shenyu plugin module
34. Refactor AlibabaDubboConfigCache
35. Remove hutool from dependency
36. Refactor ShenyuClientShutdownHook
37. Extractor add BaseAnnotationApiBeansExtractor
38. Support multi-client registration
39. Refactor shenyu-e2e support shenyu check style
40. Refactor shenyu client register base
41. Add domain test for shenyu divide plugin
42. Update other rpc_ext for the same service
43. Optimize consul connect operation
44. Refactor shenyu e2e springcloud yaml change
45. Add integrated test for k8s ingress controller
46. Split the document field of the apidoc detail interface,and add fields such as requestHeaders and responseParameters
47. Add swagger sample project to test the relevant functionality of the API documentation
48. Optimize the display of form fields in json format
49. Refactor shenyu log observability
50. Add bootstrap start log
51. Refactor api document for swagger
52. Upgrade grpc version to 1.53.0
53. Refactor api meta data process function
54. polish master code and pom
### Bug Fix
1. Smart h2 path
2. Fix crypto-response plugin
3. Fix jdk8 Map computeIfAbsent performance bug
4. Fix zombieRemovalTimes code
5. Fix the upgraded sql file
6. Remove detectOfflineLinks tag
7. Ignore flattened-pom
8. Fix LOG invoke method
9. Fix NPE for shenyu-example-springcloud with nacos
10. Fix shenyu-admin names for arguement of type
11. Fix loadbalance spi resource
12. Fix sql script error
13. Fix to 24-hour format and timeZone for jackson
14. Fix JwtUtils error
15. Fix dubbo invoker cache bug
16. Fix missing HOST delete operation
17. Fix SpringMvcClientEventListener test case
18. Fix pass update PENDING_SYNC for zombie
19. Fix Memory leak
20. Fix rule query failed because there are too many rules
21. Fix missing actuator dependency and port error in examples http
22. Fix UpstreamCheckUtils http and https
23. Fix FileFilter make memory leak
24. Fix zookeeper sync error
25. Fix MemorySafeWindowTinyLFUMap memory leak error
26. Fix lack separator of path of ApiDoc
27. Fix NPE for shenyu trie
28. Fix plugin skip error
29. Fix oracle sql error
30. Fix shenyu icon can't load in shenyu admin
31. Fix hystrix fallback bug
32. Fix warm up time for divide and springcloud
33. Fix springcloud service chooser
34. Fix shenyu-spring-boot-starter-plugin-mock add spring.factories
35. Fix shenyu-client-mvc and shenyu-client-springcloud lose ip
36. Fix empty rule data and selector data in cache
37. Fix api document module update api detail error
38. Fix get topic from config in KafkaLogCollectClient
39. Fix logging console thread safety
40. Fix brpc integration testing response size
41. Fix selector update gray remove cache for plugn-dubbo-common
42. Fix shenyu admin menu name bug
43. Fix shenyu admin cannot configure consul port
44. Fix shenyu client metadata and uri cannot sync to admin with apollo
45. Fix PathVariable annotation url cannot match
46. Fix could not update uri in PathPattern mode
47. Fix client shutdown method call twice
48. Fix shenyu mishandle consul configuration
49. Remove unused configuration from Request, modifyResponse plugin
50. Fix http registration metadata
51. Fix websocket lost the user-defined clost status
52. Fix consul register lose the prop of meta-path when special symbol
53. Fix etcd sync error
54. Fix admin sync error
55. Fix shenyu motan plugin execute error
## 2.5.1
### New Features
1. Add brpc example
2. Add spring boot starter plugin brpc&admin
3. Add brpc-plugin
4. Add shenyu-client-api-doc
5. Add sdk duplicate class check
6. Support diff nacos namespace
7. Add array method of expression in mock plugin
8. Support generation of mock data on request
9. Support user specify http request domain
10. Add MockRequestRecord
11. Development shenyu-register-instance-eureka
12. Support API document Api doc detail mapper
13. Add api doc ddl
14. Add TagMapper and TagRelationMapper
15. Add api and api_rule_relation mapper
16. Not config rule
17. Refactor message readers
18. Add sentinel rule handle parameter
19. Add shenyu-e2e test engine
20. Make an Apache Shenyu SSO authentication plugin based on casdoor
21. Add logging-tencent-cls plugin
22. Support clickhouse-logging-pugin
23. Add logging-pulsar plugin
24. Add new plugin: key-auth
25. Fix sign plugin DataBufferLimitException error
26. Fix context-path error
### API Changes
### Enhancement
1. Add simpler client annotations for motan
2. Add simpler client annotations for websocket
3. Add configuration in starter for motan plugin
4. Add convenience annotation for shenyu-client-springcloud and shenyu-client-springmvc
### Refactor
1. Refactor some code for mock request of api doc
2. Refactor logging-clickhouse
3. Polish maven dependencies of dubbo
4. Refactor sign plugin
5. Update ShenyuExtConfiguration
6. Remove unnecessary singleton
7. Fix generating mock data in multithreading
8. Refactor sdk test and processArgument
9. Refactor DefaultSignService
10. Fix shenyu-admin rule
11. Optimized ShaUtil
12. Fix cache too large
13. Fix ConcurrentModificationException
14. Fix sync data in etcd
15. Refactor shenyu sdk client
16. Optimize request timeout response
17. Refactor log module
18. Refactor shenyu-client-springcloud
19. Refactor MotanServiceEventListener
20. Refactor shenyu-admin sync data listener
21. Refactor shenyu-client-tars
22. Refactor client sdks alibaba dubbo
23. Refactor springmvc client
24. Refactor admin mapper config
25. Refactor shenyu-plugin-logging
26. Optimize random algorithm
27. Refactor random loadbalancer
28. Refactor logging-kafka
### Bug Fix
1. Remove redundant cookie setting
2. Fix appAuth delete
3. fix Cryptor-Request Plugin
4. To avoid load the same ext plugins repeatedly
5. Fix the TagRelationQuery
6. Fix upgrade sql
7. Fix Nacos register NPE
8. Fix sandbox json parsing
9. Prevent the first time from failing to load
10. Fix plugin update bug by modifying config field setter
11. Fix postgresql sql
12. Fix the postgresql error during ShenYu-Admin startup
13. Fix sentinel can't fuse
14. Fix TencentClsLogCollectClient
15. Fix change password error
16. Fix selector page
17. Fix request plugin can't replaceCookie
18. Fix RateLimiterPlugin concurrent handler error
## 2.5.0
### New Features
1. Add logging-aliyun-sls plugin
2. Add mock plugin
3. Add logging-es plugin
4. Add logging-rocketmq plugin
5. Add logging-kafka plugin
6. Add custom message writer in response plugin
7. Add record log in admin
8. Add apache dubbo http
9. Add nacos register
10. add the logic of annotation on the splicing class for sofa client
11. Add the logic of annotation on the splicing class for motan client
12. Add netty http server parameters
13. Add the logic of annotation on the splicing class for apache dubbo client
14. Add alert module
15. Add support configurable timeout for MotanPlugin
16. Add api document
17. Add user permissions Exclude admin
18. Add springBoot upgrade to 2.6.8
19. Add support register instance to consul
20. Add admin Support oracle database
### API Changes
### Enhancement
1. Enhancement cache plugin
2. Enhancement divide plugin
### Refactor
1. Refactor spring cloud loadbalancer
2. Refactor thread pool
3. Refactor max memory config logic
4. Refactor cors logic
5. Refactor selector match
6. Refactor fixed and elastic connection provider pool
7. Refactor uri register
8. Refactor zk client delete logic
9. Refactor IpUtils
10. Refactor result wrap
11. Refactor app auth
12. Refactor http client
13. Refactor proxy and webclient remove host
14. Refactor shared thread pool
### Bug Fix
1. Fix null pointer exception in divide plugin
2. Fix body maxInMemorySize
3. Fix admin delay update handle in selector
4. Fix register-client loop error
5. Fix the error of combination plugin
6. Fix sofa and websocket client lossless registration
7. Fix grpc client lossless registration
8. Fix springcloud client lossless registration
9. Fix spring cloud dubbo example
10. Fix NPE repair of admin module caused by spring MVC example synchronization
11. Fix curator version incompatible in bootstrap
12. Fix hidden logic bug
13. Fix failure to load local plugins
14. Fix pg script error
15. Fix hystrix-plugin tests failure
16. Fix client registration by consul only register 1 metadata
17. Fix websocket datasync can chose allow origin to avoid CSRF
## 2.4.3
### New Features
1. Add http register client retry.
2. Support octet-stream context-type.
3. Support redirecting to URIs outside of bootstrap and refactoring code.
4. Add local API authorization.
5. Support config dubbo consumer pool.
6. Support DividePlugin failover retry.
7. Support websocket client configuration.
8. Support config netty thread pool in HttpClient.
9. Support MemoryLimitedLinkedBlockingQueue.
10. Support alibaba dubbo plugin shared thread pool.
11. Support grpc plugin shared thread pool.
12. Add Metrics Plugin.
13. Add Cache Plugin.
14. Add logging rocketmq plugin.
### API Changes
### Enhancement
1. Test combination of Param mapping, Rewrite plugin,
2. Test combination of Param mapping and Redirect plugin.
3. Test combination of RateLimiter and Rewrite plugin.
4. Test combination of RateLimiter and Redirect plugin.
5. Test combination of Request and Redirect plugin.
6. Test combination of Request and Rewrite plugin.
7. Test combination of JWT and RateLimiter plugin.
8. Test combination of JWT and Redirect plugin.
9. Test combination of JWT and Rewrite plugin.
10. Add integrated test of Resilience4j plugin.
11. Add integrated test of Hystrix plugin.
12. Update junit4 to junit5.
13. Add shenyu-examples-springmvc-tomcat.
14. Optimize the password encryption.
15. Optimize and verify shenyu-admin module interface parameters.
16. Optimize the configurable Shenyu agent log collection.
17. Optimize code about data init when sync data.
18. Add unit test for LoggingRocketMQPlugin
### Refactor
1. Used Wheel-Timer instead of ScheduledExecutorService class.
2. Remove DisruptorProvider#onData(final Consumer<DataEvent> function)
3. Synchronized instance rather than class in MetadataExecutorSubscriber.
4. Refactor admin buildHandle about register uri.
5. Spring cloud client auto set port.
6. Refactor jwt support multi-level tokens.
7. Remove monitor plugin.
8. Change logback theme.
9. remove shenyu-agent.
### Bug Fix
1. Fix init CommonUpstreamUtils NPE.
2. Make a judgment on the failure of Nacos registration.
3. Fix NPE when login with non-existent user.
4. Fix double log.
5. Fix misspelled token.
6. Fix retryCount not work bug.
7. Fix token parse error.
8. Fix the trouble of big data in Websocket.
9. Fix NettyHttpClientPlugin did not retry when failed.
10. Fix CVE-2021-41303.
11. Fix judgment of the contains condition of all plugins does not work.
12. Fix http headers lose bug.
13. Fix Bug The Rewrite Plugin should support {PathVariable} request.
14. Fix Bug about data sync with Nacos.
15. Fix Nacos namespace config.
16. Fix NPE or websocket proxy fails when the context-path plug-in is opened.
17. Fix http registers the client plug-in port occupancy detection.
## 2.4.2
### New Features
1. Add Mqtt plugin
2. Add Shenyu-Agent module support observability
3. Add opentelemetry plugin on Shenyu-Agent module
4. Add jaeger plugin on Shenyu-Agent module
5. Add zipkin plugin on Shenyu-Agent module
6. Support Shenyu instance register by zookeeper
7. Support Shenyu response data custom format
8. Support https for upstream check
9. Add RpcContextPlugin to transmit header to rpc context
10. Support cluster model for dubbo plugin
11. Support Shenyu instance register by ETCD
### API Changes
1.Add configuration properties for HTTP synchronization data
2.Remove'/shenyu-client/**','/configs/**','/plugin'interface from the whitelist interface of Shenyu admin
### Enhancement
1. Optimize global error handler for flexible processing
2. Optimized the database access in the loop
3. Optimize result media type and reset response header
4. Enhancement crossfilter filter the same headers
5. Optimize shenyu context module data
6. Optimize dubbo plugin
7. Optimize admin db operation
8. Refactor Response and Cryptor plugin
9. Optimize Admin Resource Permission loader
10. Add authentication on shenyu admin when register by http
11. Optimize netty config.
12. Optimize SQL files for resource,permission
13. Add ExcludeOperatorJudge for selector and rule
14. Add docker-compose on Shenyu-dist
15. Enhance the ability of jwt plugin
### Refactor
1. Remove SpEL and Groovy plugins
2. Optimization prompt of ExtensionLoader
3. Add http client strategy property
4. Refactor shenyu client
### Bug Fix
1. Fix sentinel Plugin-exception number is not effective
2. Fix HttpClientProperties.javaresponseTimeout can not config in yaml
3. Fix Connection reset by peer Exception on webclient
4. Fix register metadata and uri order
5. Fix Admin when press the Add button
6. Fix Spi config
7. Support Dubbo Plugin Single Parameter Primitive Type
8. Fix using etcd cluster to sync data init failed
9. Fix Shiro get white list is null bug
10. Fix zookeeper sync error handling event bug
11. Fix modify-response-plugin and cryptor-response-plugin are used in combination, and no information is returned
12. Fix the bug of missing some field in cryptor rule handler using h2
## 2.4.1
### New Features
1. Support PostgreSQL for admin
1. Support dynamic loading plugin
1. Support local modification data mode
1. Add Websocket plugin
1. Add CryptorRequest plugin
1. Add CryptorResponse plugin
1. Support Grayscale Release for SpringCloud
1. Support Grayscale Release for Apache Dubbo
1. Implement the async dubbo invoking for alibaba-dubbo
1. Support external cross filter config
1. Support sign plugin custom dynamic sign provider
### API Changes
1. Refactor shenyu config in yaml
### Enhancement
1. Optimize code about dubbo async call
2. Add loadbalancer common module
3. Optimize sql init
4. Refactor Admin PageHelper to query list
5. Optimize GlobalErrorHandler
6. Optimize the return value of the'skip' method interface of'ShenyuPlugin' to boolean
7. Optimize register rules
8. Modify dubbo and sofa param resolve service
9. Refactor sign plugin api
10. Remove websocket filter
### Refactor
1. Remove lombok dependency
2. Remove mapstruct dependency
3. Support JDK8 ~ JDK15
4. Add missing plugin_handle sql for plugin motan
### Bug Fix
1. Fix JsonSyntaxException in jwt plugin
2. Fix sql miss for resilience4j plugin handler
3. Fix disruptor problem of hold event data in consume event
4. Fix deadlock bug of HealthCheckTask
5. Fix client retry the connection add log and increase sleep time
6. Fix the default_group of nacos
7. Fix maven ignore and docker entrypoint
8. Fix admin Return password question
9. Fix LDAP query built from user-controlled source
10. Fix the IP address retrieval error
11. Fix Gson toJson is null
12. Fix the index out of range bug for context path.
13. Fix monitor init metrics label bug
14. Fix GlobalErrorHandler error object to map bug by JacksonUtils.toMap
15. Fix modify response plugin order bug
16. Fix the bug of register
17. Fix sofa plugin register metadata and parameters resolve
18. Fix motan ,dubbo, sofa plugin metadata init bug
## 2.4.0
### New Features
1. Support reading init_script file which is not under resource/directory
2. Display the plugin menus in categories
3. Admin add execute Multi-path sql script
4. IpUtils add a parameter to select the network ip
5. Add parameter-mapping plugin
6. Support Consul as shenyu-register-center
7. Support Etcd as shenyu-sync-data-center
8. Add sentinel customized fallbackhandler
9. Add response plugin
10. Add JWT plugin
11. Add Request plugin
12. Add Motan plugin
13. Add Logging plugin
14. Add Modify-response plugin
15. Add Oauth2 plugin
16. Add Menu Resource Permissions
17. Add Data Permissions
### API Changes
1. Change the project name from Soul to ShenYu
2. Change the group id from org.dromara to org.apache.shenyu
### Enhancement
1. H2 support insert ignore into in Mysql model
2. Improvements For the Apache Dubbo plugin
3. Optimization of GRPC plugin
### Refactor
1. Refactor code about "async invoke" is not supported in Dubbo lower than 2.7.3
2. Replace the term Operator by Predicate
3. Refine judge conditions operator
4. Refactor PredicateJudge module using SPI
5. Refactor code about client register
### Bug Fix
1. Fix the JwtUtil.getUserId method bug
2. Fix the shenyu-spring-boot-starter bug
3. The encoded urlPath will be re-encoded in WebClientPlugin
4. Replace The Risky Cryptographic Algorithm "AES/ECB/NoPadding"
5. ReadTimeoutHandler on a channel which in a PooledConnectionProvider would cause an unexpected ReadTimeoutException
6. Got ClassNotFoundException while start my Gateway in 2.4.8 spring boot
2.3.0(2021-04-02)
------------------
### soul-admin
* Add 'open' field to allow app path authentication or not in sign plugin. #1168
* Optimize divide plugin to use common plugin template in soul-dashboard. #1163
* Add default values and rule checks in plugin handler. #1112
* Add resource management to allow user to add plugin, adjust menu and button resource and so on in soul-dashboard and soul-admin. #1034
* Add menu and data permission in soul-admin. #917
* Add H2 store for soul-admin #918
### soul-bootstrap
* Add tars plugin #863
* Add sentinel plugin #331
* Add sofa plugin #384
* Add Resilience4j plugin for soul-plugin. #434
* Add Context path mapping plugin for soul-plugin. #894
* Add Grpc plugin supports grpc protocol. #1081
* support form submission for dubbo plugin.#339
* feat(plugin handle): #307
* Add dist package module #320
* Add test cases for soul-admin #500
* Add register center for consul #1148
* Add register center for etcd #1161
* Add register center for nacos #1182
* Add register center for zookeeper #1141 #1139
================================================
FILE: SECURITY.md
================================================
# Security Policy
## Reporting a Vulnerability
Please report vulnerability disclosures to `security@apache.org`.
================================================
FILE: actions/paths-filter/action.yml
================================================
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
name: 'Paths Changes Filter'
description: 'Execute your workflow steps only if relevant files are modified.'
author: 'Michal Dorner <dorner.michal@gmail.com>'
inputs:
token:
description: 'GitHub Access Token'
required: false
default: ${{ github.token }}
working-directory:
description: 'Relative path under $GITHUB_WORKSPACE where the repository was checked out.'
required: false
ref:
description: |
Git reference (e.g. branch name) from which the changes will be detected.
This option is ignored if action is triggered by pull_request event.
required: false
base:
description: |
Git reference (e.g. branch name) against which the changes will be detected. Defaults to repository default branch (e.g. master).
If it references same branch it was pushed to, changes are detected against the most recent commit before the push.
This option is ignored if action is triggered by pull_request event.
required: false
filters:
description: 'Path to the configuration file or YAML string with filters definition'
required: true
list-files:
description: |
Enables listing of files matching the filter:
'none' - Disables listing of matching files (default).
'csv' - Coma separated list of filenames.
If needed it uses double quotes to wrap filename with unsafe characters.
'json' - Serialized as JSON array.
'shell' - Space delimited list usable as command line argument list in linux shell.
If needed it uses single or double quotes to wrap filename with unsafe characters.
'escape'- Space delimited list usable as command line argument list in linux shell.
Backslash escapes every potentially unsafe character.
required: false
default: none
initial-fetch-depth:
description: |
How many commits are initially fetched from base branch.
If needed, each subsequent fetch doubles the previously requested number of commits
until the merge-base is found or there are no more commits in the history.
This option takes effect only when changes are detected using git against different base branch.
required: false
default: '100'
outputs:
changes:
description: JSON array with names of all filters matching any of changed files
runs:
using: 'node20'
main: 'dist/index.js'
branding:
color: blue
icon: filter
================================================
FILE: actions/paths-filter/dist/index.js
================================================
/******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ 4014:
/***/ ((__unused_webpack_module, exports) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.ChangeStatus = void 0;
var ChangeStatus;
(function (ChangeStatus) {
ChangeStatus["Added"] = "added";
ChangeStatus["Copied"] = "copied";
ChangeStatus["Deleted"] = "deleted";
ChangeStatus["Modified"] = "modified";
ChangeStatus["Renamed"] = "renamed";
ChangeStatus["Unmerged"] = "unmerged";
})(ChangeStatus || (exports.ChangeStatus = ChangeStatus = {}));
/***/ }),
/***/ 3707:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.Filter = exports.isPredicateQuantifier = exports.SUPPORTED_PREDICATE_QUANTIFIERS = exports.PredicateQuantifier = void 0;
const jsyaml = __importStar(__nccwpck_require__(1917));
const picomatch_1 = __importDefault(__nccwpck_require__(8569));
// Minimatch options used in all matchers
const MatchOptions = {
dot: true
};
/**
* Enumerates the possible logic quantifiers that can be used when determining
* if a file is a match or not with multiple patterns.
*
* The YAML configuration property that is parsed into one of these values is
* 'predicate-quantifier' on the top level of the configuration object of the
* action.
*
* The default is to use 'some' which used to be the hardcoded behavior prior to
* the introduction of the new mechanism.
*
* @see https://en.wikipedia.org/wiki/Quantifier_(logic)
*/
var PredicateQuantifier;
(function (PredicateQuantifier) {
/**
* When choosing 'every' in the config it means that files will only get matched
* if all the patterns are satisfied by the path of the file, not just at least one of them.
*/
PredicateQuantifier["EVERY"] = "every";
/**
* When choosing 'some' in the config it means that files will get matched as long as there is
* at least one pattern that matches them. This is the default behavior if you don't
* specify anything as a predicate quantifier.
*/
PredicateQuantifier["SOME"] = "some";
})(PredicateQuantifier || (exports.PredicateQuantifier = PredicateQuantifier = {}));
/**
* An array of strings (at runtime) that contains the valid/accepted values for
* the configuration parameter 'predicate-quantifier'.
*/
exports.SUPPORTED_PREDICATE_QUANTIFIERS = Object.values(PredicateQuantifier);
function isPredicateQuantifier(x) {
return exports.SUPPORTED_PREDICATE_QUANTIFIERS.includes(x);
}
exports.isPredicateQuantifier = isPredicateQuantifier;
class Filter {
// Creates instance of Filter and load rules from YAML if it's provided
constructor(yaml, filterConfig) {
this.filterConfig = filterConfig;
this.rules = {};
if (yaml) {
this.load(yaml);
}
}
// Load rules from YAML string
load(yaml) {
if (!yaml) {
return;
}
const doc = jsyaml.load(yaml);
if (typeof doc !== 'object') {
this.throwInvalidFormatError('Root element is not an object');
}
for (const [key, item] of Object.entries(doc)) {
this.rules[key] = this.parseFilterItemYaml(item);
}
}
match(files) {
const result = {};
for (const [key, patterns] of Object.entries(this.rules)) {
result[key] = files.filter(file => this.isMatch(file, patterns));
}
return result;
}
isMatch(file, patterns) {
var _a;
const aPredicate = (rule) => {
return (rule.status === undefined || rule.status.includes(file.status)) && rule.isMatch(file.filename);
};
if (((_a = this.filterConfig) === null || _a === void 0 ? void 0 : _a.predicateQuantifier) === 'every') {
return patterns.every(aPredicate);
}
else {
return patterns.some(aPredicate);
}
}
parseFilterItemYaml(item) {
if (Array.isArray(item)) {
return flat(item.map(i => this.parseFilterItemYaml(i)));
}
if (typeof item === 'string') {
return [{ status: undefined, isMatch: (0, picomatch_1.default)(item, MatchOptions) }];
}
if (typeof item === 'object') {
return Object.entries(item).map(([key, pattern]) => {
if (typeof key !== 'string' || (typeof pattern !== 'string' && !Array.isArray(pattern))) {
this.throwInvalidFormatError(`Expected [key:string]= pattern:string | string[], but [${key}:${typeof key}]= ${pattern}:${typeof pattern} found`);
}
return {
status: key
.split('|')
.map(x => x.trim())
.filter(x => x.length > 0)
.map(x => x.toLowerCase()),
isMatch: (0, picomatch_1.default)(pattern, MatchOptions)
};
});
}
this.throwInvalidFormatError(`Unexpected element type '${typeof item}'`);
}
throwInvalidFormatError(message) {
throw new Error(`Invalid filter YAML format: ${message}.`);
}
}
exports.Filter = Filter;
// Creates a new array with all sub-array elements concatenated
// In future could be replaced by Array.prototype.flat (supported on Node.js 11+)
function flat(arr) {
return arr.reduce((acc, val) => acc.concat(val), []);
}
/***/ }),
/***/ 3374:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.isGitSha = exports.getShortName = exports.getCurrentRef = exports.listAllFilesAsAdded = exports.parseGitDiffOutput = exports.getChangesSinceMergeBase = exports.getChangesOnHead = exports.getChanges = exports.getChangesInLastCommit = exports.HEAD = exports.NULL_SHA = void 0;
const exec_1 = __nccwpck_require__(1514);
const core = __importStar(__nccwpck_require__(2186));
const file_1 = __nccwpck_require__(4014);
exports.NULL_SHA = '0000000000000000000000000000000000000000';
exports.HEAD = 'HEAD';
async function getChangesInLastCommit() {
core.startGroup(`Change detection in last commit`);
let output = '';
try {
output = (await (0, exec_1.getExecOutput)('git', ['log', '--format=', '--no-renames', '--name-status', '-z', '-n', '1'])).stdout;
}
finally {
fixStdOutNullTermination();
core.endGroup();
}
return parseGitDiffOutput(output);
}
exports.getChangesInLastCommit = getChangesInLastCommit;
async function getChanges(base, head) {
const baseRef = await ensureRefAvailable(base);
const headRef = await ensureRefAvailable(head);
// Get differences between ref and HEAD
core.startGroup(`Change detection ${base}..${head}`);
let output = '';
try {
// Two dots '..' change detection - directly compares two versions
output = (await (0, exec_1.getExecOutput)('git', ['diff', '--no-renames', '--name-status', '-z', `${baseRef}..${headRef}`]))
.stdout;
}
finally {
fixStdOutNullTermination();
core.endGroup();
}
return parseGitDiffOutput(output);
}
exports.getChanges = getChanges;
async function getChangesOnHead() {
// Get current changes - both staged and unstaged
core.startGroup(`Change detection on HEAD`);
let output = '';
try {
output = (await (0, exec_1.getExecOutput)('git', ['diff', '--no-renames', '--name-status', '-z', 'HEAD'])).stdout;
}
finally {
fixStdOutNullTermination();
core.endGroup();
}
return parseGitDiffOutput(output);
}
exports.getChangesOnHead = getChangesOnHead;
async function getChangesSinceMergeBase(base, head, initialFetchDepth) {
let baseRef;
let headRef;
async function hasMergeBase() {
if (baseRef === undefined || headRef === undefined) {
return false;
}
return (await (0, exec_1.getExecOutput)('git', ['merge-base', baseRef, headRef], { ignoreReturnCode: true })).exitCode === 0;
}
let noMergeBase = false;
core.startGroup(`Searching for merge-base ${base}...${head}`);
try {
baseRef = await getLocalRef(base);
headRef = await getLocalRef(head);
if (!(await hasMergeBase())) {
await (0, exec_1.getExecOutput)('git', ['fetch', '--no-tags', `--depth=${initialFetchDepth}`, 'origin', base, head]);
if (baseRef === undefined || headRef === undefined) {
baseRef = baseRef !== null && baseRef !== void 0 ? baseRef : (await getLocalRef(base));
headRef = headRef !== null && headRef !== void 0 ? headRef : (await getLocalRef(head));
if (baseRef === undefined || headRef === undefined) {
await (0, exec_1.getExecOutput)('git', ['fetch', '--tags', '--depth=1', 'origin', base, head], {
ignoreReturnCode: true // returns exit code 1 if tags on remote were updated - we can safely ignore it
});
baseRef = baseRef !== null && baseRef !== void 0 ? baseRef : (await getLocalRef(base));
headRef = headRef !== null && headRef !== void 0 ? headRef : (await getLocalRef(head));
if (baseRef === undefined) {
throw new Error(`Could not determine what is ${base} - fetch works but it's not a branch, tag or commit SHA`);
}
if (headRef === undefined) {
throw new Error(`Could not determine what is ${head} - fetch works but it's not a branch, tag or commit SHA`);
}
}
}
let depth = initialFetchDepth;
let lastCommitCount = await getCommitCount();
while (!(await hasMergeBase())) {
depth = Math.min(depth * 2, Number.MAX_SAFE_INTEGER);
await (0, exec_1.getExecOutput)('git', ['fetch', `--deepen=${depth}`, 'origin', base, head]);
const commitCount = await getCommitCount();
if (commitCount === lastCommitCount) {
core.info('No more commits were fetched');
core.info('Last attempt will be to fetch full history');
await (0, exec_1.getExecOutput)('git', ['fetch']);
if (!(await hasMergeBase())) {
noMergeBase = true;
}
break;
}
lastCommitCount = commitCount;
}
}
}
finally {
core.endGroup();
}
// Three dots '...' change detection - finds merge-base and compares against it
let diffArg = `${baseRef}...${headRef}`;
if (noMergeBase) {
core.warning('No merge base found - change detection will use direct <commit>..<commit> comparison');
diffArg = `${baseRef}..${headRef}`;
}
// Get changes introduced on ref compared to base
core.startGroup(`Change detection ${diffArg}`);
let output = '';
try {
output = (await (0, exec_1.getExecOutput)('git', ['diff', '--no-renames', '--name-status', '-z', diffArg])).stdout;
}
finally {
fixStdOutNullTermination();
core.endGroup();
}
return parseGitDiffOutput(output);
}
exports.getChangesSinceMergeBase = getChangesSinceMergeBase;
function parseGitDiffOutput(output) {
const tokens = output.split('\u0000').filter(s => s.length > 0);
const files = [];
for (let i = 0; i + 1 < tokens.length; i += 2) {
files.push({
status: statusMap[tokens[i]],
filename: tokens[i + 1]
});
}
return files;
}
exports.parseGitDiffOutput = parseGitDiffOutput;
async function listAllFilesAsAdded() {
core.startGroup('Listing all files tracked by git');
let output = '';
try {
output = (await (0, exec_1.getExecOutput)('git', ['ls-files', '-z'])).stdout;
}
finally {
fixStdOutNullTermination();
core.endGroup();
}
return output
.split('\u0000')
.filter(s => s.length > 0)
.map(path => ({
status: file_1.ChangeStatus.Added,
filename: path
}));
}
exports.listAllFilesAsAdded = listAllFilesAsAdded;
async function getCurrentRef() {
core.startGroup(`Get current git ref`);
try {
const branch = (await (0, exec_1.getExecOutput)('git', ['branch', '--show-current'])).stdout.trim();
if (branch) {
return branch;
}
const describe = await (0, exec_1.getExecOutput)('git', ['describe', '--tags', '--exact-match'], { ignoreReturnCode: true });
if (describe.exitCode === 0) {
return describe.stdout.trim();
}
return (await (0, exec_1.getExecOutput)('git', ['rev-parse', exports.HEAD])).stdout.trim();
}
finally {
core.endGroup();
}
}
exports.getCurrentRef = getCurrentRef;
function getShortName(ref) {
if (!ref)
return '';
const heads = 'refs/heads/';
const tags = 'refs/tags/';
if (ref.startsWith(heads))
return ref.slice(heads.length);
if (ref.startsWith(tags))
return ref.slice(tags.length);
return ref;
}
exports.getShortName = getShortName;
function isGitSha(ref) {
return /^[a-z0-9]{40}$/.test(ref);
}
exports.isGitSha = isGitSha;
async function hasCommit(ref) {
return (await (0, exec_1.getExecOutput)('git', ['cat-file', '-e', `${ref}^{commit}`], { ignoreReturnCode: true })).exitCode === 0;
}
async function getCommitCount() {
const output = (await (0, exec_1.getExecOutput)('git', ['rev-list', '--count', '--all'])).stdout;
const count = parseInt(output);
return isNaN(count) ? 0 : count;
}
async function getLocalRef(shortName) {
if (isGitSha(shortName)) {
return (await hasCommit(shortName)) ? shortName : undefined;
}
const output = (await (0, exec_1.getExecOutput)('git', ['show-ref', shortName], { ignoreReturnCode: true })).stdout;
const refs = output
.split(/\r?\n/g)
.map(l => l.match(/refs\/(?:(?:heads)|(?:tags)|(?:remotes\/origin))\/(.*)$/))
.filter(match => match !== null && match[1] === shortName)
.map(match => { var _a; return (_a = match === null || match === void 0 ? void 0 : match[0]) !== null && _a !== void 0 ? _a : ''; }); // match can't be null here but compiler doesn't understand that
if (refs.length === 0) {
return undefined;
}
const remoteRef = refs.find(ref => ref.startsWith('refs/remotes/origin/'));
if (remoteRef) {
return remoteRef;
}
return refs[0];
}
async function ensureRefAvailable(name) {
core.startGroup(`Ensuring ${name} is fetched from origin`);
try {
let ref = await getLocalRef(name);
if (ref === undefined) {
await (0, exec_1.getExecOutput)('git', ['fetch', '--depth=1', '--no-tags', 'origin', name]);
ref = await getLocalRef(name);
if (ref === undefined) {
await (0, exec_1.getExecOutput)('git', ['fetch', '--depth=1', '--tags', 'origin', name]);
ref = await getLocalRef(name);
if (ref === undefined) {
throw new Error(`Could not determine what is ${name} - fetch works but it's not a branch, tag or commit SHA`);
}
}
}
return ref;
}
finally {
core.endGroup();
}
}
function fixStdOutNullTermination() {
// Previous command uses NULL as delimiters and output is printed to stdout.
// We have to make sure next thing written to stdout will start on new line.
// Otherwise things like ::set-output wouldn't work.
core.info('');
}
const statusMap = {
A: file_1.ChangeStatus.Added,
C: file_1.ChangeStatus.Copied,
D: file_1.ChangeStatus.Deleted,
M: file_1.ChangeStatus.Modified,
R: file_1.ChangeStatus.Renamed,
U: file_1.ChangeStatus.Unmerged
};
/***/ }),
/***/ 7402:
/***/ ((__unused_webpack_module, exports) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.csvEscape = void 0;
// Returns filename escaped for CSV
// Wraps file name into "..." only when it contains some potentially unsafe character
function csvEscape(value) {
if (value === '')
return value;
// Only safe characters
if (/^[a-zA-Z0-9._+:@%/-]+$/m.test(value)) {
return value;
}
// https://tools.ietf.org/html/rfc4180
// If double-quotes are used to enclose fields, then a double-quote
// appearing inside a field must be escaped by preceding it with
// another double quote
return `"${value.replace(/"/g, '""')}"`;
}
exports.csvEscape = csvEscape;
/***/ }),
/***/ 4613:
/***/ ((__unused_webpack_module, exports) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.shellEscape = exports.backslashEscape = void 0;
// Backslash escape every character except small subset of definitely safe characters
function backslashEscape(value) {
return value.replace(/([^a-zA-Z0-9,._+:@%/-])/gm, '\\$1');
}
exports.backslashEscape = backslashEscape;
// Returns filename escaped for usage as shell argument.
// Applies "human readable" approach with as few escaping applied as possible
function shellEscape(value) {
if (value === '')
return value;
// Only safe characters
if (/^[a-zA-Z0-9,._+:@%/-]+$/m.test(value)) {
return value;
}
if (value.includes("'")) {
// Only safe characters, single quotes and white-spaces
if (/^[a-zA-Z0-9,._+:@%/'\s-]+$/m.test(value)) {
return `"${value}"`;
}
// Split by single quote and apply escaping recursively
return value.split("'").map(shellEscape).join("\\'");
}
// Contains some unsafe characters but no single quote
return `'${value}'`;
}
exports.shellEscape = shellEscape;
/***/ }),
/***/ 3109:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
const fs = __importStar(__nccwpck_require__(7147));
const core = __importStar(__nccwpck_require__(2186));
const github = __importStar(__nccwpck_require__(5438));
const filter_1 = __nccwpck_require__(3707);
const file_1 = __nccwpck_require__(4014);
const git = __importStar(__nccwpck_require__(3374));
const shell_escape_1 = __nccwpck_require__(4613);
const csv_escape_1 = __nccwpck_require__(7402);
async function run() {
try {
const workingDirectory = core.getInput('working-directory', { required: false });
if (workingDirectory) {
process.chdir(workingDirectory);
}
const token = core.getInput('token', { required: false });
const ref = core.getInput('ref', { required: false });
const base = core.getInput('base', { required: false });
const filtersInput = core.getInput('filters', { required: true });
const filtersYaml = isPathInput(filtersInput) ? getConfigFileContent(filtersInput) : filtersInput;
const listFiles = core.getInput('list-files', { required: false }).toLowerCase() || 'none';
const initialFetchDepth = parseInt(core.getInput('initial-fetch-depth', { required: false })) || 10;
const predicateQuantifier = core.getInput('predicate-quantifier', { required: false }) || filter_1.PredicateQuantifier.SOME;
if (!isExportFormat(listFiles)) {
core.setFailed(`Input parameter 'list-files' is set to invalid value '${listFiles}'`);
return;
}
if (!(0, filter_1.isPredicateQuantifier)(predicateQuantifier)) {
const predicateQuantifierInvalidErrorMsg = `Input parameter 'predicate-quantifier' is set to invalid value ` +
`'${predicateQuantifier}'. Valid values: ${filter_1.SUPPORTED_PREDICATE_QUANTIFIERS.join(', ')}`;
throw new Error(predicateQuantifierInvalidErrorMsg);
}
const filterConfig = { predicateQuantifier };
const filter = new filter_1.Filter(filtersYaml, filterConfig);
const files = await getChangedFiles(token, base, ref, initialFetchDepth);
core.info(`Detected ${files.length} changed files`);
const results = filter.match(files);
exportResults(results, listFiles);
}
catch (error) {
core.setFailed(getErrorMessage(error));
}
}
function isPathInput(text) {
return !(text.includes('\n') || text.includes(':'));
}
function getConfigFileContent(configPath) {
if (!fs.existsSync(configPath)) {
throw new Error(`Configuration file '${configPath}' not found`);
}
if (!fs.lstatSync(configPath).isFile()) {
throw new Error(`'${configPath}' is not a file.`);
}
return fs.readFileSync(configPath, { encoding: 'utf8' });
}
async function getChangedFiles(token, base, ref, initialFetchDepth) {
var _a, _b;
// if base is 'HEAD' only local uncommitted changes will be detected
// This is the simplest case as we don't need to fetch more commits or evaluate current/before refs
if (base === git.HEAD) {
if (ref) {
core.warning(`'ref' input parameter is ignored when 'base' is set to HEAD`);
}
return await git.getChangesOnHead();
}
const prEvents = ['pull_request', 'pull_request_review', 'pull_request_review_comment', 'pull_request_target'];
if (prEvents.includes(github.context.eventName)) {
if (ref) {
core.warning(`'ref' input parameter is ignored when 'base' is set to HEAD`);
}
if (base) {
core.warning(`'base' input parameter is ignored when action is triggered by pull request event`);
}
const pr = github.context.payload.pull_request;
if (token) {
return await getChangedFilesFromApi(token, pr);
}
if (github.context.eventName === 'pull_request_target') {
// pull_request_target is executed in context of base branch and GITHUB_SHA points to last commit in base branch
// Therefore it's not possible to look at changes in last commit
// At the same time we don't want to fetch any code from forked repository
throw new Error(`'token' input parameter is required if action is triggered by 'pull_request_target' event`);
}
core.info('Github token is not available - changes will be detected using git diff');
const baseSha = (_a = github.context.payload.pull_request) === null || _a === void 0 ? void 0 : _a.base.sha;
const defaultBranch = (_b = github.context.payload.repository) === null || _b === void 0 ? void 0 : _b.default_branch;
const currentRef = await git.getCurrentRef();
return await git.getChanges(base || baseSha || defaultBranch, currentRef);
}
else {
return getChangedFilesFromGit(base, ref, initialFetchDepth);
}
}
async function getChangedFilesFromGit(base, head, initialFetchDepth) {
var _a;
const defaultBranch = (_a = github.context.payload.repository) === null || _a === void 0 ? void 0 : _a.default_branch;
const beforeSha = github.context.eventName === 'push' ? github.context.payload.before : null;
const currentRef = await git.getCurrentRef();
head = git.getShortName(head || github.context.ref || currentRef);
base = git.getShortName(base || defaultBranch);
if (!head) {
throw new Error("This action requires 'head' input to be configured, 'ref' to be set in the event payload or branch/tag checked out in current git repository");
}
if (!base) {
throw new Error("This action requires 'base' input to be configured or 'repository.default_branch' to be set in the event payload");
}
const isBaseSha = git.isGitSha(base);
const isBaseSameAsHead = base === head;
// If base is commit SHA we will do comparison against the referenced commit
// Or if base references same branch it was pushed to, we will do comparison against the previously pushed commit
if (isBaseSha || isBaseSameAsHead) {
const baseSha = isBaseSha ? base : beforeSha;
if (!baseSha) {
core.warning(`'before' field is missing in event payload - changes will be detected from last commit`);
if (head !== currentRef) {
core.warning(`Ref ${head} is not checked out - results might be incorrect!`);
}
return await git.getChangesInLastCommit();
}
// If there is no previously pushed commit,
// we will do comparison against the default branch or return all as added
if (baseSha === git.NULL_SHA) {
if (defaultBranch && base !== defaultBranch) {
core.info(`First push of a branch detected - changes will be detected against the default branch ${defaultBranch}`);
return await git.getChangesSinceMergeBase(defaultBranch, head, initialFetchDepth);
}
else {
core.info('Initial push detected - all files will be listed as added');
if (head !== currentRef) {
core.warning(`Ref ${head} is not checked out - results might be incorrect!`);
}
return await git.listAllFilesAsAdded();
}
}
core.info(`Changes will be detected between ${baseSha} and ${head}`);
return await git.getChanges(baseSha, head);
}
core.info(`Changes will be detected between ${base} and ${head}`);
return await git.getChangesSinceMergeBase(base, head, initialFetchDepth);
}
// Uses github REST api to get list of files changed in PR
async function getChangedFilesFromApi(token, pullRequest) {
core.startGroup(`Fetching list of changed files for PR#${pullRequest.number} from Github API`);
try {
const client = github.getOctokit(token);
const per_page = 100;
const files = [];
core.info(`Invoking listFiles(pull_number: ${pullRequest.number}, per_page: ${per_page})`);
for await (const response of client.paginate.iterator(client.rest.pulls.listFiles.endpoint.merge({
owner: github.context.repo.owner,
repo: github.context.repo.repo,
pull_number: pullRequest.number,
per_page
}))) {
if (response.status !== 200) {
throw new Error(`Fetching list of changed files from GitHub API failed with error code ${response.status}`);
}
core.info(`Received ${response.data.length} items`);
for (const row of response.data) {
core.info(`[${row.status}] ${row.filename}`);
// There's no obvious use-case for detection of renames
// Therefore we treat it as if rename detection in git diff was turned off.
// Rename is replaced by delete of original filename and add of new filename
if (row.status === file_1.ChangeStatus.Renamed) {
files.push({
filename: row.filename,
status: file_1.ChangeStatus.Added
});
files.push({
// 'previous_filename' for some unknown reason isn't in the type definition or documentation
filename: row.previous_filename,
status: file_1.ChangeStatus.Deleted
});
}
else {
// Github status and git status variants are same except for deleted files
const status = row.status === 'removed' ? file_1.ChangeStatus.Deleted : row.status;
files.push({
filename: row.filename,
status
});
}
}
}
return files;
}
finally {
core.endGroup();
}
}
function exportResults(results, format) {
core.info('Results:');
const changes = [];
for (const [key, files] of Object.entries(results)) {
const value = files.length > 0;
core.startGroup(`Filter ${key} = ${value}`);
if (files.length > 0) {
changes.push(key);
core.info('Matching files:');
for (const file of files) {
core.info(`${file.filename} [${file.status}]`);
}
}
else {
core.info('Matching files: none');
}
core.setOutput(key, value);
core.setOutput(`${key}_count`, files.length);
if (format !== 'none') {
const filesValue = serializeExport(files, format);
core.setOutput(`${key}_files`, filesValue);
}
core.endGroup();
}
if (results['changes'] === undefined) {
const changesJson = JSON.stringify(changes);
core.info(`Changes output set to ${changesJson}`);
core.setOutput('changes', changesJson);
}
else {
core.info('Cannot set changes output variable - name already used by filter output');
}
}
function serializeExport(files, format) {
const fileNames = files.map(file => file.filename);
switch (format) {
case 'csv':
return fileNames.map(csv_escape_1.csvEscape).join(',');
case 'json':
return JSON.stringify(fileNames);
case 'escape':
return fileNames.map(shell_escape_1.backslashEscape).join(' ');
case 'shell':
return fileNames.map(shell_escape_1.shellEscape).join(' ');
default:
return '';
}
}
function isExportFormat(value) {
return ['none', 'csv', 'shell', 'json', 'escape'].includes(value);
}
function getErrorMessage(error) {
if (error instanceof Error)
return error.message;
return String(error);
}
run();
/***/ }),
/***/ 7351:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.issue = exports.issueCommand = void 0;
const os = __importStar(__nccwpck_require__(2037));
const utils_1 = __nccwpck_require__(5278);
/**
* Commands
*
* Command Format:
* ::name key=value,key=value::message
*
* Examples:
* ::warning::This is the message
* ::set-env name=MY_VAR::some value
*/
function issueCommand(command, properties, message) {
const cmd = new Command(command, properties, message);
process.stdout.write(cmd.toString() + os.EOL);
}
exports.issueCommand = issueCommand;
function issue(name, message = '') {
issueCommand(name, {}, message);
}
exports.issue = issue;
const CMD_STRING = '::';
class Command {
constructor(command, properties, message) {
if (!command) {
command = 'missing.command';
}
this.command = command;
this.properties = properties;
this.message = message;
}
toString() {
let cmdStr = CMD_STRING + this.command;
if (this.properties && Object.keys(this.properties).length > 0) {
cmdStr += ' ';
let first = true;
for (const key in this.properties) {
if (this.properties.hasOwnProperty(key)) {
const val = this.properties[key];
if (val) {
if (first) {
first = false;
}
else {
cmdStr += ',';
}
cmdStr += `${key}=${escapeProperty(val)}`;
}
}
}
}
cmdStr += `${CMD_STRING}${escapeData(this.message)}`;
return cmdStr;
}
}
function escapeData(s) {
return utils_1.toCommandValue(s)
.replace(/%/g, '%25')
.replace(/\r/g, '%0D')
.replace(/\n/g, '%0A');
}
function escapeProperty(s) {
return utils_1.toCommandValue(s)
.replace(/%/g, '%25')
.replace(/\r/g, '%0D')
.replace(/\n/g, '%0A')
.replace(/:/g, '%3A')
.replace(/,/g, '%2C');
}
//# sourceMappingURL=command.js.map
/***/ }),
/***/ 2186:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.getIDToken = exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.notice = exports.warning = exports.error = exports.debug = exports.isDebug = exports.setFailed = exports.setCommandEcho = exports.setOutput = exports.getBooleanInput = exports.getMultilineInput = exports.getInput = exports.addPath = exports.setSecret = exports.exportVariable = exports.ExitCode = void 0;
const command_1 = __nccwpck_require__(7351);
const file_command_1 = __nccwpck_require__(717);
const utils_1 = __nccwpck_require__(5278);
const os = __importStar(__nccwpck_require__(2037));
const path = __importStar(__nccwpck_require__(1017));
const oidc_utils_1 = __nccwpck_require__(8041);
/**
* The code to exit an action
*/
var ExitCode;
(function (ExitCode) {
/**
* A code indicating that the action was successful
*/
ExitCode[ExitCode["Success"] = 0] = "Success";
/**
* A code indicating that the action was a failure
*/
ExitCode[ExitCode["Failure"] = 1] = "Failure";
})(ExitCode = exports.ExitCode || (exports.ExitCode = {}));
//-----------------------------------------------------------------------
// Variables
//-----------------------------------------------------------------------
/**
* Sets env variable for this action and future actions in the job
* @param name the name of the variable to set
* @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify
*/
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function exportVariable(name, val) {
const convertedVal = utils_1.toCommandValue(val);
process.env[name] = convertedVal;
const filePath = process.env['GITHUB_ENV'] || '';
if (filePath) {
return file_command_1.issueFileCommand('ENV', file_command_1.prepareKeyValueMessage(name, val));
}
command_1.issueCommand('set-env', { name }, convertedVal);
}
exports.exportVariable = exportVariable;
/**
* Registers a secret which will get masked from logs
* @param secret value of the secret
*/
function setSecret(secret) {
command_1.issueCommand('add-mask', {}, secret);
}
exports.setSecret = setSecret;
/**
* Prepends inputPath to the PATH (for this action and future actions)
* @param inputPath
*/
function addPath(inputPath) {
const filePath = process.env['GITHUB_PATH'] || '';
if (filePath) {
file_command_1.issueFileCommand('PATH', inputPath);
}
else {
command_1.issueCommand('add-path', {}, inputPath);
}
process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`;
}
exports.addPath = addPath;
/**
* Gets the value of an input.
* Unless trimWhitespace is set to false in InputOptions, the value is also trimmed.
* Returns an empty string if the value is not defined.
*
* @param name name of the input to get
* @param options optional. See InputOptions.
* @returns string
*/
function getInput(name, options) {
const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || '';
if (options && options.required && !val) {
throw new Error(`Input required and not supplied: ${name}`);
}
if (options && options.trimWhitespace === false) {
return val;
}
return val.trim();
}
exports.getInput = getInput;
/**
* Gets the values of an multiline input. Each value is also trimmed.
*
* @param name name of the input to get
* @param options optional. See InputOptions.
* @returns string[]
*
*/
function getMultilineInput(name, options) {
const inputs = getInput(name, options)
.split('\n')
.filter(x => x !== '');
if (options && options.trimWhitespace === false) {
return inputs;
}
return inputs.map(input => input.trim());
}
exports.getMultilineInput = getMultilineInput;
/**
* Gets the input value of the boolean type in the YAML 1.2 "core schema" specification.
* Support boolean input list: `true | True | TRUE | false | False | FALSE` .
* The return value is also in boolean type.
* ref: https://yaml.org/spec/1.2/spec.html#id2804923
*
* @param name name of the input to get
* @param options optional. See InputOptions.
* @returns boolean
*/
function getBooleanInput(name, options) {
const trueValue = ['true', 'True', 'TRUE'];
const falseValue = ['false', 'False', 'FALSE'];
const val = getInput(name, options);
if (trueValue.includes(val))
return true;
if (falseValue.includes(val))
return false;
throw new TypeError(`Input does not meet YAML 1.2 "Core Schema" specification: ${name}\n` +
`Support boolean input list: \`true | True | TRUE | false | False | FALSE\``);
}
exports.getBooleanInput = getBooleanInput;
/**
* Sets the value of an output.
*
* @param name name of the output to set
* @param value value to store. Non-string values will be converted to a string via JSON.stringify
*/
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function setOutput(name, value) {
const filePath = process.env['GITHUB_OUTPUT'] || '';
if (filePath) {
return file_command_1.issueFileCommand('OUTPUT', file_command_1.prepareKeyValueMessage(name, value));
}
process.stdout.write(os.EOL);
command_1.issueCommand('set-output', { name }, utils_1.toCommandValue(value));
}
exports.setOutput = setOutput;
/**
* Enables or disables the echoing of commands into stdout for the rest of the step.
* Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set.
*
*/
function setCommandEcho(enabled) {
command_1.issue('echo', enabled ? 'on' : 'off');
}
exports.setCommandEcho = setCommandEcho;
//-----------------------------------------------------------------------
// Results
//-----------------------------------------------------------------------
/**
* Sets the action s
Showing preview only (526K chars total). Download the full file or copy to clipboard to get everything.
gitextract_9c5hxuql/ ├── .asf.yaml ├── .devcontainer/ │ └── devcontainer.json ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug-report.yml │ │ ├── config.yml │ │ ├── feature-request.yml │ │ ├── question.yml │ │ ├── task.yml │ │ └── volunteer.yml │ ├── PULL_REQUEST_TEMPLATE.md │ ├── activie-committers.yml │ ├── filters.yml │ └── workflows/ │ ├── auto-notify.yml │ ├── ci.yml │ ├── codeql-analysis.yml │ ├── docker-publish-dockerhub.yml │ ├── docker-publish.yml │ ├── e2e-k8s.yml │ ├── integrated-test-k8s-ingress.yml │ ├── integrated-test.yml │ ├── issue-label.yml │ └── k8s-examples-http.yml ├── .gitignore ├── .gitpod.Dockerfile ├── .gitpod.yml ├── .idea/ │ └── vcs.xml ├── .licenserc.yaml ├── .mvn/ │ └── wrapper/ │ └── maven-wrapper.properties ├── .prowlabels.yaml ├── LICENSE ├── MATURITY.md ├── Makefile ├── NOTICE ├── README.md ├── RELEASE-NOTES.md ├── SECURITY.md ├── actions/ │ ├── paths-filter/ │ │ ├── action.yml │ │ └── dist/ │ │ └── index.js │ └── scripts/ │ └── issue-manager.sh ├── changelog.sh ├── db/ │ ├── init/ │ │ ├── init-guide.md │ │ ├── mysql/ │ │ │ └── schema.sql │ │ ├── ob/ │ │ │ └── schema.sql │ │ ├── og/ │ │ │ └── create-table.sql │ │ ├── oracle/ │ │ │ └── schema.sql │ │ └── pg/ │ │ ├── create-database.sql │ │ └── create-table.sql │ └── upgrade/ │ ├── 2.4.1-upgrade-2.4.2-mysql.sql │ ├── 2.4.1-upgrade-2.4.2-pg.sql │ ├── 2.4.2-upgrade-2.4.3-mysql.sql │ ├── 2.4.2-upgrade-2.4.3-pg.sql │ ├── 2.4.3-upgrade-2.5.0-mysql.sql │ ├── 2.4.3-upgrade-2.5.0-pg.sql │ ├── 2.5.0-upgrade-2.5.1-mysql.sql │ ├── 2.5.0-upgrade-2.5.1-oracle.sql │ ├── 2.5.0-upgrade-2.5.1-pg.sql │ ├── 2.5.1-upgrade-2.6.0-mysql.sql │ ├── 2.5.1-upgrade-2.6.0-oracle.sql │ ├── 2.5.1-upgrade-2.6.0-pg.sql │ ├── 2.6.0-upgrade-2.6.1-mysql.sql │ ├── 2.6.0-upgrade-2.6.1-og.sql │ ├── 2.6.0-upgrade-2.6.1-oracle.sql │ ├── 2.6.0-upgrade-2.6.1-pg.sql │ ├── 2.6.1-upgrade-2.7.0-mysql.sql │ ├── 2.6.1-upgrade-2.7.0-og.sql │ ├── 2.6.1-upgrade-2.7.0-oracle.sql │ ├── 2.6.1-upgrade-2.7.0-pg.sql │ ├── 2.7.0-upgrade-2.7.1-mysql.sql │ ├── 2.7.0-upgrade-2.7.1-ob.sql │ ├── 2.7.0-upgrade-2.7.1-og.sql │ ├── 2.7.0-upgrade-2.7.1-oracle.sql │ ├── 2.7.0-upgrade-2.7.1-pg.sql │ └── upgrade-guide.md ├── mvnw ├── mvnw.cmd ├── pom.xml ├── script/ │ ├── checkstyle-header.txt │ └── shenyu_checkstyle.xml ├── shenyu-admin/ │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── http/ │ │ ├── http-debug-app-auth-controller-api.http │ │ ├── http-debug-dashboard-user-controller-api.http │ │ ├── http-debug-data-permission-controller-api.http │ │ ├── http-debug-dict-controller-api.http │ │ ├── http-debug-meta-data-controller-api.http │ │ ├── http-debug-operation-record-log-controller-api.http │ │ ├── http-debug-platform-controller-api.http │ │ ├── http-debug-plugin-controller-api.http │ │ ├── http-debug-plugin-handle-controller-api.http │ │ ├── http-debug-registry-config-controller-api.http │ │ ├── http-debug-registry-controller-api.http │ │ ├── http-debug-resource-controller-api.http │ │ ├── http-debug-role-controller-api.http │ │ ├── http-debug-rule-controller-api.http │ │ └── http-debug-selector-controller-api.http │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── admin/ │ │ │ ├── ShenyuAdminBootstrap.java │ │ │ ├── aspect/ │ │ │ │ ├── DataPermissionAspect.java │ │ │ │ ├── PageableAspect.java │ │ │ │ ├── annotation/ │ │ │ │ │ ├── DataPermission.java │ │ │ │ │ ├── Pageable.java │ │ │ │ │ └── RestApi.java │ │ │ │ └── controller/ │ │ │ │ ├── ControllerMethodAdvice.java │ │ │ │ ├── PrintLogControllerMethodAdviceImpl.java │ │ │ │ ├── RestControllerAspect.java │ │ │ │ └── SuperAdminPasswordSafeAdvice.java │ │ │ ├── config/ │ │ │ │ ├── ClusterConfiguration.java │ │ │ │ ├── ClusterJdbcConfiguration.java │ │ │ │ ├── ClusterZookeeperConfiguration.java │ │ │ │ ├── DataBaseConfiguration.java │ │ │ │ ├── DiscoveryConfiguration.java │ │ │ │ ├── HttpLongPollingSyncConfiguration.java │ │ │ │ ├── HttpUtilsConfiguration.java │ │ │ │ ├── KubernetesConfiguration.java │ │ │ │ ├── LdapConfiguration.java │ │ │ │ ├── MapperConfig.java │ │ │ │ ├── RegisterCenterConfiguration.java │ │ │ │ ├── ShenyuAdminConfiguration.java │ │ │ │ ├── StandaloneConfiguration.java │ │ │ │ ├── SwaggerConfiguration.java │ │ │ │ ├── WebConfiguration.java │ │ │ │ ├── WebSocketSyncConfiguration.java │ │ │ │ └── properties/ │ │ │ │ ├── ClusterProperties.java │ │ │ │ ├── ClusterZookeeperProperties.java │ │ │ │ ├── DashboardProperties.java │ │ │ │ ├── DataBaseProperties.java │ │ │ │ ├── DeploymentProperties.java │ │ │ │ ├── HttpSyncProperties.java │ │ │ │ ├── JwtProperties.java │ │ │ │ ├── LdapProperties.java │ │ │ │ ├── SecretProperties.java │ │ │ │ ├── ShiroProperties.java │ │ │ │ └── WebsocketSyncProperties.java │ │ │ ├── controller/ │ │ │ │ ├── AiProxyApiKeyController.java │ │ │ │ ├── AlertReceiverController.java │ │ │ │ ├── AlertReportController.java │ │ │ │ ├── ApiController.java │ │ │ │ ├── ApiDocController.java │ │ │ │ ├── AppAuthController.java │ │ │ │ ├── ConfigController.java │ │ │ │ ├── ConfigsExportImportController.java │ │ │ │ ├── DashboardUserController.java │ │ │ │ ├── DataPermissionController.java │ │ │ │ ├── DetailController.java │ │ │ │ ├── DiscoveryController.java │ │ │ │ ├── DiscoveryUpstreamController.java │ │ │ │ ├── FieldController.java │ │ │ │ ├── IndexController.java │ │ │ │ ├── InstanceController.java │ │ │ │ ├── MetaDataController.java │ │ │ │ ├── MockRequestRecordController.java │ │ │ │ ├── NamespaceController.java │ │ │ │ ├── NamespacePluginController.java │ │ │ │ ├── OperationRecordLogController.java │ │ │ │ ├── PagedController.java │ │ │ │ ├── PermissionController.java │ │ │ │ ├── PlatformController.java │ │ │ │ ├── PluginController.java │ │ │ │ ├── PluginHandleController.java │ │ │ │ ├── ProxySelectorController.java │ │ │ │ ├── RegistryController.java │ │ │ │ ├── ResourceController.java │ │ │ │ ├── RoleController.java │ │ │ │ ├── RuleController.java │ │ │ │ ├── SandboxController.java │ │ │ │ ├── ScalePolicyController.java │ │ │ │ ├── ScaleRlueController.java │ │ │ │ ├── SelectorController.java │ │ │ │ ├── ShenyuClientHttpRegistryController.java │ │ │ │ ├── ShenyuDictController.java │ │ │ │ ├── SwaggerImportController.java │ │ │ │ ├── TagController.java │ │ │ │ └── TagRelationController.java │ │ │ ├── discovery/ │ │ │ │ ├── APDiscoveryProcessor.java │ │ │ │ ├── AbstractDiscoveryProcessor.java │ │ │ │ ├── DefaultDiscoveryProcessor.java │ │ │ │ ├── DiscoveryDataChangedEventSyncListener.java │ │ │ │ ├── DiscoveryLevel.java │ │ │ │ ├── DiscoveryMode.java │ │ │ │ ├── DiscoveryProcessor.java │ │ │ │ ├── DiscoveryProcessorHolder.java │ │ │ │ ├── LocalDiscoveryProcessor.java │ │ │ │ ├── listener/ │ │ │ │ │ ├── DataChangedEventListener.java │ │ │ │ │ └── DiscoveryDataChangedEvent.java │ │ │ │ └── parse/ │ │ │ │ ├── CustomDiscoveryUpstreamParser.java │ │ │ │ └── KeyValueParser.java │ │ │ ├── disruptor/ │ │ │ │ ├── RegisterClientServerDisruptorPublisher.java │ │ │ │ ├── executor/ │ │ │ │ │ └── RegisterServerConsumerExecutor.java │ │ │ │ └── subscriber/ │ │ │ │ ├── ApiDocExecutorSubscriber.java │ │ │ │ ├── DiscoveryConfigRegisterExecutorSubscriber.java │ │ │ │ ├── McpToolsRegisterExecutorSubscriber.java │ │ │ │ ├── MetadataExecutorSubscriber.java │ │ │ │ └── URIRegisterExecutorSubscriber.java │ │ │ ├── exception/ │ │ │ │ ├── ExceptionHandlers.java │ │ │ │ ├── I18nException.java │ │ │ │ ├── ResourceNotFoundException.java │ │ │ │ ├── ShenyuAdminException.java │ │ │ │ ├── ValidFailException.java │ │ │ │ └── WebI18nException.java │ │ │ ├── listener/ │ │ │ │ ├── AbstractDataChangedListener.java │ │ │ │ ├── AiProxySelectorResolverInvalidator.java │ │ │ │ ├── ApplicationStartListener.java │ │ │ │ ├── ConfigDataCache.java │ │ │ │ ├── DataChangedEvent.java │ │ │ │ ├── DataChangedEventDispatcher.java │ │ │ │ ├── RecordLogDataChangedAdapterListener.java │ │ │ │ ├── http/ │ │ │ │ │ └── HttpLongPollingDataChangedListener.java │ │ │ │ └── websocket/ │ │ │ │ ├── WebsocketCollector.java │ │ │ │ ├── WebsocketConfigurator.java │ │ │ │ ├── WebsocketDataChangedListener.java │ │ │ │ └── WebsocketListener.java │ │ │ ├── lock/ │ │ │ │ ├── RegisterExecutionLock.java │ │ │ │ ├── RegisterExecutionRepository.java │ │ │ │ ├── impl/ │ │ │ │ │ ├── ForUpdateBackedRegisterExecutionLock.java │ │ │ │ │ └── PlatformTransactionRegisterExecutionRepository.java │ │ │ │ └── util/ │ │ │ │ └── RegisterTransactionUtil.java │ │ │ ├── mapper/ │ │ │ │ ├── AiProxyApiKeyMapper.java │ │ │ │ ├── AlertReceiverMapper.java │ │ │ │ ├── ApiMapper.java │ │ │ │ ├── ApiRuleRelationMapper.java │ │ │ │ ├── AppAuthMapper.java │ │ │ │ ├── AuthParamMapper.java │ │ │ │ ├── AuthPathMapper.java │ │ │ │ ├── DashboardUserMapper.java │ │ │ │ ├── DataPermissionMapper.java │ │ │ │ ├── DetailMapper.java │ │ │ │ ├── DiscoveryHandlerMapper.java │ │ │ │ ├── DiscoveryMapper.java │ │ │ │ ├── DiscoveryRelMapper.java │ │ │ │ ├── DiscoveryUpstreamMapper.java │ │ │ │ ├── FieldMapper.java │ │ │ │ ├── InstanceInfoMapper.java │ │ │ │ ├── MetaDataMapper.java │ │ │ │ ├── MockRequestRecordMapper.java │ │ │ │ ├── ModelMapper.java │ │ │ │ ├── NamespaceMapper.java │ │ │ │ ├── NamespacePluginRelMapper.java │ │ │ │ ├── NamespaceUserRelMapper.java │ │ │ │ ├── OperationRecordLogMapper.java │ │ │ │ ├── ParameterMapper.java │ │ │ │ ├── PermissionMapper.java │ │ │ │ ├── PluginHandleMapper.java │ │ │ │ ├── PluginMapper.java │ │ │ │ ├── ProxySelectorMapper.java │ │ │ │ ├── RegistryMapper.java │ │ │ │ ├── ResourceMapper.java │ │ │ │ ├── RoleMapper.java │ │ │ │ ├── RuleConditionMapper.java │ │ │ │ ├── RuleMapper.java │ │ │ │ ├── ScaleHistoryMapper.java │ │ │ │ ├── ScalePolicyMapper.java │ │ │ │ ├── ScaleRuleMapper.java │ │ │ │ ├── SelectorConditionMapper.java │ │ │ │ ├── SelectorMapper.java │ │ │ │ ├── ShenyuDictMapper.java │ │ │ │ ├── TagMapper.java │ │ │ │ ├── TagRelationMapper.java │ │ │ │ └── UserRoleMapper.java │ │ │ ├── mode/ │ │ │ │ ├── ShenyuRunningModeService.java │ │ │ │ ├── cluster/ │ │ │ │ │ ├── filter/ │ │ │ │ │ │ └── ClusterForwardFilter.java │ │ │ │ │ ├── impl/ │ │ │ │ │ │ ├── jdbc/ │ │ │ │ │ │ │ ├── ClusterSelectMasterServiceJdbcImpl.java │ │ │ │ │ │ │ └── mapper/ │ │ │ │ │ │ │ └── ClusterMasterMapper.java │ │ │ │ │ │ └── zookeeper/ │ │ │ │ │ │ ├── ClusterSelectMasterServiceZookeeperImpl.java │ │ │ │ │ │ ├── ClusterZookeeperClient.java │ │ │ │ │ │ └── ClusterZookeeperConfig.java │ │ │ │ │ └── service/ │ │ │ │ │ ├── ClusterSelectMasterService.java │ │ │ │ │ └── ShenyuClusterService.java │ │ │ │ └── standalone/ │ │ │ │ └── ShenyuStandaloneService.java │ │ │ ├── model/ │ │ │ │ ├── bean/ │ │ │ │ │ ├── CustomCode.java │ │ │ │ │ ├── DocInfo.java │ │ │ │ │ ├── DocItem.java │ │ │ │ │ ├── DocModule.java │ │ │ │ │ ├── DocParameter.java │ │ │ │ │ └── UpstreamInstance.java │ │ │ │ ├── constant/ │ │ │ │ │ └── RegConstant.java │ │ │ │ ├── custom/ │ │ │ │ │ └── UserInfo.java │ │ │ │ ├── dto/ │ │ │ │ │ ├── ApiDTO.java │ │ │ │ │ ├── AppAuthDTO.java │ │ │ │ │ ├── AuthApplyDTO.java │ │ │ │ │ ├── AuthParamDTO.java │ │ │ │ │ ├── AuthPathApplyDTO.java │ │ │ │ │ ├── AuthPathDTO.java │ │ │ │ │ ├── AuthPathWarpDTO.java │ │ │ │ │ ├── BatchCommonDTO.java │ │ │ │ │ ├── BatchIdsDTO.java │ │ │ │ │ ├── BatchNamespaceCommonDTO.java │ │ │ │ │ ├── ClusterMasterDTO.java │ │ │ │ │ ├── CreateResourceDTO.java │ │ │ │ │ ├── DashboardUserDTO.java │ │ │ │ │ ├── DashboardUserModifyPasswordDTO.java │ │ │ │ │ ├── DataPermissionDTO.java │ │ │ │ │ ├── DetailDTO.java │ │ │ │ │ ├── DiscoveryDTO.java │ │ │ │ │ ├── DiscoveryHandlerDTO.java │ │ │ │ │ ├── DiscoveryRelDTO.java │ │ │ │ │ ├── DiscoveryUpstreamDTO.java │ │ │ │ │ ├── FieldDTO.java │ │ │ │ │ ├── MetaDataDTO.java │ │ │ │ │ ├── MockRequestRecordDTO.java │ │ │ │ │ ├── NamespaceDTO.java │ │ │ │ │ ├── NamespacePluginDTO.java │ │ │ │ │ ├── NamespaceSyncDTO.java │ │ │ │ │ ├── PermissionDTO.java │ │ │ │ │ ├── PluginDTO.java │ │ │ │ │ ├── PluginHandleDTO.java │ │ │ │ │ ├── ProxyApiKeyDTO.java │ │ │ │ │ ├── ProxyGatewayDTO.java │ │ │ │ │ ├── ProxySelectorAddDTO.java │ │ │ │ │ ├── ProxySelectorDTO.java │ │ │ │ │ ├── RegistryDTO.java │ │ │ │ │ ├── ResourceDTO.java │ │ │ │ │ ├── RoleDTO.java │ │ │ │ │ ├── RuleConditionDTO.java │ │ │ │ │ ├── RuleDTO.java │ │ │ │ │ ├── ScalePolicyDTO.java │ │ │ │ │ ├── ScaleRuleDTO.java │ │ │ │ │ ├── SelectorConditionDTO.java │ │ │ │ │ ├── SelectorDTO.java │ │ │ │ │ ├── ShenyuDictDTO.java │ │ │ │ │ ├── SwaggerImportRequest.java │ │ │ │ │ ├── TagDTO.java │ │ │ │ │ ├── TagRelationDTO.java │ │ │ │ │ └── UserRoleDTO.java │ │ │ │ ├── entity/ │ │ │ │ │ ├── AlertReceiverDO.java │ │ │ │ │ ├── ApiDO.java │ │ │ │ │ ├── ApiRuleRelationDO.java │ │ │ │ │ ├── AppAuthDO.java │ │ │ │ │ ├── AuthParamDO.java │ │ │ │ │ ├── AuthPathDO.java │ │ │ │ │ ├── BaseDO.java │ │ │ │ │ ├── ClusterMasterDO.java │ │ │ │ │ ├── DashboardUserDO.java │ │ │ │ │ ├── DataPermissionDO.java │ │ │ │ │ ├── DetailDO.java │ │ │ │ │ ├── DiscoveryDO.java │ │ │ │ │ ├── DiscoveryHandlerDO.java │ │ │ │ │ ├── DiscoveryRelDO.java │ │ │ │ │ ├── DiscoveryUpstreamDO.java │ │ │ │ │ ├── FieldDO.java │ │ │ │ │ ├── InstanceInfoDO.java │ │ │ │ │ ├── MetaDataDO.java │ │ │ │ │ ├── MockRequestRecordDO.java │ │ │ │ │ ├── ModelDO.java │ │ │ │ │ ├── NamespaceDO.java │ │ │ │ │ ├── NamespacePluginRelDO.java │ │ │ │ │ ├── NamespaceUserRelDO.java │ │ │ │ │ ├── OperationRecordLog.java │ │ │ │ │ ├── ParameterDO.java │ │ │ │ │ ├── PermissionDO.java │ │ │ │ │ ├── PluginDO.java │ │ │ │ │ ├── PluginHandleDO.java │ │ │ │ │ ├── ProxyApiKeyDO.java │ │ │ │ │ ├── ProxySelectorDO.java │ │ │ │ │ ├── RegistryDO.java │ │ │ │ │ ├── ResourceDO.java │ │ │ │ │ ├── RoleDO.java │ │ │ │ │ ├── RuleConditionDO.java │ │ │ │ │ ├── RuleDO.java │ │ │ │ │ ├── ScaleHistoryDO.java │ │ │ │ │ ├── ScalePolicyDO.java │ │ │ │ │ ├── ScaleRuleDO.java │ │ │ │ │ ├── SelectorConditionDO.java │ │ │ │ │ ├── SelectorDO.java │ │ │ │ │ ├── ShenyuDictDO.java │ │ │ │ │ ├── TagDO.java │ │ │ │ │ ├── TagRelationDO.java │ │ │ │ │ └── UserRoleDO.java │ │ │ │ ├── enums/ │ │ │ │ │ ├── DiscoveryTypeEnum.java │ │ │ │ │ └── EventTypeEnum.java │ │ │ │ ├── event/ │ │ │ │ │ ├── AdminDataModelChangedEvent.java │ │ │ │ │ ├── BatchChangedEvent.java │ │ │ │ │ ├── dict/ │ │ │ │ │ │ ├── BatchDictChangedEvent.java │ │ │ │ │ │ ├── BatchDictDeletedEvent.java │ │ │ │ │ │ ├── DictChangedEvent.java │ │ │ │ │ │ ├── DictCreatedEvent.java │ │ │ │ │ │ └── DictUpdatedEvent.java │ │ │ │ │ ├── discovery/ │ │ │ │ │ │ └── DiscoveryStreamUpdatedEvent.java │ │ │ │ │ ├── handle/ │ │ │ │ │ │ ├── BatchPluginHandleChangedEvent.java │ │ │ │ │ │ └── PluginHandleChangedEvent.java │ │ │ │ │ ├── instance/ │ │ │ │ │ │ └── InstanceInfoReportEvent.java │ │ │ │ │ ├── metadata/ │ │ │ │ │ │ ├── BatchMetaDataChangedEvent.java │ │ │ │ │ │ ├── BatchMetaDataDeletedEvent.java │ │ │ │ │ │ ├── MetaDataChangedEvent.java │ │ │ │ │ │ ├── MetaDataCreatedEvent.java │ │ │ │ │ │ └── MetadataUpdatedEvent.java │ │ │ │ │ ├── namespace/ │ │ │ │ │ │ └── NamespaceCreatedEvent.java │ │ │ │ │ ├── plugin/ │ │ │ │ │ │ ├── BatchNamespacePluginChangedEvent.java │ │ │ │ │ │ ├── BatchNamespacePluginDeletedEvent.java │ │ │ │ │ │ ├── BatchPluginChangedEvent.java │ │ │ │ │ │ ├── BatchPluginDeletedEvent.java │ │ │ │ │ │ ├── NamespacePluginChangedEvent.java │ │ │ │ │ │ ├── NamespacePluginCreatedEvent.java │ │ │ │ │ │ ├── PluginChangedEvent.java │ │ │ │ │ │ └── PluginCreatedEvent.java │ │ │ │ │ ├── resource/ │ │ │ │ │ │ ├── BatchResourceCreatedEvent.java │ │ │ │ │ │ ├── BatchResourceDeletedEvent.java │ │ │ │ │ │ ├── ResourceChangedEvent.java │ │ │ │ │ │ └── ResourceCreatedEvent.java │ │ │ │ │ ├── role/ │ │ │ │ │ │ ├── BatchRoleDeletedEvent.java │ │ │ │ │ │ ├── RoleChangedEvent.java │ │ │ │ │ │ ├── RoleCreatedEvent.java │ │ │ │ │ │ └── RoleUpdatedEvent.java │ │ │ │ │ ├── rule/ │ │ │ │ │ │ ├── BatchRuleDeletedEvent.java │ │ │ │ │ │ ├── RuleChangedEvent.java │ │ │ │ │ │ ├── RuleCreatedEvent.java │ │ │ │ │ │ └── RuleUpdatedEvent.java │ │ │ │ │ ├── selector/ │ │ │ │ │ │ ├── BatchSelectorDeletedEvent.java │ │ │ │ │ │ ├── SelectorChangedEvent.java │ │ │ │ │ │ ├── SelectorCreatedEvent.java │ │ │ │ │ │ └── SelectorUpdatedEvent.java │ │ │ │ │ └── user/ │ │ │ │ │ ├── BatchUserDeletedEvent.java │ │ │ │ │ ├── UserChangedEvent.java │ │ │ │ │ ├── UserCreatedEvent.java │ │ │ │ │ └── UserUpdatedEvent.java │ │ │ │ ├── page/ │ │ │ │ │ ├── CommonPager.java │ │ │ │ │ ├── PageCondition.java │ │ │ │ │ ├── PageParameter.java │ │ │ │ │ ├── PageResultUtils.java │ │ │ │ │ └── condition/ │ │ │ │ │ ├── BaseExcludedSearchCondition.java │ │ │ │ │ ├── SearchCondition.java │ │ │ │ │ └── SwitchCondition.java │ │ │ │ ├── query/ │ │ │ │ │ ├── AlertReceiverQuery.java │ │ │ │ │ ├── ApiQuery.java │ │ │ │ │ ├── AppAuthQuery.java │ │ │ │ │ ├── DashboardUserQuery.java │ │ │ │ │ ├── DataPermissionQuery.java │ │ │ │ │ ├── DetailQuery.java │ │ │ │ │ ├── FieldQuery.java │ │ │ │ │ ├── FilterQuery.java │ │ │ │ │ ├── InstanceQuery.java │ │ │ │ │ ├── InstanceQueryCondition.java │ │ │ │ │ ├── MetaDataQuery.java │ │ │ │ │ ├── MockRequestRecordQuery.java │ │ │ │ │ ├── NamespacePluginQuery.java │ │ │ │ │ ├── NamespacePluginQueryCondition.java │ │ │ │ │ ├── NamespaceQuery.java │ │ │ │ │ ├── NamespaceUserQuery.java │ │ │ │ │ ├── PermissionQuery.java │ │ │ │ │ ├── PluginHandleQuery.java │ │ │ │ │ ├── PluginQuery.java │ │ │ │ │ ├── PluginQueryCondition.java │ │ │ │ │ ├── ProxyApiKeyQuery.java │ │ │ │ │ ├── ProxySelectorQuery.java │ │ │ │ │ ├── RecordLogQueryCondition.java │ │ │ │ │ ├── RegistryQuery.java │ │ │ │ │ ├── ResourceQuery.java │ │ │ │ │ ├── RoleQuery.java │ │ │ │ │ ├── RuleConditionQuery.java │ │ │ │ │ ├── RuleQuery.java │ │ │ │ │ ├── RuleQueryCondition.java │ │ │ │ │ ├── ScaleRuleQuery.java │ │ │ │ │ ├── SelectorConditionQuery.java │ │ │ │ │ ├── SelectorQuery.java │ │ │ │ │ ├── SelectorQueryCondition.java │ │ │ │ │ ├── ShenyuDictQuery.java │ │ │ │ │ ├── TagQuery.java │ │ │ │ │ └── TagRelationQuery.java │ │ │ │ ├── result/ │ │ │ │ │ ├── AdminResult.java │ │ │ │ │ ├── ConfigImportResult.java │ │ │ │ │ └── ShenyuAdminResult.java │ │ │ │ └── vo/ │ │ │ │ ├── AlertTemplateVO.java │ │ │ │ ├── ApiVO.java │ │ │ │ ├── AppAuthVO.java │ │ │ │ ├── AuthParamVO.java │ │ │ │ ├── AuthPathVO.java │ │ │ │ ├── DashboardUserEditVO.java │ │ │ │ ├── DashboardUserVO.java │ │ │ │ ├── DataPermissionPageVO.java │ │ │ │ ├── DetailVO.java │ │ │ │ ├── DiscoveryHandlerVO.java │ │ │ │ ├── DiscoveryRelVO.java │ │ │ │ ├── DiscoveryUpstreamVO.java │ │ │ │ ├── DiscoveryVO.java │ │ │ │ ├── DocVO.java │ │ │ │ ├── EnumVO.java │ │ │ │ ├── FieldVO.java │ │ │ │ ├── InstanceDataVisualLineVO.java │ │ │ │ ├── InstanceDataVisualVO.java │ │ │ │ ├── InstanceInfoVO.java │ │ │ │ ├── LoginDashboardUserVO.java │ │ │ │ ├── MenuDocItemVO.java │ │ │ │ ├── MenuModuleVO.java │ │ │ │ ├── MenuProjectVO.java │ │ │ │ ├── MetaDataVO.java │ │ │ │ ├── MockRequestRecordVO.java │ │ │ │ ├── NamespacePluginVO.java │ │ │ │ ├── NamespaceUserRelVO.java │ │ │ │ ├── NamespaceVO.java │ │ │ │ ├── PermissionMenuVO.java │ │ │ │ ├── PluginHandleVO.java │ │ │ │ ├── PluginSnapshotVO.java │ │ │ │ ├── PluginVO.java │ │ │ │ ├── ProxyApiKeyVO.java │ │ │ │ ├── ProxySelectorVO.java │ │ │ │ ├── RegistryVO.java │ │ │ │ ├── ResourceVO.java │ │ │ │ ├── RoleEditVO.java │ │ │ │ ├── RoleVO.java │ │ │ │ ├── RuleConditionVO.java │ │ │ │ ├── RuleVO.java │ │ │ │ ├── ScalePolicyVO.java │ │ │ │ ├── ScaleRuleVO.java │ │ │ │ ├── SelectorConditionVO.java │ │ │ │ ├── SelectorVO.java │ │ │ │ ├── ShenyuDictVO.java │ │ │ │ ├── TagVO.java │ │ │ │ └── UserRoleVO.java │ │ │ ├── mybatis/ │ │ │ │ ├── handler/ │ │ │ │ │ ├── AbstractObjectTypeHandler.java │ │ │ │ │ ├── ListByteTypeHandler.java │ │ │ │ │ └── MapStringTypeHandler.java │ │ │ │ ├── og/ │ │ │ │ │ ├── handler/ │ │ │ │ │ │ └── OpenGaussSQLBooleanHandler.java │ │ │ │ │ └── interceptor/ │ │ │ │ │ ├── OpenGaussSQLPrepareInterceptor.java │ │ │ │ │ ├── OpenGaussSQLQueryInterceptor.java │ │ │ │ │ └── OpenGaussSqlUpdateInterceptor.java │ │ │ │ ├── oracle/ │ │ │ │ │ ├── OracleSQLPrepareInterceptor.java │ │ │ │ │ └── OracleSQLUpdateInterceptor.java │ │ │ │ └── pg/ │ │ │ │ ├── handler/ │ │ │ │ │ └── PostgreSQLBooleanHandler.java │ │ │ │ └── interceptor/ │ │ │ │ ├── PostgreSQLPrepareInterceptor.java │ │ │ │ ├── PostgreSQLQueryInterceptor.java │ │ │ │ └── PostgreSqlUpdateInterceptor.java │ │ │ ├── register/ │ │ │ │ ├── ShenyuClientServerRegisterPublisher.java │ │ │ │ └── ShenyuClientServerRegisterRepository.java │ │ │ ├── scale/ │ │ │ │ ├── collector/ │ │ │ │ │ ├── PrometheusMetricsProvider.java │ │ │ │ │ └── provider/ │ │ │ │ │ ├── MetricData.java │ │ │ │ │ └── MetricsProvider.java │ │ │ │ ├── config/ │ │ │ │ │ ├── PrometheusProperties.java │ │ │ │ │ └── ScaleProperties.java │ │ │ │ ├── monitor/ │ │ │ │ │ ├── observer/ │ │ │ │ │ │ ├── Observer.java │ │ │ │ │ │ └── ScaleObserver.java │ │ │ │ │ └── subject/ │ │ │ │ │ ├── MetricsMonitor.java │ │ │ │ │ ├── Subject.java │ │ │ │ │ └── cache/ │ │ │ │ │ └── ScaleRuleCache.java │ │ │ │ └── scaler/ │ │ │ │ ├── KubernetesScaler.java │ │ │ │ ├── ScaleService.java │ │ │ │ ├── ScaleTaskInitializer.java │ │ │ │ ├── cache/ │ │ │ │ │ └── ScalePolicyCache.java │ │ │ │ └── dynamic/ │ │ │ │ ├── ScaleAction.java │ │ │ │ ├── ScaleRuleEvaluator.java │ │ │ │ └── TaskSchedulerManager.java │ │ │ ├── service/ │ │ │ │ ├── AiProxyApiKeyService.java │ │ │ │ ├── AiProxyConnectionService.java │ │ │ │ ├── AlertDispatchService.java │ │ │ │ ├── AlertReceiverService.java │ │ │ │ ├── ApiService.java │ │ │ │ ├── AppAuthService.java │ │ │ │ ├── ConfigsService.java │ │ │ │ ├── DashboardUserService.java │ │ │ │ ├── DataPermissionService.java │ │ │ │ ├── DetailService.java │ │ │ │ ├── DiscoveryService.java │ │ │ │ ├── DiscoveryUpstreamService.java │ │ │ │ ├── EnumService.java │ │ │ │ ├── FieldService.java │ │ │ │ ├── InstanceInfoService.java │ │ │ │ ├── MetaDataService.java │ │ │ │ ├── MockRequestRecordService.java │ │ │ │ ├── NamespacePluginService.java │ │ │ │ ├── NamespaceService.java │ │ │ │ ├── NamespaceUserService.java │ │ │ │ ├── OperationRecordLogService.java │ │ │ │ ├── PageService.java │ │ │ │ ├── PermissionService.java │ │ │ │ ├── PluginHandleService.java │ │ │ │ ├── PluginService.java │ │ │ │ ├── ProxySelectorService.java │ │ │ │ ├── RegistryService.java │ │ │ │ ├── ResourceService.java │ │ │ │ ├── RoleService.java │ │ │ │ ├── RuleService.java │ │ │ │ ├── SandboxService.java │ │ │ │ ├── ScalePolicyService.java │ │ │ │ ├── ScaleRuleService.java │ │ │ │ ├── SecretService.java │ │ │ │ ├── SelectorService.java │ │ │ │ ├── ShenyuDictService.java │ │ │ │ ├── SwaggerImportService.java │ │ │ │ ├── TagRelationService.java │ │ │ │ ├── TagService.java │ │ │ │ ├── configs/ │ │ │ │ │ ├── AuthConfigsExportImportHandler.java │ │ │ │ │ ├── ConfigsExportImportEnum.java │ │ │ │ │ ├── ConfigsExportImportHandler.java │ │ │ │ │ ├── ConfigsImportContext.java │ │ │ │ │ ├── DictDataConfigsExportImportHandler.java │ │ │ │ │ ├── DiscoveryDataConfigsExportImportHandler.java │ │ │ │ │ ├── DiscoveryUpstreamDataConfigsExportImportHandler.java │ │ │ │ │ ├── MetadataConfigsExportImportHandler.java │ │ │ │ │ ├── NamespacePluginDataConfigsExportImportHandler.java │ │ │ │ │ ├── PluginHandleDataConfigsExportImportHandler.java │ │ │ │ │ ├── PluginTemplateDataConfigsExportImportHandler.java │ │ │ │ │ ├── ProxySelectorDataConfigsExportImportHandler.java │ │ │ │ │ ├── RuleDataConfigsExportImportHandler.java │ │ │ │ │ └── SelectorDataConfigsExportImportHandler.java │ │ │ │ ├── converter/ │ │ │ │ │ ├── AbstractSelectorHandleConverter.java │ │ │ │ │ ├── DivideSelectorHandleConverter.java │ │ │ │ │ ├── DubboSelectorHandleConverter.java │ │ │ │ │ ├── GrpcSelectorHandleConverter.java │ │ │ │ │ ├── SelectorHandleConverter.java │ │ │ │ │ ├── SelectorHandleConverterFactor.java │ │ │ │ │ └── TarsSelectorHandleConverter.java │ │ │ │ ├── impl/ │ │ │ │ │ ├── AiProxyApiKeyServiceImpl.java │ │ │ │ │ ├── AiProxyConnectionServiceImpl.java │ │ │ │ │ ├── AlertDispatchServiceImpl.java │ │ │ │ │ ├── AlertReceiverServiceImpl.java │ │ │ │ │ ├── ApiServiceImpl.java │ │ │ │ │ ├── AppAuthServiceImpl.java │ │ │ │ │ ├── ConfigsServiceImpl.java │ │ │ │ │ ├── DashboardUserServiceImpl.java │ │ │ │ │ ├── DataPermissionServiceImpl.java │ │ │ │ │ ├── DetailServiceImpl.java │ │ │ │ │ ├── DiscoveryServiceImpl.java │ │ │ │ │ ├── DiscoveryUpstreamServiceImpl.java │ │ │ │ │ ├── EnumServiceImpl.java │ │ │ │ │ ├── FieldServiceImpl.java │ │ │ │ │ ├── InstanceCheckService.java │ │ │ │ │ ├── InstanceInfoServiceImpl.java │ │ │ │ │ ├── MetaDataServiceImpl.java │ │ │ │ │ ├── MockRequestRecordServiceImpl.java │ │ │ │ │ ├── NamespacePluginServiceImpl.java │ │ │ │ │ ├── NamespaceServiceImpl.java │ │ │ │ │ ├── NamespaceUserServiceImpl.java │ │ │ │ │ ├── OperationRecordLogServiceImpl.java │ │ │ │ │ ├── PermissionServiceImpl.java │ │ │ │ │ ├── PluginHandleServiceImpl.java │ │ │ │ │ ├── PluginServiceImpl.java │ │ │ │ │ ├── ProxySelectorServiceImpl.java │ │ │ │ │ ├── RegistryServiceImpl.java │ │ │ │ │ ├── ResourceServiceImpl.java │ │ │ │ │ ├── RoleServiceImpl.java │ │ │ │ │ ├── RuleServiceImpl.java │ │ │ │ │ ├── SandboxServiceImpl.java │ │ │ │ │ ├── ScalePolicyServiceImpl.java │ │ │ │ │ ├── ScaleRuleServiceImpl.java │ │ │ │ │ ├── SecretServiceImpl.java │ │ │ │ │ ├── SelectorServiceImpl.java │ │ │ │ │ ├── ShenyuDictServiceImpl.java │ │ │ │ │ ├── SwaggerImportServiceImpl.java │ │ │ │ │ ├── SyncDataServiceImpl.java │ │ │ │ │ ├── TagRelationServiceImpl.java │ │ │ │ │ ├── TagServiceImpl.java │ │ │ │ │ └── UpstreamCheckService.java │ │ │ │ ├── manager/ │ │ │ │ │ ├── DocManager.java │ │ │ │ │ ├── DocParser.java │ │ │ │ │ ├── LoadServiceDocEntry.java │ │ │ │ │ ├── PullSwaggerDocService.java │ │ │ │ │ ├── RegisterApiDocService.java │ │ │ │ │ └── impl/ │ │ │ │ │ ├── DocManagerImpl.java │ │ │ │ │ ├── LoadServiceDocEntryImpl.java │ │ │ │ │ ├── PullSwaggerDocServiceImpl.java │ │ │ │ │ ├── RegisterApiDocServiceImpl.java │ │ │ │ │ └── SwaggerDocParser.java │ │ │ │ ├── provider/ │ │ │ │ │ ├── AppKeyProvider.java │ │ │ │ │ └── PluginNameProvider.java │ │ │ │ ├── publish/ │ │ │ │ │ ├── AdminDataModelChangedEventPublisher.java │ │ │ │ │ ├── DictEventPublisher.java │ │ │ │ │ ├── InstanceInfoReportEventPublisher.java │ │ │ │ │ ├── MetaDataEventPublisher.java │ │ │ │ │ ├── NamespaceEventPublisher.java │ │ │ │ │ ├── NamespacePluginEventPublisher.java │ │ │ │ │ ├── PluginEventPublisher.java │ │ │ │ │ ├── PluginHandleEventPublisher.java │ │ │ │ │ ├── ResourceEventPublisher.java │ │ │ │ │ ├── RoleEventPublisher.java │ │ │ │ │ ├── RuleEventPublisher.java │ │ │ │ │ ├── SelectorEventPublisher.java │ │ │ │ │ └── UserEventPublisher.java │ │ │ │ ├── register/ │ │ │ │ │ ├── AbstractContextPathRegisterService.java │ │ │ │ │ ├── AbstractShenyuClientRegisterServiceImpl.java │ │ │ │ │ ├── FallbackShenyuClientRegisterService.java │ │ │ │ │ ├── ShenyuClientRegisterDivideServiceImpl.java │ │ │ │ │ ├── ShenyuClientRegisterDubboServiceImpl.java │ │ │ │ │ ├── ShenyuClientRegisterGrpcServiceImpl.java │ │ │ │ │ ├── ShenyuClientRegisterMcpServiceImpl.java │ │ │ │ │ ├── ShenyuClientRegisterMotanServiceImpl.java │ │ │ │ │ ├── ShenyuClientRegisterService.java │ │ │ │ │ ├── ShenyuClientRegisterSofaServiceImpl.java │ │ │ │ │ ├── ShenyuClientRegisterTarsServiceImpl.java │ │ │ │ │ └── ShenyuClientRegisterWebSocketServiceImpl.java │ │ │ │ └── support/ │ │ │ │ └── AiProxyRealKeyResolver.java │ │ │ ├── shiro/ │ │ │ │ ├── bean/ │ │ │ │ │ └── StatelessAuthFilter.java │ │ │ │ └── config/ │ │ │ │ ├── ShiroConfiguration.java │ │ │ │ └── ShiroRealm.java │ │ │ ├── spring/ │ │ │ │ ├── LocalDataSourceLoader.java │ │ │ │ ├── ResourcePermissionDataSourceLoader.java │ │ │ │ ├── ShenyuApplicationContextAware.java │ │ │ │ └── SpringBeanUtils.java │ │ │ ├── transfer/ │ │ │ │ ├── AlertTransfer.java │ │ │ │ ├── AppAuthTransfer.java │ │ │ │ ├── ClusterMasterTransfer.java │ │ │ │ ├── ConditionTransfer.java │ │ │ │ ├── DashboardUserTransfer.java │ │ │ │ ├── DiscoveryTransfer.java │ │ │ │ ├── MetaDataTransfer.java │ │ │ │ ├── NamespaceTransfer.java │ │ │ │ ├── PluginTransfer.java │ │ │ │ ├── ProxyApiKeyTransfer.java │ │ │ │ └── RegistryTransfer.java │ │ │ ├── utils/ │ │ │ │ ├── Assert.java │ │ │ │ ├── BaseTrigger.java │ │ │ │ ├── CommonUpstreamUtils.java │ │ │ │ ├── FailI18nMessage.java │ │ │ │ ├── HttpUtils.java │ │ │ │ ├── JwtUtils.java │ │ │ │ ├── NamespaceUtils.java │ │ │ │ ├── PluginHandleH2Trigger.java │ │ │ │ ├── ResourceUtil.java │ │ │ │ ├── ResultUtil.java │ │ │ │ ├── SelectorUtil.java │ │ │ │ ├── SessionUtil.java │ │ │ │ ├── ShenyuDictH2Trigger.java │ │ │ │ ├── ShenyuDomain.java │ │ │ │ ├── ShenyuResultMessage.java │ │ │ │ ├── ShenyuSignatureUtils.java │ │ │ │ ├── ThreadLocalUtils.java │ │ │ │ ├── UploadUtils.java │ │ │ │ ├── UrlSecurityUtils.java │ │ │ │ ├── WebI18nAssert.java │ │ │ │ └── ZipUtil.java │ │ │ └── validation/ │ │ │ ├── ExistProvider.java │ │ │ ├── annotation/ │ │ │ │ └── Existed.java │ │ │ └── validator/ │ │ │ └── ExistedValidator.java │ │ └── resources/ │ │ ├── META-INF/ │ │ │ ├── shenyu/ │ │ │ │ └── org.apache.shenyu.admin.register.ShenyuClientServerRegisterRepository │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ ├── application-h2.yml │ │ ├── application-mysql.yml │ │ ├── application-ob.yml │ │ ├── application-og.yml │ │ ├── application-oracle.yml │ │ ├── application-pg.yml │ │ ├── application.yml │ │ ├── banner.txt │ │ ├── logback.xml │ │ ├── mappers/ │ │ │ ├── ai-proxy-api-key-sqlmap.xml │ │ │ ├── alert-receiver-sqlmap.xml │ │ │ ├── api-rule-relation-sqlmap.xml │ │ │ ├── api-sqlmap.xml │ │ │ ├── app-auth-sqlmap.xml │ │ │ ├── auth-param-sqlmap.xml │ │ │ ├── auth-path-sqlmap.xml │ │ │ ├── cluster-master-sqlmap.xml │ │ │ ├── dashboard-user-sqlmap.xml │ │ │ ├── data-permission-sqlmap.xml │ │ │ ├── detail-sqlmap.xml │ │ │ ├── discovery-handler-sqlmap.xml │ │ │ ├── discovery-rel-sqlmap.xml │ │ │ ├── discovery-sqlmap.xml │ │ │ ├── discovery-upstream-sqlmap.xml │ │ │ ├── field-sqlmap.xml │ │ │ ├── instance-info-sqlmap.xml │ │ │ ├── meta-data-sqlmap.xml │ │ │ ├── mock-request-record-sqlmap.xml │ │ │ ├── model-sqlmap.xml │ │ │ ├── namespace-plugin-rel-sqlmap.xml │ │ │ ├── namespace-sqlmap.xml │ │ │ ├── namespace-user-rel-sqlmap.xml │ │ │ ├── operation-record-log-sqlmap.xml │ │ │ ├── parameter-sqlmap.xml │ │ │ ├── permission-sqlmap.xml │ │ │ ├── plugin-handle-sqlmap.xml │ │ │ ├── plugin-sqlmap.xml │ │ │ ├── proxy-selector-sqlmap.xml │ │ │ ├── registry-sqlmap.xml │ │ │ ├── resouce-sqlmap.xml │ │ │ ├── role-sqlmap.xml │ │ │ ├── rule-condition-sqlmap.xml │ │ │ ├── rule-sqlmap.xml │ │ │ ├── scale-history-sqlmap.xml │ │ │ ├── scale-policy-sqlmap.xml │ │ │ ├── scale-rule-sqlmap.xml │ │ │ ├── selector-condition-sqlmap.xml │ │ │ ├── selector-sqlmap.xml │ │ │ ├── shenyu-dict-sqlmap.xml │ │ │ ├── tag-relation-sqlmap.xml │ │ │ ├── tag-sqlmap.xml │ │ │ └── user-role-sqlmap.xml │ │ ├── message/ │ │ │ ├── i18n.properties │ │ │ ├── i18n_en_US.properties │ │ │ └── i18n_zh_CN.properties │ │ ├── mybatis/ │ │ │ └── mybatis-config.xml │ │ ├── sql-script/ │ │ │ └── h2/ │ │ │ └── schema.sql │ │ └── static/ │ │ ├── index.7892d888.css │ │ ├── index.814edc73.js │ │ └── index.html │ └── test/ │ ├── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── admin/ │ │ ├── AbstractConfigurationTest.java │ │ ├── AbstractReflectGetterSetterTest.java │ │ ├── AbstractSpringIntegrationTest.java │ │ ├── aspect/ │ │ │ ├── DataPermissionAspectTest.java │ │ │ ├── PageableAspectTest.java │ │ │ └── PrintApiLogAspectTest.java │ │ ├── config/ │ │ │ ├── DataBaseConfigurationTest.java │ │ │ ├── HttpLongPollingSyncConfigurationTest.java │ │ │ ├── LdapConfigurationTest.java │ │ │ ├── MapperConfigTest.java │ │ │ ├── RegisterCenterConfigurationTest.java │ │ │ ├── SecretPropertiesTest.java │ │ │ ├── ShenyuAdminConfigurationTest.java │ │ │ ├── SwaggerConfigurationTest.java │ │ │ ├── WebConfigurationTest.java │ │ │ ├── WebSocketSyncConfigurationTest.java │ │ │ └── properties/ │ │ │ ├── DashboardPropertiesTest.java │ │ │ ├── HttpSyncPropertiesTest.java │ │ │ ├── JwtPropertiesTest.java │ │ │ ├── LdapPropertiesTest.java │ │ │ └── WebsocketSyncPropertiesTest.java │ │ ├── controller/ │ │ │ ├── ApiControllerTest.java │ │ │ ├── ApiDocControllerTest.java │ │ │ ├── AppAuthControllerTest.java │ │ │ ├── ConfigControllerTest.java │ │ │ ├── ConfigsExportImportControllerTest.java │ │ │ ├── DashboardUserControllerTest.java │ │ │ ├── DataPermissionControllerTest.java │ │ │ ├── IndexControllerTest.java │ │ │ ├── InstanceControllerTest.java │ │ │ ├── MetaDataControllerTest.java │ │ │ ├── MockRequestRecordControllerTest.java │ │ │ ├── OperationRecordLogControllerTest.java │ │ │ ├── PermissionControllerTest.java │ │ │ ├── PlatformControllerTest.java │ │ │ ├── PluginControllerTest.java │ │ │ ├── PluginHandleControllerTest.java │ │ │ ├── ResourceControllerTest.java │ │ │ ├── RoleControllerTest.java │ │ │ ├── RuleControllerTest.java │ │ │ ├── SandboxControllerTest.java │ │ │ ├── SelectorControllerTest.java │ │ │ ├── ShenyuDictControllerTest.java │ │ │ ├── ShenyuHttpRegistryControllerTest.java │ │ │ ├── TagControllerTest.java │ │ │ └── TagRelationControllerTest.java │ │ ├── discovery/ │ │ │ ├── DefaultDiscoveryProcessorTest.java │ │ │ ├── DiscoveryDataChangedEventSyncListenerTest.java │ │ │ ├── DiscoveryLevelTest.java │ │ │ ├── DiscoveryModeTest.java │ │ │ ├── DiscoveryProcessorHolderTest.java │ │ │ ├── LocalDiscoveryProcessorTest.java │ │ │ └── parse/ │ │ │ └── CustomDiscoveryUpstreamParserTest.java │ │ ├── disruptor/ │ │ │ └── subscriber/ │ │ │ ├── MetadataExecutorSubscriberTest.java │ │ │ └── URIRegisterExecutorSubscriberTest.java │ │ ├── exception/ │ │ │ └── ExceptionHandlersTest.java │ │ ├── listener/ │ │ │ ├── AbstractDataChangedListenerTest.java │ │ │ ├── ApplicationStartListenerTest.java │ │ │ ├── ConfigDataCacheTest.java │ │ │ ├── DataChangedEventDispatcherTest.java │ │ │ ├── http/ │ │ │ │ └── HttpLongPollingDataChangedListenerTest.java │ │ │ └── websocket/ │ │ │ ├── WebsocketCollectorTest.java │ │ │ ├── WebsocketConfiguratorTest.java │ │ │ ├── WebsocketDataChangedListenerTest.java │ │ │ └── WebsocketListenerTest.java │ │ ├── lock/ │ │ │ ├── ForUpdateBackedRegisterExecutionLockTest.java │ │ │ └── RegisterExecutionRepositoryTest.java │ │ ├── mapper/ │ │ │ ├── ApiMapperTest.java │ │ │ ├── ApiRuleRelationMapperTest.java │ │ │ ├── AppAuthMapperTest.java │ │ │ ├── AuthParamMapperTest.java │ │ │ ├── AuthPathMapperTest.java │ │ │ ├── DashboardUserMapperTest.java │ │ │ ├── DataPermissionMapperTest.java │ │ │ ├── DetailMapperTest.java │ │ │ ├── DiscoveryHandlerMapperTest.java │ │ │ ├── DiscoveryUpstreamMapperTest.java │ │ │ ├── FieldMapperTest.java │ │ │ ├── InstanceInfoMapperTest.java │ │ │ ├── MetaDataMapperTest.java │ │ │ ├── MockRequestRecordMapperTest.java │ │ │ ├── ModelMapperTest.java │ │ │ ├── NamespacePluginRelMapperTest.java │ │ │ ├── OperationRecordLogMapperTest.java │ │ │ ├── ParameterMapperTest.java │ │ │ ├── PermissionMapperTest.java │ │ │ ├── PluginHandleMapperTest.java │ │ │ ├── PluginMapperTest.java │ │ │ ├── ProxySelectorMapperTest.java │ │ │ ├── ResourceMapperTest.java │ │ │ ├── RoleMapperTest.java │ │ │ ├── RuleConditionMapperTest.java │ │ │ ├── RuleMapperTest.java │ │ │ ├── SelectorConditionMapperTest.java │ │ │ ├── SelectorMapperTest.java │ │ │ ├── ShenyuDictMapperTest.java │ │ │ ├── TagMapperTest.java │ │ │ ├── TagRelationMapperTest.java │ │ │ └── UserRoleMapperTest.java │ │ ├── model/ │ │ │ ├── bean/ │ │ │ │ ├── DocParameterTest.java │ │ │ │ └── UpstreamInstanceTest.java │ │ │ ├── dto/ │ │ │ │ └── AuthPathApplyDTOTest.java │ │ │ ├── event/ │ │ │ │ ├── dict/ │ │ │ │ │ ├── BatchDictChangedEventTest.java │ │ │ │ │ ├── BatchDictDeletedEventTest.java │ │ │ │ │ ├── DictCreatedEventTest.java │ │ │ │ │ └── DictUpdatedEventTest.java │ │ │ │ ├── handle/ │ │ │ │ │ ├── BatchPluginHandleChangedEventTest.java │ │ │ │ │ └── PluginHandleChangedEventTest.java │ │ │ │ ├── instance/ │ │ │ │ │ └── InstanceInfoReportEventTest.java │ │ │ │ ├── metadata/ │ │ │ │ │ ├── BatchMetaDataChangedEventTest.java │ │ │ │ │ ├── BatchMetaDataDeletedEventTest.java │ │ │ │ │ ├── MetaDataChangedEventTest.java │ │ │ │ │ ├── MetaDataCreatedEventTest.java │ │ │ │ │ └── MetadataUpdatedEventTest.java │ │ │ │ ├── plugin/ │ │ │ │ │ ├── BatchNamespacePluginDeletedEventTest.java │ │ │ │ │ ├── BatchPluginChangedEventTest.java │ │ │ │ │ ├── PluginChangedEventTest.java │ │ │ │ │ └── PluginCreatedEventTest.java │ │ │ │ ├── resource/ │ │ │ │ │ ├── BatchResourceCreatedEventTest.java │ │ │ │ │ ├── BatchResourceDeletedEventTest.java │ │ │ │ │ ├── ResourceChangedEventTest.java │ │ │ │ │ └── ResourceCreatedEventTest.java │ │ │ │ ├── role/ │ │ │ │ │ ├── BatchRoleDeletedEventTest.java │ │ │ │ │ ├── RoleChangedEventTest.java │ │ │ │ │ ├── RoleCreatedEventTest.java │ │ │ │ │ └── RoleUpdatedEventTest.java │ │ │ │ ├── selector/ │ │ │ │ │ ├── BatchSelectorDeletedEventTest.java │ │ │ │ │ ├── SelectorChangedEventTest.java │ │ │ │ │ ├── SelectorCreatedEventTest.java │ │ │ │ │ └── SelectorUpdatedEventTest.java │ │ │ │ └── user/ │ │ │ │ ├── BatchUserDeletedEventTest.java │ │ │ │ ├── UserCreatedEventTest.java │ │ │ │ └── UserUpdatedEventTest.java │ │ │ ├── page/ │ │ │ │ ├── PageParameterTest.java │ │ │ │ └── PageResultUtilsTest.java │ │ │ ├── query/ │ │ │ │ ├── AppAuthQueryTest.java │ │ │ │ ├── DashboardUserQueryTest.java │ │ │ │ ├── DataPermissionQueryTest.java │ │ │ │ ├── InstanceQueryConditionTest.java │ │ │ │ ├── MetaDataQueryTest.java │ │ │ │ ├── PluginHandleQueryTest.java │ │ │ │ ├── PluginQueryTest.java │ │ │ │ ├── RuleConditionQueryTest.java │ │ │ │ ├── RuleQueryTest.java │ │ │ │ ├── SelectorConditionQueryTest.java │ │ │ │ ├── SelectorQueryTest.java │ │ │ │ ├── ShenyuDictQueryTest.java │ │ │ │ └── TagRelationQueryTest.java │ │ │ ├── result/ │ │ │ │ └── ShenyuAdminResultTest.java │ │ │ └── vo/ │ │ │ ├── AppAuthVOTest.java │ │ │ ├── AuthParamVOTest.java │ │ │ ├── AuthPathVOTest.java │ │ │ ├── DashboardUserVOTest.java │ │ │ ├── EnumVOTest.java │ │ │ ├── InstanceDataVisualLineVOTest.java │ │ │ ├── InstanceDataVisualVOTest.java │ │ │ ├── InstanceInfoVOTest.java │ │ │ ├── MetaDataVOTest.java │ │ │ ├── PluginHandleVOTest.java │ │ │ ├── PluginVOTest.java │ │ │ ├── RuleConditionVOTest.java │ │ │ ├── RuleVOTest.java │ │ │ ├── SelectorConditionVOTest.java │ │ │ ├── SelectorVOTest.java │ │ │ ├── ShenyuDictVOTest.java │ │ │ └── UserRoleVOTest.java │ │ ├── mybatis/ │ │ │ ├── og/ │ │ │ │ ├── handler/ │ │ │ │ │ └── OpenGaussSQLBooleanHandlerTest.java │ │ │ │ └── interceptor/ │ │ │ │ ├── OpenGaussSQLPrepareInterceptorTest.java │ │ │ │ ├── OpenGaussSQLQueryInterceptorTest.java │ │ │ │ └── OpenGaussSqlUpdateInterceptorTest.java │ │ │ ├── oracle/ │ │ │ │ └── OracleSQLPrepareInterceptorTest.java │ │ │ └── pg/ │ │ │ ├── handler/ │ │ │ │ └── PostgreSQLBooleanHandlerTest.java │ │ │ └── interceptor/ │ │ │ ├── PostgreSQLPrepareInterceptorTest.java │ │ │ ├── PostgreSQLQueryInterceptorTest.java │ │ │ └── PostgreSqlUpdateInterceptorTest.java │ │ ├── service/ │ │ │ ├── AlertDispatchServiceTest.java │ │ │ ├── AlertReceiverServiceTest.java │ │ │ ├── ApiServiceTest.java │ │ │ ├── AppAuthServiceTest.java │ │ │ ├── ClusterSelectMasterServiceJdbcImplTest.java │ │ │ ├── ConfigsServiceTest.java │ │ │ ├── DashboardUserServiceTest.java │ │ │ ├── DataPermissionServiceTest.java │ │ │ ├── DetailServiceTest.java │ │ │ ├── DiscoveryUpstreamServiceTest.java │ │ │ ├── EnumServiceTest.java │ │ │ ├── FieldServiceTest.java │ │ │ ├── InstanceInfoServiceTest.java │ │ │ ├── MetaDataServiceTest.java │ │ │ ├── MockRequestRecordServiceTest.java │ │ │ ├── NamespacePluginServiceTest.java │ │ │ ├── PermissionServiceTest.java │ │ │ ├── PluginHandleServiceTest.java │ │ │ ├── PluginServiceTest.java │ │ │ ├── ProxySelectorServiceTest.java │ │ │ ├── ResourceServiceTest.java │ │ │ ├── RoleServiceTest.java │ │ │ ├── RuleServiceTest.java │ │ │ ├── SelectorServiceTest.java │ │ │ ├── ShenyuDictServiceTest.java │ │ │ ├── SwaggerImportServiceTest.java │ │ │ ├── SyncDataServiceTest.java │ │ │ ├── TagRelationServiceTest.java │ │ │ ├── TagServiceTest.java │ │ │ ├── UpstreamCheckServiceTest.java │ │ │ ├── impl/ │ │ │ │ ├── AiProxyApiKeyServiceImplTest.java │ │ │ │ └── InstanceCheckServiceTest.java │ │ │ ├── manager/ │ │ │ │ └── impl/ │ │ │ │ ├── DocManagerImplTest.java │ │ │ │ ├── LoadServiceDocEntryImplTest.java │ │ │ │ ├── SwaggerDocManagerImplTest.java │ │ │ │ └── SwaggerDocParserTest.java │ │ │ ├── publish/ │ │ │ │ └── InstanceInfoReportEventPublisherTest.java │ │ │ ├── register/ │ │ │ │ ├── AbstractContextPathRegisterServiceTest.java │ │ │ │ ├── AbstractShenyuClientRegisterServiceImplTest.java │ │ │ │ ├── FallbackShenyuClientRegisterServiceTest.java │ │ │ │ ├── ShenyuClientRegisterDivideServiceImplTest.java │ │ │ │ ├── ShenyuClientRegisterDubboServiceImplTest.java │ │ │ │ ├── ShenyuClientRegisterGrpcServiceImplTest.java │ │ │ │ ├── ShenyuClientRegisterMotanServiceImplTest.java │ │ │ │ ├── ShenyuClientRegisterSofaServiceImplTest.java │ │ │ │ ├── ShenyuClientRegisterTarsServiceImplTest.java │ │ │ │ └── ShenyuClientRegisterWebSocketServiceImplTest.java │ │ │ └── support/ │ │ │ └── AiProxyRealKeyResolverTest.java │ │ ├── shiro/ │ │ │ ├── bean/ │ │ │ │ └── StatelessAuthFilterTest.java │ │ │ └── config/ │ │ │ ├── ShiroConfigurationTest.java │ │ │ └── ShiroRealmTest.java │ │ ├── spring/ │ │ │ ├── ShenyuApplicationContextAwareTest.java │ │ │ └── SpringBeanUtilsTest.java │ │ ├── transfer/ │ │ │ ├── AlertTransferTest.java │ │ │ └── MetaDataTransferTest.java │ │ └── utils/ │ │ ├── AssertTest.java │ │ ├── BaseTriggerTest.java │ │ ├── CommonUpstreamUtilsTest.java │ │ ├── HttpUtilsTest.java │ │ ├── JwtUtilsTest.java │ │ ├── PluginHandleH2TriggerTest.java │ │ ├── ResultUtilTest.java │ │ ├── ShenyuDictH2TriggerTest.java │ │ ├── ShenyuSignatureUtilsTest.java │ │ └── UploadUtilsTest.java │ └── resources/ │ ├── application-h2.yml │ └── application.yml ├── shenyu-admin-listener/ │ ├── pom.xml │ ├── shenyu-admin-listener-api/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── admin/ │ │ │ ├── listener/ │ │ │ │ ├── AbstractDataChangedInit.java │ │ │ │ ├── AbstractNodeDataChangedListener.java │ │ │ │ ├── AbstractPathDataChangedListener.java │ │ │ │ ├── DataChangedInit.java │ │ │ │ ├── DataChangedListener.java │ │ │ │ └── utils/ │ │ │ │ └── NodeDataPathUtils.java │ │ │ └── service/ │ │ │ └── SyncDataService.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── admin/ │ │ └── listener/ │ │ ├── AbstractConfigurationTest.java │ │ └── utils/ │ │ └── NodeDataPathUtilsTest.java │ ├── shenyu-admin-listener-apollo/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── admin/ │ │ │ │ ├── config/ │ │ │ │ │ ├── ApolloSyncConfiguration.java │ │ │ │ │ └── properties/ │ │ │ │ │ └── ApolloProperties.java │ │ │ │ └── listener/ │ │ │ │ └── apollo/ │ │ │ │ ├── ApolloClient.java │ │ │ │ ├── ApolloDataChangedInit.java │ │ │ │ └── ApolloDataChangedListener.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── admin/ │ │ └── listener/ │ │ └── apollo/ │ │ ├── ApolloClientTest.java │ │ ├── ApolloDataChangedInitTest.java │ │ └── ApolloDataChangedListenerTest.java │ ├── shenyu-admin-listener-consul/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── admin/ │ │ │ │ ├── config/ │ │ │ │ │ ├── ConsulSyncConfiguration.java │ │ │ │ │ └── properties/ │ │ │ │ │ └── ConsulProperties.java │ │ │ │ └── listener/ │ │ │ │ └── consul/ │ │ │ │ ├── ConsulDataChangedInit.java │ │ │ │ └── ConsulDataChangedListener.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── admin/ │ │ ├── config/ │ │ │ ├── ConsulSyncConfigurationTest.java │ │ │ └── properties/ │ │ │ └── ConsulPropertiesTest.java │ │ └── listener/ │ │ └── consul/ │ │ ├── ConsulDataChangedInitTest.java │ │ └── ConsulDataChangedListenerTest.java │ ├── shenyu-admin-listener-etcd/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── admin/ │ │ │ │ ├── config/ │ │ │ │ │ └── EtcdSyncConfiguration.java │ │ │ │ └── listener/ │ │ │ │ └── etcd/ │ │ │ │ ├── EtcdDataChangedInit.java │ │ │ │ └── EtcdDataDataChangedListener.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── admin/ │ │ ├── config/ │ │ │ └── EtcdSyncConfigurationTest.java │ │ └── listener/ │ │ └── etcd/ │ │ ├── EtcdDataChangedInitTest.java │ │ └── EtcdDataDataChangedListenerTest.java │ ├── shenyu-admin-listener-nacos/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── admin/ │ │ │ │ ├── config/ │ │ │ │ │ └── NacosSyncConfiguration.java │ │ │ │ └── listener/ │ │ │ │ └── nacos/ │ │ │ │ ├── NacosDataChangedInit.java │ │ │ │ └── NacosDataChangedListener.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── admin/ │ │ ├── config/ │ │ │ └── NacosSyncConfigurationTest.java │ │ └── listener/ │ │ └── nacos/ │ │ ├── NacosDataChangedInitTest.java │ │ └── NacosDataChangedListenerTest.java │ ├── shenyu-admin-listener-polaris/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── admin/ │ │ │ │ ├── config/ │ │ │ │ │ ├── PolarisSyncConfiguration.java │ │ │ │ │ └── properties/ │ │ │ │ │ └── PolarisProperties.java │ │ │ │ └── listener/ │ │ │ │ └── polaris/ │ │ │ │ ├── PolarisDataChangedInit.java │ │ │ │ └── PolarisDataChangedListener.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── admin/ │ │ ├── config/ │ │ │ ├── PolarisSyncConfigurationTest.java │ │ │ └── properties/ │ │ │ └── PolarisPropertiesTest.java │ │ └── listener/ │ │ └── polaris/ │ │ ├── PolarisDataChangedInitTest.java │ │ └── PolarisDataChangedListenerTest.java │ └── shenyu-admin-listener-zookeeper/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── admin/ │ │ │ ├── config/ │ │ │ │ └── ZookeeperSyncConfiguration.java │ │ │ └── listener/ │ │ │ └── zookeeper/ │ │ │ ├── ZookeeperDataChangedInit.java │ │ │ └── ZookeeperDataChangedListener.java │ │ └── resources/ │ │ └── META-INF/ │ │ ├── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ ├── spring.factories │ │ └── spring.provides │ └── test/ │ └── java/ │ └── org/ │ └── apache/ │ └── shenyu/ │ └── admin/ │ ├── config/ │ │ └── ZookeeperSyncConfigurationTest.java │ └── listener/ │ └── zookeeper/ │ ├── ZookeeperDataChangedInitTest.java │ └── ZookeeperDataChangedListenerTest.java ├── shenyu-alert/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── alert/ │ │ ├── AlertAutoConfiguration.java │ │ ├── AlertNotifyHandler.java │ │ ├── config/ │ │ │ ├── HeaderRequestInterceptor.java │ │ │ ├── RestTemplateConfig.java │ │ │ └── ThymeleafConfig.java │ │ ├── exception/ │ │ │ └── AlertNoticeException.java │ │ ├── model/ │ │ │ └── AlertReceiverDTO.java │ │ └── strategy/ │ │ ├── AbstractAlertNotifyHandler.java │ │ ├── CommonRobotNotifyResp.java │ │ ├── DingTalkRobotAlertNotifyStrategy.java │ │ └── EmailAlertNotifyStrategy.java │ └── resources/ │ ├── META-INF/ │ │ ├── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── spring.factories │ └── static/ │ ├── alertNotifyDingTalkRobot.txt │ └── mailAlarm.html ├── shenyu-bootstrap/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── bootstrap/ │ │ └── ShenyuBootstrapApplication.java │ └── resources/ │ ├── application.yml │ ├── banner.txt │ └── logback.xml ├── shenyu-client/ │ ├── pom.xml │ ├── shenyu-client-api-docs-annotations/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── client/ │ │ └── apidocs/ │ │ └── annotations/ │ │ ├── ApiDoc.java │ │ └── ApiModule.java │ ├── shenyu-client-autoconfig/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── client/ │ │ └── auto/ │ │ └── config/ │ │ ├── ClientRegisterConfiguration.java │ │ └── EnableClientRegister.java │ ├── shenyu-client-core/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── client/ │ │ │ └── core/ │ │ │ ├── client/ │ │ │ │ └── AbstractContextRefreshedEventListener.java │ │ │ ├── constant/ │ │ │ │ └── ShenyuClientConstants.java │ │ │ ├── disruptor/ │ │ │ │ ├── ShenyuClientRegisterEventPublisher.java │ │ │ │ ├── executor/ │ │ │ │ │ └── RegisterClientConsumerExecutor.java │ │ │ │ └── subcriber/ │ │ │ │ ├── ShenyuClientApiDocExecutorSubscriber.java │ │ │ │ ├── ShenyuClientMcpExecutorSubscriber.java │ │ │ │ ├── ShenyuClientMetadataExecutorSubscriber.java │ │ │ │ └── ShenyuClientURIExecutorSubscriber.java │ │ │ ├── exception/ │ │ │ │ └── ShenyuClientIllegalArgumentException.java │ │ │ ├── register/ │ │ │ │ ├── ApiBean.java │ │ │ │ ├── ClientApiRefreshedEventListener.java │ │ │ │ ├── ClientDiscoveryConfigRefreshedEventListener.java │ │ │ │ ├── ClientRegisterConfig.java │ │ │ │ ├── ClientRegisterConfigImpl.java │ │ │ │ ├── InstanceRegisterListener.java │ │ │ │ ├── ShenyuClientRegisterRepositoryFactory.java │ │ │ │ ├── extractor/ │ │ │ │ │ ├── ApiBeansExtractor.java │ │ │ │ │ ├── BaseAnnotationApiBeansExtractor.java │ │ │ │ │ ├── BaseApiBeansExtractor.java │ │ │ │ │ ├── MultiClientApiBeansExtractorImpl.java │ │ │ │ │ └── RpcApiBeansExtractor.java │ │ │ │ ├── matcher/ │ │ │ │ │ ├── AnnotatedApiBeanMatcher.java │ │ │ │ │ ├── AnnotatedApiDefinitionMatcher.java │ │ │ │ │ ├── ApiAnnotationProcessor.java │ │ │ │ │ ├── ApiBeanMatcher.java │ │ │ │ │ ├── ApiBeanProcessor.java │ │ │ │ │ ├── ApiDefinitionMatcher.java │ │ │ │ │ ├── ApiDocProcessorImpl.java │ │ │ │ │ ├── ApiRegisterProcessor.java │ │ │ │ │ ├── BaseAnnotationApiProcessor.java │ │ │ │ │ ├── ExtractorProcessor.java │ │ │ │ │ └── Matcher.java │ │ │ │ └── registrar/ │ │ │ │ ├── AbstractApiDocRegistrar.java │ │ │ │ ├── AbstractApiMetaRegistrar.java │ │ │ │ ├── AbstractApiRegistrar.java │ │ │ │ ├── ApiDocRegistrarImpl.java │ │ │ │ ├── ApiRegistrar.java │ │ │ │ ├── BaseApiRegistrarImpl.java │ │ │ │ ├── HttpApiDocRegistrar.java │ │ │ │ ├── MateDataApiRegistrarImpl.java │ │ │ │ ├── NoHttpApiDocRegistrar.java │ │ │ │ └── UriApiRegistrarImplImpl.java │ │ │ ├── shutdown/ │ │ │ │ ├── ShenyuClientShutdownHook.java │ │ │ │ └── ShutdownHookManager.java │ │ │ └── utils/ │ │ │ ├── ApiBeanUtil.java │ │ │ ├── OpenApiUtils.java │ │ │ ├── PortUtils.java │ │ │ ├── RequestMethodUtils.java │ │ │ └── UrlPathUtils.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── client/ │ │ └── core/ │ │ ├── disruptor/ │ │ │ └── subcriber/ │ │ │ ├── ShenyuClientApiDocExecutorSubscriberTest.java │ │ │ ├── ShenyuClientMetadataExecutorSubscriberTest.java │ │ │ ├── ShenyuClientRegisterEventPublisherTest.java │ │ │ └── ShenyuClientURIExecutorSubscriberTest.java │ │ ├── exception/ │ │ │ └── ShenyuClientIllegalArgumentExceptionTest.java │ │ ├── register/ │ │ │ ├── ShenyuClientRegisterRepositoryFactoryTest.java │ │ │ └── registrar/ │ │ │ ├── AbstractApiDocRegistrarTest.java │ │ │ ├── HttpApiDocRegistrarTest.java │ │ │ ├── NoHttpApiDocRegistrarTest.java │ │ │ └── TestClientRegisterConfig.java │ │ └── utils/ │ │ └── PortUtilsTest.java │ ├── shenyu-client-dubbo/ │ │ ├── pom.xml │ │ ├── shenyu-client-apache-dubbo/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── client/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── dubbo/ │ │ │ │ │ ├── ApacheDubboApiBeansExtractor.java │ │ │ │ │ ├── ApacheDubboServiceBeanListener.java │ │ │ │ │ ├── annotation/ │ │ │ │ │ │ ├── ShenyuDubboService.java │ │ │ │ │ │ └── ShenyuService.java │ │ │ │ │ ├── processor/ │ │ │ │ │ │ ├── extractor/ │ │ │ │ │ │ │ ├── DubboServiceProcessor.java │ │ │ │ │ │ │ └── ServiceProcessor.java │ │ │ │ │ │ └── register/ │ │ │ │ │ │ └── ShenyuDubboProcessor.java │ │ │ │ │ └── validation/ │ │ │ │ │ ├── ApacheDubboClientValidation.java │ │ │ │ │ └── ApacheDubboClientValidator.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── dubbo/ │ │ │ │ └── org.apache.dubbo.validation.Validation │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── client/ │ │ │ └── apache/ │ │ │ └── dubbo/ │ │ │ ├── annotation/ │ │ │ │ └── ShenyuDubboServiceDefaultValueTest.java │ │ │ └── validation/ │ │ │ ├── ApacheDubboClientValidationTest.java │ │ │ ├── ApacheDubboClientValidatorTest.java │ │ │ ├── mock/ │ │ │ │ ├── MockConstraint.java │ │ │ │ ├── MockConstraintValidator.java │ │ │ │ ├── MockEnumType.java │ │ │ │ ├── MockValidationParameter.java │ │ │ │ └── MockValidatorTarget.java │ │ │ └── service/ │ │ │ └── TestService.java │ │ └── shenyu-client-dubbo-common/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── client/ │ │ └── dubbo/ │ │ └── common/ │ │ ├── annotation/ │ │ │ └── ShenyuDubboClient.java │ │ └── dto/ │ │ ├── DubboRpcExt.java │ │ └── DubboRpcMethodExt.java │ ├── shenyu-client-grpc/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── client/ │ │ │ └── grpc/ │ │ │ ├── GrpcClientEventListener.java │ │ │ ├── common/ │ │ │ │ ├── annotation/ │ │ │ │ │ └── ShenyuGrpcClient.java │ │ │ │ └── dto/ │ │ │ │ └── GrpcExt.java │ │ │ ├── json/ │ │ │ │ ├── JsonForwardingServerCall.java │ │ │ │ ├── JsonServerCallListener.java │ │ │ │ └── JsonServerServiceInterceptor.java │ │ │ └── server/ │ │ │ ├── GrpcServerBuilder.java │ │ │ └── GrpcServerRunner.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── client/ │ │ └── grpc/ │ │ ├── TestRequest.java │ │ ├── TestResponse.java │ │ ├── json/ │ │ │ ├── JsonForwardingServerCallTest.java │ │ │ ├── JsonServerCallListenerTest.java │ │ │ └── JsonServerServiceInterceptorTest.java │ │ └── server/ │ │ └── GrpcServerRunnerTest.java │ ├── shenyu-client-http/ │ │ ├── pom.xml │ │ └── shenyu-client-springmvc/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── client/ │ │ │ └── springmvc/ │ │ │ ├── annotation/ │ │ │ │ ├── ShenyuDeleteMapping.java │ │ │ │ ├── ShenyuGetMapping.java │ │ │ │ ├── ShenyuPatchMapping.java │ │ │ │ ├── ShenyuPostMapping.java │ │ │ │ ├── ShenyuPutMapping.java │ │ │ │ ├── ShenyuRequestMapping.java │ │ │ │ └── ShenyuSpringMvcClient.java │ │ │ ├── init/ │ │ │ │ └── SpringMvcClientEventListener.java │ │ │ ├── proceeor/ │ │ │ │ ├── extractor/ │ │ │ │ │ └── RequestMappingProcessor.java │ │ │ │ └── register/ │ │ │ │ └── ShenyuSpringMvcClientProcessorImpl.java │ │ │ └── register/ │ │ │ ├── SpringMvcApiBeansExtractor.java │ │ │ └── SpringMvcApiMetaRegister.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── client/ │ │ └── springmvc/ │ │ ├── annotation/ │ │ │ ├── ShenyuDeleteMappingTest.java │ │ │ ├── ShenyuGetMappingTest.java │ │ │ ├── ShenyuPatchMappingTest.java │ │ │ ├── ShenyuPostMappingTest.java │ │ │ ├── ShenyuPutMappingTest.java │ │ │ └── ShenyuRequestMappingTest.java │ │ ├── init/ │ │ │ └── SpringMvcClientEventListenerTest.java │ │ └── register/ │ │ ├── SpringMvcApiBeansExtractorTest.java │ │ └── SpringMvcApiMetaRegisterTest.java │ ├── shenyu-client-mcp/ │ │ ├── pom.xml │ │ ├── shenyu-client-mcp-common/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── client/ │ │ │ └── mcp/ │ │ │ ├── common/ │ │ │ │ ├── annotation/ │ │ │ │ │ ├── ShenyuMcpHeader.java │ │ │ │ │ ├── ShenyuMcpRequestConfig.java │ │ │ │ │ ├── ShenyuMcpTool.java │ │ │ │ │ └── ShenyuMcpToolParam.java │ │ │ │ ├── constants/ │ │ │ │ │ ├── OpenApiConstants.java │ │ │ │ │ ├── RequestTemplateConstants.java │ │ │ │ │ └── ShenyuToolConfigConstants.java │ │ │ │ ├── dto/ │ │ │ │ │ ├── ShenyuMcpRequestConfig.java │ │ │ │ │ └── ShenyuMcpTool.java │ │ │ │ └── eunm/ │ │ │ │ └── McpParameterType.java │ │ │ ├── generator/ │ │ │ │ ├── McpOpenApiGenerator.java │ │ │ │ ├── McpRequestConfigGenerator.java │ │ │ │ └── McpToolsRegisterDTOGenerator.java │ │ │ └── utils/ │ │ │ └── OpenApiConvertorUtil.java │ │ └── shenyu-client-mcp-register/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── client/ │ │ └── mcp/ │ │ └── McpServiceEventListener.java │ ├── shenyu-client-motan/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── client/ │ │ │ └── motan/ │ │ │ ├── MotanServiceEventListener.java │ │ │ └── common/ │ │ │ ├── annotation/ │ │ │ │ ├── ShenyuMotanClient.java │ │ │ │ └── ShenyuMotanService.java │ │ │ └── dto/ │ │ │ └── MotanRpcExt.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── client/ │ │ └── motan/ │ │ └── MotanServiceEventListenerTest.java │ ├── shenyu-client-sofa/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── client/ │ │ │ └── sofa/ │ │ │ ├── SofaServiceEventListener.java │ │ │ └── common/ │ │ │ ├── annotation/ │ │ │ │ └── ShenyuSofaClient.java │ │ │ └── dto/ │ │ │ └── SofaRpcExt.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── client/ │ │ └── sofa/ │ │ └── SofaServiceEventListenerTest.java │ ├── shenyu-client-tars/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── client/ │ │ │ └── tars/ │ │ │ ├── TarsServiceBeanEventListener.java │ │ │ └── common/ │ │ │ ├── annotation/ │ │ │ │ ├── ShenyuTarsClient.java │ │ │ │ └── ShenyuTarsService.java │ │ │ └── dto/ │ │ │ └── TarsRpcExt.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── client/ │ │ └── tars/ │ │ ├── TarsRpcExtTest.java │ │ └── TarsServiceBeanPostProcessorTest.java │ └── shenyu-client-websocket/ │ ├── pom.xml │ └── shenyu-client-spring-websocket/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── client/ │ │ └── spring/ │ │ └── websocket/ │ │ ├── annotation/ │ │ │ ├── ShenyuServerEndpoint.java │ │ │ └── ShenyuSpringWebSocketClient.java │ │ └── init/ │ │ ├── ShenyuServerEndpointerExporter.java │ │ └── SpringWebSocketClientEventListener.java │ └── test/ │ └── java/ │ └── org/ │ └── apache/ │ └── shenyu/ │ └── client/ │ └── spring/ │ └── websocket/ │ └── init/ │ ├── ShenyuServerEndpointerExporterTest.java │ └── SpringWebSocketClientEventListenerTest.java ├── shenyu-common/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── common/ │ │ ├── cache/ │ │ │ ├── MemorySafeLRUMap.java │ │ │ ├── MemorySafeWindowTinyLFUMap.java │ │ │ └── WindowTinyLFUMap.java │ │ ├── concurrent/ │ │ │ ├── AbortPolicy.java │ │ │ ├── DiscardOldestPolicy.java │ │ │ ├── DiscardPolicy.java │ │ │ ├── EagerExecutorService.java │ │ │ ├── MemoryLimitCalculator.java │ │ │ ├── MemoryLimitedLinkedBlockingQueue.java │ │ │ ├── MemoryLimitedTaskQueue.java │ │ │ ├── MemoryLimiter.java │ │ │ ├── MemorySafeLinkedBlockingQueue.java │ │ │ ├── MemorySafeTaskQueue.java │ │ │ ├── RejectException.java │ │ │ ├── Rejector.java │ │ │ ├── ShenyuThreadFactory.java │ │ │ ├── ShenyuThreadPoolExecutor.java │ │ │ └── TaskQueue.java │ │ ├── config/ │ │ │ ├── NettyChannelProperties.java │ │ │ ├── NettyHttpProperties.java │ │ │ ├── ShenyuConfig.java │ │ │ └── ssl/ │ │ │ ├── ShenyuSniAsyncMapping.java │ │ │ ├── SslCrtAndKey.java │ │ │ ├── SslCrtAndKeyFile.java │ │ │ └── SslCrtAndKeyStream.java │ │ ├── constant/ │ │ │ ├── AdminConstants.java │ │ │ ├── ApolloPathConstants.java │ │ │ ├── Constants.java │ │ │ ├── ConsulConstants.java │ │ │ ├── DefaultNodeConstants.java │ │ │ ├── DefaultPathConstants.java │ │ │ ├── DubboParamConstants.java │ │ │ ├── ExportImportConstants.java │ │ │ ├── HttpConstants.java │ │ │ ├── InstanceTypeConstants.java │ │ │ ├── NacosPathConstants.java │ │ │ ├── PolarisPathConstants.java │ │ │ ├── RedisKeyConstants.java │ │ │ ├── ResourceTypeConstants.java │ │ │ ├── RuleHandleConstants.java │ │ │ ├── RunningModeConstants.java │ │ │ └── ShenyuModuleConstants.java │ │ ├── dto/ │ │ │ ├── AlarmContent.java │ │ │ ├── AppAuthData.java │ │ │ ├── AuthParamData.java │ │ │ ├── AuthPathData.java │ │ │ ├── BaseData.java │ │ │ ├── ConditionData.java │ │ │ ├── ConfigData.java │ │ │ ├── DiscoverySyncData.java │ │ │ ├── DiscoveryUpstreamData.java │ │ │ ├── MetaData.java │ │ │ ├── PluginData.java │ │ │ ├── ProxyApiKeyData.java │ │ │ ├── ProxySelectorData.java │ │ │ ├── RuleData.java │ │ │ ├── SelectorData.java │ │ │ ├── WebsocketData.java │ │ │ └── convert/ │ │ │ ├── plugin/ │ │ │ │ ├── AiPromptConfig.java │ │ │ │ ├── AiRequestTransformerConfig.java │ │ │ │ ├── AiResponseTransformerConfig.java │ │ │ │ ├── DubboRegisterConfig.java │ │ │ │ ├── GrpcRegisterConfig.java │ │ │ │ ├── MotanRegisterConfig.java │ │ │ │ ├── SofaRegisterConfig.java │ │ │ │ └── TarsRegisterConfig.java │ │ │ ├── rule/ │ │ │ │ ├── AiPromptHandle.java │ │ │ │ ├── AiProxyHandle.java │ │ │ │ ├── AiRequestTransformerHandle.java │ │ │ │ ├── AiResponseTransformerHandle.java │ │ │ │ ├── AiTokenLimiterHandle.java │ │ │ │ ├── GeneralContextHandle.java │ │ │ │ ├── HystrixHandle.java │ │ │ │ ├── MockHandle.java │ │ │ │ ├── RateLimiterHandle.java │ │ │ │ ├── RedirectHandle.java │ │ │ │ ├── RequestHandle.java │ │ │ │ ├── Resilience4JHandle.java │ │ │ │ ├── RewriteHandle.java │ │ │ │ ├── RuleHandle.java │ │ │ │ ├── SentinelHandle.java │ │ │ │ ├── WafHandle.java │ │ │ │ └── impl/ │ │ │ │ ├── CacheRuleHandle.java │ │ │ │ ├── ContextMappingRuleHandle.java │ │ │ │ ├── DivideRuleHandle.java │ │ │ │ ├── DubboRuleHandle.java │ │ │ │ ├── GrpcRuleHandle.java │ │ │ │ ├── KeyAuthRuleHandle.java │ │ │ │ ├── ModifyResponseRuleHandle.java │ │ │ │ ├── ParamMappingRuleHandle.java │ │ │ │ ├── SofaRuleHandle.java │ │ │ │ ├── SpringCloudRuleHandle.java │ │ │ │ └── WebSocketRuleHandle.java │ │ │ └── selector/ │ │ │ ├── CacheUpstream.java │ │ │ ├── CommonUpstream.java │ │ │ ├── DiscoveryUpstream.java │ │ │ ├── DivideUpstream.java │ │ │ ├── DubboUpstream.java │ │ │ ├── GrpcUpstream.java │ │ │ ├── MotanUpstream.java │ │ │ ├── SofaUpstream.java │ │ │ ├── SpringCloudSelectorHandle.java │ │ │ ├── TarsUpstream.java │ │ │ ├── WebSocketUpstream.java │ │ │ └── ZombieUpstream.java │ │ ├── enums/ │ │ │ ├── AdminDataPermissionTypeEnum.java │ │ │ ├── AdminDataSourceEnum.java │ │ │ ├── AdminPluginOperateEnum.java │ │ │ ├── AdminResourceEnum.java │ │ │ ├── AiModelProviderEnum.java │ │ │ ├── AiTokenLimiterEnum.java │ │ │ ├── ApiHttpMethodEnum.java │ │ │ ├── ApiSourceEnum.java │ │ │ ├── ApiStateEnum.java │ │ │ ├── ConfigGroupEnum.java │ │ │ ├── DataEventTypeEnum.java │ │ │ ├── DataSyncEnum.java │ │ │ ├── HeaderUniqueStrategyEnum.java │ │ │ ├── HttpMethodEnum.java │ │ │ ├── HttpRetryBackoffSpecEnum.java │ │ │ ├── HttpSchemeEnum.java │ │ │ ├── HystrixIsolationModeEnum.java │ │ │ ├── InstanceStatusEnum.java │ │ │ ├── LoadBalanceEnum.java │ │ │ ├── MatchModeEnum.java │ │ │ ├── OperatorEnum.java │ │ │ ├── ParamTypeEnum.java │ │ │ ├── PluginEnum.java │ │ │ ├── PluginHandlerEventEnum.java │ │ │ ├── PluginRoleEnum.java │ │ │ ├── PluginTypeEnum.java │ │ │ ├── RateLimitEnum.java │ │ │ ├── RedisModeEnum.java │ │ │ ├── ResultEnum.java │ │ │ ├── RetryEnum.java │ │ │ ├── RpcTypeEnum.java │ │ │ ├── RunningModeEnum.java │ │ │ ├── SelectorTypeEnum.java │ │ │ ├── SerializeEnum.java │ │ │ ├── SwaggerVersion.java │ │ │ ├── TimeWindowEnum.java │ │ │ ├── TrieCacheTypeEnum.java │ │ │ ├── TrieEventEnum.java │ │ │ ├── TrieMatchModeEnum.java │ │ │ ├── UniqueHeaderEnum.java │ │ │ ├── WafEnum.java │ │ │ └── WafModelEnum.java │ │ ├── exception/ │ │ │ ├── CommonErrorCode.java │ │ │ ├── SerializerException.java │ │ │ └── ShenyuException.java │ │ ├── timer/ │ │ │ ├── AbstractRetryTask.java │ │ │ ├── AbstractRoundTask.java │ │ │ ├── HierarchicalWheelTimer.java │ │ │ ├── TaskEntity.java │ │ │ ├── Timer.java │ │ │ ├── TimerTask.java │ │ │ ├── TimerTaskList.java │ │ │ ├── TimingWheel.java │ │ │ └── WheelTimerFactory.java │ │ └── utils/ │ │ ├── AesUtils.java │ │ ├── ContextPathUtils.java │ │ ├── DateUtils.java │ │ ├── DigestUtils.java │ │ ├── FreshBeanHolder.java │ │ ├── GsonUtils.java │ │ ├── HmacHexUtils.java │ │ ├── IpUtils.java │ │ ├── JarDependencyUtils.java │ │ ├── JsonUtils.java │ │ ├── ListUtil.java │ │ ├── LogUtils.java │ │ ├── MapUtils.java │ │ ├── NamespaceIDUtils.java │ │ ├── ObjectTypeUtils.java │ │ ├── ParamCheckUtils.java │ │ ├── PathUtils.java │ │ ├── PluginNameAdapter.java │ │ ├── ReflectUtils.java │ │ ├── SignUtils.java │ │ ├── Singleton.java │ │ ├── SpiLoadFactory.java │ │ ├── SystemInfoUtils.java │ │ ├── ThreadUtils.java │ │ ├── UUIDUtils.java │ │ ├── UpstreamCheckUtils.java │ │ ├── UriUtils.java │ │ └── VersionUtils.java │ └── test/ │ ├── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── common/ │ │ ├── cache/ │ │ │ ├── MemorySafeLRUMapTest.java │ │ │ ├── MemorySafeWindowTinyLFUMapTest.java │ │ │ └── WindowTinyLFUMapTest.java │ │ ├── concurrent/ │ │ │ ├── MemoryLimitCalculatorTest.java │ │ │ ├── MemoryLimitedLinkedBlockingQueueTest.java │ │ │ ├── MemoryLimitedTaskQueueTest.java │ │ │ ├── MemoryLimiterTest.java │ │ │ ├── MemorySafeLinkedBlockingQueueTest.java │ │ │ ├── ShenyuThreadFactoryTest.java │ │ │ └── ShenyuThreadPoolExecutorTest.java │ │ ├── config/ │ │ │ └── ShenyuConfigTest.java │ │ ├── constant/ │ │ │ ├── DefaultPathConstantsTest.java │ │ │ └── RedisKeyConstantsTest.java │ │ ├── dto/ │ │ │ ├── AppAuthDataTest.java │ │ │ ├── AuthParamDataTest.java │ │ │ ├── AuthPathDataTest.java │ │ │ ├── ConditionDataTest.java │ │ │ ├── ConfigDataTest.java │ │ │ ├── MetaDataTest.java │ │ │ ├── PluginDataTest.java │ │ │ ├── RuleDataTest.java │ │ │ ├── SelectorDataTest.java │ │ │ ├── WebsocketDataTest.java │ │ │ └── convert/ │ │ │ ├── plugin/ │ │ │ │ ├── DubboRegisterConfigTest.java │ │ │ │ ├── GrpcRegisterConfigTest.java │ │ │ │ ├── MotanRegisterConfigTest.java │ │ │ │ ├── SofaRegisterConfigTest.java │ │ │ │ └── TarsRegisterConfigTest.java │ │ │ ├── rule/ │ │ │ │ ├── GeneralContextHandleTest.java │ │ │ │ ├── HystrixHandleTest.java │ │ │ │ ├── MockHandleTest.java │ │ │ │ ├── RateLimiterHandleTest.java │ │ │ │ ├── RedirectHandleTest.java │ │ │ │ ├── RequestHandleTest.java │ │ │ │ ├── Resilience4JHandleTest.java │ │ │ │ ├── RewriteHandleTest.java │ │ │ │ ├── RuleHandleTest.java │ │ │ │ ├── SentinelHandleTest.java │ │ │ │ ├── WafHandleTest.java │ │ │ │ └── impl/ │ │ │ │ ├── CacheRuleHandleTest.java │ │ │ │ ├── ContextMappingRuleHandleTest.java │ │ │ │ ├── DivideRuleHandleTest.java │ │ │ │ ├── DubboRuleHandleTest.java │ │ │ │ ├── KeyAuthRuleHandleTest.java │ │ │ │ ├── ModifyResponseRuleHandleTest.java │ │ │ │ ├── ParamMappingRuleHandleTest.java │ │ │ │ ├── SofaRuleHandleTest.java │ │ │ │ ├── SpringCloudRuleHandleTest.java │ │ │ │ └── WebSocketRuleHandleTest.java │ │ │ └── selector/ │ │ │ ├── CommonUpstreamTest.java │ │ │ ├── DivideUpstreamTest.java │ │ │ ├── DubboUpstreamTest.java │ │ │ ├── GrpcUpstreamTest.java │ │ │ ├── SpringCloudSelectorHandleTest.java │ │ │ ├── TarsUpstreamTest.java │ │ │ ├── WebSocketUpstreamTest.java │ │ │ └── ZombieUpstreamTest.java │ │ ├── enums/ │ │ │ ├── AdminDataPermissionTypeEnumTest.java │ │ │ ├── AdminDataSourceEnumTest.java │ │ │ ├── AdminPluginOperateEnumTest.java │ │ │ ├── AdminResourceEnumTest.java │ │ │ ├── ApiHttpMethodEnumTest.java │ │ │ ├── ApiSourceEnumTest.java │ │ │ ├── ApiStateEnumTest.java │ │ │ ├── ConfigGroupEnumTest.java │ │ │ ├── DataEventTypeEnumTest.java │ │ │ ├── DataSyncEnumTest.java │ │ │ ├── HttpMethodEnumTest.java │ │ │ ├── HystrixIsolationModeEnumTest.java │ │ │ ├── LoadBalanceEnumTest.java │ │ │ ├── MatchModeEnumTest.java │ │ │ ├── OperatorEnumTest.java │ │ │ ├── ParamTypeEnumTest.java │ │ │ ├── PluginEnumTest.java │ │ │ ├── PluginHandlerEventEnumTest.java │ │ │ ├── PluginRoleEnumTest.java │ │ │ ├── PluginTypeEnumTest.java │ │ │ ├── RateLimitEnumTest.java │ │ │ ├── RedisModeEnumTest.java │ │ │ ├── ResultEnumTest.java │ │ │ ├── RetryEnumTest.java │ │ │ ├── RpcTypeEnumTest.java │ │ │ ├── SelectorTypeEnumTest.java │ │ │ ├── SerializeEnumTest.java │ │ │ ├── TrieEventEnumTest.java │ │ │ ├── TrieMatchModeEnumTest.java │ │ │ ├── WafEnumTest.java │ │ │ └── WafModelEnumTest.java │ │ ├── exception/ │ │ │ ├── CommonErrorCodeTest.java │ │ │ ├── SerializerExceptionTest.java │ │ │ └── ShenyuExceptionTest.java │ │ ├── timer/ │ │ │ ├── HierarchicalWheelTimerTest.java │ │ │ ├── TimerTaskListTest.java │ │ │ └── WheelTimerFactoryTest.java │ │ └── utils/ │ │ ├── AesUtilsTest.java │ │ ├── ContextPathUtilsTest.java │ │ ├── DateUtilsTest.java │ │ ├── DigestUtilsTest.java │ │ ├── FreshBeanHolderTest.java │ │ ├── GsonUtilsTest.java │ │ ├── HmacHexUtilsTest.java │ │ ├── IpUtilsTest.java │ │ ├── JarDependencyUtilsTest.java │ │ ├── JsonUtilsTest.java │ │ ├── ListUtilTest.java │ │ ├── LogUtilsTest.java │ │ ├── MapUtilsTest.java │ │ ├── NamespaceIDUtilsTest.java │ │ ├── ObjectTypeUtilsTest.java │ │ ├── ParamCheckUtilsTest.java │ │ ├── PathUtilsTest.java │ │ ├── PluginNameAdapterTest.java │ │ ├── ReflectUtilsTest.java │ │ ├── SignUtilsTest.java │ │ ├── SingletonTest.java │ │ ├── SpiImpl.java │ │ ├── SpiInterface.java │ │ ├── SpiLoadFactoryTest.java │ │ ├── ThreadUtilsTest.java │ │ ├── UUIDUtilsTest.java │ │ ├── UpstreamCheckUtilsTest.java │ │ ├── UriUtilsTest.java │ │ └── VersionUtilsTest.java │ └── resources/ │ └── META-INF/ │ └── services/ │ └── org.apache.shenyu.common.utils.SpiInterface ├── shenyu-disruptor/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── disruptor/ │ │ ├── DisruptorProviderManage.java │ │ ├── common/ │ │ │ └── Data.java │ │ ├── consumer/ │ │ │ ├── QueueConsumer.java │ │ │ ├── QueueConsumerExecutor.java │ │ │ └── QueueConsumerFactory.java │ │ ├── event/ │ │ │ ├── DataEvent.java │ │ │ ├── DisruptorEventFactory.java │ │ │ ├── OrderlyDataEvent.java │ │ │ └── OrderlyDisruptorEventFactory.java │ │ ├── provider/ │ │ │ └── DisruptorProvider.java │ │ └── thread/ │ │ ├── DisruptorThreadFactory.java │ │ ├── OrderlyExecutor.java │ │ └── SingletonExecutor.java │ └── test/ │ └── java/ │ └── org/ │ └── apache/ │ └── shenyu/ │ └── disruptor/ │ ├── DisruptorProviderManagerTest.java │ ├── consumer/ │ │ └── QueueConsumerTest.java │ ├── provider/ │ │ └── DisruptorProviderTest.java │ └── thread/ │ └── DisruptorThreadFactoryTest.java ├── shenyu-dist/ │ ├── README.md │ ├── pom.xml │ ├── release_check.py │ ├── shenyu-admin-dist/ │ │ ├── docker/ │ │ │ ├── Dockerfile │ │ │ ├── entrypoint.sh │ │ │ └── logback.xml │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── assembly/ │ │ │ └── binary.xml │ │ ├── release-docs/ │ │ │ ├── LICENSE │ │ │ ├── NOTICE │ │ │ ├── README.txt │ │ │ └── licenses/ │ │ │ ├── LICENSE-HdrHistogram.txt │ │ │ ├── LICENSE-LatencyUtils.txt │ │ │ ├── LICENSE-animal-sniffer.txt │ │ │ ├── LICENSE-asm.txt │ │ │ ├── LICENSE-aspectjweaver.txt │ │ │ ├── LICENSE-checker-qual.txt │ │ │ ├── LICENSE-consul.txt │ │ │ ├── LICENSE-encoder.txt │ │ │ ├── LICENSE-h2.txt │ │ │ ├── LICENSE-jakarta.activation-api.txt │ │ │ ├── LICENSE-jakarta.annotation-api.txt │ │ │ ├── LICENSE-jakarta.xml.bind-api.txt │ │ │ ├── LICENSE-java-jwt.txt │ │ │ ├── LICENSE-jaxb-api.txt │ │ │ ├── LICENSE-jcl-over-slf4j.txt │ │ │ ├── LICENSE-jul-to-slf4j.txt │ │ │ ├── LICENSE-k8sio.txt │ │ │ ├── LICENSE-kryo-shaded.txt │ │ │ ├── LICENSE-logback.txt │ │ │ ├── LICENSE-micrometer.txt │ │ │ ├── LICENSE-minlog.txt │ │ │ ├── LICENSE-pagehelper.txt │ │ │ ├── LICENSE-protobuf-java.txt │ │ │ ├── LICENSE-reflections.txt │ │ │ ├── LICENSE-slf4j.txt │ │ │ └── ui-licenses/ │ │ │ ├── LICENSE-@babel-polyfill.txt │ │ │ ├── LICENSE-antd.txt │ │ │ ├── LICENSE-babel-eslint.txt │ │ │ ├── LICENSE-babel-plugin-dva-hmr.txt │ │ │ ├── LICENSE-babel-plugin-import.txt │ │ │ ├── LICENSE-babel-plugin-module-resolver.txt │ │ │ ├── LICENSE-babel-plugin-transform-decorators-legacy.txt │ │ │ ├── LICENSE-classnames.txt │ │ │ ├── LICENSE-cross-env.txt │ │ │ ├── LICENSE-cross-port-killer.txt │ │ │ ├── LICENSE-dayjs.txt │ │ │ ├── LICENSE-dva-loading.txt │ │ │ ├── LICENSE-dva.txt │ │ │ ├── LICENSE-enquire-js.txt │ │ │ ├── LICENSE-enzyme.txt │ │ │ ├── LICENSE-eslint-config-airbnb.txt │ │ │ ├── LICENSE-eslint-config-prettier.txt │ │ │ ├── LICENSE-eslint-plugin-babel.txt │ │ │ ├── LICENSE-eslint-plugin-compat.txt │ │ │ ├── LICENSE-eslint-plugin-import.txt │ │ │ ├── LICENSE-eslint-plugin-jsx-ally.txt │ │ │ ├── LICENSE-eslint-plugin-markdown.txt │ │ │ ├── LICENSE-eslint-plugin-react.txt │ │ │ ├── LICENSE-eslint.txt │ │ │ ├── LICENSE-gh-pages.txt │ │ │ ├── LICENSE-husky.txt │ │ │ ├── LICENSE-lint-staged.txt │ │ │ ├── LICENSE-lodash-decorators.txt │ │ │ ├── LICENSE-lodash.txt │ │ │ ├── LICENSE-mockjs.txt │ │ │ ├── LICENSE-omit.js.txt │ │ │ ├── LICENSE-path-to-regexp.txt │ │ │ ├── LICENSE-postgresql.txt │ │ │ ├── LICENSE-prettier.txt │ │ │ ├── LICENSE-pro-download.txt │ │ │ ├── LICENSE-prop-types.txt │ │ │ ├── LICENSE-qs.txt │ │ │ ├── LICENSE-react-container-query.txt │ │ │ ├── LICENSE-react-document-title.txt │ │ │ ├── LICENSE-react-dom.txt │ │ │ ├── LICENSE-react-fittext.txt │ │ │ ├── LICENSE-react-intl-universal.txt │ │ │ ├── LICENSE-react-loadable.txt │ │ │ ├── LICENSE-react-logger.txt │ │ │ ├── LICENSE-react-resizable.txt │ │ │ ├── LICENSE-react.txt │ │ │ ├── LICENSE-redbox-react.txt │ │ │ ├── LICENSE-redux-logger.txt │ │ │ ├── LICENSE-regenerator-runtime.txt │ │ │ ├── LICENSE-roadhog.txt │ │ │ ├── LICENSE-setprototypeof.txt │ │ │ ├── LICENSE-stylelint-config-prettier.txt │ │ │ ├── LICENSE-stylelint-config-standard.txt │ │ │ ├── LICENSE-stylelint.txt │ │ │ └── LICENSE-url-polyfill.txt │ │ └── resources/ │ │ ├── bin/ │ │ │ ├── start.bat │ │ │ ├── start.sh │ │ │ ├── stop.bat │ │ │ └── stop.sh │ │ └── logback.xml │ ├── shenyu-bootstrap-dist/ │ │ ├── docker/ │ │ │ ├── Dockerfile │ │ │ ├── entrypoint.sh │ │ │ └── logback.xml │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── assembly/ │ │ │ └── binary.xml │ │ ├── release-docs/ │ │ │ ├── LICENSE │ │ │ ├── NOTICE │ │ │ ├── README.txt │ │ │ └── licenses/ │ │ │ ├── LICENSE-HdrHistogram.txt │ │ │ ├── LICENSE-Java-WebSocket.txt │ │ │ ├── LICENSE-LatencyUtils.txt │ │ │ ├── LICENSE-activation.txt │ │ │ ├── LICENSE-animal-sniffer.txt │ │ │ ├── LICENSE-antlr.txt │ │ │ ├── LICENSE-asm.txt │ │ │ ├── LICENSE-aspectjweaver.txt │ │ │ ├── LICENSE-bcpkix-jdk15on.txt │ │ │ ├── LICENSE-bcprov-jdk15on.txt │ │ │ ├── LICENSE-checker-qual.txt │ │ │ ├── LICENSE-consul.txt │ │ │ ├── LICENSE-google-auth-library-java.txt │ │ │ ├── LICENSE-jakarta.activation-api.txt │ │ │ ├── LICENSE-jakarta.annotation-api.txt │ │ │ ├── LICENSE-jakarta.el.txt │ │ │ ├── LICENSE-jakarta.xml.bind-api.txt │ │ │ ├── LICENSE-javax.mail.txt │ │ │ ├── LICENSE-javax.servlet-api.txt │ │ │ ├── LICENSE-jaxb-api.txt │ │ │ ├── LICENSE-jboss.txt │ │ │ ├── LICENSE-jcl-over-slf4j.txt │ │ │ ├── LICENSE-jersey.txt │ │ │ ├── LICENSE-jni-rs.txt │ │ │ ├── LICENSE-jul-to-slf4j.txt │ │ │ ├── LICENSE-logback.txt │ │ │ ├── LICENSE-motan.txt │ │ │ ├── LICENSE-mxparser.txt │ │ │ ├── LICENSE-perfmark.txt │ │ │ ├── LICENSE-protobuf-java.txt │ │ │ ├── LICENSE-reactive-streams.txt │ │ │ ├── LICENSE-slf4j.txt │ │ │ ├── LICENSE-stringtemplate4.txt │ │ │ ├── LICENSE-tars.txt │ │ │ ├── LICENSE-wasi-cap-std-sync.txt │ │ │ ├── LICENSE-wasi-common.txt │ │ │ ├── LICENSE-wasmtime-wasi.txt │ │ │ ├── LICENSE-wasmtime.txt │ │ │ ├── LICENSE-xstream.txt │ │ │ └── LICENSE-zstd-jni.txt │ │ └── resources/ │ │ ├── bin/ │ │ │ ├── start.bat │ │ │ ├── start.sh │ │ │ ├── stop.bat │ │ │ └── stop.sh │ │ └── logback.xml │ ├── shenyu-docker-compose-dist/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── assembly/ │ │ │ └── source.xml │ │ └── resources/ │ │ ├── docker-compose.yaml │ │ └── install.sh │ └── shenyu-src-dist/ │ ├── pom.xml │ └── src/ │ └── main/ │ └── assembly/ │ └── source.xml ├── shenyu-e2e/ │ ├── .gitignore │ ├── pom.xml │ ├── script/ │ │ ├── storage_init.sh │ │ ├── storage_init_mysql.sh │ │ └── storage_init_postgres.sh │ ├── shenyu-e2e-case/ │ │ ├── compose/ │ │ │ ├── storage/ │ │ │ │ ├── shenyu-storage-h2.yml │ │ │ │ ├── shenyu-storage-mysql.yml │ │ │ │ ├── shenyu-storage-opengauss.yml │ │ │ │ └── shenyu-storage-postgres.yml │ │ │ └── sync/ │ │ │ ├── shenyu-nacos.yml │ │ │ ├── shenyu-sync-etcd-eureka.yml │ │ │ ├── shenyu-sync-etcd.yml │ │ │ ├── shenyu-sync-http-eureka.yml │ │ │ ├── shenyu-sync-http.yml │ │ │ ├── shenyu-sync-websocket-cluster-jdbc.yml │ │ │ ├── shenyu-sync-websocket-cluster-zookeeper.yml │ │ │ ├── shenyu-sync-websocket-eureka.yml │ │ │ ├── shenyu-sync-websocket.yml │ │ │ ├── shenyu-sync-zookeeper-eureka.yml │ │ │ └── shenyu-sync-zookeeper.yml │ │ ├── k8s/ │ │ │ ├── script/ │ │ │ │ ├── healthcheck.sh │ │ │ │ ├── init/ │ │ │ │ │ ├── mysql_container_init.sh │ │ │ │ │ ├── opengauss_container_init.sh │ │ │ │ │ └── postgres_container_init.sh │ │ │ │ └── storage/ │ │ │ │ ├── storage_init_mysql.sh │ │ │ │ ├── storage_init_opengauss.sh │ │ │ │ └── storage_init_postgres.sh │ │ │ ├── shenyu-etcd.yml │ │ │ ├── shenyu-mysql.yml │ │ │ ├── shenyu-nacos.yml │ │ │ ├── shenyu-opengauss.yml │ │ │ ├── shenyu-postgres.yml │ │ │ ├── shenyu-zookeeper.yml │ │ │ └── sync/ │ │ │ ├── shenyu-admin-etcd.yml │ │ │ ├── shenyu-admin-http.yml │ │ │ ├── shenyu-admin-nacos.yml │ │ │ ├── shenyu-admin-websocket.yml │ │ │ ├── shenyu-admin-zookeeper.yml │ │ │ ├── shenyu-bootstrap-etcd.yml │ │ │ ├── shenyu-bootstrap-http.yml │ │ │ ├── shenyu-bootstrap-nacos.yml │ │ │ ├── shenyu-bootstrap-websocket.yml │ │ │ ├── shenyu-bootstrap-zookeeper.yml │ │ │ └── shenyu-cm.yml │ │ ├── pom.xml │ │ ├── shenyu-e2e-case-apache-dubbo/ │ │ │ ├── compose/ │ │ │ │ ├── script/ │ │ │ │ │ └── e2e-apache-dubbo-sync-compose.sh │ │ │ │ └── shenyu-examples-dubbo-compose.yml │ │ │ ├── docker-compose.yml │ │ │ ├── k8s/ │ │ │ │ ├── script/ │ │ │ │ │ └── e2e-apache-dubbo-sync.sh │ │ │ │ └── shenyu-examples-dubbo.yml │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── e2e/ │ │ │ └── testcase/ │ │ │ └── apachedubbo/ │ │ │ ├── ApacheDubboPluginCases.java │ │ │ ├── ApacheDubboPluginTest.java │ │ │ └── DataSynTest.java │ │ ├── shenyu-e2e-case-cluster/ │ │ │ ├── compose/ │ │ │ │ ├── script/ │ │ │ │ │ ├── e2e-cluster-jdbc-compose.sh │ │ │ │ │ └── e2e-cluster-zookeeper-compose.sh │ │ │ │ └── shenyu-examples-http-compose.yml │ │ │ ├── k8s/ │ │ │ │ ├── script/ │ │ │ │ │ ├── e2e-cluster-jdbc.sh │ │ │ │ │ ├── e2e-cluster-zookeeper.sh │ │ │ │ │ ├── healthcheck.sh │ │ │ │ │ └── services-cluster.list │ │ │ │ ├── shenyu-cluster-jdbc.yml │ │ │ │ └── shenyu-cluster-zookeeper.yml │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyue/ │ │ │ └── e2e/ │ │ │ └── testcase/ │ │ │ └── cluster/ │ │ │ ├── DividePluginCases.java │ │ │ └── DividePluginTest.java │ │ ├── shenyu-e2e-case-grpc/ │ │ │ ├── compose/ │ │ │ │ ├── script/ │ │ │ │ │ └── e2e-grpc-sync-compose.sh │ │ │ │ └── shenyu-examples-grpc-compose.yml │ │ │ ├── k8s/ │ │ │ │ ├── script/ │ │ │ │ │ └── e2e-grpc-sync.sh │ │ │ │ └── shenyu-examples-grpc.yml │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── e2e/ │ │ │ └── testcase/ │ │ │ └── grpc/ │ │ │ ├── DataSynTest.java │ │ │ ├── GrpcPluginCases.java │ │ │ └── GrpcPluginTest.java │ │ ├── shenyu-e2e-case-http/ │ │ │ ├── compose/ │ │ │ │ ├── script/ │ │ │ │ │ └── e2e-http-sync-compose.sh │ │ │ │ ├── shenyu-examples-http-compose.yml │ │ │ │ └── shenyu-rocketmq-compose.yml │ │ │ ├── k8s/ │ │ │ │ ├── script/ │ │ │ │ │ └── e2e-http-sync.sh │ │ │ │ ├── shenyu-examples-http.yml │ │ │ │ └── shenyu-rocketmq.yml │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── e2e/ │ │ │ └── testcase/ │ │ │ └── http/ │ │ │ ├── DataSynTest.java │ │ │ ├── DividePluginCases.java │ │ │ └── DividePluginTest.java │ │ ├── shenyu-e2e-case-logging-kafka/ │ │ │ ├── compose/ │ │ │ │ ├── script/ │ │ │ │ │ └── e2e-logging-kafka-compose.sh │ │ │ │ ├── shenyu-examples-http-compose.yml │ │ │ │ └── shenyu-kafka-compose.yml │ │ │ ├── k8s/ │ │ │ │ ├── script/ │ │ │ │ │ └── e2e-http-sync.sh │ │ │ │ └── shenyu-kafka.yml │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── e2e/ │ │ │ └── testcase/ │ │ │ └── logging/ │ │ │ └── kafka/ │ │ │ ├── DividePluginCases.java │ │ │ └── DividePluginTest.java │ │ ├── shenyu-e2e-case-logging-rocketmq/ │ │ │ ├── compose/ │ │ │ │ ├── script/ │ │ │ │ │ └── e2e-logging-rocketmq-compose.sh │ │ │ │ ├── shenyu-examples-http-compose.yml │ │ │ │ └── shenyu-rocketmq-compose.yml │ │ │ ├── k8s/ │ │ │ │ ├── script/ │ │ │ │ │ └── e2e-http-sync.sh │ │ │ │ └── shenyu-kafka.yml │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── e2e/ │ │ │ └── testcase/ │ │ │ └── logging/ │ │ │ └── rocketmq/ │ │ │ ├── DividePluginCases.java │ │ │ └── DividePluginTest.java │ │ ├── shenyu-e2e-case-motan/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── e2e/ │ │ │ └── testcase/ │ │ │ └── motan/ │ │ │ ├── MotanPluginCases.java │ │ │ └── MotanPluginTest.java │ │ ├── shenyu-e2e-case-sofa/ │ │ │ ├── compose/ │ │ │ │ ├── script/ │ │ │ │ │ └── e2e-sofa-sync-compose.sh │ │ │ │ └── shenyu-examples-sofa-compose.yml │ │ │ ├── k8s/ │ │ │ │ ├── script/ │ │ │ │ │ └── e2e-sofa-sync.sh │ │ │ │ └── shenyu-examples-sofa.yml │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── e2e/ │ │ │ └── testcase/ │ │ │ └── sofa/ │ │ │ ├── DataSynTest.java │ │ │ ├── SofaPluginCases.java │ │ │ └── SofaPluginTest.java │ │ ├── shenyu-e2e-case-spring-cloud/ │ │ │ ├── compose/ │ │ │ │ ├── script/ │ │ │ │ │ └── e2e-springcloud-sync-compose.sh │ │ │ │ └── shenyu-examples-springcloud-compose.yml │ │ │ ├── k8s/ │ │ │ │ ├── script/ │ │ │ │ │ └── e2e-springcloud-sync.sh │ │ │ │ ├── shenyu-cm.yml │ │ │ │ ├── shenyu-examples-eureka.yml │ │ │ │ └── shenyu-examples-springcloud.yml │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── e2e/ │ │ │ └── testcase/ │ │ │ └── springcloud/ │ │ │ ├── DataSynTest.java │ │ │ ├── SpringCloudPluginCases.java │ │ │ └── SpringCloudPluginTest.java │ │ ├── shenyu-e2e-case-storage/ │ │ │ ├── compose/ │ │ │ │ └── script/ │ │ │ │ ├── e2e-h2-compose.sh │ │ │ │ ├── e2e-mysql-compose.sh │ │ │ │ ├── e2e-opengauss-compose.sh │ │ │ │ ├── e2e-postgres-compose.sh │ │ │ │ └── e2e-storage-compose.sh │ │ │ ├── k8s/ │ │ │ │ ├── script/ │ │ │ │ │ ├── e2e-h2.sh │ │ │ │ │ ├── e2e-mysql.sh │ │ │ │ │ ├── e2e-opengauss.sh │ │ │ │ │ ├── e2e-postgres.sh │ │ │ │ │ ├── healthcheck.sh │ │ │ │ │ ├── services-h2.list │ │ │ │ │ ├── services-mysql.list │ │ │ │ │ └── services-postgres.list │ │ │ │ ├── shenyu-app-service-h2.yml │ │ │ │ ├── shenyu-app-service-mysql.yml │ │ │ │ ├── shenyu-app-service-opengauss.yml │ │ │ │ ├── shenyu-app-service-postgres.yml │ │ │ │ ├── shenyu-deployment-h2.yml │ │ │ │ ├── shenyu-deployment-mysql.yml │ │ │ │ ├── shenyu-deployment-opengauss.yml │ │ │ │ └── shenyu-deployment-postgres.yml │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── e2e/ │ │ │ └── testcase/ │ │ │ └── divide/ │ │ │ ├── DividePluginCases.java │ │ │ └── DividePluginTest.java │ │ └── shenyu-e2e-case-websocket/ │ │ ├── compose/ │ │ │ ├── script/ │ │ │ │ └── e2e-websocket-sync-compose.sh │ │ │ └── shenyu-examples-websocket-compose.yml │ │ ├── k8s/ │ │ │ ├── script/ │ │ │ │ └── e2e-websocket-sync.sh │ │ │ └── shenyu-examples-websocket.yml │ │ ├── pom.xml │ │ └── src/ │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyue/ │ │ └── e2e/ │ │ └── testcase/ │ │ └── websocket/ │ │ ├── DataSynTest.java │ │ ├── WebSocketPluginCases.java │ │ └── WebSocketPluginTest.java │ ├── shenyu-e2e-client/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── e2e/ │ │ │ ├── client/ │ │ │ │ ├── BaseClient.java │ │ │ │ ├── EnvironmentClient.java │ │ │ │ ├── ExternalServiceClient.java │ │ │ │ ├── WaitDataSync.java │ │ │ │ ├── admin/ │ │ │ │ │ └── AdminClient.java │ │ │ │ └── gateway/ │ │ │ │ └── GatewayClient.java │ │ │ └── matcher/ │ │ │ ├── RuleMatcher.java │ │ │ └── SelectorMatcher.java │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── e2e/ │ │ │ └── client/ │ │ │ └── admin/ │ │ │ └── AdminClientTest.java │ │ └── resources/ │ │ └── log4j2.xml │ ├── shenyu-e2e-common/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── e2e/ │ │ │ ├── annotation/ │ │ │ │ ├── ExternalService.java │ │ │ │ ├── ShenYuAdminClient.java │ │ │ │ ├── ShenYuEnvironmentClient.java │ │ │ │ ├── ShenYuGatewayClient.java │ │ │ │ └── ShenYuInjectable.java │ │ │ ├── common/ │ │ │ │ ├── IdGenerator.java │ │ │ │ ├── IdManagers.java │ │ │ │ ├── NameUtils.java │ │ │ │ ├── RequestLogConsumer.java │ │ │ │ └── TableView.java │ │ │ ├── config/ │ │ │ │ └── ServiceConfigure.java │ │ │ ├── constant/ │ │ │ │ └── Constants.java │ │ │ ├── enums/ │ │ │ │ └── ServiceTypeEnum.java │ │ │ ├── model/ │ │ │ │ ├── MatchMode.java │ │ │ │ ├── Plugin.java │ │ │ │ ├── ResourcesData.java │ │ │ │ ├── SelectorType.java │ │ │ │ ├── ShenYuResult.java │ │ │ │ ├── data/ │ │ │ │ │ ├── BindingData.java │ │ │ │ │ ├── Condition.java │ │ │ │ │ ├── ConditionData.java │ │ │ │ │ ├── MetaData.java │ │ │ │ │ ├── NamespaceSyncData.java │ │ │ │ │ ├── PluginData.java │ │ │ │ │ ├── QueryCondition.java │ │ │ │ │ ├── ResourceData.java │ │ │ │ │ ├── RuleCacheData.java │ │ │ │ │ ├── RuleData.java │ │ │ │ │ ├── RuleQueryCondition.java │ │ │ │ │ ├── SearchCondition.java │ │ │ │ │ ├── SelectorCacheData.java │ │ │ │ │ ├── SelectorData.java │ │ │ │ │ └── SelectorQueryCondition.java │ │ │ │ ├── handle/ │ │ │ │ │ ├── DivideRuleHandle.java │ │ │ │ │ ├── DivideUpstream.java │ │ │ │ │ ├── DubboHandler.java │ │ │ │ │ ├── DubboRuleHandle.java │ │ │ │ │ ├── DubboSelectorHandle.java │ │ │ │ │ ├── GrpcSelectorHandle.java │ │ │ │ │ ├── PluginHandle.java │ │ │ │ │ ├── RuleHandle.java │ │ │ │ │ ├── SpringCloudRuleHandle.java │ │ │ │ │ ├── SpringCloudSelectorHandle.java │ │ │ │ │ └── Upstreams.java │ │ │ │ ├── request/ │ │ │ │ │ └── RequestVO.java │ │ │ │ └── response/ │ │ │ │ ├── FakeResourceDTO.java │ │ │ │ ├── LoginInfo.java │ │ │ │ ├── MetaDataDTO.java │ │ │ │ ├── NamespacePluginDTO.java │ │ │ │ ├── PaginatedResources.java │ │ │ │ ├── Pagination.java │ │ │ │ ├── PluginDTO.java │ │ │ │ ├── ResourceDTO.java │ │ │ │ ├── RuleDTO.java │ │ │ │ ├── SearchedResources.java │ │ │ │ └── SelectorDTO.java │ │ │ └── template/ │ │ │ └── ResourceDataTemplate.java │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── e2e/ │ │ │ └── common/ │ │ │ └── TableViewTest.java │ │ └── resources/ │ │ └── log4j2.xml │ └── shenyu-e2e-engine/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── e2e/ │ │ │ └── engine/ │ │ │ ├── ShenYuExtension.java │ │ │ ├── ShenYuExtensionContext.java │ │ │ ├── ShenYuLogExtension.java │ │ │ ├── annotation/ │ │ │ │ ├── ShenYuScenario.java │ │ │ │ ├── ShenYuScenarioParameter.java │ │ │ │ ├── ShenYuTest.java │ │ │ │ └── ShenYuValue.java │ │ │ ├── config/ │ │ │ │ └── ShenYuEngineConfigure.java │ │ │ ├── scenario/ │ │ │ │ ├── ShenYuScenarioInvocationContextProvider.java │ │ │ │ ├── ShenYuScenarioParameterResolver.java │ │ │ │ ├── ShenYuScenarioProvider.java │ │ │ │ ├── ShenYuScenarioSupplier.java │ │ │ │ ├── function/ │ │ │ │ │ ├── Checker.java │ │ │ │ │ ├── Deleter.java │ │ │ │ │ ├── HttpChecker.java │ │ │ │ │ ├── HttpCheckers.java │ │ │ │ │ ├── HttpVerifier.java │ │ │ │ │ ├── HttpWaiting.java │ │ │ │ │ ├── Verifier.java │ │ │ │ │ ├── WaitForHelper.java │ │ │ │ │ ├── Waiting.java │ │ │ │ │ ├── WebSocketChecker.java │ │ │ │ │ ├── WebSocketCheckers.java │ │ │ │ │ └── WebSocketVerifier.java │ │ │ │ └── specification/ │ │ │ │ ├── AfterEachSpec.java │ │ │ │ ├── BeforeEachSpec.java │ │ │ │ ├── CaseSpec.java │ │ │ │ ├── ScenarioSpec.java │ │ │ │ ├── ScenarioSpecLogProxy.java │ │ │ │ ├── ShenYuAfterEachSpec.java │ │ │ │ ├── ShenYuBeforeEachSpec.java │ │ │ │ ├── ShenYuCaseSpec.java │ │ │ │ └── ShenYuScenarioSpec.java │ │ │ └── utils/ │ │ │ └── SocketUtils.java │ │ └── resources/ │ │ └── log4j2.xml │ └── test/ │ ├── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── e2e/ │ │ ├── engine/ │ │ │ ├── ShenYuEngineTest.java │ │ │ └── function/ │ │ │ └── WaitForHelperTest.java │ │ └── k8s/ │ │ └── engine/ │ │ └── ShenYuE2eExtensionTest.java │ └── resources/ │ └── docker-compose.yml ├── shenyu-examples/ │ ├── pom.xml │ ├── shenyu-examples-common/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── common/ │ │ │ └── aop/ │ │ │ ├── InterceptorConfiguration.java │ │ │ ├── Log.java │ │ │ ├── LogInterceptor.java │ │ │ └── package-info.java │ │ └── resources/ │ │ ├── 1.txt │ │ ├── 2.txt │ │ └── META-INF/ │ │ ├── spring.factories │ │ └── spring.provides │ ├── shenyu-examples-dubbo/ │ │ ├── pom.xml │ │ ├── shenyu-examples-apache-dubbo-service/ │ │ │ ├── Dockerfile │ │ │ ├── k8s/ │ │ │ │ ├── ingress.yml │ │ │ │ ├── shenyu-examples-dubbo.yml │ │ │ │ └── shenyu-zookeeper.yml │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── http/ │ │ │ │ └── apache-dubbo-test-api.http │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── examples/ │ │ │ │ └── apache/ │ │ │ │ └── dubbo/ │ │ │ │ └── service/ │ │ │ │ ├── TestApacheDubboApplication.java │ │ │ │ └── impl/ │ │ │ │ ├── DubboMultiParamServiceImpl.java │ │ │ │ ├── DubboProtobufServiceImpl.java │ │ │ │ └── DubboTestServiceImpl.java │ │ │ └── resources/ │ │ │ ├── application.yml │ │ │ └── spring-dubbo.xml │ │ ├── shenyu-examples-apache-dubbo-service-annotation/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── http/ │ │ │ │ ├── apache-dubbo-class-test-api.http │ │ │ │ └── apache-dubbo-test-api.http │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── examples/ │ │ │ │ └── apache/ │ │ │ │ └── dubbo/ │ │ │ │ └── service/ │ │ │ │ └── annotation/ │ │ │ │ ├── TestApacheDubboAnnotationApplication.java │ │ │ │ └── impl/ │ │ │ │ ├── DubboClassMultiParamServiceImpl.java │ │ │ │ ├── DubboClassTestServiceImpl.java │ │ │ │ ├── DubboMultiParamServiceImpl.java │ │ │ │ ├── DubboProtobufServiceImpl.java │ │ │ │ └── DubboTestServiceImpl.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ ├── shenyu-examples-apache-dubbo-service-xml/ │ │ │ ├── Dockerfile │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── http/ │ │ │ │ ├── apache-dubbo-class-test-api.http │ │ │ │ └── apache-dubbo-test-api.http │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── examples/ │ │ │ │ └── apache/ │ │ │ │ └── dubbo/ │ │ │ │ └── service/ │ │ │ │ └── xml/ │ │ │ │ ├── TestApacheDubboXmlApplication.java │ │ │ │ └── impl/ │ │ │ │ ├── DubboClassMultiParamServiceImpl.java │ │ │ │ ├── DubboClassTestServiceImpl.java │ │ │ │ ├── DubboMultiParamServiceImpl.java │ │ │ │ ├── DubboProtobufServiceImpl.java │ │ │ │ └── DubboTestServiceImpl.java │ │ │ └── resources/ │ │ │ ├── application.yml │ │ │ ├── shenyu.xml │ │ │ └── spring-dubbo.xml │ │ └── shenyu-examples-dubbo-api/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── dubbo/ │ │ │ └── api/ │ │ │ ├── entity/ │ │ │ │ ├── ComplexBeanTest.java │ │ │ │ ├── DubboTest.java │ │ │ │ └── ListResp.java │ │ │ └── service/ │ │ │ ├── DubboClassMultiParamService.java │ │ │ ├── DubboClassTestService.java │ │ │ ├── DubboMultiParamService.java │ │ │ └── DubboTestService.java │ │ └── proto/ │ │ └── DubboTestProto.proto │ ├── shenyu-examples-eureka/ │ │ ├── Dockerfile │ │ ├── k8s/ │ │ │ └── shenyu-examples-eureka.yml │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── eureka/ │ │ │ └── EurekaServerApplication.java │ │ └── resources/ │ │ └── bootstrap.yml │ ├── shenyu-examples-grpc/ │ │ ├── Dockerfile │ │ ├── k8s/ │ │ │ ├── ingress.yml │ │ │ └── shenyu-examples-grpc.yml │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── http/ │ │ │ ├── grpc-class-annotation-test-api.http │ │ │ └── grpc-test-api.http │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── grpc/ │ │ │ ├── ShenyuGrpcServerBuilder.java │ │ │ ├── ShenyuTestGrpcApplication.java │ │ │ ├── controller/ │ │ │ │ └── GrpcTestController.java │ │ │ ├── demo/ │ │ │ │ ├── EventServiceImpl.java │ │ │ │ └── HelloServiceImpl.java │ │ │ ├── echo/ │ │ │ │ └── EchoServiceImpl.java │ │ │ └── stream/ │ │ │ └── StreamServiceImpl.java │ │ └── resources/ │ │ ├── application.yml │ │ └── proto/ │ │ ├── echo.proto │ │ ├── event.proto │ │ ├── hello.proto │ │ └── stream.proto │ ├── shenyu-examples-http/ │ │ ├── Dockerfile │ │ ├── k8s/ │ │ │ ├── ingress.yml │ │ │ ├── script/ │ │ │ │ ├── healthcheck.sh │ │ │ │ └── services.list │ │ │ ├── shenyu-deployment.yml │ │ │ ├── shenyu-examples-http.yml │ │ │ ├── shenyu-service.yml │ │ │ └── shenyu-zookeeper.yml │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── http/ │ │ │ ├── http-test-api-local.http │ │ │ └── http-test-api.http │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── http/ │ │ │ ├── ShenyuTestHttpApplication.java │ │ │ ├── config/ │ │ │ │ └── HttpServerConfig.java │ │ │ ├── controller/ │ │ │ │ ├── HttpTestController.java │ │ │ │ ├── OauthController.java │ │ │ │ ├── OrderController.java │ │ │ │ ├── RequestController.java │ │ │ │ ├── ShenyuClientPathController.java │ │ │ │ ├── SpringMvcMappingPathController.java │ │ │ │ └── UploadController.java │ │ │ ├── dto/ │ │ │ │ ├── BigObject.java │ │ │ │ ├── OAuth2DTO.java │ │ │ │ ├── OrderDTO.java │ │ │ │ ├── RequestDTO.java │ │ │ │ └── UserDTO.java │ │ │ ├── result/ │ │ │ │ └── ResultBean.java │ │ │ └── router/ │ │ │ └── ShenyuTestHttpRouter.java │ │ └── resources/ │ │ └── application.yml │ ├── shenyu-examples-http-swagger3/ │ │ ├── Dockerfile │ │ ├── k8s/ │ │ │ ├── script/ │ │ │ │ ├── healthcheck.sh │ │ │ │ └── services.list │ │ │ ├── shenyu-deployment.yml │ │ │ ├── shenyu-examples-http-deployment.yml │ │ │ ├── shenyu-examples-http-service.yml │ │ │ └── shenyu-service.yml │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── http/ │ │ │ ├── ShenyuTestSwaggerApplication.java │ │ │ ├── config/ │ │ │ │ ├── HttpServerConfig.java │ │ │ │ └── SwaggerConfiguration.java │ │ │ ├── controller/ │ │ │ │ ├── HttpTestController.java │ │ │ │ ├── OauthController.java │ │ │ │ ├── OrderController.java │ │ │ │ ├── RequestController.java │ │ │ │ ├── ShenyuClientPathController.java │ │ │ │ ├── SpringMvcMappingPathController.java │ │ │ │ └── UploadController.java │ │ │ ├── dto/ │ │ │ │ ├── OAuth2DTO.java │ │ │ │ ├── OrderDTO.java │ │ │ │ ├── RequestDTO.java │ │ │ │ └── UserDTO.java │ │ │ ├── result/ │ │ │ │ ├── ResultBean.java │ │ │ │ └── TreeResult.java │ │ │ └── router/ │ │ │ └── ShenyuTestHttpRouter.java │ │ └── resources/ │ │ └── application.yml │ ├── shenyu-examples-https/ │ │ ├── Dockerfile │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── http/ │ │ │ ├── https-test-api-local.http │ │ │ └── https-test-api.http │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── https/ │ │ │ ├── ShenyuTestHttpsApplication.java │ │ │ ├── configuration/ │ │ │ │ └── HttpsConfiguration.java │ │ │ ├── controller/ │ │ │ │ ├── OrderController.java │ │ │ │ └── UploadController.java │ │ │ └── dto/ │ │ │ └── OrderDTO.java │ │ └── resources/ │ │ ├── application.yml │ │ └── keystore.p12 │ ├── shenyu-examples-mcp/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ ├── ShenyuTestMcpApplication.java │ │ │ ├── controller/ │ │ │ │ └── OrderController.java │ │ │ └── dto/ │ │ │ └── OrderDTO.java │ │ └── resources/ │ │ └── application.yml │ ├── shenyu-examples-motan/ │ │ ├── pom.xml │ │ ├── shenyu-examples-motan-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── motan/ │ │ │ └── service/ │ │ │ ├── MotanClassDemoService.java │ │ │ ├── MotanDemoService.java │ │ │ └── MotanTest.java │ │ └── shenyu-examples-motan-service/ │ │ ├── Dockerfile │ │ ├── k8s/ │ │ │ ├── ingress.yml │ │ │ ├── shenyu-examples-motan.yml │ │ │ └── shenyu-zookeeper.yml │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── http/ │ │ │ ├── motan-class-test-api.http │ │ │ └── motan-test-api.http │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── motan/ │ │ │ └── service/ │ │ │ ├── TestMotanApplication.java │ │ │ └── impl/ │ │ │ ├── MotanClassDemoServiceImpl.java │ │ │ └── MotanDemoServiceImpl.java │ │ └── resources/ │ │ └── application.yml │ ├── shenyu-examples-plugin/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── examples/ │ │ └── plugin/ │ │ ├── ext/ │ │ │ ├── ExtPluginDataHandler.java │ │ │ ├── ExtendsShenyuBerBean.java │ │ │ ├── ExtendsShenyuPlugin.java │ │ │ └── ExtendsShenyuZerBean.java │ │ └── simple/ │ │ └── CustomShenyuPlugin.java │ ├── shenyu-examples-sdk/ │ │ ├── pom.xml │ │ ├── shenyu-examples-sdk-dubbo/ │ │ │ ├── pom.xml │ │ │ ├── shenyu-examples-sdk-apache-dubbo-consumer/ │ │ │ │ ├── Dockerfile │ │ │ │ ├── pom.xml │ │ │ │ └── src/ │ │ │ │ └── main/ │ │ │ │ ├── http/ │ │ │ │ │ └── sdk-apache-dubbo-test-api.http │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── examples/ │ │ │ │ │ └── sdk/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── dubbo/ │ │ │ │ │ └── consumer/ │ │ │ │ │ ├── ShenyuSdkApacheDubboExampleApplication.java │ │ │ │ │ ├── api/ │ │ │ │ │ │ └── ShenyuApacheDubboClientApi.java │ │ │ │ │ ├── controller/ │ │ │ │ │ │ └── ShenyuApacheDubboSdkExampleController.java │ │ │ │ │ ├── dto/ │ │ │ │ │ │ ├── DubboRequestBody.java │ │ │ │ │ │ └── DubboTestSaveRequest.java │ │ │ │ │ └── impl/ │ │ │ │ │ └── ShenyuApacheDubboClientAplFallBack.java │ │ │ │ └── resources/ │ │ │ │ └── application.yml │ │ │ └── shenyu-examples-sdk-apache-dubbo-provider/ │ │ │ ├── Dockerfile │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── http/ │ │ │ │ └── sdk-apache-dubbo-test-api.http │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── examples/ │ │ │ │ └── sdk/ │ │ │ │ └── apache/ │ │ │ │ └── provider/ │ │ │ │ └── ShenyuApacheDubboXmlProviderApplication.java │ │ │ └── resources/ │ │ │ ├── application.yml │ │ │ ├── shenyu.xml │ │ │ └── spring-dubbo.xml │ │ ├── shenyu-examples-sdk-feign/ │ │ │ ├── Dockerfile │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── http/ │ │ │ │ └── sdk-http-test-api.http │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── examples/ │ │ │ │ └── sdk/ │ │ │ │ └── feign/ │ │ │ │ ├── ShenyuSdkHttpExampleApplication.java │ │ │ │ ├── api/ │ │ │ │ │ └── ShenyuHttpClientApi.java │ │ │ │ ├── config/ │ │ │ │ │ └── SdkConfig.java │ │ │ │ ├── controller/ │ │ │ │ │ ├── HttpServiceController.java │ │ │ │ │ └── ShenyuHttpSdkExampleController.java │ │ │ │ └── dto/ │ │ │ │ └── SdkTestDto.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ ├── shenyu-examples-sdk-grpc/ │ │ │ ├── pom.xml │ │ │ ├── shenyu-examples-sdk-grpc-consumer/ │ │ │ │ ├── Dockerfile │ │ │ │ ├── pom.xml │ │ │ │ └── src/ │ │ │ │ └── main/ │ │ │ │ ├── http/ │ │ │ │ │ └── sdk-grpc-test-api.http │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── examples/ │ │ │ │ │ └── sdk/ │ │ │ │ │ └── grpc/ │ │ │ │ │ └── consumer/ │ │ │ │ │ ├── ShenyuSdkGrpcConsumerApplication.java │ │ │ │ │ ├── api/ │ │ │ │ │ │ └── ShenyuGrpcClientApi.java │ │ │ │ │ ├── controller/ │ │ │ │ │ │ └── ShenyuSdkGrpcConsumerController.java │ │ │ │ │ └── dto/ │ │ │ │ │ ├── EchoRequest.java │ │ │ │ │ ├── EchoResponse.java │ │ │ │ │ ├── GrpcData.java │ │ │ │ │ ├── HelloRequest.java │ │ │ │ │ └── HelloResponse.java │ │ │ │ └── resources/ │ │ │ │ └── application.yaml │ │ │ └── shenyu-examples-sdk-grpc-provider/ │ │ │ ├── Dockerfile │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── examples/ │ │ │ │ └── sdk/ │ │ │ │ └── grpc/ │ │ │ │ └── provider/ │ │ │ │ └── ShenyuSdkGrpcProviderApplication.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ ├── shenyu-examples-sdk-http/ │ │ │ ├── Dockerfile │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── http/ │ │ │ │ └── sdk-http-test-api.http │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── examples/ │ │ │ │ └── sdk/ │ │ │ │ └── http/ │ │ │ │ ├── ShenyuSdkHttpExampleApplication.java │ │ │ │ ├── api/ │ │ │ │ │ └── ShenyuHttpClientApi.java │ │ │ │ ├── config/ │ │ │ │ │ └── SdkConfig.java │ │ │ │ ├── controller/ │ │ │ │ │ ├── HttpServiceController.java │ │ │ │ │ └── ShenyuHttpSdkExampleController.java │ │ │ │ └── dto/ │ │ │ │ └── SdkTestDto.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── shenyu-examples-sdk-springcloud/ │ │ ├── pom.xml │ │ ├── shenyu-examples-sdk-springcloud-consumer/ │ │ │ ├── Dockerfile │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── http/ │ │ │ │ └── sdk-spring-cloud-test-api.http │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── examples/ │ │ │ │ └── sdk/ │ │ │ │ └── springcloud/ │ │ │ │ └── consumer/ │ │ │ │ ├── ShenyuSdkSpringCloudConsumerExampleApplication.java │ │ │ │ ├── api/ │ │ │ │ │ └── ShenyuSpringCloudClientApi.java │ │ │ │ ├── controller/ │ │ │ │ │ └── ShenyuSdkSpringCloudConsumerController.java │ │ │ │ ├── dto/ │ │ │ │ │ └── OrderDTO.java │ │ │ │ └── impl/ │ │ │ │ ├── ShenyuSpringCloudClientApiFallback.java │ │ │ │ └── ShenyuSpringCloudClientApiFallbackFactory.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── shenyu-examples-sdk-springcloud-provider/ │ │ ├── Dockerfile │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── sdk/ │ │ │ └── springcloud/ │ │ │ └── provider/ │ │ │ └── ShenyuSdkSpringCloudProviderApplication.java │ │ └── resources/ │ │ └── application.yml │ ├── shenyu-examples-sofa/ │ │ ├── README.md │ │ ├── pom.xml │ │ ├── shenyu-examples-sofa-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── sofa/ │ │ │ └── api/ │ │ │ ├── entity/ │ │ │ │ ├── SofaComplexTypeBean.java │ │ │ │ └── SofaSimpleTypeBean.java │ │ │ └── service/ │ │ │ ├── SofaClientMultiParamService.java │ │ │ ├── SofaClientSingleParamService.java │ │ │ ├── SofaMultiParamService.java │ │ │ └── SofaSingleParamService.java │ │ └── shenyu-examples-sofa-service/ │ │ ├── Dockerfile │ │ ├── k8s/ │ │ │ ├── ingress.yml │ │ │ ├── shenyu-examples-sofa.yml │ │ │ └── shenyu-zookeeper.yml │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── http/ │ │ │ └── sofa-test-api.http │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── sofa/ │ │ │ └── service/ │ │ │ ├── TestSofaApplication.java │ │ │ └── impl/ │ │ │ ├── SofaClientMultiParamServiceImpl.java │ │ │ ├── SofaClientSingleParamServiceImpl.java │ │ │ ├── SofaMultiParamServiceImpl.java │ │ │ └── SofaSingleParamServiceImpl.java │ │ └── resources/ │ │ ├── application.yml │ │ └── invoke-server-example.xml │ ├── shenyu-examples-springcloud/ │ │ ├── Dockerfile │ │ ├── README.md │ │ ├── k8s/ │ │ │ ├── ingress.yml │ │ │ └── shenyu-examples-springcloud.yml │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── http/ │ │ │ ├── spring-cloud-test-api-local.http │ │ │ └── spring-cloud-test-api.http │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── springcloud/ │ │ │ ├── ShenyuTestSpringCloudApplication.java │ │ │ ├── controller/ │ │ │ │ ├── AllController.java │ │ │ │ ├── NewFeatureController.java │ │ │ │ ├── OrderController.java │ │ │ │ ├── TestController.java │ │ │ │ └── UploadController.java │ │ │ └── dto/ │ │ │ ├── EntityResult.java │ │ │ ├── OrderDTO.java │ │ │ └── UserDTO.java │ │ └── resources/ │ │ └── application.yml │ ├── shenyu-examples-springmvc/ │ │ ├── Dockerfile │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── http/ │ │ │ ├── http-test-api-local.http │ │ │ └── http-test-api.http │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── springmvc/ │ │ │ ├── TestSpringMvcApplication.java │ │ │ ├── controller/ │ │ │ │ ├── HttpTestController.java │ │ │ │ ├── OrderController.java │ │ │ │ └── UploadController.java │ │ │ ├── dto/ │ │ │ │ ├── OAuth2DTO.java │ │ │ │ ├── OrderDTO.java │ │ │ │ └── UserDTO.java │ │ │ └── result/ │ │ │ └── ResultBean.java │ │ └── resources/ │ │ ├── application.yml │ │ └── context/ │ │ └── shenyu.xml │ ├── shenyu-examples-springmvc-tomcat/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── http/ │ │ │ ├── http-test-api-local.http │ │ │ └── http-test-api.http │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── springmvc/ │ │ │ ├── controller/ │ │ │ │ ├── HttpTestController.java │ │ │ │ ├── OrderController.java │ │ │ │ └── UploadController.java │ │ │ ├── dto/ │ │ │ │ ├── OAuth2DTO.java │ │ │ │ ├── OrderDTO.java │ │ │ │ └── UserDTO.java │ │ │ └── result/ │ │ │ └── ResultBean.java │ │ ├── resources/ │ │ │ ├── application.properties │ │ │ ├── context/ │ │ │ │ └── shenyu.xml │ │ │ └── spring-mvc.xml │ │ └── webapp/ │ │ └── WEB-INF/ │ │ └── web.xml │ ├── shenyu-examples-tars/ │ │ ├── README.md │
Showing preview only (3,164K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (35291 symbols across 3133 files)
FILE: actions/paths-filter/dist/index.js
function isPredicateQuantifier (line 95) | function isPredicateQuantifier(x) {
class Filter (line 99) | class Filter {
method constructor (line 101) | constructor(yaml, filterConfig) {
method load (line 109) | load(yaml) {
method match (line 121) | match(files) {
method isMatch (line 128) | isMatch(file, patterns) {
method parseFilterItemYaml (line 140) | parseFilterItemYaml(item) {
method throwInvalidFormatError (line 164) | throwInvalidFormatError(message) {
function flat (line 171) | function flat(arr) {
function getChangesInLastCommit (line 213) | async function getChangesInLastCommit() {
function getChanges (line 226) | async function getChanges(base, head) {
function getChangesOnHead (line 244) | async function getChangesOnHead() {
function getChangesSinceMergeBase (line 258) | async function getChangesSinceMergeBase(base, head, initialFetchDepth) {
function parseGitDiffOutput (line 332) | function parseGitDiffOutput(output) {
function listAllFilesAsAdded (line 344) | async function listAllFilesAsAdded() {
function getCurrentRef (line 363) | async function getCurrentRef() {
function getShortName (line 381) | function getShortName(ref) {
function isGitSha (line 393) | function isGitSha(ref) {
function hasCommit (line 397) | async function hasCommit(ref) {
function getCommitCount (line 400) | async function getCommitCount() {
function getLocalRef (line 405) | async function getLocalRef(shortName) {
function ensureRefAvailable (line 424) | async function ensureRefAvailable(name) {
function fixStdOutNullTermination (line 445) | function fixStdOutNullTermination() {
function csvEscape (line 472) | function csvEscape(value) {
function backslashEscape (line 498) | function backslashEscape(value) {
function shellEscape (line 504) | function shellEscape(value) {
function run (line 564) | async function run() {
function isPathInput (line 598) | function isPathInput(text) {
function getConfigFileContent (line 601) | function getConfigFileContent(configPath) {
function getChangedFiles (line 610) | async function getChangedFiles(token, base, ref, initialFetchDepth) {
function getChangedFilesFromGit (line 648) | async function getChangedFilesFromGit(base, head, initialFetchDepth) {
function getChangedFilesFromApi (line 696) | async function getChangedFilesFromApi(token, pullRequest) {
function exportResults (line 745) | function exportResults(results, format) {
function serializeExport (line 778) | function serializeExport(files, format) {
function isExportFormat (line 793) | function isExportFormat(value) {
function getErrorMessage (line 796) | function getErrorMessage(error) {
function issueCommand (line 844) | function issueCommand(command, properties, message) {
function issue (line 849) | function issue(name, message = '') {
class Command (line 854) | class Command {
method constructor (line 855) | constructor(command, properties, message) {
method toString (line 863) | toString() {
function escapeData (line 887) | function escapeData(s) {
function escapeProperty (line 893) | function escapeProperty(s) {
function adopt (line 930) | function adopt(value) { return value instanceof P ? value : new P(functi...
function fulfilled (line 932) | function fulfilled(value) { try { step(generator.next(value)); } catch (...
function rejected (line 933) | function rejected(value) { try { step(generator["throw"](value)); } catc...
function step (line 934) | function step(result) { result.done ? resolve(result.value) : adopt(resu...
function exportVariable (line 969) | function exportVariable(name, val) {
function setSecret (line 983) | function setSecret(secret) {
function addPath (line 991) | function addPath(inputPath) {
function getInput (line 1011) | function getInput(name, options) {
function getMultilineInput (line 1030) | function getMultilineInput(name, options) {
function getBooleanInput (line 1050) | function getBooleanInput(name, options) {
function setOutput (line 1069) | function setOutput(name, value) {
function setCommandEcho (line 1083) | function setCommandEcho(enabled) {
function setFailed (line 1095) | function setFailed(message) {
function isDebug (line 1106) | function isDebug() {
function debug (line 1114) | function debug(message) {
function error (line 1123) | function error(message, properties = {}) {
function warning (line 1132) | function warning(message, properties = {}) {
function notice (line 1141) | function notice(message, properties = {}) {
function info (line 1149) | function info(message) {
function startGroup (line 1160) | function startGroup(name) {
function endGroup (line 1167) | function endGroup() {
function group (line 1179) | function group(name, fn) {
function saveState (line 1203) | function saveState(name, value) {
function getState (line 1217) | function getState(name) {
function getIDToken (line 1221) | function getIDToken(aud) {
function issueFileCommand (line 1281) | function issueFileCommand(command, message) {
function prepareKeyValueMessage (line 1294) | function prepareKeyValueMessage(key, value) {
function adopt (line 1319) | function adopt(value) { return value instanceof P ? value : new P(functi...
function fulfilled (line 1321) | function fulfilled(value) { try { step(generator.next(value)); } catch (...
function rejected (line 1322) | function rejected(value) { try { step(generator["throw"](value)); } catc...
function step (line 1323) | function step(result) { result.done ? resolve(result.value) : adopt(resu...
class OidcClient (line 1332) | class OidcClient {
method createHttpClient (line 1333) | static createHttpClient(allowRetry = true, maxRetry = 10) {
method getRequestToken (line 1340) | static getRequestToken() {
method getIDTokenUrl (line 1347) | static getIDTokenUrl() {
method getCall (line 1354) | static getCall(id_token_url) {
method getIDToken (line 1372) | static getIDToken(audience) {
function toPosixPath (line 1431) | function toPosixPath(pth) {
function toWin32Path (line 1442) | function toWin32Path(pth) {
function toPlatformPath (line 1454) | function toPlatformPath(pth) {
function adopt (line 1468) | function adopt(value) { return value instanceof P ? value : new P(functi...
function fulfilled (line 1470) | function fulfilled(value) { try { step(generator.next(value)); } catch (...
function rejected (line 1471) | function rejected(value) { try { step(generator["throw"](value)); } catc...
function step (line 1472) | function step(result) { result.done ? resolve(result.value) : adopt(resu...
class Summary (line 1483) | class Summary {
method constructor (line 1484) | constructor() {
method filePath (line 1493) | filePath() {
method wrap (line 1521) | wrap(tag, content, attrs = {}) {
method write (line 1537) | write(options) {
method clear (line 1551) | clear() {
method stringify (line 1561) | stringify() {
method isEmptyBuffer (line 1569) | isEmptyBuffer() {
method emptyBuffer (line 1577) | emptyBuffer() {
method addRaw (line 1589) | addRaw(text, addEOL = false) {
method addEOL (line 1598) | addEOL() {
method addCodeBlock (line 1609) | addCodeBlock(code, lang) {
method addList (line 1622) | addList(items, ordered = false) {
method addTable (line 1635) | addTable(rows) {
method addDetails (line 1663) | addDetails(label, content) {
method addImage (line 1676) | addImage(src, alt, options) {
method addHeading (line 1690) | addHeading(text, level) {
method addSeparator (line 1703) | addSeparator() {
method addBreak (line 1712) | addBreak() {
method addQuote (line 1724) | addQuote(text, cite) {
method addLink (line 1737) | addLink(text, href) {
function toCommandValue (line 1765) | function toCommandValue(input) {
function toCommandProperties (line 1781) | function toCommandProperties(annotationProperties) {
function adopt (line 1824) | function adopt(value) { return value instanceof P ? value : new P(functi...
function fulfilled (line 1826) | function fulfilled(value) { try { step(generator.next(value)); } catch (...
function rejected (line 1827) | function rejected(value) { try { step(generator["throw"](value)); } catc...
function step (line 1828) | function step(result) { result.done ? resolve(result.value) : adopt(resu...
function exec (line 1846) | function exec(commandLine, args, options) {
function getExecOutput (line 1870) | function getExecOutput(commandLine, args, options) {
function adopt (line 1934) | function adopt(value) { return value instanceof P ? value : new P(functi...
function fulfilled (line 1936) | function fulfilled(value) { try { step(generator.next(value)); } catch (...
function rejected (line 1937) | function rejected(value) { try { step(generator["throw"](value)); } catc...
function step (line 1938) | function step(result) { result.done ? resolve(result.value) : adopt(resu...
class ToolRunner (line 1956) | class ToolRunner extends events.EventEmitter {
method constructor (line 1957) | constructor(toolPath, args, options) {
method _debug (line 1966) | _debug(message) {
method _getCommandString (line 1971) | _getCommandString(options, noPrefix) {
method _processLineBuffer (line 2009) | _processLineBuffer(data, strBuffer, onLine) {
method _getSpawnFileName (line 2028) | _getSpawnFileName() {
method _getSpawnArgs (line 2036) | _getSpawnArgs(options) {
method _endsWith (line 2052) | _endsWith(str, end) {
method _isCmdFile (line 2055) | _isCmdFile() {
method _windowsQuoteCmdArg (line 2060) | _windowsQuoteCmdArg(arg) {
method _uvQuoteCmdArg (line 2180) | _uvQuoteCmdArg(arg) {
method _cloneExecOptions (line 2259) | _cloneExecOptions(options) {
method _getSpawnOptions (line 2274) | _getSpawnOptions(options, toolPath) {
method exec (line 2295) | exec() {
function argStringToArray (line 2415) | function argStringToArray(argString) {
class ExecState (line 2462) | class ExecState extends events.EventEmitter {
method constructor (line 2463) | constructor(options, toolPath) {
method CheckComplete (line 2482) | CheckComplete() {
method _debug (line 2493) | _debug(message) {
method _setResult (line 2496) | _setResult() {
method HandleTimeout (line 2518) | static HandleTimeout(state) {
class Context (line 2543) | class Context {
method constructor (line 2547) | constructor() {
method issue (line 2573) | get issue() {
method repo (line 2577) | get repo() {
function getOctokit (line 2635) | function getOctokit(token, options, ...additionalPlugins) {
function adopt (line 2673) | function adopt(value) { return value instanceof P ? value : new P(functi...
function fulfilled (line 2675) | function fulfilled(value) { try { step(generator.next(value)); } catch (...
function rejected (line 2676) | function rejected(value) { try { step(generator["throw"](value)); } catc...
function step (line 2677) | function step(result) { result.done ? resolve(result.value) : adopt(resu...
function getAuthString (line 2685) | function getAuthString(token, options) {
function getProxyAgent (line 2695) | function getProxyAgent(destinationUrl) {
function getProxyAgentDispatcher (line 2700) | function getProxyAgentDispatcher(destinationUrl) {
function getProxyFetch (line 2705) | function getProxyFetch(destinationUrl) {
function getApiBaseUrl (line 2713) | function getApiBaseUrl() {
function getOctokitOptions (line 2773) | function getOctokitOptions(token, options) {
function adopt (line 2793) | function adopt(value) { return value instanceof P ? value : new P(functi...
function fulfilled (line 2795) | function fulfilled(value) { try { step(generator.next(value)); } catch (...
function rejected (line 2796) | function rejected(value) { try { step(generator["throw"](value)); } catc...
function step (line 2797) | function step(result) { result.done ? resolve(result.value) : adopt(resu...
class BasicCredentialHandler (line 2803) | class BasicCredentialHandler {
method constructor (line 2804) | constructor(username, password) {
method prepareRequest (line 2808) | prepareRequest(options) {
method canHandleAuthentication (line 2815) | canHandleAuthentication() {
method handleAuthentication (line 2818) | handleAuthentication() {
class BearerCredentialHandler (line 2825) | class BearerCredentialHandler {
method constructor (line 2826) | constructor(token) {
method prepareRequest (line 2831) | prepareRequest(options) {
method canHandleAuthentication (line 2838) | canHandleAuthentication() {
method handleAuthentication (line 2841) | handleAuthentication() {
class PersonalAccessTokenCredentialHandler (line 2848) | class PersonalAccessTokenCredentialHandler {
method constructor (line 2849) | constructor(token) {
method prepareRequest (line 2854) | prepareRequest(options) {
method canHandleAuthentication (line 2861) | canHandleAuthentication() {
method handleAuthentication (line 2864) | handleAuthentication() {
function adopt (line 2905) | function adopt(value) { return value instanceof P ? value : new P(functi...
function fulfilled (line 2907) | function fulfilled(value) { try { step(generator.next(value)); } catch (...
function rejected (line 2908) | function rejected(value) { try { step(generator["throw"](value)); } catc...
function step (line 2909) | function step(result) { result.done ? resolve(result.value) : adopt(resu...
function getProxyUrl (line 2963) | function getProxyUrl(serverUrl) {
class HttpClientError (line 2983) | class HttpClientError extends Error {
method constructor (line 2984) | constructor(message, statusCode) {
class HttpClientResponse (line 2992) | class HttpClientResponse {
method constructor (line 2993) | constructor(message) {
method readBody (line 2996) | readBody() {
method readBodyBuffer (line 3009) | readBodyBuffer() {
function isHttps (line 3024) | function isHttps(requestUrl) {
class HttpClient (line 3029) | class HttpClient {
method constructor (line 3030) | constructor(userAgent, handlers, requestOptions) {
method options (line 3067) | options(requestUrl, additionalHeaders) {
method get (line 3072) | get(requestUrl, additionalHeaders) {
method del (line 3077) | del(requestUrl, additionalHeaders) {
method post (line 3082) | post(requestUrl, data, additionalHeaders) {
method patch (line 3087) | patch(requestUrl, data, additionalHeaders) {
method put (line 3092) | put(requestUrl, data, additionalHeaders) {
method head (line 3097) | head(requestUrl, additionalHeaders) {
method sendStream (line 3102) | sendStream(verb, requestUrl, stream, additionalHeaders) {
method getJson (line 3111) | getJson(requestUrl, additionalHeaders = {}) {
method postJson (line 3118) | postJson(requestUrl, obj, additionalHeaders = {}) {
method putJson (line 3127) | putJson(requestUrl, obj, additionalHeaders = {}) {
method patchJson (line 3136) | patchJson(requestUrl, obj, additionalHeaders = {}) {
method request (line 3150) | request(verb, requestUrl, data, headers) {
method dispose (line 3235) | dispose() {
method requestRaw (line 3246) | requestRaw(info, data) {
method requestRawWithCallback (line 3271) | requestRawWithCallback(info, data, onResult) {
method getAgent (line 3323) | getAgent(serverUrl) {
method getAgentDispatcher (line 3327) | getAgentDispatcher(serverUrl) {
method _prepareRequest (line 3336) | _prepareRequest(method, requestUrl, headers) {
method _mergeHeaders (line 3363) | _mergeHeaders(headers) {
method _getExistingOrDefaultHeader (line 3369) | _getExistingOrDefaultHeader(additionalHeaders, header, _default) {
method _getAgent (line 3376) | _getAgent(parsedUrl) {
method _getProxyAgentDispatcher (line 3435) | _getProxyAgentDispatcher(parsedUrl, proxyUrl) {
method _performExponentialBackoff (line 3459) | _performExponentialBackoff(retryNumber) {
method _processResponse (line 3466) | _processResponse(res, options) {
function getProxyUrl (line 3545) | function getProxyUrl(reqUrl) {
function checkBypass (line 3572) | function checkBypass(reqUrl) {
function isLoopbackAddress (line 3616) | function isLoopbackAddress(host) {
function adopt (line 3652) | function adopt(value) { return value instanceof P ? value : new P(functi...
function fulfilled (line 3654) | function fulfilled(value) { try { step(generator.next(value)); } catch (...
function rejected (line 3655) | function rejected(value) { try { step(generator["throw"](value)); } catc...
function step (line 3656) | function step(result) { result.done ? resolve(result.value) : adopt(resu...
function exists (line 3673) | function exists(fsPath) {
function isDirectory (line 3688) | function isDirectory(fsPath, useStat = false) {
function isRooted (line 3699) | function isRooted(p) {
function tryGetExecutablePath (line 3717) | function tryGetExecutablePath(filePath, extensions) {
function normalizeSeparators (line 3788) | function normalizeSeparators(p) {
function isUnixExecutable (line 3802) | function isUnixExecutable(stats) {
function getCmdPath (line 3808) | function getCmdPath() {
function adopt (line 3842) | function adopt(value) { return value instanceof P ? value : new P(functi...
function fulfilled (line 3844) | function fulfilled(value) { try { step(generator.next(value)); } catch (...
function rejected (line 3845) | function rejected(value) { try { step(generator["throw"](value)); } catc...
function step (line 3846) | function step(result) { result.done ? resolve(result.value) : adopt(resu...
function cp (line 3863) | function cp(source, dest, options = {}) {
function mv (line 3904) | function mv(source, dest, options = {}) {
function rmRF (line 3932) | function rmRF(inputPath) {
function mkdirP (line 3963) | function mkdirP(fsPath) {
function which (line 3978) | function which(tool, check) {
function findInPath (line 4009) | function findInPath(tool) {
function readCopyOptions (line 4061) | function readCopyOptions(options) {
function cpDirRecursive (line 4069) | function cpDirRecursive(sourceDir, destDir, currentDepth, force) {
function copyFile (line 4094) | function copyFile(srcFile, destFile, force) {
function auth (line 4157) | async function auth(token) {
function withAuthorizationPrefix (line 4170) | function withAuthorizationPrefix(token) {
function hook (line 4178) | async function hook(token, request, route, parameters) {
method defaults (line 4256) | static defaults(defaults) {
method plugin (line 4287) | static plugin(...newPlugins) {
method constructor (line 4298) | constructor(options = {}) {
function lowercaseKeys (line 4428) | function lowercaseKeys(object) {
function isPlainObject (line 4439) | function isPlainObject(value) {
function mergeDeep (line 4452) | function mergeDeep(defaults, options) {
function removeUndefinedProperties (line 4468) | function removeUndefinedProperties(obj) {
function merge (line 4478) | function merge(defaults, route, options) {
function addQueryParameters (line 4501) | function addQueryParameters(url, parameters) {
function removeNonChars (line 4517) | function removeNonChars(variableName) {
function extractUrlVariableNames (line 4520) | function extractUrlVariableNames(url) {
function omit (line 4529) | function omit(object, keysToOmit) {
function encodeReserved (line 4540) | function encodeReserved(str) {
function encodeUnreserved (line 4548) | function encodeUnreserved(str) {
function encodeValue (line 4553) | function encodeValue(operator, value, key) {
function isDefined (line 4561) | function isDefined(value) {
function isKeyOperator (line 4564) | function isKeyOperator(operator) {
function getValues (line 4567) | function getValues(context, operator, key, modifier) {
function parseUrl (line 4627) | function parseUrl(template) {
function expand (line 4632) | function expand(template, context) {
function parse (line 4672) | function parse(options) {
function endpointWithDefaults (line 4737) | function endpointWithDefaults(defaults, route, options) {
function withDefaults (line 4742) | function withDefaults(oldDefaults, newDefaults) {
function _buildMessageForResponseErrors (line 4805) | function _buildMessageForResponseErrors(data) {
method constructor (line 4810) | constructor(request2, headers, response) {
function graphql (line 4836) | function graphql(request2, query, options) {
function withDefaults (line 4888) | function withDefaults(request2, newDefaults) {
function withCustomRequest (line 4907) | function withCustomRequest(customRequest) {
function normalizePaginatedListResponse (line 4956) | function normalizePaginatedListResponse(response) {
function iterator (line 4986) | function iterator(octokit, route, parameters) {
function paginate (line 5022) | function paginate(octokit, route, parameters, mapFn) {
function gather (line 5034) | function gather(octokit, results, iterator2, mapFn) {
function isPaginatingEndpoint (line 5295) | function isPaginatingEndpoint(arg) {
function paginateRest (line 5304) | function paginateRest(octokit) {
method has (line 7309) | has({ scope }, methodName) {
method getOwnPropertyDescriptor (line 7312) | getOwnPropertyDescriptor(target, methodName) {
method defineProperty (line 7321) | defineProperty(target, methodName, descriptor) {
method deleteProperty (line 7325) | deleteProperty(target, methodName) {
method ownKeys (line 7329) | ownKeys({ scope }) {
method set (line 7332) | set(target, methodName, value) {
method get (line 7335) | get({ octokit, scope, cache }, methodName) {
function endpointsToMethods (line 7358) | function endpointsToMethods(octokit) {
function decorate (line 7365) | function decorate(octokit, scope, methodName, defaults, decorations) {
function restEndpointMethods (line 7408) | function restEndpointMethods(octokit) {
function legacyRestEndpointMethods (line 7415) | function legacyRestEndpointMethods(octokit) {
method constructor (line 7473) | constructor(message, statusCode, options) {
function isPlainObject (line 7563) | function isPlainObject(value) {
function getBufferResponse (line 7579) | function getBufferResponse(response) {
function fetchWrapper (line 7584) | function fetchWrapper(requestOptions) {
function getResponseData (line 7691) | async function getResponseData(response) {
function toErrorMessage (line 7701) | function toErrorMessage(data) {
function withDefaults (line 7714) | function withDefaults(oldEndpoint, newDefaults) {
function bindApi (line 7761) | function bindApi(hook, state, name) {
function HookSingular (line 7774) | function HookSingular() {
function HookCollection (line 7784) | function HookCollection() {
function Hook (line 7796) | function Hook() {
function addHook (line 7823) | function addHook(state, kind, name, hook) {
function register (line 7876) | function register(state, name, method, options) {
function removeHook (line 7910) | function removeHook(state, name, method) {
class Deprecation (line 7939) | class Deprecation extends Error {
method constructor (line 7940) | constructor(message) {
function renamed (line 7970) | function renamed(from, to) {
function isNothing (line 8021) | function isNothing(subject) {
function isObject (line 8026) | function isObject(subject) {
function toArray (line 8031) | function toArray(sequence) {
function extend (line 8039) | function extend(target, source) {
function repeat (line 8055) | function repeat(string, count) {
function isNegativeZero (line 8066) | function isNegativeZero(number) {
function compileStyleMap (line 8147) | function compileStyleMap(schema, map) {
function encodeHex (line 8174) | function encodeHex(character) {
function State (line 8199) | function State(options) {
function indentString (line 8226) | function indentString(string, spaces) {
function generateNextLine (line 8252) | function generateNextLine(state, level) {
function testImplicitResolving (line 8256) | function testImplicitResolving(state, str) {
function isWhitespace (line 8271) | function isWhitespace(c) {
function isPrintable (line 8279) | function isPrintable(c) {
function isNsCharOrWhitespace (line 8291) | function isNsCharOrWhitespace(c) {
function isPlainSafe (line 8308) | function isPlainSafe(c, prev, inblock) {
function isPlainSafeFirst (line 8331) | function isPlainSafeFirst(c) {
function isPlainSafeLast (line 8364) | function isPlainSafeLast(c) {
function codePointAt (line 8370) | function codePointAt(string, pos) {
function needIndentIndicator (line 8383) | function needIndentIndicator(string) {
function chooseScalarStyle (line 8401) | function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineW...
function writeScalar (line 8479) | function writeScalar(state, string, level, iskey, inblock) {
function blockHeader (line 8531) | function blockHeader(string, indentPerLevel) {
function dropEndingNewline (line 8543) | function dropEndingNewline(string) {
function foldString (line 8549) | function foldString(string, width) {
function foldLine (line 8586) | function foldLine(line, width) {
function escapeString (line 8626) | function escapeString(string) {
function writeFlowSequence (line 8646) | function writeFlowSequence(state, level, object) {
function writeBlockSequence (line 8674) | function writeBlockSequence(state, level, object, compact) {
function writeFlowMapping (line 8711) | function writeFlowMapping(state, level, object) {
function writeBlockMapping (line 8757) | function writeBlockMapping(state, level, object, compact) {
function detectType (line 8835) | function detectType(state, object, explicit) {
function writeNode (line 8881) | function writeNode(state, level, object, block, compact, iskey, isblocks...
function getDuplicateReferences (line 8988) | function getDuplicateReferences(object, state) {
function inspectNode (line 9002) | function inspectNode(object, objects, duplicatesIndexes) {
function dump (line 9031) | function dump(input, options) {
function formatError (line 9063) | function formatError(exception, compact) {
function YAMLException (line 9082) | function YAMLException(reason, mark) {
function _class (line 9152) | function _class(obj) { return Object.prototype.toString.call(obj); }
function is_EOL (line 9154) | function is_EOL(c) {
function is_WHITE_SPACE (line 9158) | function is_WHITE_SPACE(c) {
function is_WS_OR_EOL (line 9162) | function is_WS_OR_EOL(c) {
function is_FLOW_INDICATOR (line 9169) | function is_FLOW_INDICATOR(c) {
function fromHexCode (line 9177) | function fromHexCode(c) {
function escapedHexLen (line 9194) | function escapedHexLen(c) {
function fromDecimalCode (line 9201) | function fromDecimalCode(c) {
function simpleEscapeSequence (line 9209) | function simpleEscapeSequence(c) {
function charFromCodepoint (line 9231) | function charFromCodepoint(c) {
function State (line 9251) | function State(input, options) {
function generateError (line 9292) | function generateError(state, message) {
function throwError (line 9306) | function throwError(state, message) {
function throwWarning (line 9310) | function throwWarning(state, message) {
function captureSegment (line 9386) | function captureSegment(state, start, end, checkJson) {
function mergeMappings (line 9408) | function mergeMappings(state, destination, source, overridableKeys) {
function storeMappingPair (line 9427) | function storeMappingPair(state, _result, overridableKeys, keyTag, keyNo...
function readLineBreak (line 9498) | function readLineBreak(state) {
function skipSeparationSpace (line 9519) | function skipSeparationSpace(state, allowComments, checkIndent) {
function testDocumentSeparator (line 9560) | function testDocumentSeparator(state) {
function writeFoldedLines (line 9584) | function writeFoldedLines(state, count) {
function readPlainScalar (line 9593) | function readPlainScalar(state, nodeIndent, withinFlowCollection) {
function readSingleQuotedScalar (line 9702) | function readSingleQuotedScalar(state, nodeIndent) {
function readDoubleQuotedScalar (line 9747) | function readDoubleQuotedScalar(state, nodeIndent) {
function readFlowCollection (line 9826) | function readFlowCollection(state, nodeIndent) {
function readBlockScalar (line 9938) | function readBlockScalar(state, nodeIndent) {
function readBlockSequence (line 10081) | function readBlockSequence(state, nodeIndent) {
function readBlockMapping (line 10151) | function readBlockMapping(state, nodeIndent, flowIndent) {
function readTagProperty (line 10328) | function readTagProperty(state) {
function readAnchorProperty (line 10428) | function readAnchorProperty(state) {
function readAlias (line 10455) | function readAlias(state) {
function composeNode (line 10485) | function composeNode(state, parentIndent, nodeContext, allowToSeek, allo...
function readDocument (line 10664) | function readDocument(state) {
function loadDocuments (line 10772) | function loadDocuments(input, options) {
function loadAll (line 10815) | function loadAll(input, iterator, options) {
function load (line 10833) | function load(input, options) {
function compileList (line 10864) | function compileList(schema, name) {
function compileMap (line 10886) | function compileMap(/* lists... */) {
function Schema (line 10916) | function Schema(definition) {
function getLine (line 11093) | function getLine(buffer, lineStart, lineEnd, position, maxLineLength) {
function padStart (line 11115) | function padStart(string, max) {
function makeSnippet (line 11120) | function makeSnippet(mark, options) {
function compileStyleAliases (line 11218) | function compileStyleAliases(map) {
function Type (line 11232) | function Type(tag, options) {
function resolveYamlBinary (line 11281) | function resolveYamlBinary(data) {
function constructYamlBinary (line 11303) | function constructYamlBinary(data) {
function representYamlBinary (line 11341) | function representYamlBinary(object /*, style*/) {
function isBinary (line 11383) | function isBinary(obj) {
function resolveYamlBoolean (line 11406) | function resolveYamlBoolean(data) {
function constructYamlBoolean (line 11415) | function constructYamlBoolean(data) {
function isBoolean (line 11421) | function isBoolean(object) {
function resolveYamlFloat (line 11461) | function resolveYamlFloat(data) {
function constructYamlFloat (line 11474) | function constructYamlFloat(data) {
function representYamlFloat (line 11496) | function representYamlFloat(object, style) {
function isFloat (line 11529) | function isFloat(object) {
function isHexCode (line 11555) | function isHexCode(c) {
function isOctCode (line 11561) | function isOctCode(c) {
function isDecCode (line 11565) | function isDecCode(c) {
function resolveYamlInteger (line 11569) | function resolveYamlInteger(data) {
function constructYamlInteger (line 11655) | function constructYamlInteger(data) {
function isInteger (line 11681) | function isInteger(object) {
function resolveYamlMerge (line 11734) | function resolveYamlMerge(data) {
function resolveYamlNull (line 11754) | function resolveYamlNull(data) {
function constructYamlNull (line 11763) | function constructYamlNull() {
function isNull (line 11767) | function isNull(object) {
function resolveYamlOmap (line 11800) | function resolveYamlOmap(data) {
function constructYamlOmap (line 11828) | function constructYamlOmap(data) {
function resolveYamlPairs (line 11851) | function resolveYamlPairs(data) {
function constructYamlPairs (line 11874) | function constructYamlPairs(data) {
function resolveYamlSet (line 11928) | function resolveYamlSet(data) {
function constructYamlSet (line 11942) | function constructYamlSet(data) {
function resolveYamlTimestamp (line 11996) | function resolveYamlTimestamp(data) {
function constructYamlTimestamp (line 12003) | function constructYamlTimestamp(data) {
function representYamlTimestamp (line 12052) | function representYamlTimestamp(object /*, style*/) {
function once (line 12090) | function once (fn) {
function onceStrict (line 12100) | function onceStrict (fn) {
method extglobChars (line 12292) | extglobChars(chars) {
method globChars (line 12306) | globChars(win32) {
function httpOverHttp (line 14263) | function httpOverHttp(options) {
function httpsOverHttp (line 14269) | function httpsOverHttp(options) {
function httpOverHttps (line 14277) | function httpOverHttps(options) {
function httpsOverHttps (line 14283) | function httpsOverHttps(options) {
function TunnelingAgent (line 14292) | function TunnelingAgent(options) {
function onFree (line 14335) | function onFree() {
function onCloseOrRemove (line 14339) | function onCloseOrRemove(err) {
function onResponse (line 14379) | function onResponse(res) {
function onUpgrade (line 14384) | function onUpgrade(res, socket, head) {
function onConnect (line 14391) | function onConnect(res, socket, head) {
function onError (line 14420) | function onError(cause) {
function createSecureSocket (line 14450) | function createSecureSocket(options, cb) {
function toOptions (line 14467) | function toOptions(host, port, localAddress) {
function mergeOptions (line 14478) | function mergeOptions(target) {
function makeDispatcher (line 14566) | function makeDispatcher (fn) {
function defaultFactory (line 14713) | function defaultFactory (origin, opts) {
class Agent (line 14719) | class Agent extends DispatcherBase {
method constructor (line 14720) | constructor ({ factory = defaultFactory, maxRedirections = 0, connect,...
method [kRunning] (line 14776) | get [kRunning] () {
method [kDispatch] (line 14788) | [kDispatch] (opts, handler) {
method [kClose] (line 14813) | async [kClose] () {
method [kDestroy] (line 14826) | async [kDestroy] (err) {
function abort (line 14854) | function abort (self) {
function addSignal (line 14862) | function addSignal (self, signal) {
function removeSignal (line 14883) | function removeSignal (self) {
class ConnectHandler (line 14917) | class ConnectHandler extends AsyncResource {
method constructor (line 14918) | constructor (opts, callback) {
method onConnect (line 14943) | onConnect (abort, context) {
method onHeaders (line 14952) | onHeaders () {
method onUpgrade (line 14956) | onUpgrade (statusCode, rawHeaders, socket) {
method onError (line 14978) | onError (err) {
function connect (line 14992) | function connect (opts, callback) {
class PipelineRequest (line 15041) | class PipelineRequest extends Readable {
method constructor (line 15042) | constructor () {
method _read (line 15048) | _read () {
method _destroy (line 15057) | _destroy (err, callback) {
class PipelineResponse (line 15064) | class PipelineResponse extends Readable {
method constructor (line 15065) | constructor (resume) {
method _read (line 15070) | _read () {
method _destroy (line 15074) | _destroy (err, callback) {
class PipelineHandler (line 15083) | class PipelineHandler extends AsyncResource {
method constructor (line 15084) | constructor (opts, handler) {
method onConnect (line 15168) | onConnect (abort, context) {
method onHeaders (line 15181) | onHeaders (statusCode, rawHeaders, resume) {
method onData (line 15243) | onData (chunk) {
method onComplete (line 15248) | onComplete (trailers) {
method onError (line 15253) | onError (err) {
function pipeline (line 15260) | function pipeline (opts, handler) {
class RequestHandler (line 15291) | class RequestHandler extends AsyncResource {
method constructor (line 15292) | constructor (opts, callback) {
method onConnect (line 15349) | onConnect (abort, context) {
method onHeaders (line 15358) | onHeaders (statusCode, rawHeaders, resume, statusMessage) {
method onData (line 15394) | onData (chunk) {
method onComplete (line 15399) | onComplete (trailers) {
method onError (line 15409) | onError (err) {
function request (line 15437) | function request (opts, callback) {
class StreamHandler (line 15480) | class StreamHandler extends AsyncResource {
method constructor (line 15481) | constructor (opts, factory, callback) {
method onConnect (line 15538) | onConnect (abort, context) {
method onHeaders (line 15547) | onHeaders (statusCode, rawHeaders, resume, statusMessage) {
method onData (line 15622) | onData (chunk) {
method onComplete (line 15628) | onComplete (trailers) {
method onError (line 15642) | onError (err) {
function stream (line 15666) | function stream (opts, factory, callback) {
class UpgradeHandler (line 15703) | class UpgradeHandler extends AsyncResource {
method constructor (line 15704) | constructor (opts, callback) {
method onConnect (line 15730) | onConnect (abort, context) {
method onHeaders (line 15739) | onHeaders () {
method onUpgrade (line 15743) | onUpgrade (statusCode, rawHeaders, socket) {
method onError (line 15760) | onError (err) {
function upgrade (line 15774) | function upgrade (opts, callback) {
method constructor (line 15844) | constructor ({
method destroy (line 15870) | destroy (err) {
method emit (line 15887) | emit (ev, ...args) {
method on (line 15898) | on (ev, ...args) {
method addListener (line 15905) | addListener (ev, ...args) {
method off (line 15909) | off (ev, ...args) {
method removeListener (line 15920) | removeListener (ev, ...args) {
method push (line 15924) | push (chunk) {
method text (line 15933) | async text () {
method json (line 15938) | async json () {
method blob (line 15943) | async blob () {
method arrayBuffer (line 15948) | async arrayBuffer () {
method formData (line 15953) | async formData () {
method bodyUsed (line 15959) | get bodyUsed () {
method body (line 15964) | get body () {
method dump (line 15976) | dump (opts) {
function isLocked (line 16024) | function isLocked (self) {
function isUnusable (line 16030) | function isUnusable (self) {
function consume (line 16034) | async function consume (stream, type) {
function consumeStart (line 16065) | function consumeStart (consume) {
function consumeEnd (line 16091) | function consumeEnd (consume) {
function consumePush (line 16122) | function consumePush (consume, chunk) {
function consumeFinish (line 16127) | function consumeFinish (consume, err) {
function getResolveErrorBodyCallback (line 16158) | async function getResolveErrorBodyCallback ({ callback, body, contentTyp...
function getGreatestCommonDivisor (line 16233) | function getGreatestCommonDivisor (a, b) {
function defaultFactory (line 16238) | function defaultFactory (origin, opts) {
class BalancedPool (line 16242) | class BalancedPool extends PoolBase {
method constructor (line 16243) | constructor (upstreams = [], { factory = defaultFactory, ...opts } = {...
method addUpstream (line 16272) | addUpstream (upstream) {
method _updateBalancedPoolStats (line 16312) | _updateBalancedPoolStats () {
method removeUpstream (line 16316) | removeUpstream (upstream) {
method upstreams (line 16332) | get upstreams () {
method [kGetDispatcher] (line 16338) | [kGetDispatcher] () {
class Cache (line 16433) | class Cache {
method constructor (line 16440) | constructor () {
method match (line 16448) | async match (request, options = {}) {
method matchAll (line 16464) | async matchAll (request = undefined, options = {}) {
method add (line 16532) | async add (request) {
method addAll (line 16548) | async addAll (requests) {
method put (line 16709) | async put (request, response) {
method delete (line 16838) | async delete (request, options = {}) {
method keys (line 16902) | async keys (request = undefined, options = {}) {
method #batchCacheOperations (line 16981) | #batchCacheOperations (operations) {
method #queryCache (line 17119) | #queryCache (requestQuery, options, targetStorage) {
method #requestMatchesCachedItem (line 17143) | #requestMatchesCachedItem (requestQuery, request, response = null, opt...
class CacheStorage (line 17257) | class CacheStorage {
method constructor (line 17264) | constructor () {
method match (line 17270) | async match (request, options = {}) {
method has (line 17307) | async has (cacheName) {
method open (line 17323) | async open (cacheName) {
method delete (line 17355) | async delete (cacheName) {
method keys (line 17368) | async keys () {
function urlEquals (line 17428) | function urlEquals (A, B, excludeFragment = false) {
function fieldValues (line 17440) | function fieldValues (header) {
class Client (line 17600) | class Client extends DispatcherBase {
method constructor (line 17606) | constructor (url, {
method pipelining (line 17789) | get pipelining () {
method pipelining (line 17793) | set pipelining (value) {
method [kPending] (line 17798) | get [kPending] () {
method [kRunning] (line 17802) | get [kRunning] () {
method [kSize] (line 17806) | get [kSize] () {
method [kConnected] (line 17810) | get [kConnected] () {
method [kBusy] (line 17814) | get [kBusy] () {
method [kConnect] (line 17824) | [kConnect] (cb) {
method [kDispatch] (line 17829) | [kDispatch] (opts, handler) {
method [kClose] (line 17854) | async [kClose] () {
method [kDestroy] (line 17866) | async [kDestroy] (err) {
function onHttp2SessionError (line 17900) | function onHttp2SessionError (err) {
function onHttp2FrameError (line 17908) | function onHttp2FrameError (type, code, id) {
function onHttp2SessionEnd (line 17917) | function onHttp2SessionEnd () {
function onHTTP2GoAway (line 17922) | function onHTTP2GoAway (code) {
function lazyllhttp (line 17962) | async function lazyllhttp () {
class Parser (line 18037) | class Parser {
method constructor (line 18038) | constructor (client, socket, { exports }) {
method setTimeout (line 18066) | setTimeout (value, type) {
method resume (line 18088) | resume () {
method readMore (line 18111) | readMore () {
method execute (line 18121) | execute (data) {
method destroy (line 18183) | destroy () {
method onStatus (line 18198) | onStatus (buf) {
method onMessageBegin (line 18202) | onMessageBegin () {
method onHeaderField (line 18216) | onHeaderField (buf) {
method onHeaderValue (line 18228) | onHeaderValue (buf) {
method trackHeader (line 18250) | trackHeader (len) {
method onUpgrade (line 18257) | onUpgrade (head) {
method onHeadersComplete (line 18304) | onHeadersComplete (statusCode, upgrade, shouldKeepAlive) {
method onBody (line 18413) | onBody (buf) {
method onMessageComplete (line 18445) | onMessageComplete () {
function onParserTimeout (line 18512) | function onParserTimeout (parser) {
function onSocketReadable (line 18531) | function onSocketReadable () {
function onSocketError (line 18538) | function onSocketError (err) {
function onError (line 18558) | function onError (client, err) {
function onSocketEnd (line 18578) | function onSocketEnd () {
function onSocketClose (line 18592) | function onSocketClose () {
function connect (line 18635) | async function connect (client) {
function emitDrain (line 18800) | function emitDrain (client) {
function resume (line 18805) | function resume (client, sync) {
function _resume (line 18822) | function _resume (client, sync) {
function shouldSendContentLength (line 18947) | function shouldSendContentLength (method) {
function write (line 18951) | function write (client, request) {
function writeH2 (line 19116) | function writeH2 (client, session, request) {
function writeStream (line 19380) | function writeStream ({ h2stream, body, client, request, socket, content...
function writeBlob (line 19495) | async function writeBlob ({ h2stream, body, client, request, socket, con...
function writeIterable (line 19530) | async function writeIterable ({ h2stream, body, client, request, socket,...
class AsyncWriter (line 19610) | class AsyncWriter {
method constructor (line 19611) | constructor ({ socket, request, contentLength, client, expectsPayload,...
method write (line 19623) | write (chunk) {
method end (line 19686) | end () {
method destroy (line 19733) | destroy (err) {
function errorRequest (line 19745) | function errorRequest (client, request, err) {
class CompatWeakRef (line 19769) | class CompatWeakRef {
method constructor (line 19770) | constructor (value) {
method deref (line 19774) | deref () {
class CompatFinalizer (line 19781) | class CompatFinalizer {
method constructor (line 19782) | constructor (finalizer) {
method register (line 19786) | register (dispatcher, key) {
function getCookies (line 19864) | function getCookies (headers) {
function deleteCookie (line 19891) | function deleteCookie (headers, name, attributes) {
function getSetCookies (line 19913) | function getSetCookies (headers) {
function setCookie (line 19933) | function setCookie (headers, cookie) {
function parseSetCookie (line 20044) | function parseSetCookie (header) {
function parseUnparsedAttributes (line 20120) | function parseUnparsedAttributes (unparsedAttributes, cookieAttributeLis...
function isCTLExcludingHtab (line 20361) | function isCTLExcludingHtab (value) {
function validateCookieName (line 20388) | function validateCookieName (name) {
function validateCookieValue (line 20425) | function validateCookieValue (value) {
function validateCookiePath (line 20446) | function validateCookiePath (path) {
function validateCookieDomain (line 20461) | function validateCookieDomain (domain) {
function toIMFDate (line 20512) | function toIMFDate (date) {
function validateCookieMaxAge (line 20545) | function validateCookieMaxAge (maxAge) {
function stringify (line 20555) | function stringify (cookie) {
function getHeadersList (line 20623) | function getHeadersList (headers) {
method constructor (line 20674) | constructor (maxCachedSessions) {
method get (line 20689) | get (sessionKey) {
method set (line 20694) | set (sessionKey, session) {
method constructor (line 20705) | constructor (maxCachedSessions) {
method get (line 20710) | get (sessionKey) {
method set (line 20714) | set (sessionKey, session) {
function buildConnector (line 20730) | function buildConnector ({ allowH2, maxCachedSessions, socketPath, timeo...
function setupTimeout (line 20814) | function setupTimeout (onConnectTimeout, timeout) {
function onConnectTimeout (line 20839) | function onConnectTimeout (socket) {
class UndiciError (line 20854) | class UndiciError extends Error {
method constructor (line 20855) | constructor (message) {
class ConnectTimeoutError (line 20862) | class ConnectTimeoutError extends UndiciError {
method constructor (line 20863) | constructor (message) {
class HeadersTimeoutError (line 20872) | class HeadersTimeoutError extends UndiciError {
method constructor (line 20873) | constructor (message) {
class HeadersOverflowError (line 20882) | class HeadersOverflowError extends UndiciError {
method constructor (line 20883) | constructor (message) {
class BodyTimeoutError (line 20892) | class BodyTimeoutError extends UndiciError {
method constructor (line 20893) | constructor (message) {
class ResponseStatusCodeError (line 20902) | class ResponseStatusCodeError extends UndiciError {
method constructor (line 20903) | constructor (message, statusCode, headers, body) {
class InvalidArgumentError (line 20916) | class InvalidArgumentError extends UndiciError {
method constructor (line 20917) | constructor (message) {
class InvalidReturnValueError (line 20926) | class InvalidReturnValueError extends UndiciError {
method constructor (line 20927) | constructor (message) {
class RequestAbortedError (line 20936) | class RequestAbortedError extends UndiciError {
method constructor (line 20937) | constructor (message) {
class InformationalError (line 20946) | class InformationalError extends UndiciError {
method constructor (line 20947) | constructor (message) {
class RequestContentLengthMismatchError (line 20956) | class RequestContentLengthMismatchError extends UndiciError {
method constructor (line 20957) | constructor (message) {
class ResponseContentLengthMismatchError (line 20966) | class ResponseContentLengthMismatchError extends UndiciError {
method constructor (line 20967) | constructor (message) {
class ClientDestroyedError (line 20976) | class ClientDestroyedError extends UndiciError {
method constructor (line 20977) | constructor (message) {
class ClientClosedError (line 20986) | class ClientClosedError extends UndiciError {
method constructor (line 20987) | constructor (message) {
class SocketError (line 20996) | class SocketError extends UndiciError {
method constructor (line 20997) | constructor (message, socket) {
class NotSupportedError (line 21007) | class NotSupportedError extends UndiciError {
method constructor (line 21008) | constructor (message) {
class BalancedPoolMissingUpstreamError (line 21017) | class BalancedPoolMissingUpstreamError extends UndiciError {
method constructor (line 21018) | constructor (message) {
class HTTPParserError (line 21027) | class HTTPParserError extends Error {
method constructor (line 21028) | constructor (message, code, data) {
class ResponseExceededMaxSizeError (line 21037) | class ResponseExceededMaxSizeError extends UndiciError {
method constructor (line 21038) | constructor (message) {
class RequestRetryError (line 21047) | class RequestRetryError extends UndiciError {
method constructor (line 21048) | constructor (message, code, { headers, data }) {
class Request (line 21142) | class Request {
method constructor (line 21143) | constructor (origin, {
method onBodySent (line 21319) | onBodySent (chunk) {
method onRequestSent (line 21329) | onRequestSent () {
method onConnect (line 21343) | onConnect (abort) {
method onHeaders (line 21355) | onHeaders (statusCode, headers, resume, statusText) {
method onData (line 21370) | onData (chunk) {
method onUpgrade (line 21382) | onUpgrade (statusCode, headers, socket) {
method onComplete (line 21389) | onComplete (trailers) {
method onError (line 21407) | onError (error) {
method onFinally (line 21422) | onFinally () {
method addHeader (line 21435) | addHeader (key, value) {
method [kHTTP1BuildRequest] (line 21440) | static [kHTTP1BuildRequest] (origin, opts, handler) {
method [kHTTP2BuildRequest] (line 21446) | static [kHTTP2BuildRequest] (origin, opts, handler) {
method [kHTTP2CopyHeaders] (line 21474) | static [kHTTP2CopyHeaders] (raw) {
method constructor (line 27287) | constructor (input, init = {}) {
method method (line 27779) | get method () {
method url (line 27787) | get url () {
method headers (line 27797) | get headers () {
method destination (line 27806) | get destination () {
method referrer (line 27818) | get referrer () {
method referrerPolicy (line 27840) | get referrerPolicy () {
method mode (line 27850) | get mode () {
method credentials (line 27860) | get credentials () {
method cache (line 27868) | get cache () {
method redirect (line 27879) | get redirect () {
method integrity (line 27889) | get integrity () {
method keepalive (line 27899) | get keepalive () {
method isReloadNavigation (line 27908) | get isReloadNavigation () {
method isHistoryNavigation (line 27918) | get isHistoryNavigation () {
method signal (line 27929) | get signal () {
method body (line 27936) | get body () {
method bodyUsed (line 27942) | get bodyUsed () {
method duplex (line 27948) | get duplex () {
method clone (line 27955) | clone () {
function processHeaderValue (line 21491) | function processHeaderValue (key, val, skipAppend) {
function processHeader (line 21505) | function processHeader (request, key, val, skipAppend = false) {
function nop (line 21681) | function nop () {}
function isStream (line 21683) | function isStream (obj) {
function isBlobLike (line 21688) | function isBlobLike (object) {
function buildURL (line 21698) | function buildURL (url, queryParams) {
function parseURL (line 21712) | function parseURL (url) {
function parseOrigin (line 21779) | function parseOrigin (url) {
function getHostname (line 21789) | function getHostname (host) {
function getServerName (line 21805) | function getServerName (host) {
function deepClone (line 21820) | function deepClone (obj) {
function isAsyncIterable (line 21824) | function isAsyncIterable (obj) {
function isIterable (line 21828) | function isIterable (obj) {
function bodyLength (line 21832) | function bodyLength (body) {
function isDestroyed (line 21849) | function isDestroyed (stream) {
function isReadableAborted (line 21853) | function isReadableAborted (stream) {
function destroy (line 21858) | function destroy (stream, err) {
function parseKeepAliveTimeout (line 21882) | function parseKeepAliveTimeout (val) {
function parseHeaders (line 21887) | function parseHeaders (headers, obj = {}) {
function parseRawHeaders (line 21918) | function parseRawHeaders (headers) {
function isBuffer (line 21945) | function isBuffer (buffer) {
function validateHandler (line 21950) | function validateHandler (handler, method, upgrade) {
function isDisturbed (line 21988) | function isDisturbed (body) {
function isErrored (line 21999) | function isErrored (body) {
function isReadable (line 22007) | function isReadable (body) {
function getSocketInfo (line 22015) | function getSocketInfo (socket) {
function ReadableStreamFrom (line 22035) | function ReadableStreamFrom (iterable) {
function isFormDataLike (line 22072) | function isFormDataLike (object) {
function throwIfAborted (line 22086) | function throwIfAborted (signal) {
function addAbortListener (line 22100) | function addAbortListener (signal, listener) {
function toUSVString (line 22114) | function toUSVString (val) {
function parseRangeHeader (line 22126) | function parseRangeHeader (range) {
class DispatcherBase (line 22202) | class DispatcherBase extends Dispatcher {
method constructor (line 22203) | constructor () {
method destroyed (line 22212) | get destroyed () {
method closed (line 22216) | get closed () {
method interceptors (line 22220) | get interceptors () {
method interceptors (line 22224) | set interceptors (newInterceptors) {
method close (line 22237) | close (callback) {
method destroy (line 22283) | destroy (err, callback) {
method [kInterceptedDispatch] (line 22332) | [kInterceptedDispatch] (opts, handler) {
method dispatch (line 22346) | dispatch (opts, handler) {
class Dispatcher (line 22390) | class Dispatcher extends EventEmitter {
method dispatch (line 22391) | dispatch () {
method close (line 22395) | close () {
method destroy (line 22399) | destroy () {
function extractBody (line 22445) | function extractBody (object, keepalive = false) {
function safelyExtractBody (line 22665) | function safelyExtractBody (object, keepalive = false) {
function cloneBody (line 22687) | function cloneBody (body) {
function throwIfAborted (line 22733) | function throwIfAborted (state) {
function bodyMixinMethods (line 22739) | function bodyMixinMethods (instance) {
function mixinBody (line 22901) | function mixinBody (prototype) {
function specConsumeBody (line 22911) | async function specConsumeBody (object, convertBytesToJSValue, instance) {
function bodyUnusable (line 22956) | function bodyUnusable (body) {
function utf8DecodeBytes (line 22967) | function utf8DecodeBytes (buffer) {
function parseJSONFromBytes (line 22993) | function parseJSONFromBytes (bytes) {
function bodyMimeType (line 23001) | function bodyMimeType (object) {
function dataURLProcessor (line 23202) | function dataURLProcessor (dataURL) {
function URLSerializer (line 23304) | function URLSerializer (url, excludeFragment = false) {
function collectASequenceOfCodePoints (line 23321) | function collectASequenceOfCodePoints (condition, input, position) {
function collectASequenceOfCodePointsFast (line 23345) | function collectASequenceOfCodePointsFast (char, input, position) {
function stringPercentDecode (line 23360) | function stringPercentDecode (input) {
function percentDecode (line 23370) | function percentDecode (input) {
function parseMIMEType (line 23415) | function parseMIMEType (input) {
function forgivingBase64 (line 23588) | function forgivingBase64 (data) {
function collectAnHTTPQuotedString (line 23632) | function collectAnHTTPQuotedString (input, position, extractValue) {
function serializeAMimeType (line 23707) | function serializeAMimeType (mimeType) {
function isHTTPWhiteSpace (line 23752) | function isHTTPWhiteSpace (char) {
function removeHTTPWhitespace (line 23760) | function removeHTTPWhitespace (str, leading = true, trailing = true) {
function isASCIIWhitespace (line 23779) | function isASCIIWhitespace (char) {
function removeASCIIWhitespace (line 23786) | function removeASCIIWhitespace (str, leading = true, trailing = true) {
class File (line 23830) | class File extends Blob {
method constructor (line 23831) | constructor (fileBits, fileName, options = {}) {
method name (line 23895) | get name () {
method lastModified (line 23901) | get lastModified () {
method type (line 23907) | get type () {
class FileLike (line 23914) | class FileLike {
method constructor (line 23915) | constructor (blobLike, fileName, options = {}) {
method stream (line 23962) | stream (...args) {
method arrayBuffer (line 23968) | arrayBuffer (...args) {
method slice (line 23974) | slice (...args) {
method text (line 23980) | text (...args) {
method size (line 23986) | get size () {
method type (line 23992) | get type () {
method name (line 23998) | get name () {
method lastModified (line 24004) | get lastModified () {
method [Symbol.toStringTag] (line 24010) | get [Symbol.toStringTag] () {
method defaultValue (line 24052) | get defaultValue () {
function processBlobParts (line 24082) | function processBlobParts (parts, options) {
function convertLineEndingsNative (line 24132) | function convertLineEndingsNative (s) {
function isFileLike (line 24150) | function isFileLike (object) {
class FormData (line 24183) | class FormData {
method constructor (line 24184) | constructor (form) {
method append (line 24196) | append (name, value, filename = undefined) {
method delete (line 24225) | delete (name) {
method get (line 24237) | get (name) {
method getAll (line 24256) | getAll (name) {
method has (line 24272) | has (name) {
method set (line 24284) | set (name, value, filename = undefined) {
method entries (line 24327) | entries () {
method keys (line 24337) | keys () {
method values (line 24347) | values () {
method forEach (line 24361) | forEach (callbackFn, thisArg = globalThis) {
function makeEntry (line 24394) | function makeEntry (name, value, filename) {
function getGlobalOrigin (line 24450) | function getGlobalOrigin () {
function setGlobalOrigin (line 24454) | function setGlobalOrigin (newOrigin) {
function isHTTPWhiteSpaceCharCode (line 24513) | function isHTTPWhiteSpaceCharCode (code) {
function headerValueNormalize (line 24521) | function headerValueNormalize (potentialValue) {
function fill (line 24533) | function fill (headers, object) {
function appendHeader (line 24573) | function appendHeader (headers, name, value) {
class HeadersList (line 24614) | class HeadersList {
method constructor (line 24618) | constructor (init) {
method contains (line 24630) | contains (name) {
method clear (line 24639) | clear () {
method append (line 24646) | append (name, value) {
method set (line 24672) | set (name, value) {
method delete (line 24688) | delete (name) {
method get (line 24701) | get (name) {
method entries (line 24718) | get entries () {
method [Symbol.iterator] (line 24711) | * [Symbol.iterator] () {
class Headers (line 24732) | class Headers {
method constructor (line 24733) | constructor (init = undefined) {
method append (line 24752) | append (name, value) {
method delete (line 24764) | delete (name) {
method get (line 24809) | get (name) {
method has (line 24831) | has (name) {
method set (line 24853) | set (name, value) {
method getSetCookie (line 24902) | getSetCookie () {
method [kHeadersSortedMap] (line 24919) | get [kHeadersSortedMap] () {
method keys (line 24965) | keys () {
method values (line 24981) | values () {
method entries (line 24997) | entries () {
method forEach (line 25017) | forEach (callbackFn, thisArg = globalThis) {
method [Symbol.for('nodejs.util.inspect.custom')] (line 25033) | [Symbol.for('nodejs.util.inspect.custom')] () {
class Fetch (line 25159) | class Fetch extends EE {
method constructor (line 25160) | constructor (dispatcher) {
method terminate (line 25175) | terminate (reason) {
method abort (line 25186) | abort (error) {
function fetch (line 25213) | function fetch (input, init = {}) {
function finalizeAndReportTiming (line 25346) | function finalizeAndReportTiming (response, initiatorType = 'other') {
function markResourceTiming (line 25409) | function markResourceTiming (timingInfo, originalURL, initiatorType, glo...
function abortFetch (line 25416) | function abortFetch (p, request, responseObject, error) {
function fetching (line 25461) | function fetching ({
function mainFetch (line 25616) | async function mainFetch (fetchParams, recursive = false) {
function schemeFetch (line 25868) | function schemeFetch (fetchParams) {
function finalizeResponse (line 25985) | function finalizeResponse (fetchParams, response) {
function fetchFinale (line 25998) | function fetchFinale (fetchParams, response) {
function httpFetch (line 26089) | async function httpFetch (fetchParams) {
function httpRedirectFetch (line 26192) | function httpRedirectFetch (fetchParams, response) {
function httpNetworkOrCacheFetch (line 26333) | async function httpNetworkOrCacheFetch (
function httpNetworkFetch (line 26663) | async function httpNetworkFetch (
class Request (line 27285) | class Request {
method constructor (line 21143) | constructor (origin, {
method onBodySent (line 21319) | onBodySent (chunk) {
method onRequestSent (line 21329) | onRequestSent () {
method onConnect (line 21343) | onConnect (abort) {
method onHeaders (line 21355) | onHeaders (statusCode, headers, resume, statusText) {
method onData (line 21370) | onData (chunk) {
method onUpgrade (line 21382) | onUpgrade (statusCode, headers, socket) {
method onComplete (line 21389) | onComplete (trailers) {
method onError (line 21407) | onError (error) {
method onFinally (line 21422) | onFinally () {
method addHeader (line 21435) | addHeader (key, value) {
method [kHTTP1BuildRequest] (line 21440) | static [kHTTP1BuildRequest] (origin, opts, handler) {
method [kHTTP2BuildRequest] (line 21446) | static [kHTTP2BuildRequest] (origin, opts, handler) {
method [kHTTP2CopyHeaders] (line 21474) | static [kHTTP2CopyHeaders] (raw) {
method constructor (line 27287) | constructor (input, init = {}) {
method method (line 27779) | get method () {
method url (line 27787) | get url () {
method headers (line 27797) | get headers () {
method destination (line 27806) | get destination () {
method referrer (line 27818) | get referrer () {
method referrerPolicy (line 27840) | get referrerPolicy () {
method mode (line 27850) | get mode () {
method credentials (line 27860) | get credentials () {
method cache (line 27868) | get cache () {
method redirect (line 27879) | get redirect () {
method integrity (line 27889) | get integrity () {
method keepalive (line 27899) | get keepalive () {
method isReloadNavigation (line 27908) | get isReloadNavigation () {
method isHistoryNavigation (line 27918) | get isHistoryNavigation () {
method signal (line 27929) | get signal () {
method body (line 27936) | get body () {
method bodyUsed (line 27942) | get bodyUsed () {
method duplex (line 27948) | get duplex () {
method clone (line 27955) | clone () {
function makeRequest (line 27997) | function makeRequest (init) {
function cloneRequest (line 28045) | function cloneRequest (request) {
class Response (line 28229) | class Response {
method error (line 28231) | static error () {
method json (line 28248) | static json (data, init = {}) {
method redirect (line 28279) | static redirect (url, status = 302) {
method constructor (line 28326) | constructor (body = null, init = {}) {
method type (line 28361) | get type () {
method url (line 28369) | get url () {
method redirected (line 28387) | get redirected () {
method status (line 28396) | get status () {
method ok (line 28404) | get ok () {
method statusText (line 28413) | get statusText () {
method headers (line 28422) | get headers () {
method body (line 28429) | get body () {
method bodyUsed (line 28435) | get bodyUsed () {
method clone (line 28442) | clone () {
function cloneResponse (line 28495) | function cloneResponse (response) {
function makeResponse (line 28521) | function makeResponse (init) {
function makeNetworkError (line 28540) | function makeNetworkError (reason) {
function makeFilteredResponse (line 28552) | function makeFilteredResponse (response, state) {
function filterResponse (line 28571) | function filterResponse (response, type) {
function makeAppropriateNetworkError (line 28625) | function makeAppropriateNetworkError (fetchParams, err = null) {
function initializeResponse (line 28637) | function initializeResponse (response, init, body) {
function responseURL (line 28812) | function responseURL (response) {
function responseLocationURL (line 28822) | function responseLocationURL (response, requestFragment) {
function requestCurrentURL (line 28849) | function requestCurrentURL (request) {
function requestBadPort (line 28853) | function requestBadPort (request) {
function isErrorLike (line 28867) | function isErrorLike (object) {
function isValidReasonPhrase (line 28880) | function isValidReasonPhrase (statusText) {
function isTokenCharCode (line 28902) | function isTokenCharCode (c) {
function isValidHTTPToken (line 28932) | function isValidHTTPToken (characters) {
function isValidHeaderName (line 28948) | function isValidHeaderName (potentialValue) {
function isValidHeaderValue (line 28956) | function isValidHeaderValue (potentialValue) {
function setRequestReferrerPolicyOnRedirect (line 28980) | function setRequestReferrerPolicyOnRedirect (request, actualResponse) {
function crossOriginResourcePolicyCheck (line 29020) | function crossOriginResourcePolicyCheck () {
function corsCheck (line 29026) | function corsCheck () {
function TAOCheck (line 29032) | function TAOCheck () {
function appendFetchMetadata (line 29037) | function appendFetchMetadata (httpRequest) {
function appendRequestOriginHeader (line 29063) | function appendRequestOriginHeader (request) {
function coarsenedSharedCurrentTime (line 29106) | function coarsenedSharedCurrentTime (crossOriginIsolatedCapability) {
function createOpaqueTimingInfo (line 29112) | function createOpaqueTimingInfo (timingInfo) {
function makePolicyContainer (line 29129) | function makePolicyContainer () {
function clonePolicyContainer (line 29137) | function clonePolicyContainer (policyContainer) {
function determineRequestsReferrer (line 29144) | function determineRequestsReferrer (request) {
function stripURLForReferrer (line 29243) | function stripURLForReferrer (url, originOnly) {
function isURLPotentiallyTrustworthy (line 29274) | function isURLPotentiallyTrustworthy (url) {
function bytesMatch (line 29320) | function bytesMatch (bytes, metadataList) {
function parseMetadata (line 29402) | function parseMetadata (metadata) {
function tryUpgradeRequestToAPotentiallyTrustworthyURL (line 29448) | function tryUpgradeRequestToAPotentiallyTrustworthyURL (request) {
function sameOrigin (line 29457) | function sameOrigin (A, B) {
function createDeferredPromise (line 29473) | function createDeferredPromise () {
function isAborted (line 29484) | function isAborted (fetchParams) {
function isCancelled (line 29488) | function isCancelled (fetchParams) {
function normalizeMethod (line 29515) | function normalizeMethod (method) {
function serializeJavascriptValueToJSONString (line 29520) | function serializeJavascriptValueToJSONString (value) {
function makeIterator (line 29545) | function makeIterator (iterator, name, kind) {
function iteratorResult (line 29608) | function iteratorResult (pair, kind) {
function fullyReadBody (line 29652) | async function fullyReadBody (body, processBody, processBodyError) {
function isReadableStreamLike (line 29688) | function isReadableStreamLike (stream) {
function isomorphicDecode (line 29705) | function isomorphicDecode (input) {
function readableStreamClose (line 29720) | function readableStreamClose (controller) {
function isomorphicEncode (line 29735) | function isomorphicEncode (input) {
function readAllBytes (line 29752) | async function readAllBytes (reader) {
function urlIsLocal (line 29782) | function urlIsLocal (url) {
function urlHasHttpsScheme (line 29793) | function urlHasHttpsScheme (url) {
function urlIsHttpHttpsScheme (line 29805) | function urlIsHttpHttpsScheme (url) {
function getEncoding (line 30532) | function getEncoding (label) {
class FileReader (line 30841) | class FileReader extends EventTarget {
method constructor (line 30842) | constructor () {
method readAsArrayBuffer (line 30862) | readAsArrayBuffer (blob) {
method readAsBinaryString (line 30878) | readAsBinaryString (blob) {
method readAsText (line 30895) | readAsText (blob, encoding = undefined) {
method readAsDataURL (line 30915) | readAsDataURL (blob) {
method abort (line 30930) | abort () {
method readyState (line 30967) | get readyState () {
method result (line 30980) | get result () {
method error (line 30991) | get error () {
method onloadend (line 30999) | get onloadend () {
method onloadend (line 31005) | set onloadend (fn) {
method onerror (line 31020) | get onerror () {
method onerror (line 31026) | set onerror (fn) {
method onloadstart (line 31041) | get onloadstart () {
method onloadstart (line 31047) | set onloadstart (fn) {
method onprogress (line 31062) | get onprogress () {
method onprogress (line 31068) | set onprogress (fn) {
method onload (line 31083) | get onload () {
method onload (line 31089) | set onload (fn) {
method onabort (line 31104) | get onabort () {
method onabort (line 31110) | set onabort (fn) {
class ProgressEvent (line 31185) | class ProgressEvent extends Event {
method constructor (line 31186) | constructor (type, eventInitDict = {}) {
method lengthComputable (line 31199) | get lengthComputable () {
method loaded (line 31205) | get loaded () {
method total (line 31211) | get total () {
function readOperation (line 31311) | function readOperation (fr, blob, type, encodingName) {
function fireAProgressEvent (line 31477) | function fireAProgressEvent (e, reader) {
function packageData (line 31495) | function packageData (bytes, type, mimeType, encodingName) {
function decode (line 31597) | function decode (ioQueue, encoding) {
function BOMSniffing (line 31629) | function BOMSniffing (ioQueue) {
function combineByteSequences (line 31653) | function combineByteSequences (sequences) {
function setGlobalDispatcher (line 31692) | function setGlobalDispatcher (agent) {
function getGlobalDispatcher (line 31704) | function getGlobalDispatcher () {
method constructor (line 31723) | constructor (handler) {
method onConnect (line 31727) | onConnect (...args) {
method onError (line 31731) | onError (...args) {
method onUpgrade (line 31735) | onUpgrade (...args) {
method onHeaders (line 31739) | onHeaders (...args) {
method onData (line 31743) | onData (...args) {
method onComplete (line 31747) | onComplete (...args) {
method onBodySent (line 31751) | onBodySent (...args) {
class BodyAsyncIterable (line 31775) | class BodyAsyncIterable {
method constructor (line 31776) | constructor (body) {
method [Symbol.asyncIterator] (line 31781) | async * [Symbol.asyncIterator] () {
class RedirectHandler (line 31788) | class RedirectHandler {
method constructor (line 31789) | constructor (dispatch, maxRedirections, opts, handler) {
method onConnect (line 31838) | onConnect (abort) {
method onUpgrade (line 31843) | onUpgrade (statusCode, headers, socket) {
method onError (line 31847) | onError (error) {
method onHeaders (line 31851) | onHeaders (statusCode, headers, resume, statusText) {
method onData (line 31884) | onData (chunk) {
method onComplete (line 31908) | onComplete (trailers) {
method onBodySent (line 31928) | onBodySent (chunk) {
function parseLocation (line 31935) | function parseLocation (statusCode, headers) {
function shouldRemoveHeader (line 31948) | function shouldRemoveHeader (header, removeContent, unknownOrigin) {
function cleanRequestHeaders (line 31958) | function cleanRequestHeaders (headers, removeContent, unknownOrigin) {
function calculateRetryAfterHeader (line 31992) | function calculateRetryAfterHeader (retryAfter) {
class RetryHandler (line 31999) | class RetryHandler {
method constructor (line 32000) | constructor (opts, handlers) {
method onRequestSent (line 32062) | onRequestSent () {
method onUpgrade (line 32068) | onUpgrade (statusCode, headers, socket) {
method onConnect (line 32074) | onConnect (abort) {
method onBodySent (line 32082) | onBodySent (chunk) {
method [kRetryHandlerDefaultRetry] (line 32086) | static [kRetryHandlerDefaultRetry] (err, { state, opts }, cb) {
method onHeaders (line 32154) | onHeaders (statusCode, rawHeaders, resume, statusMessage) {
method onData (line 32272) | onData (chunk) {
method onComplete (line 32278) | onComplete (rawTrailers) {
method onError (line 32283) | onError (err) {
function createRedirectInterceptor (line 32334) | function createRedirectInterceptor ({ maxRedirections: defaultMaxRedirec...
function enumToMap (line 32663) | function enumToMap(obj) {
class FakeWeakRef (line 32705) | class FakeWeakRef {
method constructor (line 32706) | constructor (value) {
method deref (line 32710) | deref () {
class MockAgent (line 32715) | class MockAgent extends Dispatcher {
method constructor (line 32716) | constructor (opts) {
method get (line 32733) | get (origin) {
method dispatch (line 32743) | dispatch (opts, handler) {
method close (line 32749) | async close () {
method deactivate (line 32754) | deactivate () {
method activate (line 32758) | activate () {
method enableNetConnect (line 32762) | enableNetConnect (matcher) {
method disableNetConnect (line 32776) | disableNetConnect () {
method isMockActive (line 32782) | get isMockActive () {
method [kMockAgentSet] (line 32786) | [kMockAgentSet] (origin, dispatcher) {
method [kFactory] (line 32790) | [kFactory] (origin) {
method [kMockAgentGet] (line 32797) | [kMockAgentGet] (origin) {
method [kGetNetConnect] (line 32823) | [kGetNetConnect] () {
method pendingInterceptors (line 32827) | pendingInterceptors () {
method assertNoPendingInterceptors (line 32835) | assertNoPendingInterceptors ({ pendingInterceptorsFormatter = new Pend...
class MockClient (line 32882) | class MockClient extends Client {
method constructor (line 32883) | constructor (origin, opts) {
method intercept (line 32908) | intercept (opts) {
method [kClose] (line 32912) | async [kClose] () {
method [Symbols.kConnected] (line 32901) | get [Symbols.kConnected] () {
class MockNotMatchedError (line 32932) | class MockNotMatchedError extends UndiciError {
method constructor (line 32933) | constructor (message) {
class MockScope (line 32970) | class MockScope {
method constructor (line 32971) | constructor (mockDispatch) {
method delay (line 32978) | delay (waitInMs) {
method persist (line 32990) | persist () {
method times (line 32998) | times (repeatTimes) {
class MockInterceptor (line 33011) | class MockInterceptor {
method constructor (line 33012) | constructor (opts, mockDispatches) {
method createMockScopeDispatchData (line 33045) | createMockScopeDispatchData (statusCode, data, responseOptions = {}) {
method validateReplyParameters (line 33054) | validateReplyParameters (statusCode, data, responseOptions) {
method reply (line 33069) | reply (replyData) {
method replyWithError (line 33115) | replyWithError (error) {
method defaultReplyHeaders (line 33127) | defaultReplyHeaders (headers) {
method defaultReplyTrailers (line 33139) | defaultReplyTrailers (trailers) {
method replyContentLength (line 33151) | replyContentLength () {
class MockPool (line 33188) | class MockPool extends Pool {
method constructor (line 33189) | constructor (origin, opts) {
method intercept (line 33214) | intercept (opts) {
method [kClose] (line 33218) | async [kClose] () {
method [Symbols.kConnected] (line 33207) | get [Symbols.kConnected] () {
function matchValue (line 33283) | function matchValue (match, value) {
function lowerCaseEntries (line 33296) | function lowerCaseEntries (headers) {
function getHeaderByName (line 33308) | function getHeaderByName (headers, key) {
function buildHeadersFromArray (line 33325) | function buildHeadersFromArray (headers) { // fetch HeadersList
function matchHeaders (line 33334) | function matchHeaders (mockDispatch, headers) {
function safeUrl (line 33358) | function safeUrl (path) {
function matchKey (line 33374) | function matchKey (mockDispatch, { path, method, body, headers }) {
function getResponseData (line 33382) | function getResponseData (data) {
function getMockDispatch (line 33392) | function getMockDispatch (mockDispatches, key) {
function addMockDispatch (line 33423) | function addMockDispatch (mockDispatches, key, data) {
function deleteMockDispatch (line 33431) | function deleteMockDispatch (mockDispatches, key) {
function buildKey (line 33443) | function buildKey (opts) {
function generateKeyValues (line 33454) | function generateKeyValues (data) {
function getStatusText (line 33466) | function getStatusText (statusCode) {
function getResponse (line 33470) | async function getResponse (body) {
function mockDispatch (line 33481) | function mockDispatch (opts, handler) {
function buildMockDispatch (line 33553) | function buildMockDispatch () {
function checkNetConnect (line 33583) | function checkNetConnect (netConnect, origin) {
function buildMockOptions (line 33593) | function buildMockOptions (opts) {
method constructor (line 33633) | constructor ({ disableColors } = {}) {
method format (line 33648) | format (pendingInterceptors) {
method constructor (line 33689) | constructor (singular, plural) {
method pluralize (line 33694) | pluralize (count) {
class FixedCircularBuffer (line 33767) | class FixedCircularBuffer {
method constructor (line 33768) | constructor() {
method isEmpty (line 33775) | isEmpty() {
method isFull (line 33779) | isFull() {
method push (line 33783) | push(data) {
method shift (line 33788) | shift() {
method constructor (line 33799) | constructor() {
method isEmpty (line 33803) | isEmpty() {
method push (line 33807) | push(data) {
method shift (line 33816) | shift() {
class PoolBase (line 33854) | class PoolBase extends DispatcherBase {
method constructor (line 33855) | constructor () {
method [kBusy] (line 33907) | get [kBusy] () {
method [kConnected] (line 33911) | get [kConnected] () {
method [kFree] (line 33915) | get [kFree] () {
method [kPending] (line 33919) | get [kPending] () {
method [kRunning] (line 33927) | get [kRunning] () {
method [kSize] (line 33935) | get [kSize] () {
method stats (line 33943) | get stats () {
method [kClose] (line 33947) | async [kClose] () {
method [kDestroy] (line 33957) | async [kDestroy] (err) {
method [kDispatch] (line 33969) | [kDispatch] (opts, handler) {
method [kAddClient] (line 33984) | [kAddClient] (client) {
method [kRemoveClient] (line 34004) | [kRemoveClient] (client) {
class PoolStats (line 34038) | class PoolStats {
method constructor (line 34039) | constructor (pool) {
method connected (line 34043) | get connected () {
method free (line 34047) | get free () {
method pending (line 34051) | get pending () {
method queued (line 34055) | get queued () {
method running (line 34059) | get running () {
method size (line 34063) | get size () {
function defaultFactory (line 34098) | function defaultFactory (origin, opts) {
class Pool (line 34102) | class Pool extends PoolBase {
method constructor (line 34103) | constructor (origin, {
method [kGetDispatcher] (line 34154) | [kGetDispatcher] () {
function defaultProtocolPort (line 34196) | function defaultProtocolPort (protocol) {
function buildProxyOptions (line 34200) | function buildProxyOptions (opts) {
function defaultFactory (line 34215) | function defaultFactory (origin, opts) {
class ProxyAgent (line 34219) | class ProxyAgent extends DispatcherBase {
method constructor (line 34220) | constructor (opts) {
method dispatch (line 34303) | dispatch (opts, handler) {
method [kClose] (line 34319) | async [kClose] () {
method [kDestroy] (line 34324) | async [kDestroy] () {
function buildHeaders (line 34334) | function buildHeaders (headers) {
function throwIfProxyAuthIsSent (line 34359) | function throwIfProxyAuthIsSent (headers) {
function onTimeout (line 34383) | function onTimeout () {
function refreshTimeout (line 34416) | function refreshTimeout () {
class Timeout (line 34428) | class Timeout {
method constructor (line 34429) | constructor (callback, delay, opaque) {
method refresh (line 34443) | refresh () {
method clear (line 34454) | clear () {
method setTimeout (line 34460) | setTimeout (callback, delay, opaque) {
method clearTimeout (line 34465) | clearTimeout (timeout) {
function establishWebSocketConnection (line 34520) | function establishWebSocketConnection (url, protocols, ws, onEstablish, ...
function onSocketData (line 34692) | function onSocketData (chunk) {
function onSocketClose (line 34702) | function onSocketClose () {
function onSocketError (line 34757) | function onSocketError (error) {
class MessageEvent (line 34848) | class MessageEvent extends Event {
method constructor (line 34851) | constructor (type, eventInitDict = {}) {
method data (line 34862) | get data () {
method origin (line 34868) | get origin () {
method lastEventId (line 34874) | get lastEventId () {
method source (line 34880) | get source () {
method ports (line 34886) | get ports () {
method initMessageEvent (line 34896) | initMessageEvent (
class CloseEvent (line 34919) | class CloseEvent extends Event {
method constructor (line 34922) | constructor (type, eventInitDict = {}) {
method wasClean (line 34933) | get wasClean () {
method code (line 34939) | get code () {
method reason (line 34945) | get reason () {
class ErrorEvent (line 34953) | class ErrorEvent extends Event {
method constructor (line 34956) | constructor (type, eventInitDict) {
method message (line 34967) | get message () {
method filename (line 34973) | get filename () {
method lineno (line 34979) | get lineno () {
method colno (line 34985) | get colno () {
method error (line 34991) | get error () {
method defaultValue (line 35084) | get defaultValue () {
class WebsocketFrameSend (line 35162) | class WebsocketFrameSend {
method constructor (line 35166) | constructor (data) {
method createFrame (line 35171) | createFrame (opcode) {
class ByteParser (line 35249) | class ByteParser extends Writable {
method constructor (line 35258) | constructor (ws) {
method _write (line 35268) | _write (chunk, _, callback) {
method run (line 35280) | run (callback) {
method consume (line 35487) | consume (n) {
method parseCloseBody (line 35524) | parseCloseBody (onlyCode, data) {
method closingInfo (line 35567) | get closingInfo () {
function isEstablished (line 35614) | function isEstablished (ws) {
function isClosing (line 35624) | function isClosing (ws) {
function isClosed (line 35634) | function isClosed (ws) {
function fireEvent (line 35644) | function fireEvent (e, target, eventConstructor = Event, eventInitDict) {
function websocketMessageReceived (line 35666) | function websocketMessageReceived (ws, type, data) {
function isValidSubprotocol (line 35713) | function isValidSubprotocol (protocol) {
function isValidStatusCode (line 35761) | function isValidStatusCode (code) {
function failWebsocketConnection (line 35777) | function failWebsocketConnection (ws, reason) {
class WebSocket (line 35838) | class WebSocket extends EventTarget {
method constructor (line 35854) | constructor (url, protocols = []) {
method close (line 35960) | close (code = undefined, reason = undefined) {
method send (line 36063) | send (data) {
method readyState (line 36178) | get readyState () {
method bufferedAmount (line 36185) | get bufferedAmount () {
method url (line 36191) | get url () {
method extensions (line 36198) | get extensions () {
method protocol (line 36204) | get protocol () {
method onopen (line 36210) | get onopen () {
method onopen (line 36216) | set onopen (fn) {
method onerror (line 36231) | get onerror () {
method onerror (line 36237) | set onerror (fn) {
method onclose (line 36252) | get onclose () {
method onclose (line 36258) | set onclose (fn) {
method onmessage (line 36273) | get onmessage () {
method onmessage (line 36279) | set onmessage (fn) {
method binaryType (line 36294) | get binaryType () {
method binaryType (line 36300) | set binaryType (type) {
method #onConnectionEstablished (line 36313) | #onConnectionEstablished (response) {
method defaultValue (line 36410) | get defaultValue () {
method defaultValue (line 36417) | get defaultValue () {
function getUserAgent (line 36464) | function getUserAgent() {
function _interopRequireDefault (line 36564) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 36581) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function md5 (line 36583) | function md5(bytes) {
function _interopRequireDefault (line 36626) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function parse (line 36628) | function parse(uuid) {
function _interopRequireDefault (line 36693) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function rng (line 36699) | function rng() {
function _interopRequireDefault (line 36724) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function sha1 (line 36726) | function sha1(bytes) {
function _interopRequireDefault (line 36754) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function stringify (line 36766) | function stringify(arr, offset = 0) {
function _interopRequireDefault (line 36802) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function v1 (line 36816) | function v1(options, buf, offset) {
function _interopRequireDefault (line 36916) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 36940) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function stringToBytes (line 36942) | function stringToBytes(str) {
function _default (line 36959) | function _default(name, version, hashfunc) {
function _interopRequireDefault (line 37024) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function v4 (line 37026) | function v4(options, buf, offset) {
function _interopRequireDefault (line 37068) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 37089) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function validate (line 37091) | function validate(uuid) {
function _interopRequireDefault (line 37113) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function version (line 37115) | function version(uuid) {
function wrappy (line 37137) | function wrappy (fn, cb) {
function Dicer (line 37427) | function Dicer (cfg) {
function HeaderParser (line 37639) | function HeaderParser (cfg) {
function PartStream (line 37740) | function PartStream (opts) {
function SBMH (line 37787) | function SBMH (needle) {
function Busboy (line 38002) | function Busboy (opts) {
function Multipart (line 38111) | function Multipart (boy, cfg) {
function skipPart (line 38374) | function skipPart (part) {
function FileStream (line 38378) | function FileStream (opts) {
function UrlEncoded (line 38408) | function UrlEncoded (boy, cfg) {
function Decoder (line 38612) | function Decoder () {
function getDecoder (line 38690) | function getDecoder (charset) {
function decodeText (line 38787) | function decodeText (text, sourceEncoding, destEncoding) {
function encodedReplacer (line 38934) | function encodedReplacer (match) {
function parseParams (line 38943) | function parseParams (str) {
function __nccwpck_require__ (line 39033) | function __nccwpck_require__(moduleId) {
FILE: db/init/mysql/schema.sql
type `alert_template` (line 28) | CREATE TABLE `alert_template` (
type `api` (line 46) | CREATE TABLE `api` (
type `api_rule_relation` (line 75) | CREATE TABLE `api_rule_relation` (
type `app_auth` (line 92) | CREATE TABLE `app_auth` (
type `auth_param` (line 115) | CREATE TABLE `auth_param` (
type `auth_path` (line 133) | CREATE TABLE `auth_path` (
type `dashboard_user` (line 152) | CREATE TABLE `dashboard_user` (
type `data_permission` (line 174) | CREATE TABLE `data_permission` (
type `detail` (line 192) | CREATE TABLE `detail` (
type `field` (line 211) | CREATE TABLE `field` (
type `meta_data` (line 232) | CREATE TABLE `meta_data` (
type `mock_request_record` (line 257) | CREATE TABLE `mock_request_record` (
type `proxy_api_key_mapping` (line 280) | CREATE TABLE `proxy_api_key_mapping` (
type `model` (line 298) | CREATE TABLE `model` (
type `operation_record_log` (line 316) | CREATE TABLE `operation_record_log` (
type `param` (line 334) | CREATE TABLE `param` (
type `permission` (line 356) | CREATE TABLE `permission` (
type `plugin` (line 958) | CREATE TABLE `plugin` (
type `plugin_handle` (line 1028) | CREATE TABLE `plugin_handle` (
type `resource` (line 1499) | CREATE TABLE `resource` (
type `role` (line 2106) | CREATE TABLE `role` (
type `rule` (line 2125) | CREATE TABLE `rule` (
type `rule_condition` (line 2149) | CREATE TABLE `rule_condition` (
type `selector` (line 2169) | CREATE TABLE `selector` (
type `selector_condition` (line 2195) | CREATE TABLE `selector_condition` (
type `shenyu_dict` (line 2215) | CREATE TABLE `shenyu_dict` (
type `user_role` (line 2367) | CREATE TABLE `user_role` (
type `tag` (line 2387) | CREATE TABLE `tag`
type `discovery` (line 2404) | CREATE TABLE `discovery`
type `discovery_handler` (line 2423) | CREATE TABLE `discovery_handler`
type `discovery_upstream` (line 2439) | CREATE TABLE `discovery_upstream`
type `proxy_selector` (line 2460) | CREATE TABLE `proxy_selector`
type `discovery_rel` (line 2478) | CREATE TABLE `discovery_rel`
type `tag_relation` (line 2494) | CREATE TABLE `tag_relation`
type `alert_receiver` (line 2509) | CREATE TABLE IF NOT EXISTS `alert_receiver`
type SHENYU_LOCK (line 2546) | CREATE TABLE IF NOT EXISTS SHENYU_LOCK (
type cluster_master (line 2558) | CREATE TABLE IF NOT EXISTS cluster_master (
type `namespace` (line 2586) | CREATE TABLE `namespace` (
type `namespace_plugin_rel` (line 2602) | CREATE TABLE `namespace_plugin_rel` (
type `scale_policy` (line 2705) | CREATE TABLE IF NOT EXISTS `scale_policy`
type `scale_rule` (line 2723) | CREATE TABLE IF NOT EXISTS `scale_rule`
type `scale_history` (line 2738) | CREATE TABLE IF NOT EXISTS `scale_history`
type `namespace_user_rel` (line 2751) | CREATE TABLE IF NOT EXISTS `namespace_user_rel` (
type `instance_info` (line 2763) | CREATE TABLE IF NOT EXISTS `instance_info` (
type `registry_config` (line 2778) | CREATE TABLE `registry_config` (
FILE: db/init/ob/schema.sql
type `alert_template` (line 28) | CREATE TABLE `alert_template` (
type `api` (line 46) | CREATE TABLE `api` (
type `api_rule_relation` (line 75) | CREATE TABLE `api_rule_relation` (
type `app_auth` (line 92) | CREATE TABLE `app_auth` (
type `auth_param` (line 115) | CREATE TABLE `auth_param` (
type `auth_path` (line 133) | CREATE TABLE `auth_path` (
type `dashboard_user` (line 152) | CREATE TABLE `dashboard_user` (
type `data_permission` (line 174) | CREATE TABLE `data_permission` (
type `detail` (line 192) | CREATE TABLE `detail` (
type `field` (line 211) | CREATE TABLE `field` (
type `meta_data` (line 232) | CREATE TABLE `meta_data` (
type `mock_request_record` (line 257) | CREATE TABLE `mock_request_record` (
type `proxy_api_key_mapping` (line 280) | CREATE TABLE `proxy_api_key_mapping` (
type `model` (line 298) | CREATE TABLE `model` (
type `operation_record_log` (line 316) | CREATE TABLE `operation_record_log` (
type `param` (line 334) | CREATE TABLE `param` (
type `permission` (line 356) | CREATE TABLE `permission` (
type `plugin` (line 929) | CREATE TABLE `plugin` (
type `plugin_handle` (line 995) | CREATE TABLE `plugin_handle` (
type `resource` (line 1448) | CREATE TABLE `resource` (
type `role` (line 2036) | CREATE TABLE `role` (
type `rule` (line 2055) | CREATE TABLE `rule` (
type `rule_condition` (line 2079) | CREATE TABLE `rule_condition` (
type `selector` (line 2099) | CREATE TABLE `selector` (
type `selector_condition` (line 2125) | CREATE TABLE `selector_condition` (
type `shenyu_dict` (line 2145) | CREATE TABLE `shenyu_dict` (
type `user_role` (line 2284) | CREATE TABLE `user_role` (
type `tag` (line 2304) | CREATE TABLE `tag`
type `discovery` (line 2321) | CREATE TABLE `discovery`
type `discovery_handler` (line 2340) | CREATE TABLE `discovery_handler`
type `discovery_upstream` (line 2356) | CREATE TABLE `discovery_upstream`
type `proxy_selector` (line 2377) | CREATE TABLE `proxy_selector`
type `discovery_rel` (line 2395) | CREATE TABLE `discovery_rel`
type `tag_relation` (line 2411) | CREATE TABLE `tag_relation`
type `alert_receiver` (line 2426) | CREATE TABLE IF NOT EXISTS `alert_receiver`
type SHENYU_LOCK (line 2463) | CREATE TABLE IF NOT EXISTS SHENYU_LOCK (
type cluster_master (line 2475) | CREATE TABLE IF NOT EXISTS cluster_master (
type `namespace` (line 2513) | CREATE TABLE `namespace` (
type `namespace_plugin_rel` (line 2529) | CREATE TABLE `namespace_plugin_rel` (
type `namespace_user_rel` (line 2609) | CREATE TABLE IF NOT EXISTS `namespace_user_rel` (
type instance_info (line 2618) | CREATE TABLE IF NOT EXISTS instance_info (
type `registry_config` (line 2696) | CREATE TABLE `registry_config` (
FILE: db/init/og/create-table.sql
type "public" (line 25) | CREATE TABLE "public"."api" (
type "public" (line 69) | CREATE TABLE "public"."api_rule_relation" (
type "public" (line 87) | CREATE TABLE "public"."app_auth" (
type "public" (line 121) | CREATE TABLE "public"."auth_param" (
type "public" (line 145) | CREATE TABLE "public"."auth_path" (
type "public" (line 171) | CREATE TABLE "public"."dashboard_user" (
type "public" (line 199) | CREATE TABLE "public"."data_permission" (
type "public" (line 224) | CREATE TABLE "public"."detail" (
type "public" (line 250) | CREATE TABLE "public"."field" (
type "public" (line 280) | CREATE TABLE "public"."meta_data" (
type "public" (line 318) | CREATE TABLE "public"."mock_request_record" (
type "public" (line 352) | CREATE TABLE "public"."proxy_api_key_mapping" (
type uk_selector_proxy_key (line 364) | CREATE UNIQUE INDEX uk_selector_proxy_key ON "public"."proxy_api_key_map...
type idx_namespace_enabled (line 365) | CREATE INDEX idx_namespace_enabled ON "public"."proxy_api_key_mapping" U...
type "public" (line 371) | CREATE TABLE "public"."model" (
type "public" (line 404) | CREATE TABLE "public"."operation_record_log" (
type "public" (line 429) | CREATE TABLE "public"."param" (
type "public" (line 460) | CREATE TABLE "public"."permission" (
type "public" (line 924) | CREATE TABLE "public"."plugin" (
type "public" (line 1008) | CREATE TABLE "public"."plugin_handle" (
type "public" (line 1454) | CREATE TABLE "public"."resource" (
type "public" (line 1928) | CREATE TABLE "public"."role" (
type "public" (line 1953) | CREATE TABLE "public"."rule" (
type "public" (line 1989) | CREATE TABLE "public"."rule_condition" (
type "public" (line 2017) | CREATE TABLE "public"."selector" (
type "public" (line 2057) | CREATE TABLE "public"."selector_condition" (
type "public" (line 2095) | CREATE TABLE "public"."shenyu_dict" (
type "public" (line 2244) | CREATE TABLE "public"."user_role" (
type "public" (line 2301) | CREATE INDEX "unique_user_name" ON "public"."dashboard_user" USING btree (
type "public" (line 2338) | CREATE INDEX "plugin_id_field_type" ON "public"."plugin_handle" USING bt...
type "public" (line 2398) | CREATE TABLE "public"."tag" (
type "public" (line 2420) | CREATE TABLE "public"."tag_relation" (
type "public" (line 2438) | CREATE TABLE "public"."discovery" (
type "public" (line 2466) | CREATE TABLE "public"."discovery_handler" (
type "public" (line 2488) | CREATE TABLE "public"."discovery_rel" (
type "public" (line 2510) | CREATE TABLE "public"."proxy_selector"
type "public" (line 2537) | CREATE TABLE "public"."discovery_upstream"
type "public" (line 2561) | CREATE INDEX "unique_discovery_upstream_discovery_handler_id" ON "public...
type "public" (line 2571) | CREATE TABLE "public"."alert_template" (
type "public" (line 2591) | CREATE TABLE "public"."alert_receiver"
type "public" (line 2636) | CREATE TABLE "public"."shenyu_lock" (
type "public" (line 2653) | CREATE TABLE "public"."cluster_master"
type "public" (line 2685) | CREATE TABLE "public"."namespace" (
type "public" (line 2705) | CREATE TABLE "public"."namespace_plugin_rel" (
type "public" (line 2797) | CREATE TABLE IF NOT EXISTS "public"."scale_policy"
type "public" (line 2822) | CREATE TABLE "public"."scale_rule"
type "public" (line 2845) | CREATE TABLE "public"."scale_history"
type "public" (line 2864) | CREATE TABLE "public"."namespace_user_rel"
type "public" (line 2940) | CREATE TABLE "public"."instance_info" (
type "public" (line 3090) | CREATE TABLE "public"."registry_config" (
FILE: db/init/oracle/schema.sql
type dashboard_user (line 17) | create table dashboard_user
type plugin (line 46) | create table plugin
type plugin_handle (line 80) | create table plugin_handle
type selector (line 115) | create table selector
type selector_condition (line 162) | create table selector_condition
type rule (line 192) | create table rule
type rule_condition (line 233) | create table rule_condition
type meta_data (line 262) | create table meta_data
type mock_request_record (line 307) | create table mock_request_record
type proxy_api_key_mapping (line 356) | CREATE TABLE proxy_api_key_mapping
type uk_selector_proxy_key (line 368) | CREATE UNIQUE INDEX uk_selector_proxy_key ON proxy_api_key_mapping (sele...
type idx_namespace_enabled (line 369) | CREATE INDEX idx_namespace_enabled ON proxy_api_key_mapping (namespace_i...
type model (line 371) | create table model
type operation_record_log (line 395) | create table operation_record_log
type api (line 425) | create table api
type api_rule_relation (line 486) | create table api_rule_relation
type app_auth (line 508) | create table app_auth
type auth_param (line 547) | create table auth_param
type auth_path (line 571) | create table auth_path
type shenyu_dict (line 598) | create table shenyu_dict
type role (line 635) | create table role
type user_role (line 659) | create table user_role
type param (line 683) | create table param
type permission (line 722) | create table permission
type "resource" (line 746) | create table "resource"
type data_permission (line 800) | create table data_permission
type detail (line 827) | create table detail
type field (line 857) | create table field
type tag (line 2578) | create table tag
type tag_relation (line 2613) | create table tag_relation
type discovery (line 2635) | create table discovery
type discovery_handler (line 2672) | create table discovery_handler
type discovery_rel (line 2700) | create table discovery_rel
type discovery_upstream (line 2728) | create table discovery_upstream
type discovery_upstream_idx (line 2742) | CREATE UNIQUE INDEX discovery_upstream_idx ON discovery_upstream (discov...
type proxy_selector (line 2767) | create table proxy_selector
type alert_template (line 2800) | create table alert_template
type alert_receiver (line 2834) | create table alert_receiver
type SHENYU_LOCK (line 2903) | CREATE TABLE SHENYU_LOCK (
type cluster_master (line 2923) | create table cluster_master
type namespace (line 2970) | CREATE TABLE namespace (
type namespace_plugin_rel (line 2991) | CREATE TABLE namespace_plugin_rel (
type scale_policy (line 3081) | create table scale_policy
type scale_rule (line 3114) | create table scale_rule
type scale_history (line 3146) | create table scale_history
type namespace_user_rel (line 3173) | create table namespace_user_rel
type instance_info (line 3353) | CREATE TABLE instance_info (
type registry_config (line 3777) | CREATE TABLE registry_config (
FILE: db/init/pg/create-table.sql
type "public" (line 22) | CREATE TABLE "public"."api" (
type "public" (line 66) | CREATE TABLE "public"."api_rule_relation" (
type "public" (line 84) | CREATE TABLE "public"."app_auth" (
type "public" (line 118) | CREATE TABLE "public"."auth_param" (
type "public" (line 142) | CREATE TABLE "public"."auth_path" (
type "public" (line 168) | CREATE TABLE "public"."dashboard_user" (
type "public" (line 196) | CREATE TABLE "public"."data_permission" (
type "public" (line 221) | CREATE TABLE "public"."detail" (
type "public" (line 247) | CREATE TABLE "public"."field" (
type "public" (line 277) | CREATE TABLE "public"."meta_data" (
type "public" (line 315) | CREATE TABLE "public"."mock_request_record" (
type "public" (line 349) | CREATE TABLE "public"."proxy_api_key_mapping" (
type uk_selector_proxy_key (line 361) | CREATE UNIQUE INDEX uk_selector_proxy_key ON "public"."proxy_api_key_map...
type idx_namespace_enabled (line 362) | CREATE INDEX idx_namespace_enabled ON "public"."proxy_api_key_mapping" U...
type "public" (line 368) | CREATE TABLE "public"."model" (
type "public" (line 401) | CREATE TABLE "public"."operation_record_log" (
type "public" (line 426) | CREATE TABLE "public"."param" (
type "public" (line 457) | CREATE TABLE "public"."permission" (
type "public" (line 982) | CREATE TABLE "public"."plugin" (
type "public" (line 1066) | CREATE TABLE "public"."plugin_handle" (
type "public" (line 1511) | CREATE TABLE "public"."resource" (
type "public" (line 2052) | CREATE TABLE "public"."role" (
type "public" (line 2077) | CREATE TABLE "public"."rule" (
type "public" (line 2113) | CREATE TABLE "public"."rule_condition" (
type "public" (line 2141) | CREATE TABLE "public"."selector" (
type "public" (line 2181) | CREATE TABLE "public"."selector_condition" (
type "public" (line 2219) | CREATE TABLE "public"."shenyu_dict" (
type "public" (line 2367) | CREATE TABLE "public"."user_role" (
type "public" (line 2424) | CREATE INDEX "unique_user_name" ON "public"."dashboard_user" USING btree (
type "public" (line 2461) | CREATE INDEX "plugin_id_field_type" ON "public"."plugin_handle" USING bt...
type "public" (line 2521) | CREATE TABLE "public"."tag" (
type "public" (line 2543) | CREATE TABLE "public"."tag_relation" (
type "public" (line 2561) | CREATE TABLE "public"."discovery" (
type "public" (line 2589) | CREATE TABLE "public"."discovery_handler" (
type "public" (line 2611) | CREATE TABLE "public"."discovery_rel" (
type "public" (line 2633) | CREATE TABLE "public"."proxy_selector"
type "public" (line 2660) | CREATE TABLE "public"."discovery_upstream"
type discovery_upstream_discovery_handler_id_IDX (line 2685) | CREATE UNIQUE INDEX discovery_upstream_discovery_handler_id_IDX ON "publ...
type "public" (line 2691) | CREATE TABLE "public"."alert_template" (
type "public" (line 2711) | CREATE TABLE "public"."alert_receiver"
type "public" (line 2756) | CREATE TABLE "public"."shenyu_lock" (
type "public" (line 2772) | CREATE TABLE "public"."cluster_master"
type "public" (line 2803) | CREATE TABLE "public"."namespace" (
type "public" (line 2823) | CREATE TABLE "public"."namespace_plugin_rel" (
type "public" (line 2914) | CREATE TABLE IF NOT EXISTS "public"."scale_policy"
type "public" (line 2939) | CREATE TABLE "public"."scale_rule"
type "public" (line 2962) | CREATE TABLE "public"."scale_history"
type "public" (line 2983) | CREATE TABLE "public"."namespace_user_rel"
type "public" (line 3059) | CREATE TABLE "public"."instance_info" (
type "public" (line 3221) | CREATE TABLE "public"."registry_config" (
FILE: db/upgrade/2.4.3-upgrade-2.5.0-mysql.sql
type `operation_record_log` (line 54) | CREATE TABLE IF NOT EXISTS `operation_record_log`
FILE: db/upgrade/2.4.3-upgrade-2.5.0-pg.sql
type "operation_record_log" (line 54) | CREATE TABLE "operation_record_log"
FILE: db/upgrade/2.5.0-upgrade-2.5.1-mysql.sql
type `mock_request_record` (line 290) | CREATE TABLE IF NOT EXISTS `mock_request_record` (
type `api` (line 308) | CREATE TABLE IF NOT EXISTS `api` (
type `api_rule_relation` (line 332) | CREATE TABLE IF NOT EXISTS `api_rule_relation` (
type `tag` (line 344) | CREATE TABLE IF NOT EXISTS `tag` (
type `tag_relation` (line 358) | CREATE TABLE IF NOT EXISTS `tag_relation` (
type `param` (line 370) | CREATE TABLE IF NOT EXISTS `param` (
type `model` (line 387) | CREATE TABLE IF NOT EXISTS `model` (
type `field` (line 399) | CREATE TABLE IF NOT EXISTS `field` (
type `detail` (line 415) | CREATE TABLE IF NOT EXISTS `detail` (
FILE: db/upgrade/2.5.0-upgrade-2.5.1-oracle.sql
type mock_request_record (line 328) | create table mock_request_record
type api (line 370) | create table api
type api_rule_relation (line 430) | create table api_rule_relation
type tag (line 451) | create table tag
type tag_relation (line 485) | create table tag_relation
type param (line 506) | create table param
type model (line 545) | create table model
type field (line 568) | create table field
type detail (line 604) | create table detail
FILE: db/upgrade/2.5.0-upgrade-2.5.1-pg.sql
type "public" (line 296) | CREATE TABLE "public"."mock_request_record" (
type "public" (line 325) | CREATE TABLE "public"."api" (
type "public" (line 366) | CREATE TABLE "public"."api_rule_relation" (
type "public" (line 383) | CREATE TABLE "public"."tag" (
type "public" (line 404) | CREATE TABLE "public"."tag_relation" (
type "public" (line 421) | CREATE TABLE "public"."param" (
type "public" (line 448) | CREATE TABLE "public"."model" (
type "public" (line 465) | CREATE TABLE "public"."field" (
type "public" (line 490) | CREATE TABLE "public"."detail" (
FILE: db/upgrade/2.5.1-upgrade-2.6.0-mysql.sql
type `discovery` (line 42) | CREATE TABLE `discovery`
type `discovery_handler` (line 57) | CREATE TABLE `discovery_handler`
type `discovery_upstream` (line 70) | CREATE TABLE `discovery_upstream`
type `proxy_selector` (line 85) | CREATE TABLE `proxy_selector`
type `discovery_rel` (line 99) | CREATE TABLE `discovery_rel`
FILE: db/upgrade/2.5.1-upgrade-2.6.0-oracle.sql
type discovery (line 51) | create table discovery
type discovery_handler (line 85) | create table discovery_handler
type discovery_rel (line 113) | create table discovery_rel
type discovery_upstream (line 141) | create table discovery_upstream
type proxy_selector (line 175) | create table proxy_selector
FILE: db/upgrade/2.5.1-upgrade-2.6.0-pg.sql
type "public" (line 44) | CREATE TABLE "public"."discovery" (
type "public" (line 67) | CREATE TABLE "public"."discovery_handler" (
type "public" (line 85) | CREATE TABLE "public"."discovery_rel" (
type "public" (line 103) | CREATE TABLE "public"."proxy_selector"
type "public" (line 124) | CREATE TABLE "public"."discovery_upstream"
FILE: db/upgrade/2.6.0-upgrade-2.6.1-mysql.sql
type `alert_receiver` (line 57) | CREATE TABLE IF NOT EXISTS `alert_receiver`
type discovery_upstream_discovery_handler_id_IDX (line 138) | CREATE UNIQUE INDEX discovery_upstream_discovery_handler_id_IDX USING BT...
FILE: db/upgrade/2.6.0-upgrade-2.6.1-og.sql
type "public" (line 58) | CREATE TABLE "public"."alert_receiver"
type discovery_upstream_discovery_handler_id_IDX (line 143) | CREATE UNIQUE INDEX discovery_upstream_discovery_handler_id_IDX USING BT...
FILE: db/upgrade/2.6.0-upgrade-2.6.1-oracle.sql
type alert_receiver (line 69) | create table alert_receiver
type discovery_upstream_url_IDX (line 182) | CREATE UNIQUE INDEX discovery_upstream_url_IDX USING BTREE ON `shenyu`.`...
FILE: db/upgrade/2.6.0-upgrade-2.6.1-pg.sql
type "public" (line 60) | CREATE TABLE "public"."alert_receiver"
type discovery_upstream_discovery_handler_id_IDX (line 145) | CREATE UNIQUE INDEX discovery_upstream_discovery_handler_id_IDX ON "publ...
FILE: db/upgrade/2.6.1-upgrade-2.7.0-mysql.sql
type SHENYU_LOCK (line 40) | CREATE TABLE IF NOT EXISTS SHENYU_LOCK (
type cluster_master (line 61) | CREATE TABLE IF NOT EXISTS cluster_master (
type `namespace` (line 86) | CREATE TABLE `namespace` (
type `namespace_plugin_rel` (line 99) | CREATE TABLE `namespace_plugin_rel` (
type `scale_policy` (line 196) | CREATE TABLE IF NOT EXISTS `scale_policy`
type `scale_rule` (line 214) | CREATE TABLE IF NOT EXISTS `scale_rule`
type `scale_history` (line 229) | CREATE TABLE IF NOT EXISTS `scale_history`
type `namespace_user_rel` (line 242) | CREATE TABLE IF NOT EXISTS `namespace_user_rel` (
FILE: db/upgrade/2.6.1-upgrade-2.7.0-og.sql
type "public" (line 38) | CREATE TABLE "public"."shenyu_lock" (
type "public" (line 75) | CREATE TABLE "public"."cluster_master"
type "public" (line 107) | CREATE TABLE "public"."namespace" (
type "public" (line 126) | CREATE TABLE "public"."namespace_plugin_rel" (
type "public" (line 215) | CREATE TABLE IF NOT EXISTS "public"."scale_policy"
type "public" (line 240) | CREATE TABLE "public"."scale_rule"
type "public" (line 263) | CREATE TABLE "public"."scale_history"
type "public" (line 283) | CREATE TABLE "public"."namespace_user_rel"
FILE: db/upgrade/2.6.1-upgrade-2.7.0-oracle.sql
type SHENYU_LOCK (line 67) | CREATE TABLE SHENYU_LOCK (
type cluster_master (line 97) | create table cluster_master
type namespace (line 143) | CREATE TABLE namespace (
type namespace_plugin_rel (line 164) | CREATE TABLE namespace_plugin_rel (
type scale_policy (line 265) | create table scale_policy
type scale_rule (line 298) | create table scale_rule
type scale_history (line 330) | create table scale_history
type namespace_user_rel (line 357) | create table namespace_user_rel
FILE: db/upgrade/2.6.1-upgrade-2.7.0-pg.sql
type "public" (line 39) | CREATE TABLE "public"."shenyu_lock" (
type "public" (line 65) | CREATE TABLE "public"."cluster_master"
type "public" (line 97) | CREATE TABLE "public"."namespace" (
type "public" (line 116) | CREATE TABLE "public"."namespace_plugin_rel" (
type "public" (line 218) | CREATE TABLE IF NOT EXISTS "public"."scale_policy"
type "public" (line 243) | CREATE TABLE "public"."scale_rule"
type "public" (line 266) | CREATE TABLE "public"."scale_history"
type "public" (line 286) | CREATE TABLE "public"."namespace_user_rel"
FILE: db/upgrade/2.7.0-upgrade-2.7.1-mysql.sql
type instance_info (line 71) | CREATE TABLE IF NOT EXISTS instance_info (
type `registry_config` (line 293) | CREATE TABLE `registry_config` (
FILE: db/upgrade/2.7.0-upgrade-2.7.1-ob.sql
type instance_info (line 108) | CREATE TABLE IF NOT EXISTS instance_info (
type `registry_config` (line 285) | CREATE TABLE `registry_config` (
FILE: db/upgrade/2.7.0-upgrade-2.7.1-og.sql
type "public" (line 73) | CREATE TABLE "public"."instance_info" (
type "public" (line 299) | CREATE TABLE "public"."registry_config" (
FILE: db/upgrade/2.7.0-upgrade-2.7.1-oracle.sql
type instance_info (line 149) | CREATE TABLE instance_info (
type registry_config (line 643) | CREATE TABLE registry_config (
FILE: db/upgrade/2.7.0-upgrade-2.7.1-pg.sql
type "public" (line 72) | CREATE TABLE "public"."instance_info" (
type "public" (line 298) | CREATE TABLE "public"."registry_config" (
FILE: shenyu-admin-listener/shenyu-admin-listener-api/src/main/java/org/apache/shenyu/admin/listener/AbstractDataChangedInit.java
class AbstractDataChangedInit (line 28) | public abstract class AbstractDataChangedInit implements DataChangedInit {
method run (line 36) | @Override
method notExist (line 48) | protected abstract boolean notExist();
FILE: shenyu-admin-listener/shenyu-admin-listener-api/src/main/java/org/apache/shenyu/admin/listener/AbstractNodeDataChangedListener.java
class AbstractNodeDataChangedListener (line 51) | public abstract class AbstractNodeDataChangedListener implements DataCha...
method AbstractNodeDataChangedListener (line 64) | protected AbstractNodeDataChangedListener(final ChangeData changeData) {
method onAppAuthChanged (line 68) | @Override
method onPluginChanged (line 79) | @Override
method onMetaDataChanged (line 90) | @Override
method onCommonChanged (line 116) | private <T> void onCommonChanged(final String configKeyPrefix, final L...
method putChangeData (line 153) | private void putChangeData(final String configKeyPrefix, final List<St...
method delChangedData (line 162) | private void delChangedData(final String configKeyPrefix, final List<S...
method onSelectorChanged (line 171) | @Override
method onRuleChanged (line 182) | @Override
method onCommonMultiChanged (line 214) | private <T> void onCommonMultiChanged(final List<T> changedList, final...
method putChangedMapToList (line 242) | private void putChangedMapToList(final Map<String, List<String>> strin...
method delChangedMapToList (line 257) | private void delChangedMapToList(final Map<String, List<String>> strin...
method onProxySelectorChanged (line 271) | @Override
method onDiscoveryUpstreamChanged (line 282) | @Override
method publishConfig (line 293) | private void publishConfig(final String dataId, final Object data) {
method doPublishConfig (line 304) | public abstract void doPublishConfig(String dataId, Object data);
method delConfig (line 306) | private void delConfig(final String dataId) {
method doDelConfig (line 316) | protected abstract void doDelConfig(String dataId);
method getConfig (line 324) | public abstract String getConfig(String dataId);
method getConfigDataNames (line 332) | private <T> List<String> getConfigDataNames(final String configKeyPref...
class ChangeData (line 336) | public static class ChangeData {
method ChangeData (line 382) | public ChangeData(final String pluginDataId, final String selectorDa...
method getPluginDataId (line 399) | public String getPluginDataId() {
method getSelectorDataId (line 408) | public String getSelectorDataId() {
method getRuleDataId (line 417) | public String getRuleDataId() {
method getAuthDataId (line 426) | public String getAuthDataId() {
method getMetaDataId (line 435) | public String getMetaDataId() {
method getProxySelectorDataId (line 444) | public String getProxySelectorDataId() {
method getDiscoveryDataId (line 453) | public String getDiscoveryDataId() {
FILE: shenyu-admin-listener/shenyu-admin-listener-api/src/main/java/org/apache/shenyu/admin/listener/AbstractPathDataChangedListener.java
class AbstractPathDataChangedListener (line 40) | public abstract class AbstractPathDataChangedListener implements DataCha...
method onAppAuthChanged (line 48) | @Override
method onMetaDataChanged (line 64) | @Override
method onProxySelectorChanged (line 80) | @Override
method onDiscoveryUpstreamChanged (line 96) | @Override
method onSelectorChanged (line 112) | @Override
method onPluginChanged (line 137) | @Override
method onRuleChanged (line 157) | @Override
method createOrUpdate (line 187) | public abstract void createOrUpdate(String pluginPath, Object data);
method deleteNode (line 194) | public abstract void deleteNode(String pluginPath);
method deletePathRecursive (line 201) | public abstract void deletePathRecursive(String selectorParentPath);
FILE: shenyu-admin-listener/shenyu-admin-listener-api/src/main/java/org/apache/shenyu/admin/listener/DataChangedInit.java
type DataChangedInit (line 25) | public interface DataChangedInit extends CommandLineRunner {
FILE: shenyu-admin-listener/shenyu-admin-listener-api/src/main/java/org/apache/shenyu/admin/listener/DataChangedListener.java
type DataChangedListener (line 36) | public interface DataChangedListener {
method onAppAuthChanged (line 44) | default void onAppAuthChanged(List<AppAuthData> changed, DataEventType...
method onPluginChanged (line 53) | default void onPluginChanged(List<PluginData> changed, DataEventTypeEn...
method onSelectorChanged (line 62) | default void onSelectorChanged(List<SelectorData> changed, DataEventTy...
method onMetaDataChanged (line 71) | default void onMetaDataChanged(List<MetaData> changed, DataEventTypeEn...
method onRuleChanged (line 81) | default void onRuleChanged(List<RuleData> changed, DataEventTypeEnum e...
method onProxySelectorChanged (line 90) | default void onProxySelectorChanged(List<ProxySelectorData> changed, D...
method onDiscoveryUpstreamChanged (line 99) | default void onDiscoveryUpstreamChanged(List<DiscoverySyncData> change...
method onAiProxyApiKeyChanged (line 108) | default void onAiProxyApiKeyChanged(List<ProxyApiKeyData> changed, Dat...
FILE: shenyu-admin-listener/shenyu-admin-listener-api/src/main/java/org/apache/shenyu/admin/listener/utils/NodeDataPathUtils.java
class NodeDataPathUtils (line 25) | public class NodeDataPathUtils {
method appendListStuff (line 33) | public static String appendListStuff(final String text) {
FILE: shenyu-admin-listener/shenyu-admin-listener-api/src/main/java/org/apache/shenyu/admin/service/SyncDataService.java
type SyncDataService (line 25) | public interface SyncDataService {
method syncAll (line 33) | boolean syncAll(DataEventTypeEnum type);
method syncAllByNamespaceId (line 42) | boolean syncAllByNamespaceId(DataEventTypeEnum type, String namespaceId);
method syncPluginData (line 50) | boolean syncPluginData(String id);
method syncPluginData (line 59) | boolean syncPluginData(String namespaceId, String pluginId);
FILE: shenyu-admin-listener/shenyu-admin-listener-api/src/test/java/org/apache/shenyu/admin/listener/AbstractConfigurationTest.java
class AbstractConfigurationTest (line 27) | public abstract class AbstractConfigurationTest {
method getContext (line 36) | public AnnotationConfigApplicationContext getContext() {
method clear (line 43) | @AfterEach
method load (line 54) | public void load(final Class<?> configuration, final String... inlined...
method load (line 64) | public void load(final Class<?>[] configuration, final String... inlin...
FILE: shenyu-admin-listener/shenyu-admin-listener-api/src/test/java/org/apache/shenyu/admin/listener/utils/NodeDataPathUtilsTest.java
class NodeDataPathUtilsTest (line 26) | public class NodeDataPathUtilsTest {
method testAppendListStuff (line 31) | @Test
FILE: shenyu-admin-listener/shenyu-admin-listener-apollo/src/main/java/org/apache/shenyu/admin/config/ApolloSyncConfiguration.java
class ApolloSyncConfiguration (line 35) | @Configuration
method apolloClient (line 47) | @Bean
method apolloDataChangeListener (line 58) | @Bean
method apolloDataChangeInit (line 70) | @Bean
FILE: shenyu-admin-listener/shenyu-admin-listener-apollo/src/main/java/org/apache/shenyu/admin/config/properties/ApolloProperties.java
class ApolloProperties (line 22) | @ConfigurationProperties("shenyu.sync.apollo")
method getAppId (line 71) | public String getAppId() {
method setAppId (line 79) | public void setAppId(final String appId) {
method getMeta (line 87) | public String getMeta() {
method setMeta (line 95) | public void setMeta(final String meta) {
method getPortalUrl (line 103) | public String getPortalUrl() {
method setPortalUrl (line 111) | public void setPortalUrl(final String portalUrl) {
method getEnv (line 119) | public String getEnv() {
method setEnv (line 127) | public void setEnv(final String env) {
method getClusterName (line 135) | public String getClusterName() {
method setClusterName (line 143) | public void setClusterName(final String clusterName) {
method getNamespace (line 151) | public String getNamespace() {
method setNamespace (line 159) | public void setNamespace(final String namespace) {
method getToken (line 167) | public String getToken() {
method setToken (line 175) | public void setToken(final String token) {
method getOperatorUser (line 184) | public String getOperatorUser() {
method setOperatorUser (line 193) | public void setOperatorUser(final String operatorUser) {
FILE: shenyu-admin-listener/shenyu-admin-listener-apollo/src/main/java/org/apache/shenyu/admin/listener/apollo/ApolloClient.java
class ApolloClient (line 36) | public class ApolloClient {
method ApolloClient (line 46) | public ApolloClient(final ApolloProperties apolloConfig) {
method getItemValue (line 62) | public String getItemValue(final String key) {
method removeItemKey (line 85) | public void removeItemKey(final String key) {
method createOrUpdateItem (line 100) | public void createOrUpdateItem(final String key, final Object value, f...
method createOrUpdateItem (line 110) | public void createOrUpdateItem(final String key, final String value, f...
method publishNamespace (line 135) | public void publishNamespace(final String releaseTitle, final String r...
FILE: shenyu-admin-listener/shenyu-admin-listener-apollo/src/main/java/org/apache/shenyu/admin/listener/apollo/ApolloDataChangedInit.java
class ApolloDataChangedInit (line 32) | public class ApolloDataChangedInit extends AbstractDataChangedInit {
method ApolloDataChangedInit (line 40) | public ApolloDataChangedInit(final ApolloClient apolloClient) {
method notExist (line 49) | @Override
method dataIdNotExist (line 62) | private boolean dataIdNotExist(final String pluginDataId) {
FILE: shenyu-admin-listener/shenyu-admin-listener-apollo/src/main/java/org/apache/shenyu/admin/listener/apollo/ApolloDataChangedListener.java
class ApolloDataChangedListener (line 28) | public class ApolloDataChangedListener extends AbstractNodeDataChangedLi...
method ApolloDataChangedListener (line 36) | public ApolloDataChangedListener(final ApolloClient apolloClient) {
method doPublishConfig (line 47) | @Override
method getConfig (line 53) | @Override
method doDelConfig (line 58) | @Override
FILE: shenyu-admin-listener/shenyu-admin-listener-apollo/src/test/java/org/apache/shenyu/admin/listener/apollo/ApolloClientTest.java
class ApolloClientTest (line 33) | @ContextConfiguration(classes = {ApolloProperties.class})
method testConstructor (line 43) | @Test
method testGetItemValue (line 66) | @Test
method testCreateOrUpdateItem (line 76) | @Test
method testPublishNamespace (line 87) | @Test
FILE: shenyu-admin-listener/shenyu-admin-listener-apollo/src/test/java/org/apache/shenyu/admin/listener/apollo/ApolloDataChangedInitTest.java
class ApolloDataChangedInitTest (line 36) | @ContextConfiguration(classes = {ApolloDataChangedInit.class})
method testConstructor (line 49) | @Test
method testNotExist (line 67) | @Test
method testAllExist (line 90) | @Test
method join (line 99) | private String join(final String text) {
FILE: shenyu-admin-listener/shenyu-admin-listener-apollo/src/test/java/org/apache/shenyu/admin/listener/apollo/ApolloDataChangedListenerTest.java
class ApolloDataChangedListenerTest (line 34) | @ContextConfiguration(classes = {ApolloDataChangedListener.class})
method testConstructor (line 47) | @Test
method testPublishConfig (line 63) | @Test
method testGetConfig (line 76) | @Test
method testGetConfig2 (line 86) | @Test
FILE: shenyu-admin-listener/shenyu-admin-listener-consul/src/main/java/org/apache/shenyu/admin/config/ConsulSyncConfiguration.java
class ConsulSyncConfiguration (line 40) | @Configuration
method consulClient (line 51) | @Bean
method consulDataChangedListener (line 71) | @Bean
method consulDataChangedInit (line 83) | @Bean
FILE: shenyu-admin-listener/shenyu-admin-listener-consul/src/main/java/org/apache/shenyu/admin/config/properties/ConsulProperties.java
class ConsulProperties (line 25) | @ConfigurationProperties(prefix = "shenyu.sync.consul")
method getUrl (line 35) | public String getUrl() {
method setUrl (line 44) | public void setUrl(final String url) {
FILE: shenyu-admin-listener/shenyu-admin-listener-consul/src/main/java/org/apache/shenyu/admin/listener/consul/ConsulDataChangedInit.java
class ConsulDataChangedInit (line 32) | public class ConsulDataChangedInit extends AbstractDataChangedInit {
method ConsulDataChangedInit (line 41) | public ConsulDataChangedInit(final ConsulClient consulClient) {
method notExist (line 45) | @Override
method dataKeyNotExist (line 50) | private boolean dataKeyNotExist(final String dataKey) {
FILE: shenyu-admin-listener/shenyu-admin-listener-consul/src/main/java/org/apache/shenyu/admin/listener/consul/ConsulDataChangedListener.java
class ConsulDataChangedListener (line 27) | public class ConsulDataChangedListener extends AbstractPathDataChangedLi...
method ConsulDataChangedListener (line 30) | public ConsulDataChangedListener(final ConsulClient consulClient) {
method createOrUpdate (line 34) | @Override
method deleteNode (line 39) | @Override
method deletePathRecursive (line 44) | @Override
FILE: shenyu-admin-listener/shenyu-admin-listener-consul/src/test/java/org/apache/shenyu/admin/config/ConsulSyncConfigurationTest.java
class ConsulSyncConfigurationTest (line 28) | public class ConsulSyncConfigurationTest {
method testConsulClient (line 29) | @Test
method testConsulDataChangedListener (line 37) | @Test
method testConsulDataInit (line 44) | @Test
FILE: shenyu-admin-listener/shenyu-admin-listener-consul/src/test/java/org/apache/shenyu/admin/config/properties/ConsulPropertiesTest.java
class ConsulPropertiesTest (line 26) | public class ConsulPropertiesTest {
method consulPropertiesTest (line 28) | @Test
FILE: shenyu-admin-listener/shenyu-admin-listener-consul/src/test/java/org/apache/shenyu/admin/listener/consul/ConsulDataChangedInitTest.java
class ConsulDataChangedInitTest (line 38) | @ExtendWith(MockitoExtension.class)
method testNotExist (line 44) | @Test
FILE: shenyu-admin-listener/shenyu-admin-listener-consul/src/test/java/org/apache/shenyu/admin/listener/consul/ConsulDataChangedListenerTest.java
class ConsulDataChangedListenerTest (line 41) | @ExtendWith(MockitoExtension.class)
method testOnAppAuthChanged (line 68) | @Test
method testOnPluginChanged (line 87) | @Test
method testOnSelectorChanged (line 106) | @Test
method testOnMetaDataChanged (line 126) | @Test
method testOnRuleChanged (line 145) | @Test
FILE: shenyu-admin-listener/shenyu-admin-listener-etcd/src/main/java/org/apache/shenyu/admin/config/EtcdSyncConfiguration.java
class EtcdSyncConfiguration (line 37) | @Configuration
method etcdDataChangedListener (line 49) | @Bean
method etcdDataChangedInit (line 62) | @Bean
FILE: shenyu-admin-listener/shenyu-admin-listener-etcd/src/main/java/org/apache/shenyu/admin/listener/etcd/EtcdDataChangedInit.java
class EtcdDataChangedInit (line 31) | public class EtcdDataChangedInit extends AbstractDataChangedInit {
method EtcdDataChangedInit (line 40) | public EtcdDataChangedInit(final EtcdClient etcdClient) {
method notExist (line 44) | @Override
FILE: shenyu-admin-listener/shenyu-admin-listener-etcd/src/main/java/org/apache/shenyu/admin/listener/etcd/EtcdDataDataChangedListener.java
class EtcdDataDataChangedListener (line 27) | public class EtcdDataDataChangedListener extends AbstractPathDataChanged...
method EtcdDataDataChangedListener (line 31) | public EtcdDataDataChangedListener(final EtcdClient client) {
method createOrUpdate (line 35) | @Override
method deleteNode (line 40) | @Override
method deletePathRecursive (line 45) | @Override
FILE: shenyu-admin-listener/shenyu-admin-listener-etcd/src/test/java/org/apache/shenyu/admin/config/EtcdSyncConfigurationTest.java
class EtcdSyncConfigurationTest (line 26) | public class EtcdSyncConfigurationTest {
method testEtcdDataChangedListener (line 28) | @Test
method testEtcdDataInit (line 35) | @Test
FILE: shenyu-admin-listener/shenyu-admin-listener-etcd/src/test/java/org/apache/shenyu/admin/listener/etcd/EtcdDataChangedInitTest.java
class EtcdDataChangedInitTest (line 35) | @ExtendWith(MockitoExtension.class)
method testNotExist (line 41) | @Test
FILE: shenyu-admin-listener/shenyu-admin-listener-etcd/src/test/java/org/apache/shenyu/admin/listener/etcd/EtcdDataDataChangedListenerTest.java
class EtcdDataDataChangedListenerTest (line 41) | @ExtendWith(MockitoExtension.class)
method testOnAppAuthChanged (line 71) | @Test
method testOnMetaDataChanged (line 84) | @Test
method testOnPluginChanged (line 97) | @Test
method testOnSelectorChanged (line 110) | @Test
method testOnRuleChanged (line 125) | @Test
FILE: shenyu-admin-listener/shenyu-admin-listener-nacos/src/main/java/org/apache/shenyu/admin/config/NacosSyncConfiguration.java
class NacosSyncConfiguration (line 42) | @Configuration
method nacosConfigService (line 54) | @Bean
method nacosDataChangedListener (line 89) | @Bean
method nacosDataChangedInit (line 101) | @Bean
FILE: shenyu-admin-listener/shenyu-admin-listener-nacos/src/main/java/org/apache/shenyu/admin/listener/nacos/NacosDataChangedInit.java
class NacosDataChangedInit (line 37) | public class NacosDataChangedInit extends AbstractDataChangedInit {
method NacosDataChangedInit (line 48) | public NacosDataChangedInit(final ConfigService configService) {
method notExist (line 52) | @Override
method dataIdNotExist (line 59) | private boolean dataIdNotExist(final String pluginDataId) {
FILE: shenyu-admin-listener/shenyu-admin-listener-nacos/src/main/java/org/apache/shenyu/admin/listener/nacos/NacosDataChangedListener.java
class NacosDataChangedListener (line 33) | public class NacosDataChangedListener extends AbstractNodeDataChangedLis...
method NacosDataChangedListener (line 39) | public NacosDataChangedListener(final ConfigService configService) {
method doPublishConfig (line 46) | @Override
method doDelConfig (line 60) | @Override
method getConfig (line 72) | @Override
FILE: shenyu-admin-listener/shenyu-admin-listener-nacos/src/test/java/org/apache/shenyu/admin/config/NacosSyncConfigurationTest.java
class NacosSyncConfigurationTest (line 36) | public class NacosSyncConfigurationTest {
method testNacosDataChangedListener (line 37) | @Test
method testNacosDataInit (line 44) | @Test
method nacosConfigServiceTest (line 51) | @Test
FILE: shenyu-admin-listener/shenyu-admin-listener-nacos/src/test/java/org/apache/shenyu/admin/listener/nacos/NacosDataChangedInitTest.java
class NacosDataChangedInitTest (line 39) | @ExtendWith(MockitoExtension.class)
method testNotExist (line 45) | @Test
method join (line 69) | private String join(final String text) {
FILE: shenyu-admin-listener/shenyu-admin-listener-nacos/src/test/java/org/apache/shenyu/admin/listener/nacos/NacosDataChangedListenerTest.java
class NacosDataChangedListenerTest (line 45) | @ExtendWith(MockitoExtension.class)
method testOnAppAuthChanged (line 72) | @Test
method testOnPluginChanged (line 83) | @Test
method testOnSelectorChanged (line 94) | @Test
method testOnMetaDataChanged (line 105) | @Test
method testOnRuleChanged (line 116) | @Test
FILE: shenyu-admin-listener/shenyu-admin-listener-polaris/src/main/java/org/apache/shenyu/admin/config/PolarisSyncConfiguration.java
class PolarisSyncConfiguration (line 41) | @Configuration
method polarisConfigFileService (line 52) | @Bean
method polarisConfigFilePublishService (line 66) | @Bean
method polarisDataChangedListener (line 82) | @Bean
method polarisDataChangedInit (line 96) | @Bean
FILE: shenyu-admin-listener/shenyu-admin-listener-polaris/src/main/java/org/apache/shenyu/admin/config/properties/PolarisProperties.java
class PolarisProperties (line 27) | @ConfigurationProperties(prefix = "shenyu.sync.polaris")
method getUrl (line 41) | public String getUrl() {
method setUrl (line 50) | public void setUrl(final String url) {
method getNamespace (line 59) | public String getNamespace() {
method setNamespace (line 68) | public void setNamespace(final String namespace) {
method getFileGroup (line 77) | public String getFileGroup() {
method setFileGroup (line 86) | public void setFileGroup(final String fileGroup) {
FILE: shenyu-admin-listener/shenyu-admin-listener-polaris/src/main/java/org/apache/shenyu/admin/listener/polaris/PolarisDataChangedInit.java
class PolarisDataChangedInit (line 34) | public class PolarisDataChangedInit extends AbstractDataChangedInit {
method PolarisDataChangedInit (line 48) | public PolarisDataChangedInit(final PolarisProperties polarisPropertie...
method notExist (line 53) | @Override
method dataIdNotExist (line 60) | private boolean dataIdNotExist(final String pluginDataId) {
FILE: shenyu-admin-listener/shenyu-admin-listener-polaris/src/main/java/org/apache/shenyu/admin/listener/polaris/PolarisDataChangedListener.java
class PolarisDataChangedListener (line 39) | public class PolarisDataChangedListener extends AbstractNodeDataChangedL...
method PolarisDataChangedListener (line 49) | public PolarisDataChangedListener(final PolarisProperties polarisPrope...
method doPublishConfig (line 58) | @Override
method doDelConfig (line 76) | @Override
method getConfig (line 81) | @Override
method isReleased (line 92) | private boolean isReleased(final DefaultConfigFileMetadata metadata) {
FILE: shenyu-admin-listener/shenyu-admin-listener-polaris/src/test/java/org/apache/shenyu/admin/config/PolarisSyncConfigurationTest.java
class PolarisSyncConfigurationTest (line 28) | public class PolarisSyncConfigurationTest {
method testPolarisDataChangedListener (line 30) | @Test
method testPolarisDataInit (line 39) | @Test
method polarisConfigServiceTest (line 47) | @Test
FILE: shenyu-admin-listener/shenyu-admin-listener-polaris/src/test/java/org/apache/shenyu/admin/config/properties/PolarisPropertiesTest.java
class PolarisPropertiesTest (line 26) | public class PolarisPropertiesTest {
method polarisPropertiesTest (line 28) | @Test
FILE: shenyu-admin-listener/shenyu-admin-listener-polaris/src/test/java/org/apache/shenyu/admin/listener/polaris/PolarisDataChangedInitTest.java
class PolarisDataChangedInitTest (line 41) | @ExtendWith(MockitoExtension.class)
method testNotExist (line 53) | @Test
method testExist (line 66) | @Test
FILE: shenyu-admin-listener/shenyu-admin-listener-polaris/src/test/java/org/apache/shenyu/admin/listener/polaris/PolarisDataChangedListenerTest.java
class PolarisDataChangedListenerTest (line 48) | @ExtendWith(MockitoExtension.class)
method testOnAppAuthChanged (line 84) | @Test
method testOnPluginChanged (line 101) | @Test
method testOnSelectorChanged (line 118) | @Test
method testOnMetaDataChanged (line 135) | @Test
method testOnRuleChanged (line 152) | @Test
FILE: shenyu-admin-listener/shenyu-admin-listener-zookeeper/src/main/java/org/apache/shenyu/admin/config/ZookeeperSyncConfiguration.java
class ZookeeperSyncConfiguration (line 41) | @Configuration
method zookeeperClient (line 53) | @Bean
method zookeeperDataChangedListener (line 74) | @Bean
method zookeeperDataChangedInit (line 86) | @Bean
FILE: shenyu-admin-listener/shenyu-admin-listener-zookeeper/src/main/java/org/apache/shenyu/admin/listener/zookeeper/ZookeeperDataChangedInit.java
class ZookeeperDataChangedInit (line 31) | public class ZookeeperDataChangedInit extends AbstractDataChangedInit {
method ZookeeperDataChangedInit (line 40) | public ZookeeperDataChangedInit(final ZookeeperClient zkClient) {
method notExist (line 44) | @Override
FILE: shenyu-admin-listener/shenyu-admin-listener-zookeeper/src/main/java/org/apache/shenyu/admin/listener/zookeeper/ZookeeperDataChangedListener.java
class ZookeeperDataChangedListener (line 27) | public class ZookeeperDataChangedListener extends AbstractPathDataChange...
method ZookeeperDataChangedListener (line 31) | public ZookeeperDataChangedListener(final ZookeeperClient zkClient) {
method createOrUpdate (line 35) | @Override
method deleteNode (line 40) | @Override
method deletePathRecursive (line 47) | @Override
FILE: shenyu-admin-listener/shenyu-admin-listener-zookeeper/src/test/java/org/apache/shenyu/admin/config/ZookeeperSyncConfigurationTest.java
class ZookeeperSyncConfigurationTest (line 30) | public class ZookeeperSyncConfigurationTest {
method setUpBeforeClass (line 36) | @BeforeAll
method tearDown (line 50) | @AfterAll
method testZookeeperDataChangedListener (line 56) | @Test
method testZookeeperDataInit (line 62) | @Test
method after (line 68) | @AfterEach
FILE: shenyu-admin-listener/shenyu-admin-listener-zookeeper/src/test/java/org/apache/shenyu/admin/listener/zookeeper/ZookeeperDataChangedInitTest.java
class ZookeeperDataChangedInitTest (line 34) | @ExtendWith(MockitoExtension.class)
method testNotExist (line 40) | @Test
FILE: shenyu-admin-listener/shenyu-admin-listener-zookeeper/src/test/java/org/apache/shenyu/admin/listener/zookeeper/ZookeeperDataChangedListenerTest.java
class ZookeeperDataChangedListenerTest (line 48) | @ExtendWith(MockitoExtension.class)
method testOnAppAuthChangedCreate (line 78) | @Test
method testOnAppAuthChangedUpdate (line 90) | @Test
method testOnAppAuthChangedDelete (line 102) | @Test
method testOnMetaDataChangedCreate (line 115) | @Test
method testOnMetaDataChangedUpdate (line 127) | @Test
method testOnMetaDataChangedDelete (line 139) | @Test
method testOnPluginChangedCreate (line 152) | @Test
method testOnPluginChangedUpdate (line 164) | @Test
method testOnPluginChangedDelete (line 176) | @Test
method testOnSelectorChangedCreate (line 196) | @Test
method testOnSelectorChangedUpdate (line 209) | @Test
method testOnSelectorChangedRefresh (line 222) | @Test
method testOnSelectorChangedDelete (line 235) | @Test
method testOnRuleChangedCreate (line 248) | @Test
method testOnRuleChangedUpdate (line 266) | @Test
method testOnRuleChangedRefresh (line 285) | @Test
method testOnRuleChangedDelete (line 304) | @Test
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/ShenyuAdminBootstrap.java
class ShenyuAdminBootstrap (line 27) | @SpringBootApplication(exclude = {LdapAutoConfiguration.class})
method main (line 35) | public static void main(final String[] args) {
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/aspect/DataPermissionAspect.java
class DataPermissionAspect (line 43) | @Aspect
method DataPermissionAspect (line 49) | public DataPermissionAspect(final DataPermissionService dataPermission...
method dataPermissionCut (line 56) | @Pointcut("@annotation(org.apache.shenyu.admin.aspect.annotation.DataP...
method around (line 66) | @Around("dataPermissionCut()")
method getFilterSQLData (line 83) | private Object[] getFilterSQLData(final ProceedingJoinPoint point) {
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/aspect/PageableAspect.java
class PageableAspect (line 37) | @Aspect
method pageableCut (line 44) | @Pointcut("@annotation(org.apache.shenyu.admin.aspect.annotation.Pagea...
method mapperAround (line 54) | @Around("pageableCut()")
method convert (line 84) | public PageParameter convert(final Page<?> pageInfo, final PageParamet...
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/aspect/controller/ControllerMethodAdvice.java
type ControllerMethodAdvice (line 28) | public interface ControllerMethodAdvice {
method doPreProcess (line 39) | default void doPreProcess(Object bean, Method method, Stopwatch stopwa...
method doThrowable (line 51) | default void doThrowable(Object bean, Method method, Stopwatch stopwat...
method doFinally (line 62) | default void doFinally(Object bean, Method method, Stopwatch stopwatch) {
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/aspect/controller/PrintLogControllerMethodAdviceImpl.java
class PrintLogControllerMethodAdviceImpl (line 34) | @Component
method PrintLogControllerMethodAdviceImpl (line 41) | public PrintLogControllerMethodAdviceImpl(final DashboardProperties pr...
method doPreProcess (line 45) | @Override
method doFinally (line 52) | @Override
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/aspect/controller/RestControllerAspect.java
class RestControllerAspect (line 37) | @Aspect
method RestControllerAspect (line 43) | public RestControllerAspect(final List<ControllerMethodAdvice> methodA...
method controller (line 50) | @Pointcut("@within(org.springframework.web.bind.annotation.RestControl...
method logAround (line 62) | @Around("controller()")
method doExec (line 85) | void doExec(final Call call) {
type Call (line 91) | interface Call {
method call (line 98) | void call(ControllerMethodAdvice advice);
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/aspect/controller/SuperAdminPasswordSafeAdvice.java
class SuperAdminPasswordSafeAdvice (line 39) | @Component
method SuperAdminPasswordSafeAdvice (line 46) | public SuperAdminPasswordSafeAdvice(final DashboardProperties properties,
method doPreProcess (line 52) | @Override
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/config/ClusterConfiguration.java
class ClusterConfiguration (line 41) | @Configuration(proxyBeanMethods = false)
method shenyuRunningModeService (line 57) | @Bean(destroyMethod = "shutdown")
method clusterForwardFilter (line 77) | @Bean
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/config/ClusterJdbcConfiguration.java
class ClusterJdbcConfiguration (line 44) | @Configuration(proxyBeanMethods = false)
method defaultLockRepository (line 64) | @Bean
method jdbcLockRegistry (line 86) | @Bean
method clusterSelectMasterJdbcService (line 99) | @Bean
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/config/ClusterZookeeperConfiguration.java
class ClusterZookeeperConfiguration (line 35) | @Configuration(proxyBeanMethods = false)
method zookeeperLockRegistry (line 48) | @Bean
method clusterSelectMasterZookeeperService (line 61) | @Bean
method clusterZookeeperClient (line 74) | @Bean
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/config/DataBaseConfiguration.java
class DataBaseConfiguration (line 33) | @Configuration
method dataBaseProperties (line 44) | @Bean
method databaseIdProvider (line 61) | @Bean
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/config/DiscoveryConfiguration.java
class DiscoveryConfiguration (line 33) | @Configuration
method discoveryDefaultProcessor (line 42) | @Bean("DefaultDiscoveryProcessor")
method discoveryLocalProcessor (line 53) | @Bean("LocalDiscoveryProcessor")
method discoveryAPProcessor (line 64) | @Bean("APDiscoveryProcessor")
method discoveryProcessorHolder (line 77) | @Bean
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/config/HttpLongPollingSyncConfiguration.java
class HttpLongPollingSyncConfiguration (line 33) | @Configuration
method httpLongPollingDataChangedListener (line 46) | @Bean
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/config/HttpUtilsConfiguration.java
class HttpUtilsConfiguration (line 28) | @Configuration
method httpUtils (line 36) | @Bean
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/config/KubernetesConfiguration.java
class KubernetesConfiguration (line 37) | @Configuration
method apiClient (line 48) | @Bean
method kubernetesScaler (line 75) | @Bean
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/config/LdapConfiguration.java
class LdapConfiguration (line 36) | @Configuration
method contextSource (line 47) | @Bean
method ldapTemplate (line 69) | @Bean
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/config/MapperConfig.java
class MapperConfig (line 40) | @Configuration
class PostgreSQLConfig (line 46) | @Configuration
method postgreSqlQueryInterceptor (line 55) | @Bean
method postgreSqlPrepareInterceptor (line 66) | @Bean
method postgreSqlUpdateInterceptor (line 77) | @Bean
class OracleSQLConfig (line 87) | @Configuration
method oracleSqlPrepareInterceptor (line 96) | @Bean
method oracleSqlUpdateInterceptor (line 107) | @Bean
class OpenGaussSQLConfig (line 114) | @Configuration
method openGaussSqlQueryInterceptor (line 123) | @Bean
method openGaussSqlPrepareInterceptor (line 134) | @Bean
method openGaussSqlUpdateInterceptor (line 145) | @Bean
class OceanBaseSQLConfig (line 152) | @Configuration
method afterPropertiesSet (line 159) | @Override
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/config/RegisterCenterConfiguration.java
class RegisterCenterConfiguration (line 41) | @Configuration
method shenyuRegisterCenterConfig (line 49) | @Bean
method registerClientServerDisruptorPublisher (line 62) | @Bean
method registerExecutionRepository (line 77) | @Bean
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/config/ShenyuAdminConfiguration.java
class ShenyuAdminConfiguration (line 40) | @Configuration
method selectorHandleConverterFactor (line 50) | @Bean
method localeResolver (line 61) | @Bean
method instanceInfoReportEventPublisher (line 68) | @Bean
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/config/StandaloneConfiguration.java
class StandaloneConfiguration (line 35) | @Configuration(proxyBeanMethods = false)
method shenyuRunningModeService (line 48) | @Bean(destroyMethod = "shutdown")
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/config/SwaggerConfiguration.java
class SwaggerConfiguration (line 35) | @Configuration
method SwaggerConfiguration (line 52) | public SwaggerConfiguration() {
method apiInfo (line 61) | @Bean
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/config/WebConfiguration.java
class WebConfiguration (line 27) | @Configuration
method addCorsMappings (line 30) | @Override
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/config/WebSocketSyncConfiguration.java
class WebSocketSyncConfiguration (line 34) | @Configuration
method websocketDataChangedListener (line 44) | @Bean
method websocketCollector (line 55) | @Bean
method serverEndpointExporter (line 66) | @Bean
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/config/properties/ClusterProperties.java
class ClusterProperties (line 28) | @ConfigurationProperties(prefix = "shenyu.cluster")
method isEnabled (line 81) | public boolean isEnabled() {
method setEnabled (line 90) | public void setEnabled(final boolean enabled) {
method getType (line 99) | public String getType() {
method setType (line 108) | public void setType(final String type) {
method getSchema (line 117) | public String getSchema() {
method setSchema (line 126) | public void setSchema(final String schema) {
method getConnectionTimeout (line 135) | public int getConnectionTimeout() {
method setConnectionTimeout (line 144) | public void setConnectionTimeout(final int connectionTimeout) {
method getReadTimeout (line 153) | public int getReadTimeout() {
method setReadTimeout (line 162) | public void setReadTimeout(final int readTimeout) {
method getForwardList (line 171) | public List<String> getForwardList() {
method setForwardList (line 180) | public void setForwardList(final List<String> forwardList) {
method getIgnoredList (line 189) | public List<String> getIgnoredList() {
method setIgnoredList (line 198) | public void setIgnoredList(final List<String> ignoredList) {
method getSelectPeriod (line 207) | public Long getSelectPeriod() {
method setSelectPeriod (line 216) | public void setSelectPeriod(final Long selectPeriod) {
method getLockTtl (line 225) | public Long getLockTtl() {
method setLockTtl (line 234) | public void setLockTtl(final Long lockTtl) {
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/config/properties/ClusterZookeeperProperties.java
class ClusterZookeeperProperties (line 28) | @ConfigurationProperties(prefix = "shenyu.cluster.zookeeper")
method getUrl (line 44) | public String getUrl() {
method setUrl (line 53) | public void setUrl(final String url) {
method getSessionTimeout (line 62) | public Integer getSessionTimeout() {
method setSessionTimeout (line 71) | public void setSessionTimeout(final Integer sessionTimeout) {
method getConnectionTimeout (line 80) | public Integer getConnectionTimeout() {
method setConnectionTimeout (line 89) | public void setConnectionTimeout(final Integer connectionTimeout) {
method getSerializer (line 98) | public String getSerializer() {
method setSerializer (line 107) | public void setSerializer(final String serializer) {
method toString (line 111) | @Override
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/config/properties/DashboardProperties.java
class DashboardProperties (line 32) | @Configuration
method getRecordLogLimit (line 88) | public Integer getRecordLogLimit() {
method setRecordLogLimit (line 97) | public void setRecordLogLimit(final Integer recordLogLimit) {
method getOnlyCleanDays (line 106) | public Integer getOnlyCleanDays() {
method setOnlyCleanDays (line 115) | public void setOnlyCleanDays(final Integer onlyCleanDays) {
method getEnablePrintApiLog (line 124) | public Boolean getEnablePrintApiLog() {
method setEnablePrintApiLog (line 133) | public void setEnablePrintApiLog(final Boolean enablePrintApiLog) {
method getEnableOnlySuperAdminPermission (line 142) | public Boolean getEnableOnlySuperAdminPermission() {
method setEnableOnlySuperAdminPermission (line 151) | public void setEnableOnlySuperAdminPermission(final Boolean enableOnly...
method getOnlySuperAdminPermission (line 160) | public List<String> getOnlySuperAdminPermission() {
method setOnlySuperAdminPermission (line 169) | public void setOnlySuperAdminPermission(final List<String> onlySuperAd...
method getEnableSuperAdminPasswordSafe (line 178) | public Boolean getEnableSuperAdminPasswordSafe() {
method setEnableSuperAdminPasswordSafe (line 187) | public void setEnableSuperAdminPasswordSafe(final Boolean enableSuperA...
method getSuperAdminPasswordValidDuration (line 196) | public Long getSuperAdminPasswordValidDuration() {
method setSuperAdminPasswordValidDuration (line 205) | public void setSuperAdminPasswordValidDuration(final Long superAdminPa...
method afterPropertiesSet (line 209) | @Override
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/config/properties/DataBaseProperties.java
class DataBaseProperties (line 26) | @Component
method getDialect (line 41) | public String getDialect() {
method setDialect (line 50) | public void setDialect(final String dialect) {
method getInitScript (line 59) | public String getInitScript() {
method setInitScript (line 68) | public void setInitScript(final String initScript) {
method getInitEnable (line 77) | public Boolean getInitEnable() {
method setInitEnable (line 86) | public void setInitEnable(final Boolean initEnable) {
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/config/properties/DeploymentProperties.java
class DeploymentProperties (line 22) | @ConfigurationProperties(prefix = "shenyu.k8s.deployment")
method getName (line 40) | public String getName() {
method setName (line 49) | public void setName(final String name) {
method getNamespace (line 58) | public String getNamespace() {
method setNamespace (line 67) | public void setNamespace(final String namespace) {
method getApiServer (line 76) | public String getApiServer() {
method setApiServer (line 85) | public void setApiServer(final String apiServer) {
method getToken (line 94) | public String getToken() {
method setToken (line 103) | public void setToken(final String token) {
method getCaCertPath (line 112) | public String getCaCertPath() {
method setCaCertPath (line 121) | public void setCaCertPath(final String caCertPath) {
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/config/properties/HttpSyncProperties.java
class HttpSyncProperties (line 27) | @ConfigurationProperties(prefix = "shenyu.sync.http")
method isEnabled (line 50) | public boolean isEnabled() {
method setEnabled (line 59) | public void setEnabled(final boolean enabled) {
method getRefreshInterval (line 68) | public Duration getRefreshInterval() {
method setRefreshInterval (line 77) | public void setRefreshInterval(final Duration refreshInterval) {
method getNotifyBatchSize (line 86) | public int getNotifyBatchSize() {
method setNotifyBatchSize (line 95) | public void setNotifyBatchSize(final int notifyBatchSize) {
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/config/properties/JwtProperties.java
class JwtProperties (line 27) | @Component
method getExpiredSeconds (line 38) | public Long getExpiredSeconds() {
method setExpiredSeconds (line 47) | public void setExpiredSeconds(final Long expiredSeconds) {
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/config/properties/LdapProperties.java
class LdapProperties (line 25) | @ConfigurationProperties(prefix = "shenyu.ldap")
method isEnabled (line 54) | public boolean isEnabled() {
method setEnabled (line 63) | public void setEnabled(final boolean enabled) {
method getUrl (line 72) | public String getUrl() {
method setUrl (line 81) | public void setUrl(final String url) {
method getBindDn (line 90) | public String getBindDn() {
method setBindDn (line 99) | public void setBindDn(final String bindDn) {
method getPassword (line 108) | public String getPassword() {
method setPassword (line 117) | public void setPassword(final String password) {
method getBaseDn (line 126) | public String getBaseDn() {
method setBaseDn (line 135) | public void setBaseDn(final String baseDn) {
method getObjectClass (line 144) | public String getObjectClass() {
method setObjectClass (line 153) | public void setObjectClass(final String objectClass) {
method getLoginField (line 162) | public String getLoginField() {
method setLoginField (line 171) | public void setLoginField(final String loginField) {
method getConnectTimeout (line 180) | public Integer getConnectTimeout() {
method setConnectTimeout (line 189) | public void setConnectTimeout(final Integer connectTimeout) {
method getReadTimeout (line 198) | public Integer getReadTimeout() {
method setReadTimeout (line 207) | public void setReadTimeout(final Integer readTimeout) {
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/config/properties/SecretProperties.java
class SecretProperties (line 27) | @Component
method getKey (line 40) | public String getKey() {
method setKey (line 49) | public void setKey(final String key) {
method getIv (line 58) | public String getIv() {
method setIv (line 67) | public void setIv(final String iv) {
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/config/properties/ShiroProperties.java
class ShiroProperties (line 28) | @Component("shiroProperties")
method getWhiteList (line 42) | public List<String> getWhiteList() {
method setWhiteList (line 51) | public void setWhiteList(final List<String> whiteList) {
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/config/properties/WebsocketSyncProperties.java
class WebsocketSyncProperties (line 25) | @ConfigurationProperties(prefix = "shenyu.sync.websocket")
method isEnabled (line 48) | public boolean isEnabled() {
method setEnabled (line 57) | public void setEnabled(final boolean enabled) {
method getMessageMaxSize (line 66) | public int getMessageMaxSize() {
method setMessageMaxSize (line 75) | public void setMessageMaxSize(final int messageMaxSize) {
method getAllowOrigins (line 83) | public String getAllowOrigins() {
method setAllowOrigins (line 91) | public void setAllowOrigins(final String allowOrigins) {
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/AiProxyApiKeyController.java
class AiProxyApiKeyController (line 53) | @RestApi("/selector/{selectorId}/ai-proxy-apikey")
method AiProxyApiKeyController (line 60) | public AiProxyApiKeyController(final AiProxyApiKeyService aiProxyApiKe...
method create (line 73) | @PostMapping
method list (line 100) | @GetMapping
method update (line 131) | @PutMapping("/{id}")
method batchDelete (line 157) | @PostMapping("/batchDelete")
method batchEnabled (line 187) | @PostMapping("/batchEnabled")
method pageService (line 211) | @Override
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/AlertReceiverController.java
class AlertReceiverController (line 49) | @RestApi("/alert/receiver")
method addReceiver (line 61) | @PostMapping
method editReceiver (line 73) | @PutMapping
method deleteReceiver (line 85) | @DeleteMapping("/batch")
method getReceiverDetail (line 97) | @GetMapping("/{id}")
method getReceivers (line 110) | @GetMapping
method sendTestMsg (line 125) | @PostMapping(path = "/test")
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/AlertReportController.java
class AlertReportController (line 34) | @RestApi("/alert/report")
method reportAlert (line 46) | @PostMapping
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ApiController.java
class ApiController (line 49) | @RestApi("/api")
method ApiController (line 54) | public ApiController(final ApiService apiService) {
method queryApis (line 68) | @GetMapping
method detailApi (line 83) | @GetMapping("/{id}")
method createApi (line 97) | @PostMapping
method updateApi (line 110) | @PutMapping("/{id}")
method deleteApis (line 126) | @DeleteMapping("/batch")
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ApiDocController.java
class ApiDocController (line 42) | @RestApi("/apidoc")
method ApiDocController (line 49) | public ApiDocController(final DocManager docManager,
method getAllDoc (line 60) | @GetMapping("/getDocMenus")
method getMenuAndDocInfo (line 86) | private Function<DocInfo, MenuProjectVO> getMenuAndDocInfo() {
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/AppAuthController.java
class AppAuthController (line 54) | @RestApi("/appAuth")
method AppAuthController (line 59) | public AppAuthController(final AppAuthService appAuthService) {
method apply (line 69) | @PostMapping("/apply")
method updateSk (line 85) | @GetMapping("/updateSk")
method findPageByQuery (line 103) | @GetMapping("/findPageByQuery")
method detail (line 125) | @GetMapping("/detail")
method updateDetail (line 139) | @PostMapping("/updateDetail")
method detailPath (line 151) | @GetMapping("/detailPath")
method updateDetailPath (line 167) | @PostMapping("/updateDetailPath")
method batchDelete (line 179) | @PostMapping("/batchDelete")
method batchEnabled (line 192) | @PostMapping("/batchEnabled")
method batchOpended (line 208) | @PostMapping("/batchOpened")
method syncData (line 223) | @PostMapping("/syncData")
method pageService (line 229) | @Override
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ConfigController.java
class ConfigController (line 47) | @RestController
method ConfigController (line 57) | public ConfigController(final HttpLongPollingDataChangedListener httpL...
method fetchConfigs (line 70) | @GetMapping("/fetch")
method listener (line 93) | @PostMapping(value = "/listener")
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ConfigsExportImportController.java
class ConfigsExportImportController (line 49) | @RestApi("/configs")
method ConfigsExportImportController (line 61) | public ConfigsExportImportController(final ConfigsService configsService,
method exportConfigs (line 73) | @GetMapping("/export")
method exportConfigsByNamespace (line 94) | @GetMapping("/exportByNamespace")
method generateFileName (line 113) | private String generateFileName() {
method generateFileName (line 118) | private String generateFileName(final String namespace) {
method importConfigs (line 131) | @PostMapping("/import")
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/DashboardUserController.java
class DashboardUserController (line 64) | @RestApi("/dashboardUser")
method DashboardUserController (line 69) | public DashboardUserController(final DashboardUserService dashboardUse...
method queryDashboardUsers (line 81) | @GetMapping
method detailDashboardUser (line 102) | @GetMapping("/{id}")
method createDashboardUser (line 117) | @PostMapping
method updateDashboardUser (line 136) | @PutMapping("/{id}")
method modifyPassword (line 157) | @PutMapping("/modify-password/{id}")
method checkUserPassword (line 180) | @GetMapping("check/password")
method deleteDashboardUser (line 195) | @DeleteMapping("/batch")
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/DataPermissionController.java
class DataPermissionController (line 44) | @RestApi("/data-permission")
method DataPermissionController (line 49) | public DataPermissionController(final DataPermissionService dataPermis...
method listPageSelectorDataPermissions (line 64) | @GetMapping("/selector")
method listPageRuleDataPermissions (line 88) | @GetMapping("/rules")
method saveSelector (line 106) | @PostMapping("/selector")
method deleteSelector (line 117) | @DeleteMapping("/selector")
method saveRule (line 128) | @PostMapping("/rule")
method deleteRule (line 139) | @DeleteMapping("/rule")
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/DetailController.java
class DetailController (line 39) | @RestApi("/detail")
method DetailController (line 43) | public DetailController(final DetailService detailService) {
method createOrUpdate (line 53) | @PostMapping("/insertOrUpdate")
method batchDelete (line 64) | @DeleteMapping("/batchDelete")
method listByPage (line 79) | @GetMapping("/findPageByQuery")
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/DiscoveryController.java
class DiscoveryController (line 36) | @RestApi("/discovery")
method DiscoveryController (line 41) | public DiscoveryController(final DiscoveryService discoveryService) {
method typeEnums (line 50) | @GetMapping("/typeEnums")
method discovery (line 63) | @GetMapping
method createOrUpdate (line 74) | @PostMapping("/insertOrUpdate")
method delete (line 85) | @DeleteMapping("/{discoveryId}")
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/DiscoveryUpstreamController.java
class DiscoveryUpstreamController (line 38) | @RestApi("/discovery-upstream")
method DiscoveryUpstreamController (line 43) | public DiscoveryUpstreamController(final DiscoveryUpstreamService disc...
method createDiscoveryUpstream (line 54) | @PostMapping
method createDiscoveryUpstreamList (line 66) | @PostMapping("batch")
method updateDiscoveryUpstream (line 83) | @PutMapping("/{discoveryHandlerId}")
method deleteDiscoveryUpstream (line 97) | @DeleteMapping("/batch")
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/FieldController.java
class FieldController (line 39) | @RestApi("/field")
method FieldController (line 43) | public FieldController(final FieldService fieldService) {
method createOrUpdate (line 53) | @PostMapping("/insertOrUpdate")
method batchDelete (line 64) | @DeleteMapping("/batchDelete")
method listByPage (line 79) | @GetMapping("/findPageByQuery")
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/IndexController.java
class IndexController (line 31) | @Controller
method index (line 41) | @RequestMapping(value = {"/index", "/"})
method buildBaseUrl (line 59) | private String buildBaseUrl(final HttpServletRequest request) {
method getScheme (line 80) | private String getScheme(final HttpServletRequest request) {
method getHost (line 99) | private String getHost(final HttpServletRequest request) {
method validateForwardedHost (line 131) | private String validateForwardedHost(final String forwardedHost) {
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/InstanceController.java
class InstanceController (line 45) | @RestApi("/instance")
method InstanceController (line 52) | public InstanceController(final InstanceInfoService instanceInfoServic...
method queryPlugins (line 68) | @GetMapping
method detailInstanceInfo (line 102) | @GetMapping("/{id}")
method beat (line 115) | @PostMapping("/beat")
method getInstanceDataVisual (line 127) | @GetMapping("/analysis/{namespaceId}")
method pageService (line 133) | @Override
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/MetaDataController.java
class MetaDataController (line 48) | @RestApi("/meta-data")
method MetaDataController (line 53) | public MetaDataController(final MetaDataService metaDataService) {
method queryList (line 66) | @GetMapping("/queryList")
method findAll (line 82) | @GetMapping("/findAll")
method findAllGroup (line 93) | @GetMapping("/findAllGroup")
method detail (line 105) | @GetMapping("/{id}")
method createOrUpdate (line 117) | @PostMapping("/createOrUpdate")
method batchDeleted (line 129) | @DeleteMapping("/batchDeleted")
method batchEnabled (line 142) | @PostMapping("/batchEnabled")
method syncData (line 157) | @PostMapping("/syncData")
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/MockRequestRecordController.java
class MockRequestRecordController (line 45) | @RestApi("/mock")
method MockRequestRecordController (line 50) | public MockRequestRecordController(final MockRequestRecordService mock...
method createOrUpdate (line 60) | @PostMapping("/insertOrUpdate")
method batchDelete (line 70) | @DeleteMapping("/batchDelete")
method delete (line 81) | @DeleteMapping("/{id}")
method listByPage (line 98) | @GetMapping("/findPageByQuery")
method get (line 113) | @GetMapping("/{apiId}")
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/NamespaceController.java
class NamespaceController (line 44) | @RestApi("/namespace")
method NamespaceController (line 49) | public NamespaceController(final NamespaceService namespaceService) {
method findPageByQuery (line 62) | @GetMapping("/findPageByQuery")
method list (line 81) | @GetMapping("/list")
method createOrUpdate (line 94) | @PostMapping("/insertOrUpdate")
method delete (line 105) | @DeleteMapping("/batch")
method detailPlugin (line 116) | @GetMapping("/{id}")
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/NamespacePluginController.java
class NamespacePluginController (line 58) | @RestApi("/namespace-plugin")
method NamespacePluginController (line 65) | public NamespacePluginController(final NamespacePluginService namespac...
method queryPlugins (line 80) | @GetMapping
method queryAllNamespacePlugins (line 98) | @GetMapping("/all/{namespaceId}")
method detailNamespacePlugin (line 111) | @GetMapping("/{id}")
method updatePlugin (line 126) | @PutMapping("/{id}")
method generateNamespacePlugin (line 142) | @PostMapping("/{namespaceId}/{pluginId}")
method deleteNamespacePlugin (line 159) | @DeleteMapping("/batch")
method enabled (line 175) | @PostMapping("/enabled")
method enabledByNamespace (line 191) | @PostMapping("/enabledByNamespace")
method syncPluginAll (line 207) | @PostMapping("/syncPluginAll")
method syncPluginData (line 224) | @PutMapping("/syncPluginData")
method activePluginSnapshot (line 235) | @GetMapping("/snapshot/active")
method queryPluginsByNamespace (line 246) | @GetMapping("/listByNamespace")
method pageService (line 252) | @Override
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/OperationRecordLogController.java
class OperationRecordLogController (line 40) | @RestApi("/operation-record/log")
method OperationRecordLogController (line 45) | public OperationRecordLogController(final OperationRecordLogService re...
method list (line 54) | @GetMapping("/list")
method clean (line 65) | @DeleteMapping("/clean/{timePoint}")
method pageService (line 71) | @Override
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/PagedController.java
type PagedController (line 35) | public interface PagedController<V, T> {
method search (line 43) | @PostMapping("list/search")
method searchAdaptor (line 54) | @PostMapping("list/search/adaptor")
method pageService (line 65) | PageService<V, T> pageService();
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/PermissionController.java
class PermissionController (line 33) | @RestApi("/permission")
method PermissionController (line 38) | public PermissionController(final PermissionService permissionService) {
method getUserPermissionByToken (line 49) | @GetMapping("/getUserPermissionByToken")
method getUserPermissionByNamespace (line 64) | @GetMapping("/getUserPermissionByNamespace")
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/PlatformController.java
class PlatformController (line 35) | @RestApi("/platform")
method PlatformController (line 44) | public PlatformController(final DashboardUserService dashboardUserServ...
method loginDashboardUser (line 58) | @GetMapping("/login")
method queryEnums (line 75) | @GetMapping("/enum")
method info (line 84) | @GetMapping("/secretInfo")
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/PluginController.java
class PluginController (line 54) | @RestApi("/plugin-template")
method PluginController (line 59) | public PluginController(final PluginService pluginService) {
method queryPlugins (line 73) | @GetMapping
method queryAllPlugins (line 86) | @GetMapping("/all")
method detailPlugin (line 98) | @GetMapping("/{id}")
method createPlugin (line 113) | @PostMapping
method updatePlugin (line 127) | @PutMapping("/{id}")
method createPluginResource (line 144) | @PutMapping("/createPluginResource/{id}")
method deletePlugins (line 160) | @DeleteMapping("/batch")
method enabled (line 176) | @PostMapping("/enabled")
method activePluginSnapshot (line 191) | @GetMapping("/snapshot/active")
method pageService (line 196) | @Override
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/PluginHandleController.java
class PluginHandleController (line 49) | @RestApi("/plugin-handle")
method PluginHandleController (line 54) | public PluginHandleController(final PluginHandleService pluginHandleSe...
method queryPluginHandles (line 67) | @GetMapping
method queryAllPluginHandlesByPluginId (line 83) | @GetMapping("/all/{pluginId}/{type}")
method detailRule (line 94) | @GetMapping("/{id}")
method createPluginHandle (line 109) | @PostMapping
method updatePluginHandle (line 123) | @PutMapping("/{id}")
method deletePluginHandles (line 139) | @DeleteMapping("/batch")
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ProxySelectorController.java
class ProxySelectorController (line 44) | @RestApi("/proxy-selector")
method ProxySelectorController (line 49) | public ProxySelectorController(final ProxySelectorService proxySelecto...
method queryProxySelector (line 63) | @GetMapping
method updateProxySelector (line 81) | @PutMapping("/{id}")
method deleteProxySelectors (line 95) | @DeleteMapping("/batch")
method addProxySelector (line 107) | @PostMapping("addProxySelector")
method fetchData (line 120) | @PutMapping("fetch/{discoveryHandlerId}")
method bindingSelector (line 133) | @PostMapping("binding")
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/RegistryController.java
class RegistryController (line 45) | @RestApi("/registry")
method RegistryController (line 50) | public RegistryController(final RegistryServiceImpl registryService) {
method findPageByQuery (line 64) | @GetMapping("/findPageByQuery")
method list (line 83) | @GetMapping("/list")
method createOrUpdate (line 96) | @PostMapping("/insertOrUpdate")
method delete (line 108) | @DeleteMapping("/batch")
method detailPlugin (line 120) | @GetMapping("/{id}")
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ResourceController.java
class ResourceController (line 54) | @RestApi("/resource")
method ResourceController (line 59) | public ResourceController(final ResourceService resourceService) {
method queryResource (line 71) | @GetMapping
method getMenuTree (line 88) | @GetMapping("/menu")
method getButton (line 104) | @GetMapping("/button")
method detailResource (line 120) | @GetMapping("/{id}")
method createResource (line 134) | @PostMapping
method updateResource (line 147) | @PutMapping("/{id}")
method deleteResource (line 163) | @DeleteMapping("/batch")
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/RoleController.java
class RoleController (line 51) | @RestApi("/role")
method RoleController (line 58) | public RoleController(final RoleService roleService) {
method selectAll (line 67) | @GetMapping("/getAllRoles")
method queryRole (line 81) | @GetMapping
method detailRole (line 96) | @GetMapping("/{id}")
method createRole (line 113) | @PostMapping
method updateRole (line 129) | @PutMapping("/{id}")
method deleteRole (line 145) | @DeleteMapping("/batch")
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/RuleController.java
class RuleController (line 51) | @RestApi("/rule")
method RuleController (line 56) | public RuleController(final RuleService ruleService) {
method queryRules (line 70) | @GetMapping
method detailRule (line 90) | @GetMapping("/{id}")
method createRule (line 103) | @PostMapping
method updateRule (line 116) | @PutMapping("/{id}")
method batchEnabled (line 132) | @PostMapping("/batchEnabled")
method deleteRules (line 146) | @DeleteMapping("/batch")
method pageService (line 152) | @Override
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/SandboxController.java
class SandboxController (line 34) | @RestApi("/sandbox")
method SandboxController (line 39) | public SandboxController(final SandboxService sandboxService) {
method proxyGateway (line 51) | @PostMapping(path = "/proxyGateway")
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ScalePolicyController.java
class ScalePolicyController (line 39) | @RestApi("/scale/policy")
method ScalePolicyController (line 44) | public ScalePolicyController(final ScalePolicyService scalePolicyServi...
method selectAll (line 53) | @GetMapping("/getAllPolicies")
method detailPolicy (line 64) | @GetMapping("/{id}")
method updateScalePolicy (line 81) | @PutMapping
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ScaleRlueController.java
class ScaleRlueController (line 50) | @RestApi("/scale/rule")
method ScaleRlueController (line 57) | public ScaleRlueController(final ScaleRuleService scaleRuleService, fi...
method selectAll (line 67) | @GetMapping("/getAllRules")
method queryRule (line 82) | @GetMapping
method detailRule (line 99) | @GetMapping("/{id}")
method createRule (line 116) | @PostMapping
method updateRule (line 127) | @PutMapping
method deleteRules (line 141) | @DeleteMapping("/batch")
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/SelectorController.java
class SelectorController (line 52) | @RestApi("/selector")
method SelectorController (line 57) | public SelectorController(final SelectorService selectorService) {
method querySelectors (line 71) | @GetMapping
method detailSelector (line 93) | @GetMapping("/{id}")
method createSelector (line 106) | @PostMapping
method updateSelector (line 119) | @PutMapping("/{id}")
method batchEnabled (line 134) | @PostMapping("/batchEnabled")
method deleteSelector (line 148) | @DeleteMapping("/batch")
method pageService (line 154) | @Override
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ShenyuClientHttpRegistryController.java
class ShenyuClientHttpRegistryController (line 43) | @RestController
method registerMetadata (line 59) | @PostMapping("/register-metadata")
method registerURI (line 75) | @PostMapping("/register-uri")
method registerApiDoc (line 91) | @PostMapping("/register-apiDoc")
method registerDiscoveryConfig (line 104) | @PostMapping("/register-discoveryConfig")
method registerMcpTools (line 120) | @PostMapping("/register-mcp")
method offline (line 136) | @PostMapping("/offline")
method checkClientNamespaceExist (line 146) | public void checkClientNamespaceExist(final String namespaceId) {
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ShenyuDictController.java
class ShenyuDictController (line 49) | @RestApi("/shenyu-dict")
method ShenyuDictController (line 54) | public ShenyuDictController(final ShenyuDictService shenyuDictService) {
method queryDicts (line 68) | @GetMapping
method findByType (line 83) | @GetMapping("/all/{type}")
method detail (line 94) | @GetMapping("/{id}")
method createShenyuDict (line 108) | @PostMapping
method updateShenyuDict (line 121) | @PutMapping("/{id}")
method deleteShenyuDicts (line 137) | @DeleteMapping("/batch")
method batchEnabled (line 149) | @PostMapping("/batchEnabled")
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/SwaggerImportController.java
class SwaggerImportController (line 36) | @RestController
method SwaggerImportController (line 45) | public SwaggerImportController(final SwaggerImportService swaggerImpor...
method importSwagger (line 55) | @PostMapping("/import")
method importMcpConfig (line 76) | @PostMapping("import/mcp")
method testConnection (line 94) | @PostMapping("/test-connection")
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/TagController.java
class TagController (line 42) | @RestApi("/tag")
method TagController (line 47) | public TagController(final TagService tagService) {
method createTag (line 57) | @PostMapping
method queryRootTag (line 67) | @GetMapping("/queryRootTag")
method queryById (line 78) | @GetMapping("/id/{id}")
method queryListByParentTagId (line 92) | @GetMapping("/parentTagId/{parentTagId}")
method queryByName (line 104) | @GetMapping("/name/{name}")
method updateTag (line 117) | @PutMapping("/id/{id}")
method deleteTags (line 131) | @DeleteMapping("/batchDelete")
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/TagRelationController.java
class TagRelationController (line 39) | @RestApi("/tag-relation/")
method TagRelationController (line 44) | public TagRelationController(final TagRelationService tagRelationServi...
method queryApiByTagId (line 54) | @GetMapping("/tagId/{tagId}")
method updateTagRelation (line 67) | @PutMapping("/id/{id}")
method deleteTagRelation (line 81) | @DeleteMapping("/batchDelete")
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/APDiscoveryProcessor.java
class APDiscoveryProcessor (line 37) | public class APDiscoveryProcessor extends AbstractDiscoveryProcessor {
method APDiscoveryProcessor (line 44) | public APDiscoveryProcessor(final DiscoveryUpstreamMapper discoveryUps...
method createProxySelector (line 48) | @Override
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/AbstractDiscoveryProcessor.java
class AbstractDiscoveryProcessor (line 60) | public abstract class AbstractDiscoveryProcessor implements DiscoveryPro...
method AbstractDiscoveryProcessor (line 81) | public AbstractDiscoveryProcessor(final DiscoveryUpstreamMapper discov...
method createDiscovery (line 87) | @Override
method removeDiscovery (line 112) | @Override
method removeProxySelector (line 129) | @Override
method removeSelectorUpstream (line 142) | @Override
method changeUpstream (line 153) | @Override
method fetchAll (line 166) | @Override
method buildProxySelectorKey (line 224) | protected String buildProxySelectorKey(final String listenerNode) {
method getDiscoveryDataChangedEventListener (line 235) | public DataChangedEventListener getDiscoveryDataChangedEventListener(f...
method addDiscoverySyncDataListener (line 254) | public void addDiscoverySyncDataListener(final DiscoveryHandlerDTO dis...
method setApplicationEventPublisher (line 267) | @Override
method getShenyuDiscoveryService (line 278) | public ShenyuInstanceRegisterRepository getShenyuDiscoveryService(fina...
method getCacheKey (line 288) | public Set<String> getCacheKey(final String discoveryId) {
method addChangedEventListener (line 298) | public void addChangedEventListener(final String discoveryId, final Da...
method getChangedEventListener (line 308) | public DataChangedEventListener getChangedEventListener(final String d...
method publishEvent (line 317) | public void publishEvent(final DataChangedEvent dataChangedEvent) {
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DefaultDiscoveryProcessor.java
class DefaultDiscoveryProcessor (line 40) | public class DefaultDiscoveryProcessor extends AbstractDiscoveryProcessor {
method DefaultDiscoveryProcessor (line 47) | public DefaultDiscoveryProcessor(final DiscoveryUpstreamMapper discove...
method createProxySelector (line 51) | @Override
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DiscoveryDataChangedEventSyncListener.java
class DiscoveryDataChangedEventSyncListener (line 52) | public class DiscoveryDataChangedEventSyncListener implements DataChange...
method DiscoveryDataChangedEventSyncListener (line 66) | public DiscoveryDataChangedEventSyncListener(final ApplicationEventPub...
method onChange (line 79) | @Override
method syncData0 (line 94) | private void syncData0(final DiscoveryDataChangedEvent event, final Di...
method buildProxySelectorData (line 141) | private DiscoverySyncData buildProxySelectorData(final DiscoverySyncDa...
method addListener (line 166) | @Override
method discoverySupportProtocol (line 175) | private String discoverySupportProtocol(final String pluginName) {
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DiscoveryLevel.java
type DiscoveryLevel (line 23) | public enum DiscoveryLevel {
method DiscoveryLevel (line 42) | DiscoveryLevel(final String code) {
method getCode (line 51) | public String getCode() {
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DiscoveryMode.java
type DiscoveryMode (line 23) | public enum DiscoveryMode {
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DiscoveryProcessor.java
type DiscoveryProcessor (line 30) | public interface DiscoveryProcessor {
method createDiscovery (line 37) | void createDiscovery(DiscoveryDO discoveryDO);
method createProxySelector (line 45) | void createProxySelector(DiscoveryHandlerDTO discoveryHandlerDTO, Prox...
method removeDiscovery (line 52) | void removeDiscovery(DiscoveryDO discoveryDO);
method removeProxySelector (line 60) | void removeProxySelector(DiscoveryHandlerDTO discoveryHandlerDTO, Prox...
method changeUpstream (line 68) | void changeUpstream(ProxySelectorDTO proxySelectorDTO, List<DiscoveryU...
method fetchAll (line 77) | void fetchAll(DiscoveryHandlerDTO discoveryHandlerDTO, ProxySelectorDT...
method removeSelectorUpstream (line 84) | void removeSelectorUpstream(ProxySelectorDTO proxySelectorDTO);
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DiscoveryProcessorHolder.java
class DiscoveryProcessorHolder (line 22) | public class DiscoveryProcessorHolder {
method DiscoveryProcessorHolder (line 30) | public DiscoveryProcessorHolder(final DiscoveryProcessor defaultDiscov...
method chooseProcessor (line 45) | public DiscoveryProcessor chooseProcessor(final String mode) {
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/LocalDiscoveryProcessor.java
class LocalDiscoveryProcessor (line 47) | public class LocalDiscoveryProcessor implements DiscoveryProcessor, Appl...
method LocalDiscoveryProcessor (line 55) | public LocalDiscoveryProcessor(final DiscoveryUpstreamMapper discovery...
method createDiscovery (line 59) | @Override
method createProxySelector (line 64) | @Override
method removeDiscovery (line 71) | @Override
method removeProxySelector (line 76) | @Override
method removeSelectorUpstream (line 83) | @Override
method changeUpstream (line 94) | @Override
method setApplicationEventPublisher (line 109) | @Override
method fetchAll (line 114) | @Override
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/listener/DataChangedEventListener.java
type DataChangedEventListener (line 25) | public interface DataChangedEventListener {
method onChange (line 32) | void onChange(DiscoveryDataChangedEvent event);
method addListener (line 39) | void addListener(DiscoverySyncData discoverySyncData);
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/listener/DiscoveryDataChangedEvent.java
class DiscoveryDataChangedEvent (line 23) | public final class DiscoveryDataChangedEvent {
method DiscoveryDataChangedEvent (line 38) | public DiscoveryDataChangedEvent(final String key, final String value,...
method getKey (line 49) | public String getKey() {
method getValue (line 58) | public String getValue() {
method getEvent (line 67) | public Event getEvent() {
type Event (line 74) | public enum Event {
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/parse/CustomDiscoveryUpstreamParser.java
class CustomDiscoveryUpstreamParser (line 46) | public class CustomDiscoveryUpstreamParser implements JsonDeserializer<D...
method CustomDiscoveryUpstreamParser (line 58) | public CustomDiscoveryUpstreamParser(final Map<String, String> convers...
method deserialize (line 62) | @Override
method parseValue (line 80) | @Override
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/parse/KeyValueParser.java
type KeyValueParser (line 27) | public interface KeyValueParser {
method parseValue (line 35) | List<DiscoveryUpstreamData> parseValue(String value);
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/disruptor/RegisterClientServerDisruptorPublisher.java
class RegisterClientServerDisruptorPublisher (line 41) | public class RegisterClientServerDisruptorPublisher implements ShenyuCli...
method getInstance (line 52) | public static RegisterClientServerDisruptorPublisher getInstance() {
method start (line 62) | public void start(final Map<String, ShenyuClientRegisterService> sheny...
method publish (line 73) | @Override
method publish (line 79) | @Override
method close (line 86) | @Override
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/disruptor/executor/RegisterServerConsumerExecutor.java
class RegisterServerConsumerExecutor (line 43) | public final class RegisterServerConsumerExecutor extends QueueConsumerE...
method RegisterServerConsumerExecutor (line 47) | private RegisterServerConsumerExecutor(final Map<DataType, ExecutorTyp...
method run (line 51) | @Override
method isValidData (line 63) | private boolean isValidData(final Object data) {
method selectExecutor (line 79) | private ExecutorSubscriber<DataTypeParent> selectExecutor(final Collec...
class RegisterServerExecutorFactory (line 84) | public static class RegisterServerExecutorFactory implements QueueCons...
method create (line 91) | @Override
method fixName (line 100) | @Override
method addSubscribers (line 112) | public RegisterServerExecutorFactory addSubscribers(final ExecutorTy...
method getSubscribers (line 122) | public Set<ExecutorTypeSubscriber<? extends DataTypeParent>> getSubs...
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/disruptor/subscriber/ApiDocExecutorSubscriber.java
class ApiDocExecutorSubscriber (line 32) | public class ApiDocExecutorSubscriber implements ExecutorTypeSubscriber<...
method ApiDocExecutorSubscriber (line 36) | public ApiDocExecutorSubscriber(final Map<String, ShenyuClientRegister...
method getType (line 40) | @Override
method executor (line 45) | @Override
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/disruptor/subscriber/DiscoveryConfigRegisterExecutorSubscriber.java
class DiscoveryConfigRegisterExecutorSubscriber (line 33) | public class DiscoveryConfigRegisterExecutorSubscriber implements Execut...
method DiscoveryConfigRegisterExecutorSubscriber (line 46) | public DiscoveryConfigRegisterExecutorSubscriber(final DiscoveryServic...
method executor (line 51) | @Override
method getType (line 62) | @Override
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/disruptor/subscriber/McpToolsRegisterExecutorSubscriber.java
class McpToolsRegisterExecutorSubscriber (line 33) | public class McpToolsRegisterExecutorSubscriber implements ExecutorTypeS...
method McpToolsRegisterExecutorSubscriber (line 37) | public McpToolsRegisterExecutorSubscriber(final Map<String, ShenyuClie...
method executor (line 41) | @Override
method getType (line 54) | @Override
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/disruptor/subscriber/MetadataExecutorSubscriber.java
class MetadataExecutorSubscriber (line 32) | public class MetadataExecutorSubscriber implements ExecutorTypeSubscribe...
method MetadataExecutorSubscriber (line 36) | public MetadataExecutorSubscriber(final Map<String, ShenyuClientRegist...
method getType (line 40) | @Override
method executor (line 45) | @Override
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/disruptor/subscriber/URIRegisterExecutorSubscriber.java
class URIRegisterExecutorSubscriber (line 41) | public class URIRegisterExecutorSubscriber implements ExecutorTypeSubscr...
method URIRegisterExecutorSubscriber (line 50) | public URIRegisterExecutorSubscriber(final Map<String, ShenyuClientReg...
method getType (line 54) | @Override
method executor (line 59) | @Override
method buildData (line 111) | private Map<String, List<URIRegisterDTO>> buildData(final Collection<U...
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/exception/ExceptionHandlers.java
class ExceptionHandlers (line 52) | @ResponseBody
method ExceptionHandlers (line 60) | public ExceptionHandlers(final MessageSource messageSource) {
method handleDuplicateKeyException (line 64) | @ExceptionHandler(DuplicateKeyException.class)
method handleUnauthorizedException (line 70) | @ExceptionHandler(UnauthorizedException.class)
method handleNullPointException (line 76) | @ExceptionHandler(NullPointerException.class)
method handleHttpRequestMethodNotSupportedException (line 82) | @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
method handleMethodArgumentNotValidException (line 93) | @ExceptionHandler(MethodArgumentNotValidException.class)
method handleMissingServletRequestParameterException (line 103) | @ExceptionHandler(MissingServletRequestParameterException.class)
method handleMethodArgumentTypeMismatchException (line 109) | @ExceptionHandler(MethodArgumentTypeMismatchException.class)
method handleConstraintViolationException (line 115) | @ExceptionHandler(ConstraintViolationException.class)
method handleShenyuException (line 124) | @ExceptionHandler(ShenyuException.class)
method handleExceptionHandler (line 134) | @ExceptionHandler(Exception.class)
method webI18nException (line 141) | @ExceptionHandler(WebI18nException.class)
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/exception/I18nException.java
class I18nException (line 27) | public class I18nException extends ShenyuAdminException {
method I18nException (line 33) | public I18nException(final Throwable e) {
method I18nException (line 39) | public I18nException(final Locale locale, final String message, final ...
method I18nException (line 45) | public I18nException(final Locale locale, final String message, final ...
method getLocale (line 56) | public Locale getLocale() {
method getArgs (line 65) | public Object[] getArgs() {
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/exception/ResourceNotFoundException.java
class ResourceNotFoundException (line 25) | public class ResourceNotFoundException extends ShenyuAdminException {
method ResourceNotFoundException (line 27) | public ResourceNotFoundException(final Throwable e) {
method ResourceNotFoundException (line 31) | public ResourceNotFoundException(final String message) {
method ResourceNotFoundException (line 35) | public ResourceNotFoundException(final String message, final Throwable...
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/exception/ShenyuAdminException.java
class ShenyuAdminException (line 26) | public class ShenyuAdminException extends ShenyuException {
method ShenyuAdminException (line 28) | public ShenyuAdminException(final Throwable e) {
method ShenyuAdminException (line 32) | public ShenyuAdminException(final String message) {
method ShenyuAdminException (line 36) | public ShenyuAdminException(final String message, final Throwable thro...
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/exception/ValidFailException.java
class ValidFailException (line 25) | public class ValidFailException extends ShenyuAdminException {
method ValidFailException (line 27) | public ValidFailException(final Throwable e) {
method ValidFailException (line 31) | public ValidFailException(final String message) {
method ValidFailException (line 35) | public ValidFailException(final String message, final Throwable throwa...
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/exception/WebI18nException.java
class WebI18nException (line 27) | public class WebI18nException extends I18nException {
method WebI18nException (line 29) | public WebI18nException(final Throwable e) {
method WebI18nException (line 33) | public WebI18nException(final String message) {
method WebI18nException (line 37) | public WebI18nException(final String message, final Object... objects) {
method WebI18nException (line 41) | public WebI18nException(final String message, final Throwable throwabl...
FILE: shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/AbstractDataChangedListener.java
class AbstractDataChangedListener (line 67) | public abstract class AbstractDataChangedListener implements DataChanged...
method fetchConfig (line 122) | public ConfigData<?> fetchConfig(final ConfigGroupEnum groupKey, final...
method onAppAuthChanged (line 146) | @Override
method afterAppAuthChanged (line 162) | protected void afterAppAuthChanged(final List<AppAuthData> changed, fi...
method onMetaDataChanged (line 165) | @Override
method afterMetaDataChanged (line 181) | protected void afterMetaDataChanged(final List<MetaData> changed, fina...
method onPluginChanged (line 184) | @Override
method afterPluginChanged (line 200) | protected void afterPluginChanged(final List<PluginData> changed, fina...
method onRuleChanged (line 213) | @Override
method afterRuleChanged (line 229) | protected void afterRuleChanged(final List<RuleData> changed, final Da...
method onSelectorChanged (line 232) | @Override
method onProxySelectorChanged (line 248) | @Override
method afterProxySelectorChanged (line 264) | protected void afterProxySelectorChanged(final List<ProxySelectorData>...
method onDiscoveryUpstreamChanged (line 273) | @Override
method afterDiscovery
Copy disabled (too large)
Download .json
Condensed preview — 4468 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (29,265K chars).
[
{
"path": ".asf.yaml",
"chars": 1620,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": ".devcontainer/devcontainer.json",
"chars": 1117,
"preview": "{\n \"name\": \"Shenyu DevContainer\",\n \"image\": \"mcr.microsoft.com/devcontainers/base:ubuntu\",\n \"features\": {\n \"ghcr"
},
{
"path": ".github/ISSUE_TEMPLATE/bug-report.yml",
"chars": 1674,
"preview": "name: 🐛 Bug Report\ndescription: Problems and issues with code of Apache ShenYu 🤔.\ntitle: \"[BUG] <title>\"\nlabels: [\"type:"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 814,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": ".github/ISSUE_TEMPLATE/feature-request.yml",
"chars": 1445,
"preview": "name: 🚀 Feature Request\ndescription: I have a suggestion (and may want to implement it 🙂)!\ntitle: \"[Feature] <title>\"\nla"
},
{
"path": ".github/ISSUE_TEMPLATE/question.yml",
"chars": 513,
"preview": "name: 🤔 Question\ndescription: Usage question that isn't answered in docs or discussion\ntitle: \"[Question] <title>\"\nlabel"
},
{
"path": ".github/ISSUE_TEMPLATE/task.yml",
"chars": 621,
"preview": "name: 🚀 Task\ndescription: Used to create tasks for the community.\ntitle: \"[Task] <title>\"\nlabels: [\"status: volunteer wa"
},
{
"path": ".github/ISSUE_TEMPLATE/volunteer.yml",
"chars": 436,
"preview": "name: 🤔 Volunteer\ndescription: Some volunteer help\ntitle: \"[Volunteer] <title>\"\nlabels: [\"status: volunteer wanted\"]\nbod"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 471,
"preview": "<!-- Describe your PR here; e.g. Fixes #issueNo -->\n\n<!--\nThank you for proposing a pull request. This template will gui"
},
{
"path": ".github/activie-committers.yml",
"chars": 841,
"preview": "# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE f"
},
{
"path": ".github/filters.yml",
"chars": 3023,
"preview": "# Path filters for GitHub Actions workflows\n# Each filter defines conditions for when certain workflows should run\n\n# Co"
},
{
"path": ".github/workflows/auto-notify.yml",
"chars": 2647,
"preview": "# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE f"
},
{
"path": ".github/workflows/ci.yml",
"chars": 5893,
"preview": "# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE f"
},
{
"path": ".github/workflows/codeql-analysis.yml",
"chars": 1949,
"preview": "# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE f"
},
{
"path": ".github/workflows/docker-publish-dockerhub.yml",
"chars": 4766,
"preview": "# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE f"
},
{
"path": ".github/workflows/docker-publish.yml",
"chars": 4868,
"preview": "# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE f"
},
{
"path": ".github/workflows/e2e-k8s.yml",
"chars": 14082,
"preview": "# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE f"
},
{
"path": ".github/workflows/integrated-test-k8s-ingress.yml",
"chars": 8862,
"preview": "# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE f"
},
{
"path": ".github/workflows/integrated-test.yml",
"chars": 7973,
"preview": "# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE f"
},
{
"path": ".github/workflows/issue-label.yml",
"chars": 1358,
"preview": "# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE f"
},
{
"path": ".github/workflows/k8s-examples-http.yml",
"chars": 6245,
"preview": "# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE f"
},
{
"path": ".gitignore",
"chars": 520,
"preview": "# maven ignore\ntarget/\n*.class\n*.jar\n*.war\n*.zip\n*.tar\n*.tar.gz\n.flattened-pom.xml\ndependency-reduced-pom.xml\n\n# maven p"
},
{
"path": ".gitpod.Dockerfile",
"chars": 1071,
"preview": "#!/bin/sh\r\n# ----------------------------------------------------------------------------\r\n# Licensed to the Apache Soft"
},
{
"path": ".gitpod.yml",
"chars": 2082,
"preview": "#!/bin/sh\n# ----------------------------------------------------------------------------\n# Licensed to the Apache Softwa"
},
{
"path": ".idea/vcs.xml",
"chars": 167,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n <component name=\"VcsDirectoryMappings\">\n <mapping dire"
},
{
"path": ".licenserc.yaml",
"chars": 1890,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements. See the NOTICE"
},
{
"path": ".mvn/wrapper/maven-wrapper.properties",
"chars": 1020,
"preview": "# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements. See the NOTICE f"
},
{
"path": ".prowlabels.yaml",
"chars": 964,
"preview": "# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE f"
},
{
"path": "LICENSE",
"chars": 12108,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "MATURITY.md",
"chars": 10765,
"preview": "# Maturity Assessment for Apache ShenYu\n\nThe [Apache Project Maturity Model](https://community.apache.org/apache-way/apa"
},
{
"path": "Makefile",
"chars": 3704,
"preview": "# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE f"
},
{
"path": "NOTICE",
"chars": 167,
"preview": "Apache ShenYu\nCopyright 2021-2024 The Apache Software Foundation\n\nThis product includes software developed at\nThe Apache"
},
{
"path": "README.md",
"chars": 8128,
"preview": "\n"
},
{
"path": "RELEASE-NOTES.md",
"chars": 33949,
"preview": "## [v2.7.0]- 2024-12-23\n\n### ✨ New Features\n\n1. Upgrade dockerfile java runtime version 8 to 17\n2. Upgrade SpringBoot to"
},
{
"path": "SECURITY.md",
"chars": 115,
"preview": "# Security Policy\n\n## Reporting a Vulnerability\n\nPlease report vulnerability disclosures to `security@apache.org`.\n"
},
{
"path": "actions/paths-filter/action.yml",
"chars": 3226,
"preview": "# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE f"
},
{
"path": "actions/paths-filter/dist/index.js",
"chars": 1328424,
"preview": "/******/ (() => { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 4014:\n/***/ ((__unused_webpack_modul"
},
{
"path": "actions/scripts/issue-manager.sh",
"chars": 9183,
"preview": "#!/bin/sh\n# ----------------------------------------------------------------------------\n# Licensed to the Apache Softwa"
},
{
"path": "changelog.sh",
"chars": 6259,
"preview": "#!/bin/sh\n# ----------------------------------------------------------------------------\n# Licensed to the Apache Softwa"
},
{
"path": "db/init/init-guide.md",
"chars": 405,
"preview": "# Initialization Guide\n\n> The mysql, oracle, and pg directories contain database initialization scripts for Mysql, Oracl"
},
{
"path": "db/init/mysql/schema.sql",
"chars": 416343,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/init/ob/schema.sql",
"chars": 408639,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/init/og/create-table.sql",
"chars": 404737,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/init/oracle/schema.sql",
"chars": 319779,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/init/pg/create-database.sql",
"chars": 824,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/init/pg/create-table.sql",
"chars": 428847,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/upgrade/2.4.1-upgrade-2.4.2-mysql.sql",
"chars": 4935,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/upgrade/2.4.1-upgrade-2.4.2-pg.sql",
"chars": 10117,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/upgrade/2.4.2-upgrade-2.4.3-mysql.sql",
"chars": 12091,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/upgrade/2.4.2-upgrade-2.4.3-pg.sql",
"chars": 11716,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/upgrade/2.4.3-upgrade-2.5.0-mysql.sql",
"chars": 16842,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/upgrade/2.4.3-upgrade-2.5.0-pg.sql",
"chars": 17799,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/upgrade/2.5.0-upgrade-2.5.1-mysql.sql",
"chars": 57243,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/upgrade/2.5.0-upgrade-2.5.1-oracle.sql",
"chars": 38932,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/upgrade/2.5.0-upgrade-2.5.1-pg.sql",
"chars": 60410,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/upgrade/2.5.1-upgrade-2.6.0-mysql.sql",
"chars": 20904,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/upgrade/2.5.1-upgrade-2.6.0-oracle.sql",
"chars": 19216,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/upgrade/2.5.1-upgrade-2.6.0-pg.sql",
"chars": 23137,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/upgrade/2.6.0-upgrade-2.6.1-mysql.sql",
"chars": 15076,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/upgrade/2.6.0-upgrade-2.6.1-og.sql",
"chars": 15154,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/upgrade/2.6.0-upgrade-2.6.1-oracle.sql",
"chars": 17801,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/upgrade/2.6.0-upgrade-2.6.1-pg.sql",
"chars": 15262,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/upgrade/2.6.1-upgrade-2.7.0-mysql.sql",
"chars": 26715,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/upgrade/2.6.1-upgrade-2.7.0-og.sql",
"chars": 25933,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/upgrade/2.6.1-upgrade-2.7.0-oracle.sql",
"chars": 27358,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/upgrade/2.6.1-upgrade-2.7.0-pg.sql",
"chars": 25977,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/upgrade/2.7.0-upgrade-2.7.1-mysql.sql",
"chars": 50205,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/upgrade/2.7.0-upgrade-2.7.1-ob.sql",
"chars": 49727,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/upgrade/2.7.0-upgrade-2.7.1-og.sql",
"chars": 49892,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/upgrade/2.7.0-upgrade-2.7.1-oracle.sql",
"chars": 69817,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/upgrade/2.7.0-upgrade-2.7.1-pg.sql",
"chars": 49764,
"preview": "-- Licensed to the Apache Software Foundation (ASF) under one\n-- or more contributor license agreements. See the NOTICE"
},
{
"path": "db/upgrade/upgrade-guide.md",
"chars": 1423,
"preview": "# Upgrade Guide\n\n> the file `*-upgrade-*-mysql.sql`、`*-upgrade-*-pg.sql` works for MySQL and PostgreSQL.\n\n## To Shenyu U"
},
{
"path": "mvnw",
"chars": 9781,
"preview": "#!/bin/sh\n# ----------------------------------------------------------------------------\n# Licensed to the Apache Softwa"
},
{
"path": "mvnw.cmd",
"chars": 6702,
"preview": "@REM ----------------------------------------------------------------------------\n@REM Licensed to the Apache Software F"
},
{
"path": "pom.xml",
"chars": 35379,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one or more\n ~ c"
},
{
"path": "script/checkstyle-header.txt",
"chars": 801,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "script/shenyu_checkstyle.xml",
"chars": 12711,
"preview": "<?xml version=\"1.0\"?>\n<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one or more\n ~ contributor licens"
},
{
"path": "shenyu-admin/README.md",
"chars": 118,
"preview": "# ShenYu Admin API Document\n\nYou can check http://localhost:9095/swagger-ui.html to check all restful api and models.\n"
},
{
"path": "shenyu-admin/pom.xml",
"chars": 13720,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one or more\n ~ c"
},
{
"path": "shenyu-admin/src/http/http-debug-app-auth-controller-api.http",
"chars": 3800,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "shenyu-admin/src/http/http-debug-dashboard-user-controller-api.http",
"chars": 3224,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "shenyu-admin/src/http/http-debug-data-permission-controller-api.http",
"chars": 2717,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "shenyu-admin/src/http/http-debug-dict-controller-api.http",
"chars": 3179,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "shenyu-admin/src/http/http-debug-meta-data-controller-api.http",
"chars": 3357,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "shenyu-admin/src/http/http-debug-operation-record-log-controller-api.http",
"chars": 1869,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "shenyu-admin/src/http/http-debug-platform-controller-api.http",
"chars": 1804,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "shenyu-admin/src/http/http-debug-plugin-controller-api.http",
"chars": 4544,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "shenyu-admin/src/http/http-debug-plugin-handle-controller-api.http",
"chars": 2736,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "shenyu-admin/src/http/http-debug-registry-config-controller-api.http",
"chars": 3320,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "shenyu-admin/src/http/http-debug-registry-controller-api.http",
"chars": 1401,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "shenyu-admin/src/http/http-debug-resource-controller-api.http",
"chars": 3394,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "shenyu-admin/src/http/http-debug-role-controller-api.http",
"chars": 2745,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "shenyu-admin/src/http/http-debug-rule-controller-api.http",
"chars": 3511,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "shenyu-admin/src/http/http-debug-selector-controller-api.http",
"chars": 3644,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/ShenyuAdminBootstrap.java",
"chars": 1392,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/aspect/DataPermissionAspect.java",
"chars": 3840,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/aspect/PageableAspect.java",
"chars": 3380,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/aspect/annotation/DataPermission.java",
"chars": 1285,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/aspect/annotation/Pageable.java",
"chars": 1133,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/aspect/annotation/RestApi.java",
"chars": 1899,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/aspect/controller/ControllerMethodAdvice.java",
"chars": 2057,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/aspect/controller/PrintLogControllerMethodAdviceImpl.java",
"chars": 2374,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/aspect/controller/RestControllerAspect.java",
"chars": 3352,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/aspect/controller/SuperAdminPasswordSafeAdvice.java",
"chars": 3478,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/config/ClusterConfiguration.java",
"chars": 4087,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/config/ClusterJdbcConfiguration.java",
"chars": 4661,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/config/ClusterZookeeperConfiguration.java",
"chars": 4231,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/config/DataBaseConfiguration.java",
"chars": 3137,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/config/DiscoveryConfiguration.java",
"chars": 3504,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/config/HttpLongPollingSyncConfiguration.java",
"chars": 2285,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/config/HttpUtilsConfiguration.java",
"chars": 1401,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/config/KubernetesConfiguration.java",
"chars": 3234,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/config/LdapConfiguration.java",
"chars": 3057,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/config/MapperConfig.java",
"chars": 6072,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/config/RegisterCenterConfiguration.java",
"chars": 3778,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/config/ShenyuAdminConfiguration.java",
"chars": 2931,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/config/StandaloneConfiguration.java",
"chars": 2770,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/config/SwaggerConfiguration.java",
"chars": 3220,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/config/WebConfiguration.java",
"chars": 1684,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/config/WebSocketSyncConfiguration.java",
"chars": 2724,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/config/properties/ClusterProperties.java",
"chars": 5199,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/config/properties/ClusterZookeeperProperties.java",
"chars": 3127,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/config/properties/DashboardProperties.java",
"chars": 6847,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/config/properties/DataBaseProperties.java",
"chars": 2261,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/config/properties/DeploymentProperties.java",
"chars": 2647,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/config/properties/HttpSyncProperties.java",
"chars": 2617,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/config/properties/JwtProperties.java",
"chars": 1628,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/config/properties/LdapProperties.java",
"chars": 4468,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/config/properties/SecretProperties.java",
"chars": 1845,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/config/properties/ShiroProperties.java",
"chars": 1586,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/config/properties/WebsocketSyncProperties.java",
"chars": 2326,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/AiProxyApiKeyController.java",
"chars": 9247,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/AlertReceiverController.java",
"chars": 5350,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/AlertReportController.java",
"chars": 1919,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ApiController.java",
"chars": 5197,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ApiDocController.java",
"chars": 4569,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/AppAuthController.java",
"chars": 9317,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ConfigController.java",
"chars": 4163,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ConfigsExportImportController.java",
"chars": 6228,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/DashboardUserController.java",
"chars": 9456,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/DataPermissionController.java",
"chars": 6769,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/DetailController.java",
"chars": 3646,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/DiscoveryController.java",
"chars": 3344,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/DiscoveryUpstreamController.java",
"chars": 4298,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/FieldController.java",
"chars": 3588,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/IndexController.java",
"chars": 7369,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/InstanceController.java",
"chars": 6160,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/MetaDataController.java",
"chars": 6569,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/MockRequestRecordController.java",
"chars": 4998,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/NamespaceController.java",
"chars": 5133,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/NamespacePluginController.java",
"chars": 11448,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/OperationRecordLogController.java",
"chars": 2828,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/PagedController.java",
"chars": 2384,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/PermissionController.java",
"chars": 3080,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/PlatformController.java",
"chars": 3370,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/PluginController.java",
"chars": 7792,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/PluginHandleController.java",
"chars": 6410,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ProxySelectorController.java",
"chars": 5435,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/RegistryController.java",
"chars": 5371,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ResourceController.java",
"chars": 7246,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/RoleController.java",
"chars": 6011,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/RuleController.java",
"chars": 6659,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/SandboxController.java",
"chars": 2135,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ScalePolicyController.java",
"chars": 3338,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ScaleRlueController.java",
"chars": 5762,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/SelectorController.java",
"chars": 6794,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ShenyuClientHttpRegistryController.java",
"chars": 5464,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ShenyuDictController.java",
"chars": 6590,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/SwaggerImportController.java",
"chars": 4065,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/TagController.java",
"chars": 5080,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/TagRelationController.java",
"chars": 3507,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/APDiscoveryProcessor.java",
"chars": 4729,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/AbstractDiscoveryProcessor.java",
"chars": 16063,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DefaultDiscoveryProcessor.java",
"chars": 4758,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DiscoveryDataChangedEventSyncListener.java",
"chars": 9546,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DiscoveryLevel.java",
"chars": 1352,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DiscoveryMode.java",
"chars": 1200,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DiscoveryProcessor.java",
"chars": 2704,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DiscoveryProcessorHolder.java",
"chars": 2486,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/LocalDiscoveryProcessor.java",
"chars": 6842,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/listener/DataChangedEventListener.java",
"chars": 1303,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/listener/DiscoveryDataChangedEvent.java",
"chars": 2080,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/parse/CustomDiscoveryUpstreamParser.java",
"chars": 3467,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/parse/KeyValueParser.java",
"chars": 1193,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/disruptor/RegisterClientServerDisruptorPublisher.java",
"chars": 4056,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/disruptor/executor/RegisterServerConsumerExecutor.java",
"chars": 5102,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/disruptor/subscriber/ApiDocExecutorSubscriber.java",
"chars": 2175,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/disruptor/subscriber/DiscoveryConfigRegisterExecutorSubscriber.java",
"chars": 2690,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/disruptor/subscriber/McpToolsRegisterExecutorSubscriber.java",
"chars": 2365,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/disruptor/subscriber/MetadataExecutorSubscriber.java",
"chars": 2205,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/disruptor/subscriber/URIRegisterExecutorSubscriber.java",
"chars": 6282,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/exception/ExceptionHandlers.java",
"chars": 7309,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/exception/I18nException.java",
"chars": 1917,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/exception/ResourceNotFoundException.java",
"chars": 1376,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/exception/ShenyuAdminException.java",
"chars": 1350,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/exception/ValidFailException.java",
"chars": 1296,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/exception/WebI18nException.java",
"chars": 1650,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/AbstractDataChangedListener.java",
"chars": 15545,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/AiProxySelectorResolverInvalidator.java",
"chars": 5108,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/ApplicationStartListener.java",
"chars": 1814,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
}
]
// ... and 4268 more files (download for full content)
About this extraction
This page contains the full source code of the apache/shenyu GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 4468 files (26.5 MB), approximately 7.3M tokens, and a symbol index with 35291 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.