Showing preview only (6,921K chars total). Download the full file or copy to clipboard to get everything.
Repository: apolloconfig/apollo
Branch: master
Commit: 4c527a469866
Files: 1211
Total size: 6.3 MB
Directory structure:
gitextract_66_nu3aa/
├── .gitattributes
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report_en.md
│ │ ├── bug_report_zh.md
│ │ ├── feature_request_en.md
│ │ └── feature_request_zh.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── aw/
│ │ └── actions-lock.json
│ ├── stale.yml
│ └── workflows/
│ ├── build.yml
│ ├── cla.yml
│ ├── code-style-check.yml
│ ├── codeql.yml
│ ├── commit_lint.yml
│ ├── docker-publish.yml
│ ├── docker-validation.yml
│ ├── issue-triage.lock.yml
│ ├── issue-triage.md
│ ├── javascript-test.yml
│ ├── license.yml
│ ├── portal-login-e2e.yml
│ ├── portal-ui-e2e.yml
│ └── release-packages.yml
├── .gitignore
├── .licenserc.yaml
├── .mergify.yml
├── .mvn/
│ └── wrapper/
│ ├── MavenWrapperDownloader.java
│ └── maven-wrapper.properties
├── AGENTS.md
├── CHANGES.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── GOVERNANCE.md
├── LICENSE
├── README.md
├── SECURITY.md
├── apollo-adminservice/
│ ├── pom.xml
│ └── src/
│ ├── assembly/
│ │ └── assembly-descriptor.xml
│ ├── main/
│ │ ├── docker/
│ │ │ └── Dockerfile
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── ctrip/
│ │ │ └── framework/
│ │ │ └── apollo/
│ │ │ └── adminservice/
│ │ │ ├── AdminServiceApplication.java
│ │ │ ├── AdminServiceAssemblyConfiguration.java
│ │ │ ├── AdminServiceAutoConfiguration.java
│ │ │ ├── AdminServiceHealthIndicator.java
│ │ │ ├── ServletInitializer.java
│ │ │ ├── aop/
│ │ │ │ ├── NamespaceAcquireLockAspect.java
│ │ │ │ ├── NamespaceUnlockAspect.java
│ │ │ │ └── PreAcquireNamespaceLock.java
│ │ │ ├── controller/
│ │ │ │ ├── AccessKeyController.java
│ │ │ │ ├── AppController.java
│ │ │ │ ├── AppNamespaceController.java
│ │ │ │ ├── ClusterController.java
│ │ │ │ ├── CommitController.java
│ │ │ │ ├── IndexController.java
│ │ │ │ ├── InstanceConfigController.java
│ │ │ │ ├── ItemController.java
│ │ │ │ ├── ItemSetController.java
│ │ │ │ ├── NamespaceBranchController.java
│ │ │ │ ├── NamespaceController.java
│ │ │ │ ├── NamespaceLockController.java
│ │ │ │ ├── ReleaseController.java
│ │ │ │ ├── ReleaseHistoryController.java
│ │ │ │ └── ServerConfigController.java
│ │ │ └── filter/
│ │ │ └── AdminServiceAuthenticationFilter.java
│ │ ├── resources/
│ │ │ ├── adminservice.properties
│ │ │ ├── apollo-adminservice.conf
│ │ │ ├── application-consul-discovery.properties
│ │ │ ├── application-custom-defined-discovery.properties
│ │ │ ├── application-database-discovery.properties
│ │ │ ├── application-github.properties
│ │ │ ├── application-kubernetes.properties
│ │ │ ├── application-nacos-discovery.properties
│ │ │ ├── application-zookeeper-discovery.properties
│ │ │ ├── application.properties
│ │ │ ├── application.yml
│ │ │ └── logback.xml
│ │ └── scripts/
│ │ ├── shutdown.sh
│ │ └── startup.sh
│ └── test/
│ ├── java/
│ │ └── com/
│ │ └── ctrip/
│ │ └── framework/
│ │ └── apollo/
│ │ ├── AdminServiceTestConfiguration.java
│ │ ├── LocalAdminServiceApplication.java
│ │ └── adminservice/
│ │ ├── GracefulShutdownConfigurationTest.java
│ │ ├── aop/
│ │ │ ├── NamespaceLockTest.java
│ │ │ └── NamespaceUnlockAspectTest.java
│ │ ├── controller/
│ │ │ ├── AbstractControllerTest.java
│ │ │ ├── AppControllerTest.java
│ │ │ ├── AppNamespaceControllerTest.java
│ │ │ ├── ClusterControllerTest.java
│ │ │ ├── ControllerExceptionTest.java
│ │ │ ├── ControllerIntegrationExceptionTest.java
│ │ │ ├── InstanceConfigControllerTest.java
│ │ │ ├── ItemControllerTest.java
│ │ │ ├── ItemSetControllerTest.java
│ │ │ ├── NamespaceControllerTest.java
│ │ │ ├── ReleaseControllerTest.java
│ │ │ ├── ServerConfigControllerTest.java
│ │ │ └── TestWebSecurityConfig.java
│ │ └── filter/
│ │ ├── AdminServiceAuthenticationFilterTest.java
│ │ └── AdminServiceAuthenticationIntegrationTest.java
│ └── resources/
│ ├── application.properties
│ ├── application.yml
│ ├── controller/
│ │ ├── cleanup.sql
│ │ ├── test-itemset.sql
│ │ ├── test-release.sql
│ │ └── test-server-config.sql
│ ├── data.sql
│ ├── filter/
│ │ ├── test-access-control-disabled.sql
│ │ ├── test-access-control-enabled-no-token.sql
│ │ └── test-access-control-enabled.sql
│ ├── import.sql
│ └── logback-test.xml
├── apollo-assembly/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── ctrip/
│ │ │ └── framework/
│ │ │ └── apollo/
│ │ │ └── assembly/
│ │ │ └── ApolloApplication.java
│ │ └── resources/
│ │ ├── application-database-discovery.properties
│ │ ├── application-github.properties
│ │ ├── application.properties
│ │ ├── application.yml
│ │ └── logback.xml
│ └── test/
│ ├── java/
│ │ └── com/
│ │ └── ctrip/
│ │ └── framework/
│ │ └── apollo/
│ │ └── assembly/
│ │ └── LocalApolloApplication.java
│ └── resources/
│ ├── application.properties
│ ├── application.yml
│ └── logback-test.xml
├── apollo-audit/
│ ├── README.md
│ ├── apollo-audit-annotation/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── ctrip/
│ │ └── framework/
│ │ └── apollo/
│ │ └── audit/
│ │ └── annotation/
│ │ ├── ApolloAuditLog.java
│ │ ├── ApolloAuditLogDataInfluence.java
│ │ ├── ApolloAuditLogDataInfluenceTable.java
│ │ ├── ApolloAuditLogDataInfluenceTableField.java
│ │ └── OpType.java
│ ├── apollo-audit-api/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── ctrip/
│ │ └── framework/
│ │ └── apollo/
│ │ └── audit/
│ │ ├── api/
│ │ │ ├── ApolloAuditLogApi.java
│ │ │ ├── ApolloAuditLogQueryApi.java
│ │ │ └── ApolloAuditLogRecordApi.java
│ │ ├── dto/
│ │ │ ├── ApolloAuditLogDTO.java
│ │ │ ├── ApolloAuditLogDataInfluenceDTO.java
│ │ │ └── ApolloAuditLogDetailsDTO.java
│ │ └── event/
│ │ └── ApolloAuditLogDataInfluenceEvent.java
│ ├── apollo-audit-impl/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── ctrip/
│ │ │ └── framework/
│ │ │ └── apollo/
│ │ │ └── audit/
│ │ │ ├── ApolloAuditProperties.java
│ │ │ ├── ApolloAuditRegistrar.java
│ │ │ ├── aop/
│ │ │ │ └── ApolloAuditSpanAspect.java
│ │ │ ├── component/
│ │ │ │ ├── ApolloAuditHttpInterceptor.java
│ │ │ │ ├── ApolloAuditLogApiJpaImpl.java
│ │ │ │ └── ApolloAuditLogApiNoOpImpl.java
│ │ │ ├── constants/
│ │ │ │ └── ApolloAuditConstants.java
│ │ │ ├── context/
│ │ │ │ ├── ApolloAuditScope.java
│ │ │ │ ├── ApolloAuditScopeManager.java
│ │ │ │ ├── ApolloAuditSpan.java
│ │ │ │ ├── ApolloAuditSpanContext.java
│ │ │ │ ├── ApolloAuditTraceContext.java
│ │ │ │ └── ApolloAuditTracer.java
│ │ │ ├── controller/
│ │ │ │ └── ApolloAuditController.java
│ │ │ ├── entity/
│ │ │ │ ├── ApolloAuditLog.java
│ │ │ │ ├── ApolloAuditLogDataInfluence.java
│ │ │ │ └── BaseEntity.java
│ │ │ ├── listener/
│ │ │ │ └── ApolloAuditLogDataInfluenceEventListener.java
│ │ │ ├── repository/
│ │ │ │ ├── ApolloAuditLogDataInfluenceRepository.java
│ │ │ │ └── ApolloAuditLogRepository.java
│ │ │ ├── service/
│ │ │ │ ├── ApolloAuditLogDataInfluenceService.java
│ │ │ │ └── ApolloAuditLogService.java
│ │ │ ├── spi/
│ │ │ │ ├── ApolloAuditLogQueryApiPreAuthorizer.java
│ │ │ │ ├── ApolloAuditOperatorSupplier.java
│ │ │ │ └── defaultimpl/
│ │ │ │ ├── ApolloAuditLogQueryApiDefaultPreAuthorizer.java
│ │ │ │ └── ApolloAuditOperatorDefaultSupplier.java
│ │ │ └── util/
│ │ │ └── ApolloAuditUtil.java
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── ctrip/
│ │ └── framework/
│ │ └── apollo/
│ │ └── audit/
│ │ ├── MockBeanFactory.java
│ │ ├── MockDataInfluenceEntity.java
│ │ ├── aop/
│ │ │ └── ApolloAuditSpanAspectTest.java
│ │ ├── component/
│ │ │ ├── ApolloAuditHttpInterceptorTest.java
│ │ │ ├── ApolloAuditLogApiJpaImplTest.java
│ │ │ └── ApolloAuditScopeManagerTest.java
│ │ ├── context/
│ │ │ ├── ApolloAuditTraceContextTest.java
│ │ │ └── ApolloAuditTracerTest.java
│ │ ├── controller/
│ │ │ └── ApolloAuditControllerTest.java
│ │ └── spi/
│ │ └── ApolloAuditOperatorSupplierTest.java
│ ├── apollo-audit-spring-boot-starter/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── ctrip/
│ │ │ └── framework/
│ │ │ └── apollo/
│ │ │ └── audit/
│ │ │ └── configuration/
│ │ │ ├── ApolloAuditAutoConfiguration.java
│ │ │ └── ApolloAuditNoOpAutoConfiguration.java
│ │ └── resources/
│ │ └── META-INF/
│ │ ├── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── spring.factories
│ └── pom.xml
├── apollo-biz/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── ctrip/
│ │ └── framework/
│ │ └── apollo/
│ │ └── biz/
│ │ ├── ApolloBizAssemblyConfiguration.java
│ │ ├── ApolloBizConfig.java
│ │ ├── auth/
│ │ │ └── WebSecurityConfig.java
│ │ ├── config/
│ │ │ └── BizConfig.java
│ │ ├── entity/
│ │ │ ├── AccessKey.java
│ │ │ ├── Audit.java
│ │ │ ├── Cluster.java
│ │ │ ├── Commit.java
│ │ │ ├── GrayReleaseRule.java
│ │ │ ├── Instance.java
│ │ │ ├── InstanceConfig.java
│ │ │ ├── Item.java
│ │ │ ├── JpaMapFieldJsonConverter.java
│ │ │ ├── Namespace.java
│ │ │ ├── NamespaceLock.java
│ │ │ ├── Privilege.java
│ │ │ ├── Release.java
│ │ │ ├── ReleaseHistory.java
│ │ │ ├── ReleaseMessage.java
│ │ │ ├── ServerConfig.java
│ │ │ └── ServiceRegistry.java
│ │ ├── eureka/
│ │ │ └── ApolloEurekaClientConfig.java
│ │ ├── grayReleaseRule/
│ │ │ ├── GrayReleaseRuleCache.java
│ │ │ └── GrayReleaseRulesHolder.java
│ │ ├── message/
│ │ │ ├── DatabaseMessageSender.java
│ │ │ ├── MessageSender.java
│ │ │ ├── ReleaseMessageListener.java
│ │ │ ├── ReleaseMessageScanner.java
│ │ │ └── Topics.java
│ │ ├── registry/
│ │ │ ├── DatabaseDiscoveryClient.java
│ │ │ ├── DatabaseDiscoveryClientAlwaysAddSelfInstanceDecoratorImpl.java
│ │ │ ├── DatabaseDiscoveryClientImpl.java
│ │ │ ├── DatabaseDiscoveryClientMemoryCacheDecoratorImpl.java
│ │ │ ├── DatabaseServiceRegistry.java
│ │ │ ├── DatabaseServiceRegistryImpl.java
│ │ │ ├── ServiceInstance.java
│ │ │ ├── configuration/
│ │ │ │ ├── ApolloServiceDiscoveryAutoConfiguration.java
│ │ │ │ ├── ApolloServiceRegistryAutoConfiguration.java
│ │ │ │ └── support/
│ │ │ │ ├── ApolloServiceDiscoveryProperties.java
│ │ │ │ ├── ApolloServiceRegistryClearApplicationRunner.java
│ │ │ │ ├── ApolloServiceRegistryDeregisterApplicationListener.java
│ │ │ │ ├── ApolloServiceRegistryHeartbeatApplicationRunner.java
│ │ │ │ └── ApolloServiceRegistryProperties.java
│ │ │ └── package-info.java
│ │ ├── repository/
│ │ │ ├── AccessKeyRepository.java
│ │ │ ├── AppNamespaceRepository.java
│ │ │ ├── AppRepository.java
│ │ │ ├── AuditRepository.java
│ │ │ ├── ClusterRepository.java
│ │ │ ├── CommitRepository.java
│ │ │ ├── GrayReleaseRuleRepository.java
│ │ │ ├── InstanceConfigRepository.java
│ │ │ ├── InstanceRepository.java
│ │ │ ├── ItemRepository.java
│ │ │ ├── NamespaceLockRepository.java
│ │ │ ├── NamespaceRepository.java
│ │ │ ├── PrivilegeRepository.java
│ │ │ ├── ReleaseHistoryRepository.java
│ │ │ ├── ReleaseMessageRepository.java
│ │ │ ├── ReleaseRepository.java
│ │ │ ├── ServerConfigRepository.java
│ │ │ └── ServiceRegistryRepository.java
│ │ ├── service/
│ │ │ ├── AccessKeyService.java
│ │ │ ├── AdminService.java
│ │ │ ├── AppNamespaceService.java
│ │ │ ├── AppService.java
│ │ │ ├── AuditService.java
│ │ │ ├── BizDBPropertySource.java
│ │ │ ├── ClusterService.java
│ │ │ ├── CommitService.java
│ │ │ ├── InstanceService.java
│ │ │ ├── ItemService.java
│ │ │ ├── ItemSetService.java
│ │ │ ├── NamespaceBranchService.java
│ │ │ ├── NamespaceLockService.java
│ │ │ ├── NamespaceService.java
│ │ │ ├── ReleaseHistoryService.java
│ │ │ ├── ReleaseMessageService.java
│ │ │ ├── ReleaseService.java
│ │ │ ├── ServerConfigService.java
│ │ │ └── ServiceRegistryService.java
│ │ └── utils/
│ │ ├── ConfigChangeContentBuilder.java
│ │ ├── EntityManagerUtil.java
│ │ ├── ReleaseKeyGenerator.java
│ │ └── ReleaseMessageKeyGenerator.java
│ └── test/
│ ├── java/
│ │ └── com/
│ │ └── ctrip/
│ │ └── framework/
│ │ └── apollo/
│ │ └── biz/
│ │ ├── AbstractIntegrationTest.java
│ │ ├── AbstractUnitTest.java
│ │ ├── BizTestConfiguration.java
│ │ ├── MockBeanFactory.java
│ │ ├── config/
│ │ │ └── BizConfigTest.java
│ │ ├── entity/
│ │ │ └── JpaMapFieldJsonConverterTest.java
│ │ ├── grayReleaseRule/
│ │ │ └── GrayReleaseRulesHolderTest.java
│ │ ├── message/
│ │ │ ├── DatabaseMessageSenderTest.java
│ │ │ └── ReleaseMessageScannerTest.java
│ │ ├── registry/
│ │ │ ├── DatabaseDiscoveryClientAlwaysAddSelfInstanceDecoratorImplTest.java
│ │ │ ├── DatabaseDiscoveryClientImplTest.java
│ │ │ ├── DatabaseDiscoveryClientMemoryCacheDecoratorImplTest.java
│ │ │ ├── DatabaseDiscoveryIntegrationTest.java
│ │ │ ├── DatabaseDiscoveryWithoutDecoratorIntegrationTest.java
│ │ │ ├── ServiceInstanceFactory.java
│ │ │ └── configuration/
│ │ │ ├── ApolloServiceRegistryAutoConfigurationNotEnabledTest.java
│ │ │ └── support/
│ │ │ └── ApolloServiceRegistryClearApplicationRunnerIntegrationTest.java
│ │ ├── repository/
│ │ │ ├── AccessKeyRepositoryTest.java
│ │ │ ├── AppNamespaceRepositoryTest.java
│ │ │ ├── AppRepositoryTest.java
│ │ │ ├── InstanceConfigRepositoryTest.java
│ │ │ └── ReleaseHistoryRepositoryTest.java
│ │ ├── service/
│ │ │ ├── AccessKeyServiceTest.java
│ │ │ ├── AdminServiceTest.java
│ │ │ ├── AdminServiceTransactionTest.java
│ │ │ ├── BizDBPropertySourceTest.java
│ │ │ ├── ClusterServiceTest.java
│ │ │ ├── InstanceServiceTest.java
│ │ │ ├── ItemServiceTest.java
│ │ │ ├── ItemSetServiceTest.java
│ │ │ ├── NamespaceBranchServiceTest.java
│ │ │ ├── NamespacePublishInfoTest.java
│ │ │ ├── NamespaceServiceIntegrationTest.java
│ │ │ ├── NamespaceServiceTest.java
│ │ │ ├── ReleaseCreationTest.java
│ │ │ ├── ReleaseHistoryServiceTest.java
│ │ │ ├── ReleaseServiceTest.java
│ │ │ └── ServerConfigServiceTest.java
│ │ └── utils/
│ │ ├── ConfigChangeContentBuilderTest.java
│ │ └── ReleaseKeyGeneratorTest.java
│ └── resources/
│ ├── application.properties
│ ├── data.sql
│ ├── import.sql
│ ├── json/
│ │ └── converter/
│ │ ├── element.1.json
│ │ └── element.2.json
│ ├── logback-test.xml
│ └── sql/
│ ├── accesskey-test.sql
│ ├── clean.sql
│ ├── item-test.sql
│ ├── itemset-test.sql
│ ├── namespace-branch-test.sql
│ ├── namespace-test.sql
│ ├── release-creation-test.sql
│ └── release-history-test.sql
├── apollo-build-sql-converter/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── ctrip/
│ │ └── framework/
│ │ └── apollo/
│ │ └── build/
│ │ └── sql/
│ │ └── converter/
│ │ ├── ApolloH2ConverterUtil.java
│ │ ├── ApolloMysqlDefaultConverterUtil.java
│ │ ├── ApolloSqlConverter.java
│ │ ├── ApolloSqlConverterUtil.java
│ │ ├── SqlStatement.java
│ │ ├── SqlTemplate.java
│ │ ├── SqlTemplateContext.java
│ │ └── SqlTemplateGist.java
│ └── test/
│ ├── java/
│ │ └── com/
│ │ └── ctrip/
│ │ └── framework/
│ │ └── apollo/
│ │ └── build/
│ │ └── sql/
│ │ └── converter/
│ │ ├── ApolloSqlConverterAutoGeneratedTest.java
│ │ ├── ApolloSqlConverterH2Test.java
│ │ └── TestH2Function.java
│ └── resources/
│ └── META-INF/
│ └── sql/
│ └── h2-test/
│ └── delta/
│ ├── v000-v010/
│ │ ├── apolloconfigdb-v000-v010-after.sql
│ │ ├── apolloconfigdb-v000-v010-base.sql
│ │ ├── apolloconfigdb-v000-v010-before.sql
│ │ ├── apolloconfigdb-v000-v010.sql
│ │ ├── apolloportaldb-v000-v010-base.sql
│ │ └── apolloportaldb-v000-v010.sql
│ ├── v040-v050/
│ │ ├── apolloconfigdb-v040-v050.sql
│ │ └── apolloportaldb-v040-v050.sql
│ ├── v060-v062/
│ │ ├── apolloconfigdb-v060-v062.sql
│ │ └── apolloportaldb-v060-v062.sql
│ ├── v080-v090/
│ │ └── apolloportaldb-v080-v090.sql
│ ├── v151-v160/
│ │ └── apolloconfigdb-v151-v160.sql
│ ├── v170-v180/
│ │ ├── apolloconfigdb-v170-v180.sql
│ │ └── apolloportaldb-v170-v180.sql
│ ├── v180-v190/
│ │ ├── apolloconfigdb-v180-v190.sql
│ │ └── apolloportaldb-v180-v190.sql
│ ├── v190-v200/
│ │ ├── apolloconfigdb-v190-v200-after.sql
│ │ ├── apolloconfigdb-v190-v200.sql
│ │ ├── apolloportaldb-v190-v200-after.sql
│ │ └── apolloportaldb-v190-v200.sql
│ ├── v200-v210/
│ │ └── apolloconfigdb-v200-v210.sql
│ └── v210-v220/
│ ├── apolloconfigdb-v210-v220.sql
│ └── apolloportaldb-v210-v220.sql
├── apollo-buildtools/
│ ├── .gitignore
│ ├── pom.xml
│ ├── src/
│ │ └── main/
│ │ ├── resources/
│ │ │ ├── LICENSE-2.0.txt
│ │ │ └── google_checks.xml
│ │ └── scripts/
│ │ └── deploy_jenkins.sh
│ └── style/
│ ├── eclipse-java-google-style.xml
│ ├── intellij-java-google-style.xml
│ └── license/
│ └── apollo-license
├── apollo-common/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── ctrip/
│ │ │ └── framework/
│ │ │ └── apollo/
│ │ │ └── common/
│ │ │ ├── ApolloCommonConfig.java
│ │ │ ├── aop/
│ │ │ │ └── RepositoryAspect.java
│ │ │ ├── condition/
│ │ │ │ ├── ConditionalOnMissingProfile.java
│ │ │ │ ├── ConditionalOnProfile.java
│ │ │ │ └── OnProfileCondition.java
│ │ │ ├── config/
│ │ │ │ ├── RefreshableConfig.java
│ │ │ │ └── RefreshablePropertySource.java
│ │ │ ├── constants/
│ │ │ │ ├── AccessKeyMode.java
│ │ │ │ ├── ApolloServer.java
│ │ │ │ ├── GsonType.java
│ │ │ │ ├── NamespaceBranchStatus.java
│ │ │ │ ├── ReleaseOperation.java
│ │ │ │ └── ReleaseOperationContext.java
│ │ │ ├── controller/
│ │ │ │ ├── ApolloInfoController.java
│ │ │ │ ├── CharacterEncodingFilterConfiguration.java
│ │ │ │ ├── GlobalDefaultExceptionHandler.java
│ │ │ │ ├── HttpMessageConverterConfiguration.java
│ │ │ │ └── WebMvcConfig.java
│ │ │ ├── datasource/
│ │ │ │ ├── ApolloDataSourceScriptDatabaseInitializer.java
│ │ │ │ ├── ApolloDataSourceScriptDatabaseInitializerFactory.java
│ │ │ │ └── ApolloSqlInitializationProperties.java
│ │ │ ├── dto/
│ │ │ │ ├── AccessKeyDTO.java
│ │ │ │ ├── AppDTO.java
│ │ │ │ ├── AppNamespaceDTO.java
│ │ │ │ ├── BaseDTO.java
│ │ │ │ ├── ClusterDTO.java
│ │ │ │ ├── CommitDTO.java
│ │ │ │ ├── GrayReleaseRuleDTO.java
│ │ │ │ ├── GrayReleaseRuleItemDTO.java
│ │ │ │ ├── InstanceConfigDTO.java
│ │ │ │ ├── InstanceDTO.java
│ │ │ │ ├── ItemChangeSets.java
│ │ │ │ ├── ItemDTO.java
│ │ │ │ ├── ItemInfoDTO.java
│ │ │ │ ├── NamespaceDTO.java
│ │ │ │ ├── NamespaceLockDTO.java
│ │ │ │ ├── PageDTO.java
│ │ │ │ ├── ReleaseDTO.java
│ │ │ │ └── ReleaseHistoryDTO.java
│ │ │ ├── entity/
│ │ │ │ ├── App.java
│ │ │ │ ├── AppNamespace.java
│ │ │ │ ├── BaseEntity.java
│ │ │ │ └── EntityPair.java
│ │ │ ├── exception/
│ │ │ │ ├── AbstractApolloHttpException.java
│ │ │ │ ├── BadRequestException.java
│ │ │ │ ├── BeanUtilsException.java
│ │ │ │ ├── NotFoundException.java
│ │ │ │ └── ServiceException.java
│ │ │ ├── http/
│ │ │ │ ├── MultiResponseEntity.java
│ │ │ │ ├── RichResponseEntity.java
│ │ │ │ └── SearchResponseEntity.java
│ │ │ ├── jpa/
│ │ │ │ ├── H2Function.java
│ │ │ │ └── SqlFunctionsMetadataBuilderContributor.java
│ │ │ └── utils/
│ │ │ ├── BeanUtils.java
│ │ │ ├── ExceptionUtils.java
│ │ │ ├── GrayReleaseRuleItemTransformer.java
│ │ │ ├── InputValidator.java
│ │ │ ├── RequestPrecondition.java
│ │ │ ├── UniqueKeyGenerator.java
│ │ │ └── WebUtils.java
│ │ └── resources/
│ │ ├── application-h2.properties
│ │ ├── application-mysql.properties
│ │ ├── application-postgre.properties
│ │ ├── application.yaml
│ │ └── banner.txt
│ └── test/
│ └── java/
│ └── com/
│ └── ctrip/
│ └── framework/
│ └── apollo/
│ └── common/
│ ├── conditional/
│ │ └── ConditionalOnProfileTest.java
│ ├── dto/
│ │ └── ItemInfoDTOTest.java
│ ├── exception/
│ │ ├── BadRequestExceptionTest.java
│ │ └── NotFoundExceptionTest.java
│ ├── http/
│ │ └── SearchResponseEntityTest.java
│ └── utils/
│ ├── BeanUtilsTest.java
│ ├── InputValidatorTest.java
│ └── WebUtilsTest.java
├── apollo-configservice/
│ ├── pom.xml
│ └── src/
│ ├── assembly/
│ │ └── assembly-descriptor.xml
│ ├── main/
│ │ ├── docker/
│ │ │ └── Dockerfile
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── ctrip/
│ │ │ └── framework/
│ │ │ └── apollo/
│ │ │ ├── configservice/
│ │ │ │ ├── ConfigServerEurekaServerConfigure.java
│ │ │ │ ├── ConfigServiceApplication.java
│ │ │ │ ├── ConfigServiceAssemblyConfiguration.java
│ │ │ │ ├── ConfigServiceAutoConfiguration.java
│ │ │ │ ├── ConfigServiceHealthIndicator.java
│ │ │ │ ├── ServletInitializer.java
│ │ │ │ ├── controller/
│ │ │ │ │ ├── ConfigController.java
│ │ │ │ │ ├── ConfigFileController.java
│ │ │ │ │ ├── NotificationController.java
│ │ │ │ │ └── NotificationControllerV2.java
│ │ │ │ ├── filter/
│ │ │ │ │ └── ClientAuthenticationFilter.java
│ │ │ │ ├── service/
│ │ │ │ │ ├── AccessKeyServiceWithCache.java
│ │ │ │ │ ├── AppNamespaceServiceWithCache.java
│ │ │ │ │ ├── ReleaseMessageServiceWithCache.java
│ │ │ │ │ └── config/
│ │ │ │ │ ├── AbstractConfigService.java
│ │ │ │ │ ├── ConfigService.java
│ │ │ │ │ ├── ConfigServiceWithCache.java
│ │ │ │ │ ├── DefaultConfigService.java
│ │ │ │ │ ├── DefaultIncrementalSyncService.java
│ │ │ │ │ └── IncrementalSyncService.java
│ │ │ │ ├── util/
│ │ │ │ │ ├── AccessKeyUtil.java
│ │ │ │ │ ├── InstanceConfigAuditUtil.java
│ │ │ │ │ ├── NamespaceUtil.java
│ │ │ │ │ └── WatchKeysUtil.java
│ │ │ │ └── wrapper/
│ │ │ │ ├── CaseInsensitiveMapWrapper.java
│ │ │ │ ├── CaseInsensitiveMultimapWrapper.java
│ │ │ │ └── DeferredResultWrapper.java
│ │ │ └── metaservice/
│ │ │ ├── ApolloMetaServiceConfig.java
│ │ │ ├── controller/
│ │ │ │ ├── HomePageController.java
│ │ │ │ └── ServiceController.java
│ │ │ └── service/
│ │ │ ├── DatabaseDiscoveryService.java
│ │ │ ├── DefaultDiscoveryService.java
│ │ │ ├── DiscoveryService.java
│ │ │ ├── KubernetesDiscoveryService.java
│ │ │ ├── NacosDiscoveryService.java
│ │ │ └── SpringCloudInnerDiscoveryService.java
│ │ ├── resources/
│ │ │ ├── apollo-configservice.conf
│ │ │ ├── application-consul-discovery.properties
│ │ │ ├── application-custom-defined-discovery.properties
│ │ │ ├── application-database-discovery.properties
│ │ │ ├── application-github.properties
│ │ │ ├── application-kubernetes.properties
│ │ │ ├── application-nacos-discovery.properties
│ │ │ ├── application-zookeeper-discovery.properties
│ │ │ ├── application.properties
│ │ │ ├── application.yml
│ │ │ ├── configservice.properties
│ │ │ ├── jpa/
│ │ │ │ └── configdb.init.h2.sql
│ │ │ └── logback.xml
│ │ └── scripts/
│ │ ├── shutdown.sh
│ │ └── startup.sh
│ └── test/
│ ├── java/
│ │ └── com/
│ │ └── ctrip/
│ │ └── framework/
│ │ └── apollo/
│ │ ├── ConfigServiceTestConfiguration.java
│ │ ├── LocalConfigServiceApplication.java
│ │ ├── configservice/
│ │ │ ├── GracefulShutdownConfigurationTest.java
│ │ │ ├── controller/
│ │ │ │ ├── ConfigControllerTest.java
│ │ │ │ ├── ConfigFileControllerTest.java
│ │ │ │ ├── NotificationControllerTest.java
│ │ │ │ ├── NotificationControllerV2Test.java
│ │ │ │ └── TestWebSecurityConfig.java
│ │ │ ├── filter/
│ │ │ │ └── ClientAuthenticationFilterTest.java
│ │ │ ├── integration/
│ │ │ │ ├── AbstractBaseIntegrationTest.java
│ │ │ │ ├── ConfigControllerIntegrationTest.java
│ │ │ │ ├── ConfigFileControllerIntegrationTest.java
│ │ │ │ ├── NotificationControllerIntegrationTest.java
│ │ │ │ └── NotificationControllerV2IntegrationTest.java
│ │ │ ├── service/
│ │ │ │ ├── AccessKeyServiceWithCacheTest.java
│ │ │ │ ├── AppNamespaceServiceWithCacheTest.java
│ │ │ │ ├── ReleaseMessageServiceWithCacheTest.java
│ │ │ │ └── config/
│ │ │ │ ├── ConfigServiceWithCacheAndCacheKeyIgnoreCaseTest.java
│ │ │ │ ├── ConfigServiceWithCacheTest.java
│ │ │ │ ├── DefaultConfigServiceTest.java
│ │ │ │ └── DefaultIncrementalSyncServiceTest.java
│ │ │ ├── util/
│ │ │ │ ├── AccessKeyUtilTest.java
│ │ │ │ ├── InstanceConfigAuditUtilTest.java
│ │ │ │ ├── NamespaceUtilTest.java
│ │ │ │ └── WatchKeysUtilTest.java
│ │ │ └── wrapper/
│ │ │ ├── CaseInsensitiveMapWrapperTest.java
│ │ │ └── CaseInsensitiveMultimapWrapperTest.java
│ │ └── metaservice/
│ │ ├── controller/
│ │ │ ├── HomePageControllerTest.java
│ │ │ └── ServiceControllerTest.java
│ │ └── service/
│ │ ├── ConsulDiscoveryServiceTest.java
│ │ ├── DefaultDiscoveryServiceTest.java
│ │ ├── KubernetesDiscoveryServiceTest.java
│ │ ├── NacosDiscoveryServiceTest.java
│ │ └── ZookeeperDiscoveryServiceTest.java
│ └── resources/
│ ├── application.properties
│ ├── application.yml
│ ├── data.sql
│ ├── import.sql
│ ├── integration-test/
│ │ ├── cleanup.sql
│ │ ├── test-gray-release.sql
│ │ ├── test-release-message.sql
│ │ ├── test-release-public-dc-override.sql
│ │ ├── test-release-public-default-override.sql
│ │ └── test-release.sql
│ └── logback-test.xml
├── apollo-portal/
│ ├── pom.xml
│ └── src/
│ ├── assembly/
│ │ └── assembly-descriptor.xml
│ ├── main/
│ │ ├── docker/
│ │ │ └── Dockerfile
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── ctrip/
│ │ │ └── framework/
│ │ │ └── apollo/
│ │ │ ├── openapi/
│ │ │ │ ├── PortalOpenApiConfig.java
│ │ │ │ ├── auth/
│ │ │ │ │ └── ConsumerPermissionValidator.java
│ │ │ │ ├── entity/
│ │ │ │ │ ├── Consumer.java
│ │ │ │ │ ├── ConsumerAudit.java
│ │ │ │ │ ├── ConsumerRole.java
│ │ │ │ │ └── ConsumerToken.java
│ │ │ │ ├── filter/
│ │ │ │ │ └── ConsumerAuthenticationFilter.java
│ │ │ │ ├── repository/
│ │ │ │ │ ├── ConsumerAuditRepository.java
│ │ │ │ │ ├── ConsumerRepository.java
│ │ │ │ │ ├── ConsumerRoleRepository.java
│ │ │ │ │ └── ConsumerTokenRepository.java
│ │ │ │ ├── server/
│ │ │ │ │ └── service/
│ │ │ │ │ ├── AppOpenApiService.java
│ │ │ │ │ ├── ClusterOpenApiService.java
│ │ │ │ │ ├── EnvOpenApiService.java
│ │ │ │ │ ├── OrganizationOpenApiService.java
│ │ │ │ │ ├── ServerAppOpenApiService.java
│ │ │ │ │ ├── ServerClusterOpenApiService.java
│ │ │ │ │ ├── ServerEnvOpenApiService.java
│ │ │ │ │ ├── ServerInstanceOpenApiService.java
│ │ │ │ │ ├── ServerItemOpenApiService.java
│ │ │ │ │ ├── ServerNamespaceOpenApiService.java
│ │ │ │ │ ├── ServerOrganizationOpenApiService.java
│ │ │ │ │ └── ServerReleaseOpenApiService.java
│ │ │ │ ├── service/
│ │ │ │ │ ├── ConsumerRolePermissionService.java
│ │ │ │ │ └── ConsumerService.java
│ │ │ │ ├── util/
│ │ │ │ │ ├── ConsumerAuditUtil.java
│ │ │ │ │ ├── ConsumerAuthUtil.java
│ │ │ │ │ ├── OpenApiBeanUtils.java
│ │ │ │ │ └── OpenApiModelConverters.java
│ │ │ │ └── v1/
│ │ │ │ └── controller/
│ │ │ │ ├── AppController.java
│ │ │ │ ├── ClusterController.java
│ │ │ │ ├── EnvController.java
│ │ │ │ ├── InstanceController.java
│ │ │ │ ├── ItemController.java
│ │ │ │ ├── NamespaceBranchController.java
│ │ │ │ ├── NamespaceController.java
│ │ │ │ ├── OrganizationController.java
│ │ │ │ └── ReleaseController.java
│ │ │ └── portal/
│ │ │ ├── PortalApplication.java
│ │ │ ├── PortalAssemblyConfiguration.java
│ │ │ ├── ServletInitializer.java
│ │ │ ├── api/
│ │ │ │ ├── API.java
│ │ │ │ └── AdminServiceAPI.java
│ │ │ ├── audit/
│ │ │ │ ├── ApolloAuditLogQueryApiPortalPreAuthorizer.java
│ │ │ │ └── ApolloAuditOperatorPortalSupplier.java
│ │ │ ├── component/
│ │ │ │ ├── AbstractPermissionValidator.java
│ │ │ │ ├── AdminServiceAddressLocator.java
│ │ │ │ ├── ConfigReleaseWebhookNotifier.java
│ │ │ │ ├── ItemsComparator.java
│ │ │ │ ├── PermissionValidator.java
│ │ │ │ ├── PortalSettings.java
│ │ │ │ ├── RestTemplateFactory.java
│ │ │ │ ├── RetryableRestTemplate.java
│ │ │ │ ├── UnifiedPermissionValidator.java
│ │ │ │ ├── UserIdentityContextHolder.java
│ │ │ │ ├── UserPermissionValidator.java
│ │ │ │ ├── config/
│ │ │ │ │ ├── PortalConfig.java
│ │ │ │ │ └── SpringSessionConfig.java
│ │ │ │ ├── emailbuilder/
│ │ │ │ │ ├── ConfigPublishEmailBuilder.java
│ │ │ │ │ ├── GrayPublishEmailBuilder.java
│ │ │ │ │ ├── MergeEmailBuilder.java
│ │ │ │ │ ├── NormalPublishEmailBuilder.java
│ │ │ │ │ └── RollbackEmailBuilder.java
│ │ │ │ └── txtresolver/
│ │ │ │ ├── ConfigTextResolver.java
│ │ │ │ ├── FileTextResolver.java
│ │ │ │ └── PropertyResolver.java
│ │ │ ├── constant/
│ │ │ │ ├── PermissionType.java
│ │ │ │ ├── RoleType.java
│ │ │ │ ├── TracerEventType.java
│ │ │ │ └── UserIdentityConstants.java
│ │ │ ├── controller/
│ │ │ │ ├── AccessKeyController.java
│ │ │ │ ├── AppController.java
│ │ │ │ ├── ClusterController.java
│ │ │ │ ├── CommitController.java
│ │ │ │ ├── ConfigsExportController.java
│ │ │ │ ├── ConfigsImportController.java
│ │ │ │ ├── ConsumerController.java
│ │ │ │ ├── EnvController.java
│ │ │ │ ├── FavoriteController.java
│ │ │ │ ├── GlobalSearchController.java
│ │ │ │ ├── InstanceController.java
│ │ │ │ ├── ItemController.java
│ │ │ │ ├── NamespaceBranchController.java
│ │ │ │ ├── NamespaceController.java
│ │ │ │ ├── NamespaceLockController.java
│ │ │ │ ├── OrganizationController.java
│ │ │ │ ├── PageSettingController.java
│ │ │ │ ├── PermissionController.java
│ │ │ │ ├── PrefixPathController.java
│ │ │ │ ├── ReleaseController.java
│ │ │ │ ├── ReleaseHistoryController.java
│ │ │ │ ├── SearchController.java
│ │ │ │ ├── ServerConfigController.java
│ │ │ │ ├── SignInController.java
│ │ │ │ ├── SsoHeartbeatController.java
│ │ │ │ ├── SystemInfoController.java
│ │ │ │ └── UserInfoController.java
│ │ │ ├── enricher/
│ │ │ │ ├── AdditionalUserInfoEnricher.java
│ │ │ │ ├── adapter/
│ │ │ │ │ ├── AppDtoUserInfoEnrichedAdapter.java
│ │ │ │ │ ├── BaseDtoUserInfoEnrichedAdapter.java
│ │ │ │ │ └── UserInfoEnrichedAdapter.java
│ │ │ │ └── impl/
│ │ │ │ └── UserDisplayNameEnricher.java
│ │ │ ├── entity/
│ │ │ │ ├── bo/
│ │ │ │ │ ├── ConfigBO.java
│ │ │ │ │ ├── Email.java
│ │ │ │ │ ├── ItemBO.java
│ │ │ │ │ ├── KVEntity.java
│ │ │ │ │ ├── NamespaceBO.java
│ │ │ │ │ ├── ReleaseBO.java
│ │ │ │ │ ├── ReleaseHistoryBO.java
│ │ │ │ │ └── UserInfo.java
│ │ │ │ ├── model/
│ │ │ │ │ ├── AppModel.java
│ │ │ │ │ ├── NamespaceCreationModel.java
│ │ │ │ │ ├── NamespaceGrayDelReleaseModel.java
│ │ │ │ │ ├── NamespaceReleaseModel.java
│ │ │ │ │ ├── NamespaceSyncModel.java
│ │ │ │ │ ├── NamespaceTextModel.java
│ │ │ │ │ └── Verifiable.java
│ │ │ │ ├── po/
│ │ │ │ │ ├── Authority.java
│ │ │ │ │ ├── Favorite.java
│ │ │ │ │ ├── Permission.java
│ │ │ │ │ ├── Role.java
│ │ │ │ │ ├── RolePermission.java
│ │ │ │ │ ├── ServerConfig.java
│ │ │ │ │ ├── UserPO.java
│ │ │ │ │ └── UserRole.java
│ │ │ │ └── vo/
│ │ │ │ ├── AppRolesAssignedUsers.java
│ │ │ │ ├── Change.java
│ │ │ │ ├── ClusterNamespaceRolesAssignedUsers.java
│ │ │ │ ├── EnvClusterInfo.java
│ │ │ │ ├── EnvironmentInfo.java
│ │ │ │ ├── ItemDiffs.java
│ │ │ │ ├── ItemInfo.java
│ │ │ │ ├── LockInfo.java
│ │ │ │ ├── NamespaceEnvRolesAssignedUsers.java
│ │ │ │ ├── NamespaceIdentifier.java
│ │ │ │ ├── NamespaceRolesAssignedUsers.java
│ │ │ │ ├── NamespaceUsage.java
│ │ │ │ ├── Number.java
│ │ │ │ ├── Organization.java
│ │ │ │ ├── PageSetting.java
│ │ │ │ ├── PermissionCondition.java
│ │ │ │ ├── ReleaseCompareResult.java
│ │ │ │ ├── SystemInfo.java
│ │ │ │ └── consumer/
│ │ │ │ ├── ConsumerCreateRequestVO.java
│ │ │ │ └── ConsumerInfo.java
│ │ │ ├── enums/
│ │ │ │ └── ChangeType.java
│ │ │ ├── environment/
│ │ │ │ ├── DatabasePortalMetaServerProvider.java
│ │ │ │ ├── DefaultPortalMetaServerProvider.java
│ │ │ │ ├── Env.java
│ │ │ │ ├── PortalMetaDomainService.java
│ │ │ │ └── PortalMetaServerProvider.java
│ │ │ ├── filter/
│ │ │ │ ├── PortalUserSessionFilter.java
│ │ │ │ └── UserTypeResolverFilter.java
│ │ │ ├── listener/
│ │ │ │ ├── AppCreationEvent.java
│ │ │ │ ├── AppDeletionEvent.java
│ │ │ │ ├── AppInfoChangedEvent.java
│ │ │ │ ├── AppInfoChangedListener.java
│ │ │ │ ├── AppNamespaceCreationEvent.java
│ │ │ │ ├── AppNamespaceDeletionEvent.java
│ │ │ │ ├── ConfigPublishEvent.java
│ │ │ │ ├── ConfigPublishListener.java
│ │ │ │ ├── CreationListener.java
│ │ │ │ └── DeletionListener.java
│ │ │ ├── repository/
│ │ │ │ ├── AppNamespaceRepository.java
│ │ │ │ ├── AppRepository.java
│ │ │ │ ├── AuthorityRepository.java
│ │ │ │ ├── FavoriteRepository.java
│ │ │ │ ├── PermissionRepository.java
│ │ │ │ ├── RolePermissionRepository.java
│ │ │ │ ├── RoleRepository.java
│ │ │ │ ├── ServerConfigRepository.java
│ │ │ │ ├── UserRepository.java
│ │ │ │ └── UserRoleRepository.java
│ │ │ ├── service/
│ │ │ │ ├── AccessKeyService.java
│ │ │ │ ├── AdditionalUserInfoEnrichService.java
│ │ │ │ ├── AdditionalUserInfoEnrichServiceImpl.java
│ │ │ │ ├── AppNamespaceService.java
│ │ │ │ ├── AppService.java
│ │ │ │ ├── ClusterService.java
│ │ │ │ ├── CommitService.java
│ │ │ │ ├── ConfigsExportService.java
│ │ │ │ ├── ConfigsImportService.java
│ │ │ │ ├── FavoriteService.java
│ │ │ │ ├── GlobalSearchService.java
│ │ │ │ ├── InstanceService.java
│ │ │ │ ├── ItemService.java
│ │ │ │ ├── NamespaceBranchService.java
│ │ │ │ ├── NamespaceLockService.java
│ │ │ │ ├── NamespaceService.java
│ │ │ │ ├── PortalDBPropertySource.java
│ │ │ │ ├── ReleaseHistoryService.java
│ │ │ │ ├── ReleaseService.java
│ │ │ │ ├── RoleInitializationService.java
│ │ │ │ ├── RolePermissionService.java
│ │ │ │ ├── ServerConfigService.java
│ │ │ │ └── SystemRoleManagerService.java
│ │ │ ├── spi/
│ │ │ │ ├── EmailService.java
│ │ │ │ ├── LogoutHandler.java
│ │ │ │ ├── MQService.java
│ │ │ │ ├── SsoHeartbeatHandler.java
│ │ │ │ ├── UserInfoHolder.java
│ │ │ │ ├── UserService.java
│ │ │ │ ├── configuration/
│ │ │ │ │ ├── AuthConfiguration.java
│ │ │ │ │ ├── AuthFilterConfiguration.java
│ │ │ │ │ ├── EmailConfiguration.java
│ │ │ │ │ ├── LdapExtendProperties.java
│ │ │ │ │ ├── LdapGroupProperties.java
│ │ │ │ │ ├── LdapMappingProperties.java
│ │ │ │ │ ├── LdapProperties.java
│ │ │ │ │ ├── MQConfiguration.java
│ │ │ │ │ ├── OidcExtendProperties.java
│ │ │ │ │ └── RoleConfiguration.java
│ │ │ │ ├── defaultimpl/
│ │ │ │ │ ├── DefaultEmailService.java
│ │ │ │ │ ├── DefaultLogoutHandler.java
│ │ │ │ │ ├── DefaultMQService.java
│ │ │ │ │ ├── DefaultRoleInitializationService.java
│ │ │ │ │ ├── DefaultRolePermissionService.java
│ │ │ │ │ ├── DefaultSsoHeartbeatHandler.java
│ │ │ │ │ ├── DefaultUserInfoHolder.java
│ │ │ │ │ └── DefaultUserService.java
│ │ │ │ ├── ldap/
│ │ │ │ │ ├── ApolloLdapAuthenticationProvider.java
│ │ │ │ │ ├── FilterLdapByGroupUserSearch.java
│ │ │ │ │ └── LdapUserService.java
│ │ │ │ ├── oidc/
│ │ │ │ │ ├── ExcludeClientCredentialsClientRegistrationRepository.java
│ │ │ │ │ ├── OidcAuthenticationSuccessEventListener.java
│ │ │ │ │ ├── OidcLocalUserService.java
│ │ │ │ │ ├── OidcLocalUserServiceImpl.java
│ │ │ │ │ ├── OidcLogoutHandler.java
│ │ │ │ │ ├── OidcUserInfoHolder.java
│ │ │ │ │ ├── OidcUserInfoUtil.java
│ │ │ │ │ └── PlaceholderPasswordEncoder.java
│ │ │ │ ├── package-info.java
│ │ │ │ └── springsecurity/
│ │ │ │ ├── ApolloPasswordEncoderFactory.java
│ │ │ │ ├── PasswordEncoderAdapter.java
│ │ │ │ ├── SpringSecurityUserInfoHolder.java
│ │ │ │ └── SpringSecurityUserService.java
│ │ │ └── util/
│ │ │ ├── ConfigFileUtils.java
│ │ │ ├── ConfigToFileUtils.java
│ │ │ ├── KeyValueUtils.java
│ │ │ ├── NamespaceBOUtils.java
│ │ │ ├── RelativeDateFormat.java
│ │ │ ├── RoleUtils.java
│ │ │ └── checker/
│ │ │ ├── AuthUserPasswordChecker.java
│ │ │ ├── CheckResult.java
│ │ │ └── UserPasswordChecker.java
│ │ ├── resources/
│ │ │ ├── apollo-env.properties
│ │ │ ├── apollo-portal.conf
│ │ │ ├── application-github.properties
│ │ │ ├── application-ldap-activedirectory-sample.yml
│ │ │ ├── application-ldap-apacheds-sample.yml
│ │ │ ├── application-ldap-openldap-sample.yml
│ │ │ ├── application-oidc-sample.yml
│ │ │ ├── application.properties
│ │ │ ├── application.yml
│ │ │ ├── jpa/
│ │ │ │ └── portaldb.init.h2.sql
│ │ │ ├── logback.xml
│ │ │ ├── portal.properties
│ │ │ └── static/
│ │ │ ├── app/
│ │ │ │ ├── access_key.html
│ │ │ │ ├── manage_cluster.html
│ │ │ │ └── setting.html
│ │ │ ├── app.html
│ │ │ ├── audit_log_menu.html
│ │ │ ├── audit_log_trace_detail.html
│ │ │ ├── cluster/
│ │ │ │ └── ns_role.html
│ │ │ ├── cluster.html
│ │ │ ├── config/
│ │ │ │ ├── diff.html
│ │ │ │ ├── history.html
│ │ │ │ └── sync.html
│ │ │ ├── config.html
│ │ │ ├── config_export.html
│ │ │ ├── default_sso_heartbeat.html
│ │ │ ├── delete_app_cluster_namespace.html
│ │ │ ├── global_search_value.html
│ │ │ ├── i18n/
│ │ │ │ ├── en.json
│ │ │ │ └── zh-CN.json
│ │ │ ├── index.html
│ │ │ ├── login.html
│ │ │ ├── namespace/
│ │ │ │ └── role.html
│ │ │ ├── namespace.html
│ │ │ ├── open/
│ │ │ │ ├── add-consumer.html
│ │ │ │ ├── grant-permission-modal.html
│ │ │ │ └── manage.html
│ │ │ ├── scripts/
│ │ │ │ ├── AppUtils.js
│ │ │ │ ├── PageCommon.js
│ │ │ │ ├── app.js
│ │ │ │ ├── controller/
│ │ │ │ │ ├── AccessKeyController.js
│ │ │ │ │ ├── AppController.js
│ │ │ │ │ ├── AuditLogMenuController.js
│ │ │ │ │ ├── AuditLogTraceDetailController.js
│ │ │ │ │ ├── BackTopController.js
│ │ │ │ │ ├── ClusterController.js
│ │ │ │ │ ├── ConfigExportController.js
│ │ │ │ │ ├── DeleteAppClusterNamespaceController.js
│ │ │ │ │ ├── GlobalSearchValueController.js
│ │ │ │ │ ├── IndexController.js
│ │ │ │ │ ├── LoginController.js
│ │ │ │ │ ├── ManageClusterController.js
│ │ │ │ │ ├── NamespaceController.js
│ │ │ │ │ ├── ServerConfigController.js
│ │ │ │ │ ├── SettingController.js
│ │ │ │ │ ├── SystemInfoController.js
│ │ │ │ │ ├── UserController.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── ConfigBaseInfoController.js
│ │ │ │ │ │ ├── ConfigNamespaceController.js
│ │ │ │ │ │ ├── DiffConfigController.js
│ │ │ │ │ │ ├── ReleaseHistoryController.js
│ │ │ │ │ │ └── SyncConfigController.js
│ │ │ │ │ ├── open/
│ │ │ │ │ │ └── OpenManageController.js
│ │ │ │ │ └── role/
│ │ │ │ │ ├── ClusterNamespaceRoleController.js
│ │ │ │ │ ├── NamespaceRoleController.js
│ │ │ │ │ └── SystemRoleController.js
│ │ │ │ ├── directive/
│ │ │ │ │ ├── delete-namespace-modal-directive.js
│ │ │ │ │ ├── diff-directive.js
│ │ │ │ │ ├── directive.js
│ │ │ │ │ ├── gray-release-rules-modal-directive.js
│ │ │ │ │ ├── import-namespace-modal-directive.js
│ │ │ │ │ ├── item-modal-directive.js
│ │ │ │ │ ├── merge-and-publish-modal-directive.js
│ │ │ │ │ ├── namespace-panel-directive.js
│ │ │ │ │ ├── open-manage-grant-permission-modal-directive.js
│ │ │ │ │ ├── publish-deny-modal-directive.js
│ │ │ │ │ ├── release-modal-directive.js
│ │ │ │ │ ├── rollback-modal-directive.js
│ │ │ │ │ └── show-text-modal-directive.js
│ │ │ │ ├── services/
│ │ │ │ │ ├── AccessKeyService.js
│ │ │ │ │ ├── AppService.js
│ │ │ │ │ ├── AuditLogService.js
│ │ │ │ │ ├── ClusterService.js
│ │ │ │ │ ├── CommitService.js
│ │ │ │ │ ├── CommonService.js
│ │ │ │ │ ├── ConfigService.js
│ │ │ │ │ ├── ConsumerService.js
│ │ │ │ │ ├── EnvService.js
│ │ │ │ │ ├── EventManager.js
│ │ │ │ │ ├── ExportService.js
│ │ │ │ │ ├── FavoriteService.js
│ │ │ │ │ ├── GlobalSearchValueService.js
│ │ │ │ │ ├── InstanceService.js
│ │ │ │ │ ├── NamespaceBranchService.js
│ │ │ │ │ ├── NamespaceLockService.js
│ │ │ │ │ ├── NamespaceService.js
│ │ │ │ │ ├── OrganizationService.js
│ │ │ │ │ ├── PermissionService.js
│ │ │ │ │ ├── ReleaseHistoryService.js
│ │ │ │ │ ├── ReleaseService.js
│ │ │ │ │ ├── ServerConfigService.js
│ │ │ │ │ ├── SystemInfoService.js
│ │ │ │ │ ├── SystemRoleService.js
│ │ │ │ │ └── UserService.js
│ │ │ │ └── valdr.js
│ │ │ ├── server_config_manage.html
│ │ │ ├── styles/
│ │ │ │ ├── audit-log.css
│ │ │ │ └── common-style.css
│ │ │ ├── system-role-manage.html
│ │ │ ├── system_info.html
│ │ │ ├── user-manage.html
│ │ │ ├── vendor/
│ │ │ │ ├── iconfont/
│ │ │ │ │ └── iconfont.css
│ │ │ │ ├── jquery-plugin/
│ │ │ │ │ ├── jquery.textareafullscreen.js
│ │ │ │ │ └── textareafullscreen.css
│ │ │ │ └── ui-ace/
│ │ │ │ ├── ace.js
│ │ │ │ ├── ext-searchbox.js
│ │ │ │ ├── mode-json.js
│ │ │ │ ├── mode-properties.js
│ │ │ │ ├── mode-xml.js
│ │ │ │ ├── mode-yaml.js
│ │ │ │ ├── theme-eclipse.js
│ │ │ │ ├── worker-json.js
│ │ │ │ └── worker-xml.js
│ │ │ └── views/
│ │ │ ├── common/
│ │ │ │ ├── footer.html
│ │ │ │ └── nav.html
│ │ │ └── component/
│ │ │ ├── back-top.html
│ │ │ ├── confirm-dialog.html
│ │ │ ├── delete-namespace-modal.html
│ │ │ ├── diff.html
│ │ │ ├── entrance.html
│ │ │ ├── env-selector.html
│ │ │ ├── gray-release-rules-modal.html
│ │ │ ├── import-namespace-modal.html
│ │ │ ├── item-modal.html
│ │ │ ├── merge-and-publish-modal.html
│ │ │ ├── multiple-user-selector.html
│ │ │ ├── namespace-panel-branch-tab.html
│ │ │ ├── namespace-panel-header.html
│ │ │ ├── namespace-panel-master-tab.html
│ │ │ ├── namespace-panel.html
│ │ │ ├── publish-deny-modal.html
│ │ │ ├── release-modal.html
│ │ │ ├── rollback-modal.html
│ │ │ ├── show-text-modal.html
│ │ │ └── user-selector.html
│ │ └── scripts/
│ │ ├── shutdown.sh
│ │ └── startup.sh
│ └── test/
│ ├── java/
│ │ └── com/
│ │ └── ctrip/
│ │ └── framework/
│ │ └── apollo/
│ │ ├── ControllableAuthorizationConfiguration.java
│ │ ├── LocalPortalApplication.java
│ │ ├── SkipAuthorizationConfiguration.java
│ │ ├── openapi/
│ │ │ ├── auth/
│ │ │ │ └── ConsumerPermissionValidatorTest.java
│ │ │ ├── filter/
│ │ │ │ └── ConsumerAuthenticationFilterTest.java
│ │ │ ├── service/
│ │ │ │ ├── ConsumerRolePermissionServiceTest.java
│ │ │ │ ├── ConsumerServiceIntegrationTest.java
│ │ │ │ └── ConsumerServiceTest.java
│ │ │ ├── util/
│ │ │ │ ├── ConsumerAuditUtilTest.java
│ │ │ │ └── ConsumerAuthUtilTest.java
│ │ │ └── v1/
│ │ │ └── controller/
│ │ │ ├── AbstractControllerTest.java
│ │ │ ├── AppControllerIntegrationTest.java
│ │ │ ├── AppControllerParamBindLowLevelTest.java
│ │ │ ├── AppControllerTest.java
│ │ │ ├── ClusterControllerParamBindLowLevelTest.java
│ │ │ ├── ClusterControllerTest.java
│ │ │ ├── EnvControllerTest.java
│ │ │ ├── NamespaceControllerTest.java
│ │ │ ├── NamespaceControllerWithAuthorizationTest.java
│ │ │ └── OrganizationControllerTest.java
│ │ └── portal/
│ │ ├── AbstractIntegrationTest.java
│ │ ├── AbstractUnitTest.java
│ │ ├── RetryableRestTemplateTest.java
│ │ ├── ServiceExceptionTest.java
│ │ ├── component/
│ │ │ ├── AbstractPermissionValidatorTest.java
│ │ │ ├── UnifiedPermissionValidatorTest.java
│ │ │ ├── UserIdentityContextHolderTest.java
│ │ │ ├── UserPermissionValidatorTest.java
│ │ │ ├── UserPermissionValidatorTestSupplement.java
│ │ │ ├── config/
│ │ │ │ └── PortalConfigTest.java
│ │ │ └── txtresolver/
│ │ │ ├── FileTextResolverTest.java
│ │ │ └── PropertyResolverTest.java
│ │ ├── config/
│ │ │ └── ConfigTest.java
│ │ ├── controller/
│ │ │ ├── ClusterControllerTest.java
│ │ │ ├── CommitControllerTest.java
│ │ │ ├── ConfigsExportControllerTest.java
│ │ │ ├── ConfigsImportControllerTest.java
│ │ │ ├── ConsumerControllerTest.java
│ │ │ ├── EnvControllerTest.java
│ │ │ ├── GlobalSearchControllerTest.java
│ │ │ ├── InstanceControllerTest.java
│ │ │ ├── ItemControllerAuthIntegrationTest.java
│ │ │ ├── ItemControllerTest.java
│ │ │ ├── NamespaceLockControllerTest.java
│ │ │ ├── OrganizationControllerTest.java
│ │ │ ├── PageSettingControllerTest.java
│ │ │ ├── PermissionControllerTest.java
│ │ │ ├── PrefixPathControllerTest.java
│ │ │ ├── ReleaseHistoryControllerTest.java
│ │ │ ├── SearchControllerTest.java
│ │ │ ├── ServerConfigControllerTest.java
│ │ │ ├── SignInControllerTest.java
│ │ │ ├── SsoHeartbeatControllerTest.java
│ │ │ ├── SystemInfoControllerTest.java
│ │ │ └── UserInfoControllerTest.java
│ │ ├── environment/
│ │ │ ├── BaseIntegrationTest.java
│ │ │ ├── DatabasePortalMetaServerProviderTest.java
│ │ │ ├── DefaultPortalMetaServerProviderTest.java
│ │ │ ├── EnvTest.java
│ │ │ └── PortalMetaDomainServiceTest.java
│ │ ├── filter/
│ │ │ ├── PortalOpenApiAuthenticationScenariosTest.java
│ │ │ └── UserTypeResolverFilter.java
│ │ ├── service/
│ │ │ ├── AppNamespaceServiceTest.java
│ │ │ ├── AppServiceTest.java
│ │ │ ├── ConfigServiceTest.java
│ │ │ ├── ConfigsExportServiceTest.java
│ │ │ ├── FavoriteServiceTest.java
│ │ │ ├── GlobalSearchServiceTest.java
│ │ │ └── NamespaceServiceTest.java
│ │ ├── spi/
│ │ │ └── defaultImpl/
│ │ │ ├── RoleInitializationServiceTest.java
│ │ │ └── RolePermissionServiceTest.java
│ │ └── util/
│ │ ├── AuthUserPasswordCheckerTest.java
│ │ ├── ConfigFileUtilsTest.java
│ │ ├── KeyValueUtilsTest.java
│ │ └── RoleUtilsTest.java
│ └── resources/
│ ├── application.properties
│ ├── application.yml
│ ├── import.sql
│ ├── logback-test.xml
│ ├── sql/
│ │ ├── appnamespaceservice/
│ │ │ └── init-appnamespace.sql
│ │ ├── cleanup.sql
│ │ ├── favorites/
│ │ │ └── favorites.sql
│ │ ├── openapi/
│ │ │ ├── ConsumerServiceIntegrationTest.commonData.sql
│ │ │ ├── ConsumerServiceIntegrationTest.testFindAppIdsAuthorizedByConsumerId.sql
│ │ │ └── NamespaceControllerTest.testCreateAppNamespace.sql
│ │ └── permission/
│ │ ├── RolePermissionServiceTest.deleteRolePermissionsByAppIdWithClusterRoles.sql
│ │ ├── consumer_role_permission_service/
│ │ │ ├── test_get_user_permission_set_different_users.sql
│ │ │ ├── test_get_user_permission_set_no_roles.sql
│ │ │ ├── test_get_user_permission_set_roles_without_permissions.sql
│ │ │ └── test_get_user_permission_set_with_permissions.sql
│ │ ├── insert-test-consumerroles.sql
│ │ ├── insert-test-getUserPermissionSet.sql
│ │ ├── insert-test-permissions.sql
│ │ ├── insert-test-rolepermissions.sql
│ │ ├── insert-test-roles.sql
│ │ └── insert-test-userroles.sql
│ ├── static/
│ │ └── scripts/
│ │ └── test_hasDuplicateKeys.js
│ └── yaml/
│ ├── case1.yaml
│ ├── case2.yaml
│ └── case3.yaml
├── changes/
│ ├── changes-1.9.0.md
│ ├── changes-1.9.1.md
│ ├── changes-1.9.2.md
│ ├── changes-2.0.0.md
│ ├── changes-2.0.1.md
│ ├── changes-2.1.0.md
│ ├── changes-2.2.0.md
│ ├── changes-2.3.0.md
│ ├── changes-2.4.0.md
│ └── changes-2.5.0.md
├── docs/
│ ├── .nojekyll
│ ├── CNAME
│ ├── _coverpage.md
│ ├── charts/
│ │ ├── apollo-portal-0.1.0.tgz
│ │ ├── apollo-portal-0.1.1.tgz
│ │ ├── apollo-portal-0.1.2.tgz
│ │ ├── apollo-portal-0.2.0.tgz
│ │ ├── apollo-portal-0.2.1.tgz
│ │ ├── apollo-portal-0.2.2.tgz
│ │ ├── apollo-portal-0.3.0.tgz
│ │ ├── apollo-portal-0.3.1.tgz
│ │ ├── apollo-service-0.1.0.tgz
│ │ ├── apollo-service-0.1.1.tgz
│ │ ├── apollo-service-0.1.2.tgz
│ │ ├── apollo-service-0.2.0.tgz
│ │ ├── apollo-service-0.2.1.tgz
│ │ ├── apollo-service-0.2.2.tgz
│ │ ├── apollo-service-0.3.0.tgz
│ │ ├── apollo-service-0.3.1.tgz
│ │ └── index.yaml
│ ├── css/
│ │ ├── buble.css
│ │ ├── dark.css
│ │ ├── fonts.css
│ │ ├── pure.css
│ │ └── vue.css
│ ├── en/
│ │ ├── README.md
│ │ ├── _navbar.md
│ │ ├── _sidebar.md
│ │ ├── client/
│ │ │ ├── c-sdks-user-guide.md
│ │ │ ├── cpp-sdks-user-guide.md
│ │ │ ├── dotnet-sdk-user-guide.md
│ │ │ ├── golang-sdks-user-guide.md
│ │ │ ├── java-sdk-user-guide.md
│ │ │ ├── k8s-configmap-user-guide.md
│ │ │ ├── nodejs-sdks-user-guide.md
│ │ │ ├── other-language-client-user-guide.md
│ │ │ ├── php-sdks-user-guide.md
│ │ │ ├── python-sdks-user-guide.md
│ │ │ └── rust-sdks-user-guide.md
│ │ ├── community/
│ │ │ ├── team.md
│ │ │ └── thank-you.md
│ │ ├── contribution/
│ │ │ ├── apollo-development-guide.md
│ │ │ └── apollo-release-guide.md
│ │ ├── deployment/
│ │ │ ├── deployment-architecture.md
│ │ │ ├── distributed-deployment-guide.md
│ │ │ ├── quick-start-docker.md
│ │ │ ├── quick-start.md
│ │ │ ├── third-party-tool-btpanel.md
│ │ │ └── third-party-tool-rainbond.md
│ │ ├── design/
│ │ │ ├── apollo-core-concept-namespace.md
│ │ │ ├── apollo-design.md
│ │ │ └── apollo-introduction.md
│ │ ├── extension/
│ │ │ ├── portal-how-to-enable-email-service.md
│ │ │ ├── portal-how-to-enable-session-store.md
│ │ │ ├── portal-how-to-enable-webhook-notification.md
│ │ │ └── portal-how-to-implement-user-login-function.md
│ │ ├── faq/
│ │ │ ├── common-issues-in-deployment-and-development-phase.md
│ │ │ └── faq.md
│ │ ├── misc/
│ │ │ └── apollo-benchmark.md
│ │ ├── portal/
│ │ │ ├── apollo-open-api-platform.md
│ │ │ ├── apollo-user-guide.md
│ │ │ └── apollo-user-practices.md
│ │ └── quick-start.md
│ ├── index.html
│ ├── scripts/
│ │ └── multiple-language-redirect.js
│ └── zh/
│ ├── README.md
│ ├── _navbar.md
│ ├── _sidebar.md
│ ├── client/
│ │ ├── c-sdks-user-guide.md
│ │ ├── cpp-sdks-user-guide.md
│ │ ├── dotnet-sdk-user-guide.md
│ │ ├── golang-sdks-user-guide.md
│ │ ├── java-sdk-user-guide.md
│ │ ├── k8s-configmap-user-guide.md
│ │ ├── nodejs-sdks-user-guide.md
│ │ ├── other-language-client-user-guide.md
│ │ ├── php-sdks-user-guide.md
│ │ ├── python-sdks-user-guide.md
│ │ └── rust-sdks-user-guide.md
│ ├── community/
│ │ ├── team.md
│ │ └── thank-you.md
│ ├── contribution/
│ │ ├── apollo-development-guide.md
│ │ └── apollo-release-guide.md
│ ├── deployment/
│ │ ├── deployment-architecture.md
│ │ ├── distributed-deployment-guide.md
│ │ ├── quick-start-docker.md
│ │ ├── quick-start.md
│ │ ├── third-party-tool-btpanel.md
│ │ └── third-party-tool-rainbond.md
│ ├── design/
│ │ ├── apollo-core-concept-namespace.md
│ │ ├── apollo-design.md
│ │ └── apollo-introduction.md
│ ├── extension/
│ │ ├── portal-how-to-enable-email-service.md
│ │ ├── portal-how-to-enable-session-store.md
│ │ ├── portal-how-to-enable-webhook-notification.md
│ │ └── portal-how-to-implement-user-login-function.md
│ ├── faq/
│ │ ├── common-issues-in-deployment-and-development-phase.md
│ │ └── faq.md
│ ├── misc/
│ │ └── apollo-benchmark.md
│ └── portal/
│ ├── apollo-open-api-platform.md
│ ├── apollo-user-guide.md
│ └── apollo-user-practices.md
├── e2e/
│ ├── README.md
│ └── portal-e2e/
│ ├── .gitignore
│ ├── config/
│ │ ├── application-ldap-e2e.yml
│ │ └── application-oidc-e2e.yml
│ ├── package.json
│ ├── playwright.config.js
│ ├── scripts/
│ │ ├── auth/
│ │ │ ├── setup-ldap.sh
│ │ │ ├── setup-oidc.sh
│ │ │ └── teardown-auth.sh
│ │ └── wait-for-ready.sh
│ └── tests/
│ ├── helpers/
│ │ ├── auth-helpers.js
│ │ └── portal-helpers.js
│ ├── portal-auth-matrix.spec.js
│ ├── portal-configservice.spec.js
│ ├── portal-core.spec.js
│ ├── portal-priority.spec.js
│ └── portal-regression.spec.js
├── mvnw
├── mvnw.cmd
├── pom.xml
└── scripts/
├── build.bat
├── build.sh
├── openapi/
│ └── bash/
│ ├── openapi-usage-example.sh
│ └── openapi.sh
└── sql/
├── profiles/
│ ├── h2-default/
│ │ ├── apolloconfigdb.sql
│ │ ├── apolloportaldb.sql
│ │ └── delta/
│ │ ├── v220-v230/
│ │ │ ├── apolloconfigdb-v220-v230.sql
│ │ │ └── apolloportaldb-v220-v230.sql
│ │ └── v230-v240/
│ │ ├── apolloconfigdb-v230-v240.sql
│ │ └── apolloportaldb-v230-v240.sql
│ ├── mysql-database-not-specified/
│ │ ├── apolloconfigdb.sql
│ │ ├── apolloportaldb.sql
│ │ └── delta/
│ │ ├── v220-v230/
│ │ │ ├── apolloconfigdb-v220-v230.sql
│ │ │ └── apolloportaldb-v220-v230.sql
│ │ └── v230-v240/
│ │ ├── apolloconfigdb-v230-v240.sql
│ │ └── apolloportaldb-v230-v240.sql
│ └── mysql-default/
│ ├── apolloconfigdb.sql
│ ├── apolloportaldb.sql
│ └── delta/
│ ├── v040-v050/
│ │ ├── apolloconfigdb-v040-v050.sql
│ │ └── apolloportaldb-v040-v050.sql
│ ├── v060-v062/
│ │ ├── apolloconfigdb-v060-v062.sql
│ │ └── apolloportaldb-v060-v062.sql
│ ├── v080-v090/
│ │ └── apolloportaldb-v080-v090.sql
│ ├── v151-v160/
│ │ └── apolloconfigdb-v151-v160.sql
│ ├── v170-v180/
│ │ ├── apolloconfigdb-v170-v180.sql
│ │ └── apolloportaldb-v170-v180.sql
│ ├── v180-v190/
│ │ ├── apolloconfigdb-v180-v190.sql
│ │ └── apolloportaldb-v180-v190.sql
│ ├── v190-v200/
│ │ ├── apolloconfigdb-v190-v200-after.sql
│ │ ├── apolloconfigdb-v190-v200.sql
│ │ ├── apolloportaldb-v190-v200-after.sql
│ │ └── apolloportaldb-v190-v200.sql
│ ├── v200-v210/
│ │ └── apolloconfigdb-v200-v210.sql
│ ├── v210-v220/
│ │ ├── apolloconfigdb-v210-v220.sql
│ │ └── apolloportaldb-v210-v220.sql
│ ├── v220-v230/
│ │ ├── apolloconfigdb-v220-v230.sql
│ │ └── apolloportaldb-v220-v230.sql
│ └── v230-v240/
│ ├── apolloconfigdb-v230-v240.sql
│ └── apolloportaldb-v230-v240.sql
└── src/
├── apolloconfigdb.sql
├── apolloportaldb.sql
├── delta/
│ ├── v220-v230/
│ │ ├── apolloconfigdb-v220-v230.sql
│ │ └── apolloportaldb-v220-v230.sql
│ └── v230-v240/
│ ├── apolloconfigdb-v230-v240.sql
│ └── apolloportaldb-v230-v240.sql
└── gist/
├── autoGeneratedDeclaration.sql
├── h2Function.sql
├── setupDatabase.sql
└── useDatabase.sql
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
text=auto
*.sh text eol=lf
.github/workflows/*.lock.yml linguist-generated=true merge=ours
================================================
FILE: .github/FUNDING.yml
================================================
#
# Copyright 2024 Apollo Authors
#
# 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.
#
github: [apolloconfig] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
open_collective: apollo # Replace with a single Open Collective username
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report_en.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
<!-- The content in here will not be show。To forbid duplication,easier search in the feature,before you create an issue,please check the following. If your question is a newer/beginner's,recommend to https://github.com/ctripcorp/apollo/discussions to ask it. -->
- [ ] I have checked the [discussions](https://github.com/ctripcorp/apollo/discussions)
- [ ] I have searched the [issues](https://github.com/ctripcorp/apollo/issues) of this repository and believe that this is not a duplicate.
- [ ] I have checked the [FAQ](https://www.apolloconfig.com/#/zh/faq/common-issues-in-deployment-and-development-phase) of this repository and believe that this is not a duplicate.
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1.
2.
3.
4.
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
### Additional Details & Logs
- Version
- Error logs
- Configuration
- Platform and Operating System
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report_zh.md
================================================
---
name: 报告Bug/使用疑问
about: 提交Apollo Bug/使用疑问,使用这个模板
title: ''
labels: ''
assignees: ''
---
<!-- 这段文字不会显示在你的内容中。为了避免重复的信息,方便后续的检索,在提issue之前,请检查如下事项。如果是比较新手级别的问题,推荐到讨论区https://github.com/ctripcorp/apollo/discussions 提问 -->
- [ ] 我已经检查过[discussions](https://github.com/ctripcorp/apollo/discussions)
- [ ] 我已经搜索过[issues](https://github.com/ctripcorp/apollo/issues)
- [ ] 我已经仔细检查过[FAQ](https://www.apolloconfig.com/#/zh/faq/common-issues-in-deployment-and-development-phase)
**描述bug**
简洁明了地描述一下bug
**复现**
通过如下步骤可以复现:
1.
2.
3.
4.
**期望**
简介明了地描述你希望正常情况下应该发生什么
**截图**
如果可以,附上截图来描述你的问题
### 额外的细节和日志
- 版本:
- 错误日志
- 配置:
- 平台和操作系统
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request_en.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request_zh.md
================================================
---
name: 请求特性
about: 给这个项目提一些建议、想法
title: ''
labels: ''
assignees: ''
---
**你的特性请求和某个问题有关吗?请描述**
清晰简洁地描述这个问题是什么。即,当碰到xxx时,总是感觉很麻烦
**清晰简洁地描述一下你希望的解决方案**
**清晰简洁地描述一下这个特性的备选方案**
**其它背景**
在这里添加和这个特性请求有关的背景说明、截图
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
## What's the purpose of this PR
XXXXX
## Which issue(s) this PR fixes:
Fixes #
## Brief changelog
XXXXX
Follow this checklist to help us incorporate your contribution quickly and easily:
- [ ] Read the [Contributing Guide](https://github.com/apolloconfig/apollo/blob/master/CONTRIBUTING.md) before making this pull request.
- [ ] Write a pull request description that is detailed enough to understand what the pull request does, how, and why.
- [ ] Write necessary unit tests to verify the code.
- [ ] Run `mvn clean test` to make sure this pull request doesn't break anything.
- [ ] Run `mvn spotless:apply` to format your code.
- [ ] Update the [`CHANGES` log](https://github.com/apolloconfig/apollo/blob/master/CHANGES.md).
================================================
FILE: .github/aw/actions-lock.json
================================================
{
"entries": {
"actions/github-script@v8": {
"repo": "actions/github-script",
"version": "v8",
"sha": "ed597411d8f924073f98dfc5c65a23a2325f34cd"
},
"github/gh-aw/actions/setup@v0.43.0": {
"repo": "github/gh-aw/actions/setup",
"version": "v0.43.0",
"sha": "c549967b5808d783bc1537cf5687896de4dec7ee"
}
}
}
================================================
FILE: .github/stale.yml
================================================
#
# Copyright 2024 Apollo Authors
#
# 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.
#
# Configuration for probot-stale - https://github.com/probot/stale
# General configuration
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 30
# Issues with these labels will never be considered stale
exemptLabels:
- bug
- discussion
- enhancement
- feature
- feature request
- help wanted
- info
- need investigation
- tips
# Set to true to ignore issues in a project (defaults to false)
exemptProjects: true
# Set to true to ignore issues in a milestone (defaults to false)
exemptMilestones: true
# Set to true to ignore issues with an assignee (defaults to false)
exemptAssignees: true
# Label to use when marking an issue as stale
staleLabel: stale
# Pull request specific configuration
pulls:
# Number of days of inactivity before a stale Issue or Pull Request is closed.
# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale.
daysUntilClose: 14
# Comment to post when marking as stale. Set to `false` to disable
markComment: >
This pull request has been automatically marked as stale because it has not had activity
in the last 30 days. It will be closed in 14 days if no further activity occurs. Please
feel free to give a status update now, ping for review, or re-open when it's ready.
Thank you for your contributions!
# Comment to post when closing a stale Issue or Pull Request.
closeComment: >
This pull request has been automatically closed because it has not had
activity in the last 14 days. Please feel free to give a status update now, ping for review, or re-open when it's ready.
Thank you for your contributions!
# Limit the number of actions per hour, from 1-30. Default is 30
limitPerRun: 30
# Issue specific configuration
issues:
# Number of days of inactivity before a stale Issue or Pull Request is closed.
daysUntilClose: 7
# Comment to post when marking as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had activity in the
last 30 days. It will be closed in 7 days unless it is tagged "help wanted" or other activity
occurs. Thank you for your contributions.
# Comment to post when closing a stale Issue or Pull Request.
closeComment: >
This issue has been automatically closed because it has not had activity in the
last 7 days. If this issue is still valid, please ping a maintainer and ask them to label it as "help wanted".
Thank you for your contributions.
# Limit the number of actions per hour, from 1-30. Default is 30
limitPerRun: 30
================================================
FILE: .github/workflows/build.yml
================================================
#
# Copyright 2024 Apollo Authors
#
# 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.
#
# This workflow will build a Java project with Maven
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
name: build
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
jdk: [17, 21]
steps:
- uses: actions/checkout@v4
- name: Set up JDK
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: ${{ matrix.jdk }}
- name: Cache Maven packages
uses: actions/cache@v4
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- name: JDK 17
if: matrix.jdk == '17'
uses: nick-fields/retry@v3
with:
timeout_minutes: 5
max_attempts: 3
retry_wait_seconds: 1
command: mvn -B clean package jacoco:report -Dmaven.gitcommitid.skip=true
- name: JDK 21
if: matrix.jdk == '21'
run: mvn -B clean compile -Dmaven.gitcommitid.skip=true
- name: Upload coverage to Codecov
if: matrix.jdk == '17'
uses: codecov/codecov-action@v1
with:
file: ${{ github.workspace }}/apollo-*/target/site/jacoco/jacoco.xml
================================================
FILE: .github/workflows/cla.yml
================================================
#
# Copyright 2024 Apollo Authors
#
# 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.
#
name: "CLA Assistant"
on:
issue_comment:
types: [created]
pull_request_target:
types: [opened,closed,synchronize]
jobs:
CLAssistant:
runs-on: ubuntu-latest
steps:
- name: "CLA Assistant"
if: (github.event.comment.body == 'recheck' || startsWith(github.event.comment.body, 'I have read the CLA Document and I hereby sign the CLA')) || github.event_name == 'pull_request_target'
# Beta Release
uses: cla-assistant/github-action@v2.1.2-beta
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# the below token should have repo scope and must be manually added by you in the repository's secret
PERSONAL_ACCESS_TOKEN : ${{ secrets.PERSONAL_ACCESS_TOKEN_FOR_CLA_ASSISTANT }}
with:
path-to-signatures: 'signatures/version1/cla.json'
path-to-document: 'https://github.com/apolloconfig/apollo-community/blob/master/CLA.md' # e.g. a CLA or a DCO document
# branch should not be protected
branch: 'master'
allowlist: dependabot,bot*,github-actions
remote-repository-name: apollo-community
#below are the optional inputs - If the optional inputs are not given, then default values will be taken
#remote-organization-name: enter the remote organization name where the signatures should be stored (Default is storing the signatures in the same repository)
#remote-repository-name: enter the remote repository name where the signatures should be stored (Default is storing the signatures in the same repository)
#create-file-commit-message: 'For example: Creating file for storing CLA Signatures'
#signed-commit-message: 'For example: $contributorName has signed the CLA in #$pullRequestNo'
#custom-notsigned-prcomment: 'pull request comment with Introductory message to ask new contributors to sign'
#custom-pr-sign-comment: 'The signature to be committed in order to sign the CLA'
#custom-allsigned-prcomment: 'pull request comment when all contributors has signed, defaults to **CLA Assistant Lite bot** All Contributors have signed the CLA.'
#lock-pullrequest-aftermerge: false - if you don't want this bot to automatically lock the pull request after merging (default - true)
#use-dco-flag: true - If you are using DCO instead of CLA
================================================
FILE: .github/workflows/code-style-check.yml
================================================
#
# Copyright 2025 Apollo Authors
#
# 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.
#
# This workflow checks code style using Spotless
name: code style check
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
code-style-check:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v1
with:
java-version: 17
- name: Cache Maven packages
uses: actions/cache@v4
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- name: Code Style Check
run: mvn spotless:check
================================================
FILE: .github/workflows/codeql.yml
================================================
name: "CodeQL"
on:
push:
branches: [ 'master' ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ 'master' ]
schedule:
- cron: '25 18 * * 2'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'javascript', 'java' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
# Use only 'java' to analyze code written in Java, Kotlin or both
# Use only 'javascript' to analyze code written in JavaScript, TypeScript or both
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
steps:
- name: Checkout repository
uses: actions/checkout@v3
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v2
# ℹ️ Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
# If the Autobuild fails above, remove it and uncomment the following three lines.
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
# - run: |
# echo "Run, Build Application using script"
# ./location_of_script_within_repo/buildscript.sh
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
with:
category: "/language:${{matrix.language}}"
================================================
FILE: .github/workflows/commit_lint.yml
================================================
name: commit lint
on:
pull_request:
branches:
- main
jobs:
commitlint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: wagoid/commitlint-github-action@v5
================================================
FILE: .github/workflows/docker-publish.yml
================================================
#
# Copyright 2024 Apollo Authors
#
# 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.
#
name: Publish Docker Image
on:
workflow_dispatch:
inputs:
version:
description: 'version'
required: true
jobs:
check:
runs-on: ubuntu-latest
outputs:
apollo-config-tags: ${{ steps.check-tags.outputs.apollo-config-tags }}
apollo-admin-tags: ${{ steps.check-tags.outputs.apollo-admin-tags }}
apollo-portal-tags: ${{ steps.check-tags.outputs.apollo-portal-tags }}
steps:
- id: check-tags
name: Check tags
run: |
if [[ ${{ github.event.inputs.version }} == *-SNAPSHOT ]]; then
echo "apollo-config-tags=apolloconfig/apollo-configservice:${{ github.event.inputs.version }}" >> $GITHUB_OUTPUT
echo "apollo-admin-tags=apolloconfig/apollo-adminservice:${{ github.event.inputs.version }}" >> $GITHUB_OUTPUT
echo "apollo-portal-tags=apolloconfig/apollo-portal:${{ github.event.inputs.version }}" >> $GITHUB_OUTPUT
else
echo "apollo-config-tags=apolloconfig/apollo-configservice:${{ github.event.inputs.version }},apolloconfig/apollo-configservice:latest" >> $GITHUB_OUTPUT
echo "apollo-admin-tags=apolloconfig/apollo-adminservice:${{ github.event.inputs.version }},apolloconfig/apollo-adminservice:latest" >> $GITHUB_OUTPUT
echo "apollo-portal-tags=apolloconfig/apollo-portal:${{ github.event.inputs.version }},apolloconfig/apollo-portal:latest" >> $GITHUB_OUTPUT
fi
publish:
needs: check
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up JDK
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
- name: Build package
run: ./scripts/build.sh
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_HUB_USER_NAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Build and push apollo-configservice
uses: docker/build-push-action@v3
with:
context: ./apollo-configservice/target
platforms: linux/amd64,linux/arm64
file: ./apollo-configservice/src/main/docker/Dockerfile
push: true
build-args: VERSION=${{ github.event.inputs.version }}
tags: ${{ needs.check.outputs.apollo-config-tags }}
- name: Build and push apollo-adminservice
uses: docker/build-push-action@v3
with:
context: ./apollo-adminservice/target
platforms: linux/amd64,linux/arm64
file: ./apollo-adminservice/src/main/docker/Dockerfile
push: true
build-args: VERSION=${{ github.event.inputs.version }}
tags: ${{ needs.check.outputs.apollo-admin-tags }}
- name: Build and push apollo-portal
uses: docker/build-push-action@v3
with:
context: ./apollo-portal/target
platforms: linux/amd64,linux/arm64
file: ./apollo-portal/src/main/docker/Dockerfile
push: true
build-args: VERSION=${{ github.event.inputs.version }}
tags: ${{ needs.check.outputs.apollo-portal-tags }}
================================================
FILE: .github/workflows/docker-validation.yml
================================================
#
# Copyright 2024 Apollo Authors
#
# 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.
#
name: Docker Validation
on:
pull_request:
branches: [ master ]
paths:
- 'apollo-configservice/src/main/docker/Dockerfile'
- 'apollo-adminservice/src/main/docker/Dockerfile'
- 'apollo-portal/src/main/docker/Dockerfile'
workflow_dispatch:
jobs:
docker-smoke:
runs-on: ubuntu-latest
timeout-minutes: 40
steps:
- uses: actions/checkout@v4
- name: Set up JDK
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
- name: Cache Maven packages
uses: actions/cache@v4
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- name: Build package
run: ./scripts/build.sh
- name: Resolve Maven project version
id: project-version
run: |
echo "version=$(mvn -q -N help:evaluate -Dexpression=project.version -DforceStdout)" >> $GITHUB_OUTPUT
- name: Validate Dockerfiles
env:
VERSION: ${{ steps.project-version.outputs.version }}
run: |
set -euo pipefail
validate_dockerfile() {
local service="$1"
local dockerfile="$2"
local context="$3"
local startup_script="$4"
local host_port="$5"
local container_port="$6"
local datasource_url="$7"
local active_profiles="$8"
local image_tag="${service}:ci-${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}"
local container_name="${service}-smoke-${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}"
local max_health_check_attempts=180
local healthy=0
local run_args=(
--detach
--name "$container_name"
--publish "127.0.0.1:${host_port}:${container_port}"
--env "APOLLO_PROFILE=${active_profiles}"
--env "SPRING_PROFILES_ACTIVE=${active_profiles}"
--env "SPRING_DATASOURCE_URL=${datasource_url}"
--env "SERVER_PORT=${container_port}"
--entrypoint /bin/bash
)
docker build \
--file "$dockerfile" \
--build-arg VERSION="${VERSION}" \
--tag "$image_tag" \
"$context"
if [[ "$service" == "apollo-portal" ]]; then
run_args+=(
--env "APOLLO_PORTAL_ENVS=dev"
--env "DEV_META=http://127.0.0.1:8080"
--env "FAT_META=http://127.0.0.1:8080"
--env "UAT_META=http://127.0.0.1:8080"
--env "PRO_META=http://127.0.0.1:8080"
)
fi
docker run "${run_args[@]}" \
"$image_tag" \
-c "set -euo pipefail; test -x '${startup_script}'; exec '${startup_script}'"
for i in $(seq 1 "$max_health_check_attempts"); do
if curl --silent --fail "http://127.0.0.1:${host_port}/health" | grep -q "UP"; then
healthy=1
break
fi
if [[ -z "$(docker ps --filter "name=^/${container_name}$" --filter status=running --quiet)" ]]; then
echo "${service} container exited before health check succeeded"
docker logs "$container_name" || true
docker rm -f "$container_name" >/dev/null 2>&1 || true
return 1
fi
sleep 1
done
if [[ "$healthy" -ne 1 ]]; then
echo "${service} health check timeout"
docker logs "$container_name" || true
docker rm -f "$container_name" >/dev/null 2>&1 || true
return 1
fi
docker rm -f "$container_name" >/dev/null 2>&1 || true
docker run --rm --entrypoint /bin/bash "$image_tag" \
-c "set -euo pipefail; java -version"
}
validate_dockerfile \
"apollo-configservice" \
"./apollo-configservice/src/main/docker/Dockerfile" \
"./apollo-configservice/target" \
"/apollo-configservice/scripts/startup.sh" \
"18080" \
"8080" \
"jdbc:h2:mem:apollo-config-db;mode=mysql;DB_CLOSE_ON_EXIT=FALSE;DB_CLOSE_DELAY=-1;BUILTIN_ALIAS_OVERRIDE=TRUE;DATABASE_TO_UPPER=FALSE" \
"h2"
validate_dockerfile \
"apollo-adminservice" \
"./apollo-adminservice/src/main/docker/Dockerfile" \
"./apollo-adminservice/target" \
"/apollo-adminservice/scripts/startup.sh" \
"18090" \
"8090" \
"jdbc:h2:mem:apollo-config-db;mode=mysql;DB_CLOSE_ON_EXIT=FALSE;DB_CLOSE_DELAY=-1;BUILTIN_ALIAS_OVERRIDE=TRUE;DATABASE_TO_UPPER=FALSE" \
"h2"
validate_dockerfile \
"apollo-portal" \
"./apollo-portal/src/main/docker/Dockerfile" \
"./apollo-portal/target" \
"/apollo-portal/scripts/startup.sh" \
"18070" \
"8070" \
"jdbc:h2:mem:apollo-portal-db;mode=mysql;DB_CLOSE_ON_EXIT=FALSE;DB_CLOSE_DELAY=-1;BUILTIN_ALIAS_OVERRIDE=TRUE;DATABASE_TO_UPPER=FALSE" \
"h2,auth"
================================================
FILE: .github/workflows/issue-triage.lock.yml
================================================
#
# ___ _ _
# / _ \ | | (_)
# | |_| | __ _ ___ _ __ | |_ _ ___
# | _ |/ _` |/ _ \ '_ \| __| |/ __|
# | | | | (_| | __/ | | | |_| | (__
# \_| |_/\__, |\___|_| |_|\__|_|\___|
# __/ |
# _ _ |___/
# | | | | / _| |
# | | | | ___ _ __ _ __| |_| | _____ ____
# | |/\| |/ _ \ '__| |/ /| _| |/ _ \ \ /\ / / ___|
# \ /\ / (_) | | | | ( | | | | (_) \ V V /\__ \
# \/ \/ \___/|_| |_|\_\|_| |_|\___/ \_/\_/ |___/
#
# This file was automatically generated by gh-aw (v0.43.0). DO NOT EDIT.
#
# To update this file, edit the corresponding .md file and run:
# gh aw compile
# For more information: https://github.com/github/gh-aw/blob/main/.github/aw/github-agentic-workflows.md
#
#
# frontmatter-hash: 9136db5aec7e414124ab034d3cea6924d002246d9cd31e3017bebdbd239e6c3c
name: "Apollo Issue Triage"
"on":
issues:
types:
- opened
permissions: {}
concurrency:
cancel-in-progress: true
group: apollo-issue-triage-${{ github.event.issue.number }}
run-name: "Apollo Issue Triage"
jobs:
activation:
runs-on: ubuntu-slim
permissions:
contents: read
outputs:
comment_id: ""
comment_repo: ""
steps:
- name: Setup Scripts
uses: github/gh-aw/actions/setup@c549967b5808d783bc1537cf5687896de4dec7ee # v0.43.0
with:
destination: /opt/gh-aw/actions
- name: Check workflow file timestamps
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
env:
GH_AW_WORKFLOW_FILE: "issue-triage.lock.yml"
with:
script: |
const { setupGlobals } = require('/opt/gh-aw/actions/setup_globals.cjs');
setupGlobals(core, github, context, exec, io);
const { main } = require('/opt/gh-aw/actions/check_workflow_timestamp_api.cjs');
await main();
agent:
needs: activation
runs-on: ubuntu-latest
permissions: read-all
env:
DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
GH_AW_ASSETS_ALLOWED_EXTS: ""
GH_AW_ASSETS_BRANCH: ""
GH_AW_ASSETS_MAX_SIZE_KB: 0
GH_AW_MCP_LOG_DIR: /tmp/gh-aw/mcp-logs/safeoutputs
GH_AW_SAFE_OUTPUTS: /opt/gh-aw/safeoutputs/outputs.jsonl
GH_AW_SAFE_OUTPUTS_CONFIG_PATH: /opt/gh-aw/safeoutputs/config.json
GH_AW_SAFE_OUTPUTS_TOOLS_PATH: /opt/gh-aw/safeoutputs/tools.json
outputs:
checkout_pr_success: ${{ steps.checkout-pr.outputs.checkout_pr_success || 'true' }}
has_patch: ${{ steps.collect_output.outputs.has_patch }}
model: ${{ steps.generate_aw_info.outputs.model }}
output: ${{ steps.collect_output.outputs.output }}
output_types: ${{ steps.collect_output.outputs.output_types }}
secret_verification_result: ${{ steps.validate-secret.outputs.verification_result }}
steps:
- name: Setup Scripts
uses: github/gh-aw/actions/setup@c549967b5808d783bc1537cf5687896de4dec7ee # v0.43.0
with:
destination: /opt/gh-aw/actions
- name: Checkout .github and .agents folders
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
with:
sparse-checkout: |
.github
.agents
depth: 1
persist-credentials: false
- name: Create gh-aw temp directory
run: bash /opt/gh-aw/actions/create_gh_aw_tmp_dir.sh
- name: Configure Git credentials
env:
REPO_NAME: ${{ github.repository }}
SERVER_URL: ${{ github.server_url }}
run: |
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git config --global user.name "github-actions[bot]"
# Re-authenticate git with GitHub token
SERVER_URL_STRIPPED="${SERVER_URL#https://}"
git remote set-url origin "https://x-access-token:${{ github.token }}@${SERVER_URL_STRIPPED}/${REPO_NAME}.git"
echo "Git configured with standard GitHub Actions identity"
- name: Checkout PR branch
id: checkout-pr
if: |
github.event.pull_request
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
env:
GH_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
with:
github-token: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
script: |
const { setupGlobals } = require('/opt/gh-aw/actions/setup_globals.cjs');
setupGlobals(core, github, context, exec, io);
const { main } = require('/opt/gh-aw/actions/checkout_pr_branch.cjs');
await main();
- name: Generate agentic run info
id: generate_aw_info
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
with:
script: |
const fs = require('fs');
const awInfo = {
engine_id: "copilot",
engine_name: "GitHub Copilot CLI",
model: process.env.GH_AW_MODEL_AGENT_COPILOT || "",
version: "",
agent_version: "0.0.405",
cli_version: "v0.43.0",
workflow_name: "Apollo Issue Triage",
experimental: false,
supports_tools_allowlist: true,
supports_http_transport: true,
run_id: context.runId,
run_number: context.runNumber,
run_attempt: process.env.GITHUB_RUN_ATTEMPT,
repository: context.repo.owner + '/' + context.repo.repo,
ref: context.ref,
sha: context.sha,
actor: context.actor,
event_name: context.eventName,
staged: false,
allowed_domains: ["github"],
firewall_enabled: true,
awf_version: "v0.13.12",
awmg_version: "",
steps: {
firewall: "squid"
},
created_at: new Date().toISOString()
};
// Write to /tmp/gh-aw directory to avoid inclusion in PR
const tmpPath = '/tmp/gh-aw/aw_info.json';
fs.writeFileSync(tmpPath, JSON.stringify(awInfo, null, 2));
console.log('Generated aw_info.json at:', tmpPath);
console.log(JSON.stringify(awInfo, null, 2));
// Set model as output for reuse in other steps/jobs
core.setOutput('model', awInfo.model);
- name: Validate COPILOT_GITHUB_TOKEN secret
id: validate-secret
run: /opt/gh-aw/actions/validate_multi_secret.sh COPILOT_GITHUB_TOKEN 'GitHub Copilot CLI' https://github.github.com/gh-aw/reference/engines/#github-copilot-default
env:
COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }}
- name: Install GitHub Copilot CLI
run: /opt/gh-aw/actions/install_copilot_cli.sh 0.0.405
- name: Install awf binary
run: bash /opt/gh-aw/actions/install_awf_binary.sh v0.13.12
- name: Determine automatic lockdown mode for GitHub MCP server
id: determine-automatic-lockdown
env:
TOKEN_CHECK: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN }}
if: env.TOKEN_CHECK != ''
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
with:
script: |
const determineAutomaticLockdown = require('/opt/gh-aw/actions/determine_automatic_lockdown.cjs');
await determineAutomaticLockdown(github, context, core);
- name: Download container images
run: bash /opt/gh-aw/actions/download_docker_images.sh ghcr.io/github/gh-aw-firewall/agent:0.13.12 ghcr.io/github/gh-aw-firewall/squid:0.13.12 ghcr.io/github/gh-aw-mcpg:v0.0.113 ghcr.io/github/github-mcp-server:v0.30.3 node:lts-alpine
- name: Write Safe Outputs Config
run: |
mkdir -p /opt/gh-aw/safeoutputs
mkdir -p /tmp/gh-aw/safeoutputs
mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs
cat > /opt/gh-aw/safeoutputs/config.json << 'EOF'
{"add_comment":{"max":1},"add_labels":{"max":3},"mentions":{"allowContext":false,"allowTeamMembers":false},"missing_data":{},"missing_tool":{},"noop":{"max":1}}
EOF
cat > /opt/gh-aw/safeoutputs/tools.json << 'EOF'
[
{
"description": "Add a comment to an existing GitHub issue, pull request, or discussion. Use this to provide feedback, answer questions, or add information to an existing conversation. For creating new items, use create_issue, create_discussion, or create_pull_request instead. CONSTRAINTS: Maximum 1 comment(s) can be added.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"body": {
"description": "The comment text in Markdown format. This is the 'body' field - do not use 'comment_body' or other variations. Provide helpful, relevant information that adds value to the conversation.",
"type": "string"
},
"item_number": {
"description": "The issue, pull request, or discussion number to comment on. This is the numeric ID from the GitHub URL (e.g., 123 in github.com/owner/repo/issues/123). If omitted, the tool will attempt to resolve the target from the current workflow context (triggering issue, PR, or discussion).",
"type": "number"
}
},
"required": [
"body"
],
"type": "object"
},
"name": "add_comment"
},
{
"description": "Add labels to an existing GitHub issue or pull request for categorization and filtering. Labels must already exist in the repository. For creating new issues with labels, use create_issue with the labels property instead. CONSTRAINTS: Maximum 3 label(s) can be added.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"item_number": {
"description": "Issue or PR number to add labels to. This is the numeric ID from the GitHub URL (e.g., 456 in github.com/owner/repo/issues/456). If omitted, adds labels to the item that triggered this workflow.",
"type": "number"
},
"labels": {
"description": "Label names to add (e.g., ['bug', 'priority-high']). Labels must exist in the repository.",
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"name": "add_labels"
},
{
"description": "Report that a tool or capability needed to complete the task is not available, or share any information you deem important about missing functionality or limitations. Use this when you cannot accomplish what was requested because the required functionality is missing or access is restricted.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"alternatives": {
"description": "Any workarounds, manual steps, or alternative approaches the user could take (max 256 characters).",
"type": "string"
},
"reason": {
"description": "Explanation of why this tool is needed or what information you want to share about the limitation (max 256 characters).",
"type": "string"
},
"tool": {
"description": "Optional: Name or description of the missing tool or capability (max 128 characters). Be specific about what functionality is needed.",
"type": "string"
}
},
"required": [
"reason"
],
"type": "object"
},
"name": "missing_tool"
},
{
"description": "Log a transparency message when no significant actions are needed. Use this to confirm workflow completion and provide visibility when analysis is complete but no changes or outputs are required (e.g., 'No issues found', 'All checks passed'). This ensures the workflow produces human-visible output even when no other actions are taken.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"message": {
"description": "Status or completion message to log. Should explain what was analyzed and the outcome (e.g., 'Code review complete - no issues found', 'Analysis complete - all tests passing').",
"type": "string"
}
},
"required": [
"message"
],
"type": "object"
},
"name": "noop"
},
{
"description": "Report that data or information needed to complete the task is not available. Use this when you cannot accomplish what was requested because required data, context, or information is missing.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"alternatives": {
"description": "Any workarounds, manual steps, or alternative approaches the user could take (max 256 characters).",
"type": "string"
},
"context": {
"description": "Additional context about the missing data or where it should come from (max 256 characters).",
"type": "string"
},
"data_type": {
"description": "Type or description of the missing data or information (max 128 characters). Be specific about what data is needed.",
"type": "string"
},
"reason": {
"description": "Explanation of why this data is needed to complete the task (max 256 characters).",
"type": "string"
}
},
"required": [],
"type": "object"
},
"name": "missing_data"
}
]
EOF
cat > /opt/gh-aw/safeoutputs/validation.json << 'EOF'
{
"add_comment": {
"defaultMax": 1,
"fields": {
"body": {
"required": true,
"type": "string",
"sanitize": true,
"maxLength": 65000
},
"item_number": {
"issueOrPRNumber": true
}
}
},
"add_labels": {
"defaultMax": 5,
"fields": {
"item_number": {
"issueOrPRNumber": true
},
"labels": {
"required": true,
"type": "array",
"itemType": "string",
"itemSanitize": true,
"itemMaxLength": 128
}
}
},
"missing_tool": {
"defaultMax": 20,
"fields": {
"alternatives": {
"type": "string",
"sanitize": true,
"maxLength": 512
},
"reason": {
"required": true,
"type": "string",
"sanitize": true,
"maxLength": 256
},
"tool": {
"type": "string",
"sanitize": true,
"maxLength": 128
}
}
},
"noop": {
"defaultMax": 1,
"fields": {
"message": {
"required": true,
"type": "string",
"sanitize": true,
"maxLength": 65000
}
}
}
}
EOF
- name: Generate Safe Outputs MCP Server Config
id: safe-outputs-config
run: |
# Generate a secure random API key (360 bits of entropy, 40+ chars)
# Mask immediately to prevent timing vulnerabilities
API_KEY=$(openssl rand -base64 45 | tr -d '/+=')
echo "::add-mask::${API_KEY}"
PORT=3001
# Set outputs for next steps
{
echo "safe_outputs_api_key=${API_KEY}"
echo "safe_outputs_port=${PORT}"
} >> "$GITHUB_OUTPUT"
echo "Safe Outputs MCP server will run on port ${PORT}"
- name: Start Safe Outputs MCP HTTP Server
id: safe-outputs-start
env:
DEBUG: '*'
GH_AW_SAFE_OUTPUTS_PORT: ${{ steps.safe-outputs-config.outputs.safe_outputs_port }}
GH_AW_SAFE_OUTPUTS_API_KEY: ${{ steps.safe-outputs-config.outputs.safe_outputs_api_key }}
GH_AW_SAFE_OUTPUTS_TOOLS_PATH: /opt/gh-aw/safeoutputs/tools.json
GH_AW_SAFE_OUTPUTS_CONFIG_PATH: /opt/gh-aw/safeoutputs/config.json
GH_AW_MCP_LOG_DIR: /tmp/gh-aw/mcp-logs/safeoutputs
run: |
# Environment variables are set above to prevent template injection
export DEBUG
export GH_AW_SAFE_OUTPUTS_PORT
export GH_AW_SAFE_OUTPUTS_API_KEY
export GH_AW_SAFE_OUTPUTS_TOOLS_PATH
export GH_AW_SAFE_OUTPUTS_CONFIG_PATH
export GH_AW_MCP_LOG_DIR
bash /opt/gh-aw/actions/start_safe_outputs_server.sh
- name: Start MCP gateway
id: start-mcp-gateway
env:
GH_AW_SAFE_OUTPUTS: ${{ env.GH_AW_SAFE_OUTPUTS }}
GH_AW_SAFE_OUTPUTS_API_KEY: ${{ steps.safe-outputs-start.outputs.api_key }}
GH_AW_SAFE_OUTPUTS_PORT: ${{ steps.safe-outputs-start.outputs.port }}
GITHUB_MCP_LOCKDOWN: ${{ steps.determine-automatic-lockdown.outputs.lockdown == 'true' && '1' || '0' }}
GITHUB_MCP_SERVER_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
run: |
set -eo pipefail
mkdir -p /tmp/gh-aw/mcp-config
# Export gateway environment variables for MCP config and gateway script
export MCP_GATEWAY_PORT="80"
export MCP_GATEWAY_DOMAIN="host.docker.internal"
MCP_GATEWAY_API_KEY=$(openssl rand -base64 45 | tr -d '/+=')
echo "::add-mask::${MCP_GATEWAY_API_KEY}"
export MCP_GATEWAY_API_KEY
export MCP_GATEWAY_PAYLOAD_DIR="/tmp/gh-aw/mcp-payloads"
mkdir -p "${MCP_GATEWAY_PAYLOAD_DIR}"
export DEBUG="*"
export GH_AW_ENGINE="copilot"
export MCP_GATEWAY_DOCKER_COMMAND='docker run -i --rm --network host -v /var/run/docker.sock:/var/run/docker.sock -e MCP_GATEWAY_PORT -e MCP_GATEWAY_DOMAIN -e MCP_GATEWAY_API_KEY -e MCP_GATEWAY_PAYLOAD_DIR -e DEBUG -e MCP_GATEWAY_LOG_DIR -e GH_AW_MCP_LOG_DIR -e GH_AW_SAFE_OUTPUTS -e GH_AW_SAFE_OUTPUTS_CONFIG_PATH -e GH_AW_SAFE_OUTPUTS_TOOLS_PATH -e GH_AW_ASSETS_BRANCH -e GH_AW_ASSETS_MAX_SIZE_KB -e GH_AW_ASSETS_ALLOWED_EXTS -e DEFAULT_BRANCH -e GITHUB_MCP_SERVER_TOKEN -e GITHUB_MCP_LOCKDOWN -e GITHUB_REPOSITORY -e GITHUB_SERVER_URL -e GITHUB_SHA -e GITHUB_WORKSPACE -e GITHUB_TOKEN -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_RUN_ATTEMPT -e GITHUB_JOB -e GITHUB_ACTION -e GITHUB_EVENT_NAME -e GITHUB_EVENT_PATH -e GITHUB_ACTOR -e GITHUB_ACTOR_ID -e GITHUB_TRIGGERING_ACTOR -e GITHUB_WORKFLOW -e GITHUB_WORKFLOW_REF -e GITHUB_WORKFLOW_SHA -e GITHUB_REF -e GITHUB_REF_NAME -e GITHUB_REF_TYPE -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GH_AW_SAFE_OUTPUTS_PORT -e GH_AW_SAFE_OUTPUTS_API_KEY -v /tmp/gh-aw/mcp-payloads:/tmp/gh-aw/mcp-payloads:rw -v /opt:/opt:ro -v /tmp:/tmp:rw -v '"${GITHUB_WORKSPACE}"':'"${GITHUB_WORKSPACE}"':rw ghcr.io/github/gh-aw-mcpg:v0.0.113'
mkdir -p /home/runner/.copilot
cat << MCPCONFIG_EOF | bash /opt/gh-aw/actions/start_mcp_gateway.sh
{
"mcpServers": {
"github": {
"type": "stdio",
"container": "ghcr.io/github/github-mcp-server:v0.30.3",
"env": {
"GITHUB_LOCKDOWN_MODE": "$GITHUB_MCP_LOCKDOWN",
"GITHUB_PERSONAL_ACCESS_TOKEN": "\${GITHUB_MCP_SERVER_TOKEN}",
"GITHUB_READ_ONLY": "1",
"GITHUB_TOOLSETS": "issues"
}
},
"safeoutputs": {
"type": "http",
"url": "http://host.docker.internal:$GH_AW_SAFE_OUTPUTS_PORT",
"headers": {
"Authorization": "\${GH_AW_SAFE_OUTPUTS_API_KEY}"
}
}
},
"gateway": {
"port": $MCP_GATEWAY_PORT,
"domain": "${MCP_GATEWAY_DOMAIN}",
"apiKey": "${MCP_GATEWAY_API_KEY}",
"payloadDir": "${MCP_GATEWAY_PAYLOAD_DIR}"
}
}
MCPCONFIG_EOF
- name: Generate workflow overview
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
with:
script: |
const { generateWorkflowOverview } = require('/opt/gh-aw/actions/generate_workflow_overview.cjs');
await generateWorkflowOverview(core);
- name: Create prompt with built-in context
env:
GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt
GH_AW_SAFE_OUTPUTS: ${{ env.GH_AW_SAFE_OUTPUTS }}
GH_AW_GITHUB_ACTOR: ${{ github.actor }}
GH_AW_GITHUB_EVENT_COMMENT_ID: ${{ github.event.comment.id }}
GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER: ${{ github.event.discussion.number }}
GH_AW_GITHUB_EVENT_ISSUE_NUMBER: ${{ github.event.issue.number }}
GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER: ${{ github.event.pull_request.number }}
GH_AW_GITHUB_REPOSITORY: ${{ github.repository }}
GH_AW_GITHUB_RUN_ID: ${{ github.run_id }}
GH_AW_GITHUB_WORKSPACE: ${{ github.workspace }}
run: |
bash /opt/gh-aw/actions/create_prompt_first.sh
cat << 'PROMPT_EOF' > "$GH_AW_PROMPT"
<system>
PROMPT_EOF
cat "/opt/gh-aw/prompts/temp_folder_prompt.md" >> "$GH_AW_PROMPT"
cat "/opt/gh-aw/prompts/markdown.md" >> "$GH_AW_PROMPT"
cat << 'PROMPT_EOF' >> "$GH_AW_PROMPT"
<safe-outputs>
<description>GitHub API Access Instructions</description>
<important>
The gh CLI is NOT authenticated. Do NOT use gh commands for GitHub operations.
</important>
<instructions>
To create or modify GitHub resources (issues, discussions, pull requests, etc.), you MUST call the appropriate safe output tool. Simply writing content will NOT work - the workflow requires actual tool calls.
Discover available tools from the safeoutputs MCP server.
**Critical**: Tool calls write structured data that downstream jobs process. Without tool calls, follow-up actions will be skipped.
**Note**: If you made no other safe output tool calls during this workflow execution, call the "noop" tool to provide a status message indicating completion or that no actions were needed.
</instructions>
</safe-outputs>
<github-context>
The following GitHub context information is available for this workflow:
{{#if __GH_AW_GITHUB_ACTOR__ }}
- **actor**: __GH_AW_GITHUB_ACTOR__
{{/if}}
{{#if __GH_AW_GITHUB_REPOSITORY__ }}
- **repository**: __GH_AW_GITHUB_REPOSITORY__
{{/if}}
{{#if __GH_AW_GITHUB_WORKSPACE__ }}
- **workspace**: __GH_AW_GITHUB_WORKSPACE__
{{/if}}
{{#if __GH_AW_GITHUB_EVENT_ISSUE_NUMBER__ }}
- **issue-number**: #__GH_AW_GITHUB_EVENT_ISSUE_NUMBER__
{{/if}}
{{#if __GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER__ }}
- **discussion-number**: #__GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER__
{{/if}}
{{#if __GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER__ }}
- **pull-request-number**: #__GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER__
{{/if}}
{{#if __GH_AW_GITHUB_EVENT_COMMENT_ID__ }}
- **comment-id**: __GH_AW_GITHUB_EVENT_COMMENT_ID__
{{/if}}
{{#if __GH_AW_GITHUB_RUN_ID__ }}
- **workflow-run-id**: __GH_AW_GITHUB_RUN_ID__
{{/if}}
</github-context>
PROMPT_EOF
cat << 'PROMPT_EOF' >> "$GH_AW_PROMPT"
</system>
PROMPT_EOF
cat << 'PROMPT_EOF' >> "$GH_AW_PROMPT"
{{#runtime-import .github/workflows/issue-triage.md}}
PROMPT_EOF
- name: Substitute placeholders
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
env:
GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt
GH_AW_GITHUB_ACTOR: ${{ github.actor }}
GH_AW_GITHUB_EVENT_COMMENT_ID: ${{ github.event.comment.id }}
GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER: ${{ github.event.discussion.number }}
GH_AW_GITHUB_EVENT_ISSUE_NUMBER: ${{ github.event.issue.number }}
GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER: ${{ github.event.pull_request.number }}
GH_AW_GITHUB_REPOSITORY: ${{ github.repository }}
GH_AW_GITHUB_RUN_ID: ${{ github.run_id }}
GH_AW_GITHUB_WORKSPACE: ${{ github.workspace }}
with:
script: |
const substitutePlaceholders = require('/opt/gh-aw/actions/substitute_placeholders.cjs');
// Call the substitution function
return await substitutePlaceholders({
file: process.env.GH_AW_PROMPT,
substitutions: {
GH_AW_GITHUB_ACTOR: process.env.GH_AW_GITHUB_ACTOR,
GH_AW_GITHUB_EVENT_COMMENT_ID: process.env.GH_AW_GITHUB_EVENT_COMMENT_ID,
GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER: process.env.GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER,
GH_AW_GITHUB_EVENT_ISSUE_NUMBER: process.env.GH_AW_GITHUB_EVENT_ISSUE_NUMBER,
GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER: process.env.GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER,
GH_AW_GITHUB_REPOSITORY: process.env.GH_AW_GITHUB_REPOSITORY,
GH_AW_GITHUB_RUN_ID: process.env.GH_AW_GITHUB_RUN_ID,
GH_AW_GITHUB_WORKSPACE: process.env.GH_AW_GITHUB_WORKSPACE
}
});
- name: Interpolate variables and render templates
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
env:
GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt
with:
script: |
const { setupGlobals } = require('/opt/gh-aw/actions/setup_globals.cjs');
setupGlobals(core, github, context, exec, io);
const { main } = require('/opt/gh-aw/actions/interpolate_prompt.cjs');
await main();
- name: Validate prompt placeholders
env:
GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt
run: bash /opt/gh-aw/actions/validate_prompt_placeholders.sh
- name: Print prompt
env:
GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt
run: bash /opt/gh-aw/actions/print_prompt_summary.sh
- name: Clean git credentials
run: bash /opt/gh-aw/actions/clean_git_credentials.sh
- name: Execute GitHub Copilot CLI
id: agentic_execution
# Copilot CLI tool arguments (sorted):
timeout-minutes: 20
run: |
set -o pipefail
sudo -E awf --enable-chroot --env-all --container-workdir "${GITHUB_WORKSPACE}" --allow-domains '*.githubusercontent.com,api.business.githubcopilot.com,api.enterprise.githubcopilot.com,api.github.com,api.githubcopilot.com,api.individual.githubcopilot.com,codeload.github.com,github-cloud.githubusercontent.com,github-cloud.s3.amazonaws.com,github.com,github.githubassets.com,host.docker.internal,lfs.github.com,objects.githubusercontent.com,raw.githubusercontent.com,registry.npmjs.org,telemetry.enterprise.githubcopilot.com' --log-level info --proxy-logs-dir /tmp/gh-aw/sandbox/firewall/logs --enable-host-access --image-tag 0.13.12 --skip-pull \
-- '/usr/local/bin/copilot --add-dir /tmp/gh-aw/ --log-level all --log-dir /tmp/gh-aw/sandbox/agent/logs/ --add-dir "${GITHUB_WORKSPACE}" --disable-builtin-mcps --allow-all-tools --allow-all-paths --share /tmp/gh-aw/sandbox/agent/logs/conversation.md --prompt "$(cat /tmp/gh-aw/aw-prompts/prompt.txt)"${GH_AW_MODEL_AGENT_COPILOT:+ --model "$GH_AW_MODEL_AGENT_COPILOT"}' \
2>&1 | tee /tmp/gh-aw/agent-stdio.log
env:
COPILOT_AGENT_RUNNER_TYPE: STANDALONE
COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }}
GH_AW_MCP_CONFIG: /home/runner/.copilot/mcp-config.json
GH_AW_MODEL_AGENT_COPILOT: ${{ vars.GH_AW_MODEL_AGENT_COPILOT || '' }}
GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt
GH_AW_SAFE_OUTPUTS: ${{ env.GH_AW_SAFE_OUTPUTS }}
GITHUB_HEAD_REF: ${{ github.head_ref }}
GITHUB_REF_NAME: ${{ github.ref_name }}
GITHUB_STEP_SUMMARY: ${{ env.GITHUB_STEP_SUMMARY }}
GITHUB_WORKSPACE: ${{ github.workspace }}
XDG_CONFIG_HOME: /home/runner
- name: Configure Git credentials
env:
REPO_NAME: ${{ github.repository }}
SERVER_URL: ${{ github.server_url }}
run: |
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git config --global user.name "github-actions[bot]"
# Re-authenticate git with GitHub token
SERVER_URL_STRIPPED="${SERVER_URL#https://}"
git remote set-url origin "https://x-access-token:${{ github.token }}@${SERVER_URL_STRIPPED}/${REPO_NAME}.git"
echo "Git configured with standard GitHub Actions identity"
- name: Copy Copilot session state files to logs
if: always()
continue-on-error: true
run: |
# Copy Copilot session state files to logs folder for artifact collection
# This ensures they are in /tmp/gh-aw/ where secret redaction can scan them
SESSION_STATE_DIR="$HOME/.copilot/session-state"
LOGS_DIR="/tmp/gh-aw/sandbox/agent/logs"
if [ -d "$SESSION_STATE_DIR" ]; then
echo "Copying Copilot session state files from $SESSION_STATE_DIR to $LOGS_DIR"
mkdir -p "$LOGS_DIR"
cp -v "$SESSION_STATE_DIR"/*.jsonl "$LOGS_DIR/" 2>/dev/null || true
echo "Session state files copied successfully"
else
echo "No session-state directory found at $SESSION_STATE_DIR"
fi
- name: Stop MCP gateway
if: always()
continue-on-error: true
env:
MCP_GATEWAY_PORT: ${{ steps.start-mcp-gateway.outputs.gateway-port }}
MCP_GATEWAY_API_KEY: ${{ steps.start-mcp-gateway.outputs.gateway-api-key }}
GATEWAY_PID: ${{ steps.start-mcp-gateway.outputs.gateway-pid }}
run: |
bash /opt/gh-aw/actions/stop_mcp_gateway.sh "$GATEWAY_PID"
- name: Redact secrets in logs
if: always()
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
with:
script: |
const { setupGlobals } = require('/opt/gh-aw/actions/setup_globals.cjs');
setupGlobals(core, github, context, exec, io);
const { main } = require('/opt/gh-aw/actions/redact_secrets.cjs');
await main();
env:
GH_AW_SECRET_NAMES: 'COPILOT_GITHUB_TOKEN,GH_AW_GITHUB_MCP_SERVER_TOKEN,GH_AW_GITHUB_TOKEN,GITHUB_TOKEN'
SECRET_COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }}
SECRET_GH_AW_GITHUB_MCP_SERVER_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN }}
SECRET_GH_AW_GITHUB_TOKEN: ${{ secrets.GH_AW_GITHUB_TOKEN }}
SECRET_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload Safe Outputs
if: always()
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: safe-output
path: ${{ env.GH_AW_SAFE_OUTPUTS }}
if-no-files-found: warn
- name: Ingest agent output
id: collect_output
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
env:
GH_AW_SAFE_OUTPUTS: ${{ env.GH_AW_SAFE_OUTPUTS }}
GH_AW_ALLOWED_DOMAINS: "*.githubusercontent.com,api.business.githubcopilot.com,api.enterprise.githubcopilot.com,api.github.com,api.githubcopilot.com,api.individual.githubcopilot.com,codeload.github.com,github-cloud.githubusercontent.com,github-cloud.s3.amazonaws.com,github.com,github.githubassets.com,host.docker.internal,lfs.github.com,objects.githubusercontent.com,raw.githubusercontent.com,registry.npmjs.org,telemetry.enterprise.githubcopilot.com"
GITHUB_SERVER_URL: ${{ github.server_url }}
GITHUB_API_URL: ${{ github.api_url }}
with:
script: |
const { setupGlobals } = require('/opt/gh-aw/actions/setup_globals.cjs');
setupGlobals(core, github, context, exec, io);
const { main } = require('/opt/gh-aw/actions/collect_ndjson_output.cjs');
await main();
- name: Upload sanitized agent output
if: always() && env.GH_AW_AGENT_OUTPUT
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: agent-output
path: ${{ env.GH_AW_AGENT_OUTPUT }}
if-no-files-found: warn
- name: Upload engine output files
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: agent_outputs
path: |
/tmp/gh-aw/sandbox/agent/logs/
/tmp/gh-aw/redacted-urls.log
if-no-files-found: ignore
- name: Parse agent logs for step summary
if: always()
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
env:
GH_AW_AGENT_OUTPUT: /tmp/gh-aw/sandbox/agent/logs/
with:
script: |
const { setupGlobals } = require('/opt/gh-aw/actions/setup_globals.cjs');
setupGlobals(core, github, context, exec, io);
const { main } = require('/opt/gh-aw/actions/parse_copilot_log.cjs');
await main();
- name: Parse MCP gateway logs for step summary
if: always()
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
with:
script: |
const { setupGlobals } = require('/opt/gh-aw/actions/setup_globals.cjs');
setupGlobals(core, github, context, exec, io);
const { main } = require('/opt/gh-aw/actions/parse_mcp_gateway_log.cjs');
await main();
- name: Print firewall logs
if: always()
continue-on-error: true
env:
AWF_LOGS_DIR: /tmp/gh-aw/sandbox/firewall/logs
run: |
# Fix permissions on firewall logs so they can be uploaded as artifacts
# AWF runs with sudo, creating files owned by root
sudo chmod -R a+r /tmp/gh-aw/sandbox/firewall/logs 2>/dev/null || true
awf logs summary | tee -a "$GITHUB_STEP_SUMMARY"
- name: Upload agent artifacts
if: always()
continue-on-error: true
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: agent-artifacts
path: |
/tmp/gh-aw/aw-prompts/prompt.txt
/tmp/gh-aw/aw_info.json
/tmp/gh-aw/mcp-logs/
/tmp/gh-aw/sandbox/firewall/logs/
/tmp/gh-aw/agent-stdio.log
/tmp/gh-aw/agent/
if-no-files-found: ignore
conclusion:
needs:
- activation
- agent
- detection
- safe_outputs
if: (always()) && (needs.agent.result != 'skipped')
runs-on: ubuntu-slim
permissions:
contents: read
discussions: write
issues: write
pull-requests: write
outputs:
noop_message: ${{ steps.noop.outputs.noop_message }}
tools_reported: ${{ steps.missing_tool.outputs.tools_reported }}
total_count: ${{ steps.missing_tool.outputs.total_count }}
steps:
- name: Setup Scripts
uses: github/gh-aw/actions/setup@c549967b5808d783bc1537cf5687896de4dec7ee # v0.43.0
with:
destination: /opt/gh-aw/actions
- name: Debug job inputs
env:
COMMENT_ID: ${{ needs.activation.outputs.comment_id }}
COMMENT_REPO: ${{ needs.activation.outputs.comment_repo }}
AGENT_OUTPUT_TYPES: ${{ needs.agent.outputs.output_types }}
AGENT_CONCLUSION: ${{ needs.agent.result }}
run: |
echo "Comment ID: $COMMENT_ID"
echo "Comment Repo: $COMMENT_REPO"
echo "Agent Output Types: $AGENT_OUTPUT_TYPES"
echo "Agent Conclusion: $AGENT_CONCLUSION"
- name: Download agent output artifact
continue-on-error: true
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
with:
name: agent-output
path: /tmp/gh-aw/safeoutputs/
- name: Setup agent output environment variable
run: |
mkdir -p /tmp/gh-aw/safeoutputs/
find "/tmp/gh-aw/safeoutputs/" -type f -print
echo "GH_AW_AGENT_OUTPUT=/tmp/gh-aw/safeoutputs/agent_output.json" >> "$GITHUB_ENV"
- name: Process No-Op Messages
id: noop
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
env:
GH_AW_AGENT_OUTPUT: ${{ env.GH_AW_AGENT_OUTPUT }}
GH_AW_NOOP_MAX: 1
GH_AW_WORKFLOW_NAME: "Apollo Issue Triage"
with:
github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
script: |
const { setupGlobals } = require('/opt/gh-aw/actions/setup_globals.cjs');
setupGlobals(core, github, context, exec, io);
const { main } = require('/opt/gh-aw/actions/noop.cjs');
await main();
- name: Record Missing Tool
id: missing_tool
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
env:
GH_AW_AGENT_OUTPUT: ${{ env.GH_AW_AGENT_OUTPUT }}
GH_AW_WORKFLOW_NAME: "Apollo Issue Triage"
with:
github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
script: |
const { setupGlobals } = require('/opt/gh-aw/actions/setup_globals.cjs');
setupGlobals(core, github, context, exec, io);
const { main } = require('/opt/gh-aw/actions/missing_tool.cjs');
await main();
- name: Handle Agent Failure
id: handle_agent_failure
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
env:
GH_AW_AGENT_OUTPUT: ${{ env.GH_AW_AGENT_OUTPUT }}
GH_AW_WORKFLOW_NAME: "Apollo Issue Triage"
GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }}
GH_AW_SECRET_VERIFICATION_RESULT: ${{ needs.agent.outputs.secret_verification_result }}
GH_AW_CHECKOUT_PR_SUCCESS: ${{ needs.agent.outputs.checkout_pr_success }}
with:
github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
script: |
const { setupGlobals } = require('/opt/gh-aw/actions/setup_globals.cjs');
setupGlobals(core, github, context, exec, io);
const { main } = require('/opt/gh-aw/actions/handle_agent_failure.cjs');
await main();
- name: Handle No-Op Message
id: handle_noop_message
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
env:
GH_AW_AGENT_OUTPUT: ${{ env.GH_AW_AGENT_OUTPUT }}
GH_AW_WORKFLOW_NAME: "Apollo Issue Triage"
GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }}
GH_AW_NOOP_MESSAGE: ${{ steps.noop.outputs.noop_message }}
GH_AW_NOOP_REPORT_AS_ISSUE: "true"
with:
github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
script: |
const { setupGlobals } = require('/opt/gh-aw/actions/setup_globals.cjs');
setupGlobals(core, github, context, exec, io);
const { main } = require('/opt/gh-aw/actions/handle_noop_message.cjs');
await main();
- name: Update reaction comment with completion status
id: conclusion
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
env:
GH_AW_AGENT_OUTPUT: ${{ env.GH_AW_AGENT_OUTPUT }}
GH_AW_COMMENT_ID: ${{ needs.activation.outputs.comment_id }}
GH_AW_COMMENT_REPO: ${{ needs.activation.outputs.comment_repo }}
GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
GH_AW_WORKFLOW_NAME: "Apollo Issue Triage"
GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }}
GH_AW_DETECTION_CONCLUSION: ${{ needs.detection.result }}
with:
github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
script: |
const { setupGlobals } = require('/opt/gh-aw/actions/setup_globals.cjs');
setupGlobals(core, github, context, exec, io);
const { main } = require('/opt/gh-aw/actions/notify_comment_error.cjs');
await main();
detection:
needs: agent
if: needs.agent.outputs.output_types != '' || needs.agent.outputs.has_patch == 'true'
runs-on: ubuntu-latest
permissions: {}
timeout-minutes: 10
outputs:
success: ${{ steps.parse_results.outputs.success }}
steps:
- name: Setup Scripts
uses: github/gh-aw/actions/setup@c549967b5808d783bc1537cf5687896de4dec7ee # v0.43.0
with:
destination: /opt/gh-aw/actions
- name: Download agent artifacts
continue-on-error: true
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
with:
name: agent-artifacts
path: /tmp/gh-aw/threat-detection/
- name: Download agent output artifact
continue-on-error: true
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
with:
name: agent-output
path: /tmp/gh-aw/threat-detection/
- name: Echo agent output types
env:
AGENT_OUTPUT_TYPES: ${{ needs.agent.outputs.output_types }}
run: |
echo "Agent output-types: $AGENT_OUTPUT_TYPES"
- name: Setup threat detection
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
env:
WORKFLOW_NAME: "Apollo Issue Triage"
WORKFLOW_DESCRIPTION: "No description provided"
HAS_PATCH: ${{ needs.agent.outputs.has_patch }}
with:
script: |
const { setupGlobals } = require('/opt/gh-aw/actions/setup_globals.cjs');
setupGlobals(core, github, context, exec, io);
const { main } = require('/opt/gh-aw/actions/setup_threat_detection.cjs');
await main();
- name: Ensure threat-detection directory and log
run: |
mkdir -p /tmp/gh-aw/threat-detection
touch /tmp/gh-aw/threat-detection/detection.log
- name: Validate COPILOT_GITHUB_TOKEN secret
id: validate-secret
run: /opt/gh-aw/actions/validate_multi_secret.sh COPILOT_GITHUB_TOKEN 'GitHub Copilot CLI' https://github.github.com/gh-aw/reference/engines/#github-copilot-default
env:
COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }}
- name: Install GitHub Copilot CLI
run: /opt/gh-aw/actions/install_copilot_cli.sh 0.0.405
- name: Execute GitHub Copilot CLI
id: agentic_execution
# Copilot CLI tool arguments (sorted):
# --allow-tool shell(cat)
# --allow-tool shell(grep)
# --allow-tool shell(head)
# --allow-tool shell(jq)
# --allow-tool shell(ls)
# --allow-tool shell(tail)
# --allow-tool shell(wc)
timeout-minutes: 20
run: |
set -o pipefail
COPILOT_CLI_INSTRUCTION="$(cat /tmp/gh-aw/aw-prompts/prompt.txt)"
mkdir -p /tmp/
mkdir -p /tmp/gh-aw/
mkdir -p /tmp/gh-aw/agent/
mkdir -p /tmp/gh-aw/sandbox/agent/logs/
copilot --add-dir /tmp/ --add-dir /tmp/gh-aw/ --add-dir /tmp/gh-aw/agent/ --log-level all --log-dir /tmp/gh-aw/sandbox/agent/logs/ --disable-builtin-mcps --allow-tool 'shell(cat)' --allow-tool 'shell(grep)' --allow-tool 'shell(head)' --allow-tool 'shell(jq)' --allow-tool 'shell(ls)' --allow-tool 'shell(tail)' --allow-tool 'shell(wc)' --share /tmp/gh-aw/sandbox/agent/logs/conversation.md --prompt "$COPILOT_CLI_INSTRUCTION"${GH_AW_MODEL_DETECTION_COPILOT:+ --model "$GH_AW_MODEL_DETECTION_COPILOT"} 2>&1 | tee /tmp/gh-aw/threat-detection/detection.log
env:
COPILOT_AGENT_RUNNER_TYPE: STANDALONE
COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }}
GH_AW_MODEL_DETECTION_COPILOT: ${{ vars.GH_AW_MODEL_DETECTION_COPILOT || '' }}
GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt
GITHUB_HEAD_REF: ${{ github.head_ref }}
GITHUB_REF_NAME: ${{ github.ref_name }}
GITHUB_STEP_SUMMARY: ${{ env.GITHUB_STEP_SUMMARY }}
GITHUB_WORKSPACE: ${{ github.workspace }}
XDG_CONFIG_HOME: /home/runner
- name: Parse threat detection results
id: parse_results
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
with:
script: |
const { setupGlobals } = require('/opt/gh-aw/actions/setup_globals.cjs');
setupGlobals(core, github, context, exec, io);
const { main } = require('/opt/gh-aw/actions/parse_threat_detection_results.cjs');
await main();
- name: Upload threat detection log
if: always()
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: threat-detection.log
path: /tmp/gh-aw/threat-detection/detection.log
if-no-files-found: ignore
safe_outputs:
needs:
- agent
- detection
if: ((!cancelled()) && (needs.agent.result != 'skipped')) && (needs.detection.outputs.success == 'true')
runs-on: ubuntu-slim
permissions:
contents: read
discussions: write
issues: write
pull-requests: write
timeout-minutes: 15
env:
GH_AW_ENGINE_ID: "copilot"
GH_AW_WORKFLOW_ID: "issue-triage"
GH_AW_WORKFLOW_NAME: "Apollo Issue Triage"
outputs:
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
- name: Setup Scripts
uses: github/gh-aw/actions/setup@c549967b5808d783bc1537cf5687896de4dec7ee # v0.43.0
with:
destination: /opt/gh-aw/actions
- name: Download agent output artifact
continue-on-error: true
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
with:
name: agent-output
path: /tmp/gh-aw/safeoutputs/
- name: Setup agent output environment variable
run: |
mkdir -p /tmp/gh-aw/safeoutputs/
find "/tmp/gh-aw/safeoutputs/" -type f -print
echo "GH_AW_AGENT_OUTPUT=/tmp/gh-aw/safeoutputs/agent_output.json" >> "$GITHUB_ENV"
- name: Process Safe Outputs
id: process_safe_outputs
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
env:
GH_AW_AGENT_OUTPUT: ${{ env.GH_AW_AGENT_OUTPUT }}
GH_AW_SAFE_OUTPUTS_HANDLER_CONFIG: "{\"add_comment\":{\"max\":1},\"add_labels\":{\"max\":3},\"missing_data\":{},\"missing_tool\":{}}"
with:
github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
script: |
const { setupGlobals } = require('/opt/gh-aw/actions/setup_globals.cjs');
setupGlobals(core, github, context, exec, io);
const { main } = require('/opt/gh-aw/actions/safe_output_handler_manager.cjs');
await main();
================================================
FILE: .github/workflows/issue-triage.md
================================================
---
name: Apollo Issue Triage
on:
issues:
types: [opened]
permissions: read-all
roles: all
network:
allowed:
- github
tools:
github:
toolsets:
- issues
safe-outputs:
add-labels:
max: 3
add-comment:
max: 1
mentions:
allow-team-members: false
allow-context: false
allowed: []
concurrency:
group: apollo-issue-triage-${{ github.event.issue.number }}
cancel-in-progress: true
---
# Apollo Issue Triage Assistant
You are the issue triage assistant for `apolloconfig/apollo`.
Your job is to classify newly opened issues, add minimal labels, and ask for any missing information.
## Hard Safety Rules
1. Never close issues.
2. Never remove labels.
3. Never ask users to share secrets, passwords, access tokens, private keys, connection strings, or internal URLs.
4. Never claim a root cause without clear evidence from issue content.
5. If uncertain, say you are uncertain and request only the minimum missing details.
## Label Policy (Apollo-aligned)
Add at most 3 labels total. Prefer existing labels only.
### Primary type labels
- Bug or regression:
- `bug`
- `kind/report-problem`
- Question or support:
- `discussion`
- `kind/question`
- Feature request:
- `feature request`
- Dependency/security advisory update:
- `dependencies`
- `kind/dependencies`
- Unclear but potentially valid:
- `need investigation`
### Area labels (optional, choose at most 1)
- Config service keywords: `area/configservice`
- Admin service keywords: `area/adminservice`
- Portal keywords: `area/portal`
- OpenAPI keywords: `area/openapi`
- SDK/client keywords: `area/sdk` or `area/client`
- Docker keywords: `area/docker`
- Kubernetes keywords: `area/kubernetes`
- MySQL keywords: `area/mysql`
- UI keywords: `area/ui`
- Security keywords: `area/security`
### Missing info label
If critical details are missing for bug reports, add:
- `status/need-feedback`
Critical details:
- Apollo version or commit
- runtime/deployment environment (JDK, OS, DB mode)
- minimal reproduction steps
- expected vs actual behavior
- relevant error logs (with sensitive values redacted)
## Security Issue Handling
If the issue appears to describe a vulnerability (for example, credential leak, RCE, SQL injection, auth bypass):
1. Add `area/security` and `need investigation`.
2. Do not request exploit details publicly.
3. Ask the reporter to follow the private disclosure process in `SECURITY.md`.
## Language Handling
If issue title/body is mainly Chinese, reply in Chinese.
Otherwise reply in English.
## Comment Style Rules
1. Post exactly one concise triage comment.
2. Keep comments actionable and neutral.
3. If issue content is already sufficient, acknowledge and avoid asking repetitive questions.
4. Prefix comment with `<!-- apollo-triage -->`.
## Comment Templates
Use one of the following templates and tailor it to the issue.
### Chinese template
<!-- apollo-triage -->
感谢反馈。为便于维护者快速定位,请补充以下最小信息(如已提供可忽略):
1. Apollo 版本号或 commit
2. 部署与运行环境(JDK、OS、MySQL/H2、部署模式)
3. 最小复现步骤
4. 期望结果与实际结果
5. 相关错误日志(请先脱敏,不要包含密钥/密码/Token)
收到后我们会继续跟进。
### English template
<!-- apollo-triage -->
Thanks for opening this issue. To help maintainers triage quickly, please share the minimum details below (skip items already provided):
1. Apollo version or commit
2. Deployment/runtime environment (JDK, OS, MySQL/H2, deployment mode)
3. Minimal reproduction steps
4. Expected behavior vs actual behavior
5. Relevant error logs (please redact secrets, passwords, and tokens)
Once available, maintainers can follow up faster.
## Output Actions
For every run:
1. Add labels according to policy (max 3).
2. Add one triage comment in the same language as the issue.
================================================
FILE: .github/workflows/javascript-test.yml
================================================
#
# Copyright 2025 Apollo Authors
#
# 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.
#
# This workflow runs JavaScript tests in apollo-portal static/scripts directory.
# Tests are discovered automatically by pattern: test_*.js
name: JavaScript tests
on:
push:
branches: [master]
paths:
- 'apollo-portal/src/main/resources/static/scripts/**/*.js'
- 'apollo-portal/src/test/resources/static/scripts/test_*.js'
- '.github/workflows/javascript-test.yml'
pull_request:
branches: [master]
paths:
- 'apollo-portal/src/main/resources/static/scripts/**/*.js'
- 'apollo-portal/src/test/resources/static/scripts/test_*.js'
- '.github/workflows/javascript-test.yml'
jobs:
js-test:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Find and run JavaScript tests
run: |
TEST_DIR="apollo-portal/src/test/resources/static/scripts"
if [ ! -d "$TEST_DIR" ]; then
echo "WARNING: Test directory $TEST_DIR does not exist yet. Skipping JS tests."
exit 0
fi
TEST_FILES=$(find "$TEST_DIR" -name 'test_*.js' -type f)
if [ -z "$TEST_FILES" ]; then
echo "ERROR: No test files found matching test_*.js in $TEST_DIR"
exit 1
fi
FAILED=0
while IFS= read -r f; do
echo "--- Running: $f ---"
node "$f" || FAILED=1
done <<< "$TEST_FILES"
if [ "$FAILED" -ne 0 ]; then
echo "Some tests failed."
exit 1
fi
================================================
FILE: .github/workflows/license.yml
================================================
#
# Copyright 2024 Apollo Authors
#
# 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.
#
# This workflow will build a Java project with Maven
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
name: license
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
license:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check License
uses: apache/skywalking-eyes/header@501a28d2fb4a9b962661987e50cf0219631b32ff
================================================
FILE: .github/workflows/portal-login-e2e.yml
================================================
#
# Copyright 2026 Apollo Authors
#
# 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.
#
name: portal-login-e2e
on:
pull_request:
branches: [ master ]
paths:
- 'apollo-portal/**'
- 'apollo-assembly/**'
- 'e2e/portal-e2e/**'
- '.github/workflows/portal-login-e2e.yml'
jobs:
portal-login-e2e:
name: portal-login-e2e (${{ matrix.mode }})
runs-on: ubuntu-latest
timeout-minutes: 120
strategy:
fail-fast: false
matrix:
mode: [ ldap, oidc ]
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
cache: maven
- name: Set up Node.js 20
uses: actions/setup-node@v4
with:
node-version: 20
- name: Cache Playwright browsers
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: ${{ runner.os }}-playwright-${{ hashFiles('e2e/portal-e2e/package-lock.json') }}
restore-keys: |
${{ runner.os }}-playwright-
- name: Build Apollo assembly
run: ./mvnw -B -pl apollo-assembly -am -DskipTests package
- name: Setup auth provider
env:
PORTAL_BASE_URL: http://127.0.0.1:8070
LDAP_ALLOWED_USER: apollo
LDAP_ALLOWED_USER_PASSWORD: admin
LDAP_ALLOWED_USER_SECONDARY: devops1
LDAP_ALLOWED_USER_SECONDARY_PASSWORD: admin
LDAP_ALLOWED_USER_SECONDARY_DISPLAY_NAME: Dev Ops One
LDAP_ALLOWED_USER_SECONDARY_EMAIL: devops1@example.org
LDAP_BLOCKED_USER: blocked1
LDAP_BLOCKED_USER_PASSWORD: admin
OIDC_USERNAME: apollo
OIDC_PASSWORD: admin
OIDC_SECONDARY_USERNAME: oidcdev1
OIDC_SECONDARY_PASSWORD: admin
OIDC_SECONDARY_EMAIL: oidcdev1@example.org
OIDC_CLIENT_ID: apollo-portal
OIDC_CLIENT_SECRET: apollo-secret
run: ./e2e/portal-e2e/scripts/auth/setup-${{ matrix.mode }}.sh
- name: Start Apollo assembly
env:
OIDC_ISSUER_URI: http://127.0.0.1:9080/realms/apollo
OIDC_CLIENT_ID: apollo-portal
OIDC_CLIENT_SECRET: apollo-secret
run: |
JAR=""
for candidate in apollo-assembly/target/apollo-assembly-*.jar; do
if [[ "$candidate" == *"-sources.jar" || "$candidate" == *"-javadoc.jar" ]]; then
continue
fi
if [[ -f "$candidate" ]]; then
JAR="$candidate"
break
fi
done
if [[ -z "$JAR" ]]; then
echo "No runnable apollo-assembly jar found in apollo-assembly/target" >&2
exit 1
fi
if [[ "${{ matrix.mode }}" == "ldap" ]]; then
ACTIVE_PROFILES="github,database-discovery,ldap"
else
ACTIVE_PROFILES="github,database-discovery,oidc"
fi
SPRING_PROFILES_ACTIVE="${ACTIVE_PROFILES}" \
SPRING_SQL_CONFIG_INIT_MODE="always" \
SPRING_SQL_PORTAL_INIT_MODE="always" \
SPRING_CONFIG_DATASOURCE_URL="jdbc:h2:mem:apollo-config-db;mode=mysql;DB_CLOSE_ON_EXIT=FALSE;DB_CLOSE_DELAY=-1;BUILTIN_ALIAS_OVERRIDE=TRUE;DATABASE_TO_UPPER=FALSE" \
SPRING_PORTAL_DATASOURCE_URL="jdbc:h2:mem:apollo-portal-db;mode=mysql;DB_CLOSE_ON_EXIT=FALSE;DB_CLOSE_DELAY=-1;BUILTIN_ALIAS_OVERRIDE=TRUE;DATABASE_TO_UPPER=FALSE" \
SPRING_CONFIG_ADDITIONAL_LOCATION="file:${GITHUB_WORKSPACE}/e2e/portal-e2e/config/application-${{ matrix.mode }}-e2e.yml" \
java -jar "$JAR" > /tmp/apollo-assembly-run.log 2>&1 &
echo $! > /tmp/apollo-assembly.pid
- name: Wait for Apollo readiness
env:
PORTAL_AUTH_MODE: ${{ matrix.mode }}
PORTAL_USERNAME: apollo
PORTAL_PASSWORD: admin
run: ./e2e/portal-e2e/scripts/wait-for-ready.sh
- name: Run Playwright auth matrix tests
env:
BASE_URL: http://127.0.0.1:8070
PORTAL_AUTH_MODE: ${{ matrix.mode }}
PORTAL_USERNAME: apollo
PORTAL_PASSWORD: admin
LDAP_ALLOWED_USER: apollo
LDAP_ALLOWED_USER_PASSWORD: admin
LDAP_ALLOWED_USER_SECONDARY: devops1
LDAP_ALLOWED_USER_SECONDARY_DISPLAY_NAME: Dev Ops One
LDAP_ALLOWED_USER_SECONDARY_EMAIL: devops1@example.org
LDAP_BLOCKED_USER: blocked1
LDAP_BLOCKED_USER_PASSWORD: admin
OIDC_USERNAME: apollo
OIDC_PASSWORD: admin
OIDC_SECONDARY_USERNAME: oidcdev1
OIDC_SECONDARY_PASSWORD: admin
OIDC_SECONDARY_EMAIL: oidcdev1@example.org
OIDC_CLIENT_ID: apollo-portal
OIDC_CLIENT_SECRET: apollo-secret
OIDC_ISSUER_URI: http://127.0.0.1:9080/realms/apollo
PLAYWRIGHT_WORKERS: 2
run: |
cd e2e/portal-e2e
npm ci
npx playwright install chromium
npm run test:e2e:auth-matrix:ci
- name: Dump auth provider logs on failure
if: failure()
run: |
docker logs apollo-e2e-ldap > /tmp/apollo-e2e-ldap.log 2>&1 || true
docker logs apollo-e2e-keycloak > /tmp/apollo-e2e-keycloak.log 2>&1 || true
- name: Upload auth matrix artifacts on failure
if: failure()
uses: actions/upload-artifact@v4
with:
name: portal-login-e2e-artifacts-${{ matrix.mode }}
path: |
e2e/portal-e2e/playwright-report
e2e/portal-e2e/test-results
/tmp/apollo-assembly-run.log
/tmp/apollo-e2e-ldap.log
/tmp/apollo-e2e-keycloak.log
- name: Stop Apollo assembly
if: always()
run: |
if [ -f /tmp/apollo-assembly.pid ]; then
kill "$(cat /tmp/apollo-assembly.pid)" || true
fi
- name: Teardown auth provider
if: always()
run: ./e2e/portal-e2e/scripts/auth/teardown-auth.sh
================================================
FILE: .github/workflows/portal-ui-e2e.yml
================================================
#
# Copyright 2026 Apollo Authors
#
# 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.
#
name: portal-ui-e2e
on:
pull_request:
branches: [ master ]
paths:
- 'apollo-portal/**'
- 'apollo-assembly/**'
- 'e2e/portal-e2e/**'
- 'scripts/sql/**'
- '.github/workflows/portal-ui-e2e.yml'
jobs:
portal-ui-e2e:
name: portal-ui-e2e
runs-on: ubuntu-latest
timeout-minutes: 90
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
cache: maven
- name: Set up Node.js 20
uses: actions/setup-node@v4
with:
node-version: 20
- name: Cache Playwright browsers
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: ${{ runner.os }}-playwright-${{ hashFiles('e2e/portal-e2e/package-lock.json') }}
restore-keys: |
${{ runner.os }}-playwright-
- name: Build Apollo assembly
run: ./mvnw -B -pl apollo-assembly -am -DskipTests package
- name: Start Apollo assembly
run: |
JAR=""
for candidate in apollo-assembly/target/apollo-assembly-*.jar; do
if [[ "$candidate" == *"-sources.jar" || "$candidate" == *"-javadoc.jar" ]]; then
continue
fi
if [[ -f "$candidate" ]]; then
JAR="$candidate"
break
fi
done
if [[ -z "$JAR" ]]; then
echo "No runnable apollo-assembly jar found in apollo-assembly/target" >&2
exit 1
fi
SPRING_PROFILES_ACTIVE="github,database-discovery,auth" \
SPRING_SQL_CONFIG_INIT_MODE="always" \
SPRING_SQL_PORTAL_INIT_MODE="always" \
SPRING_CONFIG_DATASOURCE_URL="jdbc:h2:mem:apollo-config-db;mode=mysql;DB_CLOSE_ON_EXIT=FALSE;DB_CLOSE_DELAY=-1;BUILTIN_ALIAS_OVERRIDE=TRUE;DATABASE_TO_UPPER=FALSE" \
SPRING_PORTAL_DATASOURCE_URL="jdbc:h2:mem:apollo-portal-db;mode=mysql;DB_CLOSE_ON_EXIT=FALSE;DB_CLOSE_DELAY=-1;BUILTIN_ALIAS_OVERRIDE=TRUE;DATABASE_TO_UPPER=FALSE" \
java -jar "$JAR" > /tmp/apollo-assembly-run.log 2>&1 &
echo $! > /tmp/apollo-assembly.pid
- name: Wait for Apollo readiness
run: ./e2e/portal-e2e/scripts/wait-for-ready.sh
- name: Run Playwright UI tests
env:
BASE_URL: http://127.0.0.1:8070
PLAYWRIGHT_WORKERS: 2
run: |
cd e2e/portal-e2e
npm ci
npx playwright install chromium
npm run test:e2e:ci
- name: Upload e2e test artifacts on failure
if: failure()
uses: actions/upload-artifact@v4
with:
name: portal-ui-e2e-artifacts
path: |
e2e/portal-e2e/playwright-report
e2e/portal-e2e/test-results
/tmp/apollo-assembly-run.log
- name: Stop Apollo assembly
if: always()
run: |
if [ -f /tmp/apollo-assembly.pid ]; then
kill "$(cat /tmp/apollo-assembly.pid)" || true
fi
================================================
FILE: .github/workflows/release-packages.yml
================================================
#
# Copyright 2024 Apollo Authors
#
# 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.
#
name: Release Packages
on:
workflow_dispatch:
inputs:
release_tag:
description: 'release tag, e.g. v2.5.0'
required: true
skip_version_check:
description: 'skip release_tag and pom revision consistency check'
required: false
default: 'false'
permissions:
contents: write
jobs:
package:
runs-on: ubuntu-latest
timeout-minutes: 90
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ inputs.release_tag }}
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
- name: Cache Maven packages
uses: actions/cache@v4
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- name: Build package
run: ./scripts/build.sh
- name: Resolve project version from pom revision
id: project-version
run: |
set -euo pipefail
VERSION=$(mvn -q -N help:evaluate -Dexpression=revision -DforceStdout | tail -n 1 | tr -d '\r')
if [[ -z "${VERSION}" ]]; then
echo "Failed to resolve revision from pom.xml"
exit 1
fi
echo "version=${VERSION}" >> "${GITHUB_OUTPUT}"
- name: Generate checksums
env:
VERSION: ${{ steps.project-version.outputs.version }}
run: |
set -euo pipefail
(cd "apollo-configservice/target" && shasum "apollo-configservice-${VERSION}-github.zip") > "apollo-configservice/target/apollo-configservice-${VERSION}-github.zip.sha1"
(cd "apollo-adminservice/target" && shasum "apollo-adminservice-${VERSION}-github.zip") > "apollo-adminservice/target/apollo-adminservice-${VERSION}-github.zip.sha1"
(cd "apollo-portal/target" && shasum "apollo-portal-${VERSION}-github.zip") > "apollo-portal/target/apollo-portal-${VERSION}-github.zip.sha1"
- name: Verify release and artifacts
env:
GH_TOKEN: ${{ github.token }}
VERSION: ${{ steps.project-version.outputs.version }}
RELEASE_TAG: ${{ inputs.release_tag }}
SKIP_VERSION_CHECK: ${{ inputs.skip_version_check }}
run: |
set -euo pipefail
if [[ "${SKIP_VERSION_CHECK,,}" != "true" ]]; then
TAG_VERSION="${RELEASE_TAG#v}"
if [[ "${TAG_VERSION}" != "${VERSION}" ]]; then
echo "Release tag (${RELEASE_TAG}) does not match pom revision (${VERSION})"
exit 1
fi
else
echo "Skip version consistency check by input: skip_version_check=${SKIP_VERSION_CHECK}"
fi
gh release view "${RELEASE_TAG}" --repo apolloconfig/apollo >/dev/null
test -f "apollo-configservice/target/apollo-configservice-${VERSION}-github.zip"
test -f "apollo-configservice/target/apollo-configservice-${VERSION}-github.zip.sha1"
test -f "apollo-adminservice/target/apollo-adminservice-${VERSION}-github.zip"
test -f "apollo-adminservice/target/apollo-adminservice-${VERSION}-github.zip.sha1"
test -f "apollo-portal/target/apollo-portal-${VERSION}-github.zip"
test -f "apollo-portal/target/apollo-portal-${VERSION}-github.zip.sha1"
- name: Upload release assets
env:
GH_TOKEN: ${{ github.token }}
VERSION: ${{ steps.project-version.outputs.version }}
RELEASE_TAG: ${{ inputs.release_tag }}
run: |
set -euo pipefail
gh release upload "${RELEASE_TAG}" \
"apollo-configservice/target/apollo-configservice-${VERSION}-github.zip" \
"apollo-configservice/target/apollo-configservice-${VERSION}-github.zip.sha1" \
"apollo-adminservice/target/apollo-adminservice-${VERSION}-github.zip" \
"apollo-adminservice/target/apollo-adminservice-${VERSION}-github.zip.sha1" \
"apollo-portal/target/apollo-portal-${VERSION}-github.zip" \
"apollo-portal/target/apollo-portal-${VERSION}-github.zip.sha1" \
--repo apolloconfig/apollo \
--clobber
================================================
FILE: .gitignore
================================================
*.class
.DS_Store
application.pid
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.ear
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
# Eclipse
.classpath
.project
target
.settings
# Idea
.idea
*.iml
# git
*.orig
.flattened-pom.xml
================================================
FILE: .licenserc.yaml
================================================
#
# Copyright 2024 Apollo Authors
#
# 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.
#
header:
license:
spdx-id: Apache-2.0
copyright-owner: Apollo Authors
paths-ignore:
- '.github/**'
- '**/.gitignore'
- '**/.helmignore'
- '.gitmodules'
- '.gitattributes'
- '.mvn'
- '**/*.md'
- '**/*.svg'
- '**/*.json'
- '**/*.conf'
- '**/*.ftl'
- '**/*.iml'
- '**/*.tpl'
- '**/*.factories'
- '**/*.handlers'
- '**/*.schemas'
- '**/*.nojekyll'
- 'mvnw'
- 'mvnw.cmd'
- '**/target/**'
- 'LICENSE'
- 'NOTICE'
- 'CNAME'
- '**/resources/META-INF/services/**'
- '**/vendor/**'
- 'apollo-buildtools/src/main/resources/google_checks.xml'
- 'apollo-core/src/test/resources/META-INF/app-with-utf8bom.properties'
- 'apollo-core/src/test/resources/properties/server-with-utf8bom.properties'
- 'apollo-audit/apollo-audit-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports'
comment: on-failure
license-location-threshold: 130
================================================
FILE: .mergify.yml
================================================
#
# Copyright 2026 Apollo Authors
#
# 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.
#
merge_queue:
max_parallel_checks: 1
queue_rules:
- name: single-commit
autoqueue: true
batch_size: 1
merge_method: rebase
queue_conditions: &single_commit_conditions
- "base = master"
- "-draft"
- "-closed"
- "-conflict"
- "#approved-reviews-by >= 1"
- "#changes-requested-reviews-by = 0"
- "#commits = 1"
- "check-success = build (21)"
- "check-success = build (17)"
- "check-success = code-style-check"
- "check-success = license"
- "check-success = CLAssistant"
merge_conditions: *single_commit_conditions
- name: multi-commit
autoqueue: true
batch_size: 1
merge_method: squash
queue_conditions: &multi_commit_conditions
- "base = master"
- "-draft"
- "-closed"
- "-conflict"
- "#approved-reviews-by >= 1"
- "#changes-requested-reviews-by = 0"
- "#commits > 1"
- "check-success = build (21)"
- "check-success = build (17)"
- "check-success = code-style-check"
- "check-success = license"
- "check-success = CLAssistant"
merge_conditions: *multi_commit_conditions
pull_request_rules:
- name: notify author when PR has conflicts
conditions:
- "conflict"
- "-closed"
actions:
comment:
message: "@{{author}} This pull request has conflicts with the target branch. Please resolve them and update the branch before merging."
================================================
FILE: .mvn/wrapper/MavenWrapperDownloader.java
================================================
/*
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.
*/
import java.net.*;
import java.io.*;
import java.nio.channels.*;
import java.util.Properties;
public class MavenWrapperDownloader {
/**
* Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
*/
private static final String DEFAULT_DOWNLOAD_URL =
"https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar";
/**
* Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
* use instead of the default one.
*/
private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
".mvn/wrapper/maven-wrapper.properties";
/**
* Path where the maven-wrapper.jar will be saved to.
*/
private static final String MAVEN_WRAPPER_JAR_PATH =
".mvn/wrapper/maven-wrapper.jar";
/**
* Name of the property which should be used to override the default download url for the wrapper.
*/
private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
public static void main(String args[]) {
System.out.println("- Downloader started");
File baseDirectory = new File(args[0]);
System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
// If the maven-wrapper.properties exists, read it and check if it contains a custom
// wrapperUrl parameter.
File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
String url = DEFAULT_DOWNLOAD_URL;
if(mavenWrapperPropertyFile.exists()) {
FileInputStream mavenWrapperPropertyFileInputStream = null;
try {
mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
Properties mavenWrapperProperties = new Properties();
mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
} catch (IOException e) {
System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
} finally {
try {
if(mavenWrapperPropertyFileInputStream != null) {
mavenWrapperPropertyFileInputStream.close();
}
} catch (IOException e) {
// Ignore ...
}
}
}
System.out.println("- Downloading from: : " + url);
File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
if(!outputFile.getParentFile().exists()) {
if(!outputFile.getParentFile().mkdirs()) {
System.out.println(
"- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'");
}
}
System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
try {
downloadFileFromURL(url, outputFile);
System.out.println("Done");
System.exit(0);
} catch (Throwable e) {
System.out.println("- Error downloading");
e.printStackTrace();
System.exit(1);
}
}
private static void downloadFileFromURL(String urlString, File destination) throws Exception {
URL website = new URL(urlString);
ReadableByteChannel rbc;
rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream(destination);
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
fos.close();
rbc.close();
}
}
================================================
FILE: .mvn/wrapper/maven-wrapper.properties
================================================
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.5.4/apache-maven-3.5.4-bin.zip
================================================
FILE: AGENTS.md
================================================
# Repository Guidelines
## Project Structure & Module Organization
- Multi-module Maven repo with root `pom.xml` and service modules like `apollo-configservice`, `apollo-adminservice`, and `apollo-portal`, shared libs in `apollo-common`, and packaging in `apollo-assembly`.
- `apollo-biz` is a shared business-logic module used by services like config/admin (not a standalone service).
- Build and release tooling lives in `scripts/` (e.g., `scripts/build.sh`) and `apollo-buildtools/` (code style configs).
- Database and schema assets are under `scripts/sql` and module `src/main/resources` folders.
- Tests follow standard Maven layout: `*/src/test/java` and `*/src/test/resources` inside each module.
- Documentation is in `docs/`.
## Build, Test, and Development Commands
- `./mvnw -DskipTests package` builds all modules.
- `./mvnw test` runs the full test suite via Surefire (may log warnings if local meta/admin services are not running).
- `./mvnw -pl apollo-configservice -am test` runs tests for a specific module and its dependencies.
- `./mvnw spotless:apply` formats code and must be run before opening a PR.
- `./scripts/build.sh` generates distributable packages (used for deployment workflows).
## Coding Style & Naming Conventions
- Follow Google Java Style Guide; 2-space indentation and standard Java conventions apply.
- Use the IDE configs in `apollo-buildtools/style/` (IntelliJ/Eclipse).
- New Java classes should include a short Javadoc describing the class purpose.
- Use standard Java naming: packages `lower.case`, classes `UpperCamelCase`, tests `*Test`.
## OpenAPI Contract Workflow (apollo-portal)
- Treat OpenAPI as contract-first: update spec in `apolloconfig/apollo-openapi` before (or together with) portal implementation changes.
- `apollo-portal/pom.xml` uses `apollo.openapi.spec.url` + `openapi-generator-maven-plugin`; generated sources under `target/generated-sources/openapi/src/main/java` are added to compile path via `build-helper-maven-plugin`.
- For new/changed OpenAPI endpoints, prefer implementing generated `*ManagementApi` interfaces and generated models; avoid introducing hand-written DTO/controller contracts that bypass the spec pipeline.
- In PR review, verify contract alignment explicitly: endpoint path, request/response model, and permissions in `apollo` should match the spec in `apollo-openapi`.
## Testing Guidelines
- JUnit 5 is the default, with Vintage enabled for legacy JUnit 4 tests.
- Put new tests under the module’s `src/test/java` with `*Test` suffix.
- Add unit tests for new features or important bug fixes.
## Commit & Pull Request Guidelines
- Use Conventional Commits format (e.g., `feat:`, `fix:`).
- If a commit fixes an issue, append `Fixes #123` in the commit message.
- Commit only on feature branches; never commit directly to `master` or `main`.
- `CHANGES.md` entries must use a PR URL in Markdown link format; if the PR URL is not available yet, open the PR first, then add/update `CHANGES.md` in a follow-up commit.
- Rebase onto `master` and squash feature work into a single commit before merge.
- When merging a PR on GitHub: if it has a single commit, use rebase and merge; if it has multiple commits, use squash and merge.
- Non-trivial contributions require signing the CLA.
- Open a feature branch for your change and submit a PR using `.github/PULL_REQUEST_TEMPLATE.md`.
- PRs should include a clear description, tests run, and any relevant screenshots/logs; use GitHub issues for tracking.
- The PR checklist expects `mvn clean test`, `mvn spotless:apply`, and an update to `CHANGES.md`.
- For upstream contributions, open PRs against `apolloconfig/apollo` and fill the template with real content (not the raw template text).
## Security & Configuration Notes
- Apollo supports H2 in-memory for local development and MySQL for production; prefer H2 locally unless you need a real database.
- Review `scripts/sql` and environment config when using MySQL.
- Do not commit secrets or environment-specific credentials; use local overrides instead.
- Follow `SECURITY.md` for vulnerability reporting.
================================================
FILE: CHANGES.md
================================================
Changes by Version
==================
Release Notes.
Apollo 3.0.0
------------------
* [Fix: include super admin in hasAnyPermission semantics](https://github.com/apolloconfig/apollo/pull/5568)
------------------
All issues and pull requests are [here](https://github.com/apolloconfig/apollo/milestone/18?closed=1)
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at apollo-config@googlegroups.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/
================================================
FILE: CONTRIBUTING.md
================================================
## Contributing to apollo
Apollo is released under the non-restrictive Apache 2.0 license, and follows a very standard GitHub development process, using GitHub tracker for issues and merging pull requests into master. If you want to contribute even something trivial please do not hesitate, but follow the guidelines below.
### Sign the Contributor License Agreement
Before we accept a non-trivial patch or pull request we will need you to sign the Contributor License Agreement. Signing the contributor’s agreement does not grant anyone commit rights to the main repository, but it does mean that we can accept your contributions, and you will get an author credit if we do. Active contributors might be asked to join the core team, and given the ability to merge pull requests.
### Code Conventions
Our code style is in line with [Google Java Style Guide](https://google.github.io/styleguide/javaguide.html).
We provide template files [intellij-java-google-style.xml](https://github.com/ctripcorp/apollo/blob/master/apollo-buildtools/style/intellij-java-google-style.xml) for IntelliJ IDEA and [eclipse-java-google-style.xml](https://github.com/ctripcorp/apollo/blob/master/apollo-buildtools/style/eclipse-java-google-style.xml) for Eclipse. If you use other IDEs, then you may config manually by referencing the template files.
* Make sure all new .java files have a simple Javadoc class comment on what the class is for.
* Add some Javadocs and, if you change the namespace, some XSD doc elements.
* A few unit tests should be added for a new feature or an important bug fix.
* If no-one else is using your branch, please rebase it against the current master (or other target branch in the main project).
* Normally, we would squash commits for one feature into one commit. There are 2 ways to do this:
1. To rebase and squash based on the remote branch
* `git rebase -i <remote>/master`
* merge commits via `fixup`, etc
2. Create a new branch and merge these commits into one
* `git checkout -b <some-branch-name> <remote>/master`
* `git merge --squash <current-feature-branch>`
* For commits, we adhere to the conventional commits format. For more details, refer to [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/).
* When crafting commit messages, please adhere to the following conventions: if your commit addresses an existing issue, append "Fixes #XXX" to the end of the commit message (where XXX is the issue number).
* Before submitting a pull request, you need to run `mvn spotless:apply` locally to format the code; this is important for maintaining good coding style in the project.
================================================
FILE: GOVERNANCE.md
================================================
# Overview
Apollo is a meritocratic, consensus-based community project. Anyone with an interest in the project can join the community, contribute to the project design and participate in the decision-making process.
This document describes how that participation takes place and how to set about earning merit within the project community.
# Roles and Responsibilities
Apollo community is composed of and operated by the following roles:
- Users
- Contributors
- Committers
- Project Management Committee (PMC)
## Users
Users are community members who have a need for the project. They are the most important members of the community and without them the project would have no purpose. Anyone can be a user and there are no special requirements.
## Contributors
Contributors are community members who contribute in concrete ways to the project.
### How to become a Contributor
- merged at least 1 pull request
You are also encouraged to participate in the projects in the following ways:
- Actively answer technical questions raised by community users in GitHub issues.
- Help test the projects
- Help review the pull requests (PRs) submitted by others
- Help improve technical documents
- Submit valuable issues
- Report or fix known and unknown bugs
- Write articles about source code analysis and usage cases for a project.
- Give representations of Apollo topic in conferences.
- Take part in our discussions of features, enhancements, etc.
## Members
Members are active contributors who have made multiple contributions to the project or community. They will be invited as a member of the [apollo organization](https://github.com/apolloconfig).
### How to become a Member
- Enabled [two-factor authentication](https://help.github.com/articles/about-two-factor-authentication) on their GitHub account
- Have made multiple contributions to the project or community, e.g. authoring or reviewing PRs, commenting on issues/discussions, etc
- [Submit a member request](https://github.com/apolloconfig/apollo-community/issues/new?template=membership-request.md&title=REQUEST%3A+New+membership+for+%3Cyour-github-username%3E) in the [apollo-community](https://github.com/apolloconfig/apollo-community) repo
- Sponsored by two PMC members, i.e. replying `+1` to confirm sponsorship in the member request
### Privileges and responsibilities
- Have the [Triage role](https://docs.github.com/en/enterprise-cloud@latest/organizations/managing-peoples-access-to-your-organization-with-roles/managing-custom-repository-roles-for-an-organization#about-the-inherited-role) of the apollo community
- Responsive to issues and PRs assigned to them
- Active owner of code contributed by them, e.g. Addresses bugs or issues discovered after code is accepted
## Committers
Committers are contributors who have shown that they are committed to the continued development of the project through ongoing engagement with the community and recognized by PMCs for their outstanding contributions.
### How to become a Committer
A Committer must have accomplished one or more of the following items:
- Demonstrated a good sense of responsibility in PR reviews.
- Demonstrated deep understanding of Apollo components by contributing significantly as:
- Finished 2 or more tasks of Medium difficulty
- Fixed 1 or more tasks of Hard difficulty
- Nominated by one PMC member and gained more +1 than -1.
### Privileges and responsibilities
- Have the [Write role](https://docs.github.com/en/enterprise-cloud@latest/organizations/managing-peoples-access-to-your-organization-with-roles/managing-custom-repository-roles-for-an-organization#about-the-inherited-role) of the apollo community
- Control overall code quality of projects
- Guide Contributors to contribute to the community continuously
- Participate in design discussions
## Project Management Committee
The PMC(Project Management Committee) functions as the core management team that oversees the Apollo community. The PMC has additional responsibilities over and above those of Committers. These responsibilities ensure the smooth running of the project.
### How to become a PMC member
- Membership of the PMC is by invitation from the existing PMC members.
- A nomination will result in discussion and then a vote by the existing PMC members.
- PMC membership votes are subject to consensus approval of the current PMC members.
### Privileges and responsibilities
- Handle reported security issues (CVE, etc.)
- Nominate new committers and PMC members
- Vote on new committers and new PMC members
- Make major decisions for the future with respect to Apollo, such as project-level governance policies, management of sub-structures, security processes and so on
- Make decisions when community consensus cannot be reached
# Decision-making and voting
Proposals and ideas can be submitted for agreement via a GitHub issue, PR, or GitHub Discussion.
Major changes such as feature proposals and organization or process changes should be brought to the PMC. For the change to happen, the change must earn more +1 than -1.
# Conflict resolution
In general, we prefer that technical issues and other disputes upon which consensus can't be reached are amicably worked out between the persons involved. If a dispute cannot be decided independently, the PMC can be called in to resolve the issue by voting. The same PR can be used, or a separate PR can be opened for voting.
# Changes in Governance
Any change in this Governance document, or similar nature of changes to other governance related documents, shall go through the voting process as described in [Decision-making and voting](#decision-making-and-voting).
# Credits
The contents of this document are based on [Meritocratic Governance Model](http://oss-watch.ac.uk/resources/meritocraticgovernancemodel), [TiDB Governance](https://github.com/pingcap/community/blob/master/GOVERNANCE.md) and [Dapr Community Membership](https://github.com/dapr/community/blob/master/community-membership.md).
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "{}"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright {yyyy} {name of copyright owner}
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: README.md
================================================
<img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo@master/doc/images/logo/logo-simple.png" alt="apollo-logo" width="40%">
English | [中文](https://www.apolloconfig.com/#/zh/README)
# Apollo - A reliable configuration management system
[](https://github.com/apolloconfig/apollo/actions)
[](https://github.com/apolloconfig/apollo/releases)
[](https://mvnrepository.com/artifact/com.ctrip.framework.apollo/apollo-client)
[](https://codecov.io/github/apolloconfig/apollo?branch=master)
[](https://opensource.org/licenses/Apache-2.0)
[<img src="https://devin.ai/assets/deepwiki-badge.png" alt="Ask DeepWiki.com" height="20"/>](https://deepwiki.com/apolloconfig/apollo)
Apollo is a reliable configuration management system. It can centrally manage the configurations of different applications and different clusters. It is suitable for microservice configuration management scenarios.
The server side is developed based on Spring Boot and Spring Cloud, which can simply run without the need to install additional application containers such as Tomcat.
The Java SDK does not rely on any framework and can run in all Java runtime environments. It also has good support for Spring/Spring Boot environments.
The .Net SDK does not rely on any framework and can run in all .Net runtime environments.
For more details of the product introduction, please refer [Introduction to Apollo Configuration Center](https://www.apolloconfig.com/#/zh/design/apollo-introduction).
For local demo purpose, please refer [Quick Start](https://www.apolloconfig.com/#/zh/deployment/quick-start).
Demo Environment:
- [http://81.68.181.139](http://81.68.181.139/)
- User/Password: apollo/admin
# Screenshots

# Features
* **Unified management of the configurations of different environments and different clusters**
* Apollo provides a unified interface to centrally manage the configurations of different environments, different clusters, and different namespaces
* The same codebase could have different configurations when deployed in different clusters
* With the namespace concept, it is easy to support multiple applications to share the same configurations, while also allowing them to customize the configurations
* Multiple languages is provided in user interface(currently Chinese and English)
* **Configuration changes takes effect in real time (hot release)**
* After the user modified the configuration and released it in Apollo, the sdk will receive the latest configurations in real time (1 second) and notify the application
* **Release version management**
* Every configuration releases are versioned, which is friendly to support configuration rollback
* **Grayscale release**
* Support grayscale configuration release, for example, after clicking release, it will only take effect for some application instances. After a period of observation, we could push the configurations to all application instances if there is no problem
* **Global Search Configuration Items**
* A fuzzy search of the key and value of a configuration item finds in which application, environment, cluster, namespace the configuration item with the corresponding value is used
* It is easy for administrators and SRE roles to quickly and easily find and change the configuration values of resources by highlighting, paging and jumping through configurations
* **Authorization management, release approval and operation audit**
* Great authorization mechanism is designed for applications and configurations management, and the management of configurations is divided into two operations: editing and publishing, therefore greatly reducing human errors
* All operations have audit logs for easy tracking of problems
* **Client side configuration information monitoring**
* It's very easy to see which instances are using the configurations and what versions they are using
* **Rich SDKs available**
* Provides native sdks of Java and .Net to facilitate application integration
* Support Spring Placeholder, Annotation and Spring Boot ConfigurationProperties for easy application use (requires Spring 3.1.1+)
* Http APIs are provided, so non-Java and .Net applications can integrate conveniently
* Rich third party sdks are also available, e.g. Golang, Python, NodeJS, PHP, C, etc
* **Open platform API**
* Apollo itself provides a unified configuration management interface, which supports features such as multi-environment, multi-data center configuration management, permissions, and process governance
* However, for the sake of versatility, Apollo will not put too many restrictions on the modification of the configuration, as long as it conforms to the basic format, it can be saved.
* In our research, we found that for some users, their configurations may have more complicated formats, such as xml, json, and the format needs to be verified
* There are also some users such as DAL, which not only have a specific format, but also need to verify the entered value before saving, such as checking whether the database, username and password match
* For this type of application, Apollo allows the application to modify and release configurations through open APIs, which has great authorization and permission control mechanism built in
* **Simple deployment**
* As an infrastructure service, the configuration center has very high availability requirements, which forces Apollo to rely on external dependencies as little as possible
* Currently, the only external dependency is MySQL, so the deployment is very simple. Apollo can run as long as Java and MySQL are installed
* Apollo also provides a packaging script, which can generate all required installation packages with just one click, and supports customization of runtime parameters
# Usage
* [Apollo User Guide](https://www.apolloconfig.com/#/zh/portal/apollo-user-guide)
* [Apollo Open APIs](https://www.apolloconfig.com/#/zh/portal/apollo-open-api-platform)
* [Apollo Use Cases](https://github.com/apolloconfig/apollo-use-cases)
* [Apollo User Practices](https://www.apolloconfig.com/#/zh/portal/apollo-user-practices)
* [Apollo Security Best Practices](https://www.apolloconfig.com/#/zh/portal/apollo-user-guide?id=_71-%e5%ae%89%e5%85%a8%e7%9b%b8%e5%85%b3)
# SDK
* [Java SDK User Guide](https://www.apolloconfig.com/#/zh/client/java-sdk-user-guide)
* [.Net SDK user Guide](https://www.apolloconfig.com/#/zh/client/dotnet-sdk-user-guide)
* [Golang SDK User Guide](https://www.apolloconfig.com/#/zh/client/golang-sdks-user-guide)
* [Python SDK User Guide](https://www.apolloconfig.com/#/zh/client/python-sdks-user-guide)
* [NodeJS SDK User Guide](https://www.apolloconfig.com/#/zh/client/nodejs-sdks-user-guide)
* [PHP SDK User Guide](https://www.apolloconfig.com/#/zh/client/php-sdks-user-guide)
* [C SDK User Guide](https://www.apolloconfig.com/#/zh/client/c-sdks-user-guide)
* [Rust SDK User Guide](https://www.apolloconfig.com/#/zh/client/rust-sdks-user-guide)
* [HTTP API Guide](https://www.apolloconfig.com/#/zh/client/other-language-client-user-guide)
# Design
* [Apollo Design](https://www.apolloconfig.com/#/zh/design/apollo-design)
* [Apollo Core Concept - Namespace](https://www.apolloconfig.com/#/zh/design/apollo-core-concept-namespace)
* [Apollo Architecture Analysis](https://mp.weixin.qq.com/s/-hUaQPzfsl9Lm3IqQW3VDQ)
* [Apollo Source Code Explanation](http://www.iocoder.cn/categories/Apollo/)
# Development
* [Apollo Development Guide](https://www.apolloconfig.com/#/zh/contribution/apollo-development-guide)
* Code Styles
* [Eclipse Code Style](https://github.com/apolloconfig/apollo/blob/master/apollo-buildtools/style/eclipse-java-google-style.xml)
* [Intellij Code Style](https://github.com/apolloconfig/apollo/blob/master/apollo-buildtools/style/intellij-java-google-style.xml)
# Deployment
* [Quick Start](https://www.apolloconfig.com/#/zh/deployment/quick-start)
* [Distributed Deployment Guide](https://www.apolloconfig.com/#/zh/deployment/distributed-deployment-guide)
# Release Notes
* [Releases](https://github.com/apolloconfig/apollo/releases)
# FAQ
* [FAQ](https://www.apolloconfig.com/#/zh/faq/faq)
* [Common Issues in Deployment & Development Phase](https://www.apolloconfig.com/#/zh/faq/common-issues-in-deployment-and-development-phase)
# Presentation
* [Design and Implementation Details of Apollo](http://www.itdks.com/dakalive/detail/3420)
* [Slides](https://github.com/apolloconfig/apollo-community/blob/master/slides/design-and-implementation-of-apollo.pdf)
* [Configuration Center Makes Microservices Smart](https://2018.qconshanghai.com/presentation/799)
* [Slides](https://github.com/apolloconfig/apollo-community/blob/master/slides/configuration-center-makes-microservices-smart.pdf)
# Publication
* [Design and Implementation Details of Apollo](https://www.infoq.cn/article/open-source-configuration-center-apollo)
* [Configuration Center Makes Microservices Smart](https://mp.weixin.qq.com/s/iDmYJre_ULEIxuliu1EbIQ)
# Community
* [Apollo Team](https://www.apolloconfig.com/#/en/community/team)
* [Community Governance](https://github.com/apolloconfig/apollo/blob/master/GOVERNANCE.md)
* [Contributing Guide](https://github.com/apolloconfig/apollo/blob/master/CONTRIBUTING.md)
# License
The project is licensed under the [Apache 2 license](https://github.com/apolloconfig/apollo/blob/master/LICENSE).
# Known Users
> Sorted by registration order,users are welcome to register in [https://github.com/apolloconfig/apollo/issues/451](https://github.com/apolloconfig/apollo/issues/451) (reference purpose only for the community)
<table>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/ctrip.png" alt="携程"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/bluestone.png" alt="青石证券"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/sagreen.png" alt="沙绿"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/umetrip.jpg" alt="航旅纵横"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/zhuanzhuan.png" alt="58转转"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/phone580.png" alt="蜂助手"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/hainan-airlines.png" alt="海南航空"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/cvte.png" alt="CVTE"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/mainbo.jpg" alt="明博教育"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/madailicai.png" alt="麻袋理财"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/mxnavi.jpg" alt="美行科技"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/fshows.jpg" alt="首展科技"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/feezu.png" alt="易微行"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/rencaijia.png" alt="人才加"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/keking.png" alt="凯京集团"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/leoao.png" alt="乐刻运动"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/dji.png" alt="大疆"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/kkmh.png" alt="快看漫画"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/wolaidai.png" alt="我来贷"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/xsrj.png" alt="虚实软件"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/yanxuan.png" alt="网易严选"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/sjzg.png" alt="视觉中国"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/zc360.png" alt="资产360"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/ecarx.png" alt="亿咖通"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/5173.png" alt="5173"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/hujiang.png" alt="沪江"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/163yun.png" alt="网易云基础服务"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/cash-bus.png" alt="现金巴士"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/smartisan.png" alt="锤子科技"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/toodc.png" alt="头等仓"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/juneyaoair.png" alt="吉祥航空"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/263mobile.png" alt="263移动通信"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/toutoujinrong.png" alt="投投金融"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/mytijian.png" alt="每天健康"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/maiyabank.png" alt="麦芽金服"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/fengunion.png" alt="蜂向科技"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/geex-logo.png" alt="即科金融"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/beike.png" alt="贝壳网"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/youzan.png" alt="有赞"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/yunjihuitong.png" alt="云集汇通"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/rhinotech.png" alt="犀牛瀚海科技"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/nxin.png" alt="农信互联"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/mgzf.png" alt="蘑菇租房"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/huli-logo.png" alt="狐狸金服"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/mandao.png" alt="漫道集团"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/enmonster.png" alt="怪兽充电"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/nanguazufang.png" alt="南瓜租房"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/shitoujinrong.png" alt="石投金融"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/tubatu.png" alt="土巴兔"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/payh_logo.png" alt="平安银行"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/xinxindai.png" alt="新新贷"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/chrtc.png" alt="中国华戎科技集团"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/tuya_logo.png" alt="涂鸦智能"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/szlcsc.jpg" alt="立创商城"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/hairongyi.png" alt="乐赚金服"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/kxqc.png" alt="开心汽车"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/ppcredit.png" alt="乐赚金服"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/primeton.png" alt="普元信息"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/hoskeeper.png" alt="医帮管家"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/fula.png" alt="付啦信用卡管家"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/uzai.png" alt="悠哉网"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/91wutong.png" alt="梧桐诚选"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/ppdai.png" alt="拍拍贷"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/xinyongfei.png" alt="信用飞"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/dxy.png" alt="丁香园"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/ghtech.png" alt="国槐科技"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/qbb.png" alt="亲宝宝"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/huawei_logo.png" alt="华为视频直播"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/weiboyi.png" alt="微播易"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/ofpay.png" alt="欧飞"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/mishuo.png" alt="迷说"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/yixia.png" alt="一下科技"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/daocloud.png" alt="DaoCloud"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/cnvex.png" alt="汽摩交易所"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/100tal.png" alt="好未来教育集团"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/ainirobot.png" alt="猎户星空"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/zhuojian.png" alt="卓健科技"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/enjoyor.png" alt="银江股份"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/tuhu.png" alt="途虎养车"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/homedo.png" alt="河姆渡"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/xwbank.png" alt="新网银行"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/ctspcl.png" alt="中旅安信云贷"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/meiyou.png" alt="美柚"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/zkh-logo.png" alt="震坤行"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/wgss.png" alt="万谷盛世"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/plateno.png" alt="铂涛旅行"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/lifesense.png" alt="乐心"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/reachmedia.png" alt="亿投传媒"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/guxiansheng.png" alt="股先生"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/caixuetang.png" alt="财学堂"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/4399.png" alt="4399"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/autohome.png" alt="汽车之家"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/mbcaijing.png" alt="面包财经"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/hoopchina.png" alt="虎扑"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/sohu-auto.png" alt="搜狐汽车"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/liangfuzhengxin.png" alt="量富征信"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/maihaoche.png" alt="卖好车"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/zyiot.jpg" alt="中移物联网"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/biauto.png" alt="易车网"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/maiyaole.png" alt="一药网"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/xiaoying.png" alt="小影"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/caibeike.png" alt="彩贝壳"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/yeelight.png" alt="YEELIGHT"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/itsgmu.png" alt="积目"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/acmedcare.png" alt="极致医疗"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/jinhui365.png" alt="金汇金融"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/900etrip.png" alt="久柏易游"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/24xiaomai.png" alt="小麦铺"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/vvic.png" alt="搜款网"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/mizlicai.png" alt="米庄理财"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/bjt.png" alt="贝吉塔网络科技"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/weimob.png" alt="微盟"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/kada.png" alt="网易卡搭"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/kapbook.png" alt="股书"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/jumore.png" alt="聚贸"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/bimface.png" alt="广联达bimface"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/globalgrow.png" alt="环球易购"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/jollychic.png" alt="浙江执御"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/2dfire.jpg" alt="二维火"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/shopin.png" alt="上品"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/inspur.png" alt="浪潮集团"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/ngarihealth.png" alt="纳里健康"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/oraro.png" alt="橙红科技"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/dragonpass.png" alt="龙腾出行"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/lizhi.fm.png" alt="荔枝"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/htd.png" alt="汇通达"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/yunrong.png" alt="云融金科"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/tszg360.png" alt="天生掌柜"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/rongplus.png" alt="容联光辉"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/intellif.png" alt="云天励飞"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/jiayundata.png" alt="嘉云数据"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/zts.png" alt="中泰证券网络金融部"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/163dun.png" alt="网易易盾"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/xiangwushuo.png" alt="享物说"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/sto.png" alt="申通"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/jinhe.png" alt="金和网络"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/2345.png" alt="二三四五"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/chtwm.jpg" alt="恒天财富"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/uweixin.png" alt="沐雪微信"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/wzeye.png" alt="温州医科大学附属眼视光医院"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/10010pay.png" alt="联通支付"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/shanshu.png" alt="杉数科技"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/fenlibao.png" alt="分利宝"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/hetao101.png" alt="核桃编程"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/xiaohongshu.png" alt="小红书"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/blissmall.png" alt="幸福西饼"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/ky-express.png" alt="跨越速运"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/oyohotels.png" alt="OYO"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/100-me.png" alt="叮咚买菜"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/zhidaohulian.jpg" alt="智道网联"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/xueqiu.jpg" alt="雪球"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/autocloudpro.png" alt="车通云"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/dadaabc.png" alt="哒哒英语"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/xedaojia.jpg" alt="小E微店"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/daling.png" alt="达令家"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/renliwo.png" alt="人力窝"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/mocire.jpg" alt="嘉美在线"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/uepay.png" alt="极易付"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/wdom.png" alt="智慧开源"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/cheshiku.png" alt="车仕库"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/taimeitech.png" alt="太美医疗科技"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/yilianbaihui.png" alt="亿联百汇"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/zhoupu123.png" alt="舟谱数据"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/frxs.png" alt="芙蓉兴盛"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/beastshop.png" alt="野兽派"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/kaishustory.png" alt="凯叔讲故事"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/haodf.png" alt="好大夫在线"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/insyunmi.png" alt="云幂信息技术"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/duiba.png" alt="兑吧"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/9ji.png" alt="九机网"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/sui.png" alt="随手科技"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/aixiangdao.png" alt="万谷盛世"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/yunzhangfang.png" alt="云账房"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/yuantutech.png" alt="浙江远图互联"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/qk365.png" alt="青客公寓"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/eastmoney.png" alt="东方财富"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/jikexiu.png" alt="极客修"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/meix.png" alt="美市科技"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/zto.png" alt="中通快递"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/e6yun.png" alt="易流科技"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/xiaoyuanzhao.png" alt="实习僧"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/dalingjia.png" alt="达令家"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/secoo.png" alt="寺库"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/lianlianpay.png" alt="连连支付"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/zhongan.png" alt="众安保险"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/360jinrong.png" alt="360金融"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/caschina.png" alt="中航服商旅"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/ke.png" alt="贝壳"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/yeahmobi.png" alt="Yeahmobi易点天下"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/idengyun.png" alt="北京登云美业网络科技有限公司"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/jinher.png" alt="金和网络"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/komect.png" alt="中移(杭州)信息技术有限公司"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/beisen.png" alt="北森"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/log56.png" alt="合肥维天运通"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/meboth.png" alt="北京蜜步科技有限公司"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/postop.png" alt="术康"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/rfchina.png" alt="富力集团"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/tfxing.png" alt="天府行"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/8travelpay.png" alt="八商山"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/centaline.png" alt="中原地产"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/zkyda.png" alt="智科云达"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/house730.png" alt="中原730"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/pagoda.png" alt="百果园"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/bolome.png" alt="波罗蜜"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/xignite.png" alt="Xignite"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/aduer.png" alt="杭州有云科技有限公司"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/jojoreading.png" alt="成都书声科技有限公司"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/sweetome.png" alt="斯维登集团"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/vipthink.png" alt="广东快乐种子科技有限公司"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/tongxuecool.png" alt="上海盈翼文化传播有限公司"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/sccfc.png" alt="上海尚诚消费金融股份有限公司"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/ziroom.png" alt="自如网"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/jd.png" alt="京东"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/rabbitpre.png" alt="兔展智能"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/zhubei.png" alt="竹贝"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/imile.png" alt="iMile(中东)"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/helloglobal.png" alt="哈罗出行"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/zhaopin.png" alt="智联招聘"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/acadsoc.png" alt="阿卡索"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/mojory.png" alt="妙知旅"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/chengduoduo.png" alt="程多多"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/baojunev.png" alt="上汽通用五菱"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/leyan.png" alt="乐言科技"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/dushu.png" alt="樊登读书"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/zyiz.png" alt="找一找教程网"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/bppc.png" alt="中油碧辟石油有限公司"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/shanglv51.png" alt="四川商旅无忧科技服务有限公司"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/waijiao365.png" alt="懿鸢网络科技(上海)有限公司"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/gaoding.jpg" alt="稿定科技"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/ricacorp.png" alt="搵樓 - 利嘉閣"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/t3go.png" alt="南京领行科技股份有限公司"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/mokahr.jpg" alt="北京希瑞亚斯科技有限公司"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/printrainbow.png" alt="印彩虹印刷公司"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/milliontech.png" alt="Million Tech"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/guoguokeji.jpg" alt="果果科技"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/airkunming.png" alt="昆明航空"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/5i5j.png" alt="我爱我家"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/gjzq.png" alt="国金证券"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/enjoymusic.jpg" alt="不亦乐乎"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/cnhnb.png" alt="惠农网"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/daoklab.jpg" alt="成都道壳"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/ausnutria.jpg" alt="澳优乳业"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/deiyoudian.png" alt="河南有态度信息科技有限公司"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/ezhiyang.png" alt="智阳第一人力"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/shie.png" alt="上海保险交易所"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/wsecar.png" alt="万顺叫车"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/shouqinba.jpg" alt="收钱吧"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/baozun.png" alt="宝尊电商"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/xbnwl.png" alt="喜百年供应链"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/gwwisdom.png" alt="南京观为智慧软件科技有限公司"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/ztrip.png" alt="在途商旅"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/hualala.png" alt="哗啦啦"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/xin.png" alt="优信二手车"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/maycur.png" alt="每刻科技"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/bullyun.png" alt="杭州蛮牛"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/bestpay.png" alt="翼支付"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/mockuai.png" alt="魔筷科技"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/ct108.png" alt="畅唐网络"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/jusdaglobal.jpg" alt="准时达"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/izaodao.png" alt="早道网校"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/ovopark.jpg" alt="万店掌"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/funstory.jpg" alt="推文科技"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/lemonbox.png" alt="Lemonbox"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/polyt.png" alt="保利票务"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/chipwing.png" alt="芯翼科技"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/czbank.png" alt="浙商银行"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/czbyqy.png" alt="易企银科技"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/yundun.jpg" alt="上海云盾"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/gaiaworks.jpg" alt="苏州盖雅信息技术有限公司"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/mengxiang.png" alt="爱库存"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/jidouauto.png" alt="极豆车联网"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/ipalfish.png" alt="伴鱼少儿英语"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/iqboard.png" alt="锐达科技"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/koolearn.png" alt="新东方在线"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/kingcome.png" alt="金康高科"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/soulapp.png" alt="soul"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/ezrpro.png" alt="驿氪"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/hc360.png" alt="慧聪"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/21cp.png" alt="中塑在线"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/goinglink.jpg" alt="甄云科技"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/aitrace.jpg" alt="追溯科技"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/moqipobing.png" alt="玩吧"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/cassan.png" alt="广州卡桑信息技术有限公司"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/shuidichou.png" alt="水滴"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/kuwo.png" alt="酷我音乐"></td>
</tr>
<tr>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/mi.png" alt="小米"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/mvmyun.png" alt="今典"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/visabao.jpg" alt="签宝科技"></td>
<td><img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/known-users/inrice.png" alt="广州趣米网络科技有限公司"></td>
<td><a target="_blank" href="https://github.com/apolloconfig/apollo/issues/451">More...</a></td>
</tr>
</table>
# Awards
<img src="https://cdn.jsdelivr.net/gh/apolloconfig/apollo-community@master/images/awards/oschina-2018-award.jpg" width="240px" alt="The most popular Chinese open source software in 2018">
# Stargazers over time
[](https://star-history.com/#apolloconfig/apollo&Date)
================================================
FILE: SECURITY.md
================================================
# Security Policy
## Reporting a Vulnerability
If you have apprehensions regarding Apollo's security or you discover vulnerability or potential threat, don’t hesitate to get in touch with us by dropping a mail at apollo-config@googlegroups.com.
In the mail, specify the description of the issue or potential threat. You are also urged to recommend the way to reproduce and replicate the issue. The Apollo community will get back to you after assessing and analysing the findings.
PLEASE PAY ATTENTION to report the security issue on the security email before disclosing it on public domain.
================================================
FILE: apollo-adminservice/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright 2024 Apollo Authors
~
~ 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.
~
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo</artifactId>
<version>${revision}</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>apollo-adminservice</artifactId>
<name>Apollo AdminService</name>
<properties>
<github.path>${project.artifactId}</github.path>
</properties>
<dependencies>
<!-- apollo -->
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-biz</artifactId>
</dependency>
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-audit-spring-boot-starter</artifactId>
</dependency>
<!-- end of apollo -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<artifactId>spring-cloud-starter-netflix-archaius</artifactId>
<groupId>org.springframework.cloud</groupId>
</exclusion>
<exclusion>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
<groupId>org.springframework.cloud</groupId>
</exclusion>
<exclusion>
<artifactId>ribbon-eureka</artifactId>
<groupId>com.netflix.ribbon</groupId>
</exclusion>
<exclusion>
<artifactId>aws-java-sdk-core</artifactId>
<groupId>com.amazonaws</groupId>
</exclusion>
<exclusion>
<artifactId>aws-java-sdk-ec2</artifactId>
<groupId>com.amazonaws</groupId>
</exclusion>
<exclusion>
<artifactId>aws-java-sdk-autoscaling</artifactId>
<groupId>com.amazonaws</groupId>
</exclusion>
<exclusion>
<artifactId>aws-java-sdk-sts</artifactId>
<groupId>com.amazonaws</groupId>
</exclusion>
<exclusion>
<artifactId>aws-java-sdk-route53</artifactId>
<groupId>com.amazonaws</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-apache-client4</artifactId>
<scope>test</scope>
</dependency>
<!-- Jakarta EE APIs -->
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
</dependency>
<dependency>
<groupId>jakarta.activation</groupId>
<artifactId>jakarta.activation-api</artifactId>
</dependency>
<!-- end of Jakarta EE APIs -->
<!-- JDK 11+ -->
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
</dependency>
<!-- end of JDK 11+ -->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<finalName>${project.artifactId}-${project.version}-${package.environment}</finalName>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>src/assembly/assembly-descriptor.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.2</version>
<configuration>
<imageName>apolloconfig/${project.artifactId}</imageName>
<imageTags>
<imageTag>${project.version}</imageTag>
<imageTag>latest</imageTag>
</imageTags>
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<serverId>docker-hub</serverId>
<buildArgs>
<VERSION>${project.version}</VERSION>
</buildArgs>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>*.zip</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>nacos-discovery</id>
<dependencies>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-discovery-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
</dependencies>
</profile>
</profiles>
</project>
================================================
FILE: apollo-adminservice/src/assembly/assembly-descriptor.xml
================================================
<!--
~ Copyright 2024 Apollo Authors
~
~ 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.
~
-->
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<id>apollo-assembly</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<!--scripts -->
<fileSet>
<directory>src/main/scripts</directory>
<outputDirectory>scripts</outputDirectory>
<includes>
<include>*.sh</include>
</includes>
<fileMode>0755</fileMode>
<lineEnding>unix</lineEnding>
</fileSet>
<fileSet>
<directory>target/classes</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>apollo-adminservice.conf</include>
</includes>
<lineEnding>unix</lineEnding>
</fileSet>
<fileSet>
<directory>target/classes</directory>
<outputDirectory>/config</outputDirectory>
<includes>
<include>application-github.properties</include>
<include>application.properties</include>
</includes>
</fileSet>
<!--artifact -->
<fileSet>
<directory>target</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>${project.artifactId}-*.jar</include>
</includes>
<fileMode>0755</fileMode>
</fileSet>
</fileSets>
</assembly>
================================================
FILE: apollo-adminservice/src/main/docker/Dockerfile
================================================
#
# Copyright 2024 Apollo Authors
#
# 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.
#
# Dockerfile for apollo-adminservice
# 1. ./scripts/build.sh
# 2. Build with: mvn docker:build -pl apollo-adminservice
# 3. Run with: docker run -p 8090:8090 -e SPRING_DATASOURCE_URL="jdbc:mysql://fill-in-the-correct-server:3306/ApolloConfigDB?characterEncoding=utf8" -e SPRING_DATASOURCE_USERNAME=FillInCorrectUser -e SPRING_DATASOURCE_PASSWORD=FillInCorrectPassword -d -v /tmp/logs:/opt/logs --name apollo-adminservice apolloconfig/apollo-adminservice
FROM alpine:3.15.5
ARG VERSION
ENV VERSION $VERSION
COPY apollo-adminservice-${VERSION}-github.zip /apollo-adminservice/apollo-adminservice-${VERSION}-github.zip
RUN unzip /apollo-adminservice/apollo-adminservice-${VERSION}-github.zip -d /apollo-adminservice \
&& rm -rf /apollo-adminservice/apollo-adminservice-${VERSION}-github.zip \
&& chmod +x /apollo-adminservice/scripts/startup.sh
FROM eclipse-temurin:17-jre-jammy
LABEL maintainer="g632104866@gmail.com;finchcn@gmail.com;ameizi<sxyx2008@163.com>"
ENV APOLLO_RUN_MODE "Docker"
ENV SERVER_PORT 8090
RUN DEBIAN_FRONTEND=noninteractive apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends procps curl bash tzdata \
&& rm -rf /var/lib/apt/lists/* \
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone
COPY --from=0 /apollo-adminservice /apollo-adminservice
EXPOSE $SERVER_PORT
CMD ["/apollo-adminservice/scripts/startup.sh"]
================================================
FILE: apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/AdminServiceApplication.java
================================================
/*
* Copyright 2025 Apollo Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package com.ctrip.framework.apollo.adminservice;
import com.ctrip.framework.apollo.biz.ApolloBizConfig;
import com.ctrip.framework.apollo.common.ApolloCommonConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration;
import org.springframework.boot.autoconfigure.session.SessionAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.context.annotation.PropertySource;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@EnableAspectJAutoProxy
@Configuration
@PropertySource(value = {"classpath:adminservice.properties"})
@EnableAutoConfiguration(
exclude = {UserDetailsServiceAutoConfiguration.class, SessionAutoCo
gitextract_66_nu3aa/
├── .gitattributes
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report_en.md
│ │ ├── bug_report_zh.md
│ │ ├── feature_request_en.md
│ │ └── feature_request_zh.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── aw/
│ │ └── actions-lock.json
│ ├── stale.yml
│ └── workflows/
│ ├── build.yml
│ ├── cla.yml
│ ├── code-style-check.yml
│ ├── codeql.yml
│ ├── commit_lint.yml
│ ├── docker-publish.yml
│ ├── docker-validation.yml
│ ├── issue-triage.lock.yml
│ ├── issue-triage.md
│ ├── javascript-test.yml
│ ├── license.yml
│ ├── portal-login-e2e.yml
│ ├── portal-ui-e2e.yml
│ └── release-packages.yml
├── .gitignore
├── .licenserc.yaml
├── .mergify.yml
├── .mvn/
│ └── wrapper/
│ ├── MavenWrapperDownloader.java
│ └── maven-wrapper.properties
├── AGENTS.md
├── CHANGES.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── GOVERNANCE.md
├── LICENSE
├── README.md
├── SECURITY.md
├── apollo-adminservice/
│ ├── pom.xml
│ └── src/
│ ├── assembly/
│ │ └── assembly-descriptor.xml
│ ├── main/
│ │ ├── docker/
│ │ │ └── Dockerfile
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── ctrip/
│ │ │ └── framework/
│ │ │ └── apollo/
│ │ │ └── adminservice/
│ │ │ ├── AdminServiceApplication.java
│ │ │ ├── AdminServiceAssemblyConfiguration.java
│ │ │ ├── AdminServiceAutoConfiguration.java
│ │ │ ├── AdminServiceHealthIndicator.java
│ │ │ ├── ServletInitializer.java
│ │ │ ├── aop/
│ │ │ │ ├── NamespaceAcquireLockAspect.java
│ │ │ │ ├── NamespaceUnlockAspect.java
│ │ │ │ └── PreAcquireNamespaceLock.java
│ │ │ ├── controller/
│ │ │ │ ├── AccessKeyController.java
│ │ │ │ ├── AppController.java
│ │ │ │ ├── AppNamespaceController.java
│ │ │ │ ├── ClusterController.java
│ │ │ │ ├── CommitController.java
│ │ │ │ ├── IndexController.java
│ │ │ │ ├── InstanceConfigController.java
│ │ │ │ ├── ItemController.java
│ │ │ │ ├── ItemSetController.java
│ │ │ │ ├── NamespaceBranchController.java
│ │ │ │ ├── NamespaceController.java
│ │ │ │ ├── NamespaceLockController.java
│ │ │ │ ├── ReleaseController.java
│ │ │ │ ├── ReleaseHistoryController.java
│ │ │ │ └── ServerConfigController.java
│ │ │ └── filter/
│ │ │ └── AdminServiceAuthenticationFilter.java
│ │ ├── resources/
│ │ │ ├── adminservice.properties
│ │ │ ├── apollo-adminservice.conf
│ │ │ ├── application-consul-discovery.properties
│ │ │ ├── application-custom-defined-discovery.properties
│ │ │ ├── application-database-discovery.properties
│ │ │ ├── application-github.properties
│ │ │ ├── application-kubernetes.properties
│ │ │ ├── application-nacos-discovery.properties
│ │ │ ├── application-zookeeper-discovery.properties
│ │ │ ├── application.properties
│ │ │ ├── application.yml
│ │ │ └── logback.xml
│ │ └── scripts/
│ │ ├── shutdown.sh
│ │ └── startup.sh
│ └── test/
│ ├── java/
│ │ └── com/
│ │ └── ctrip/
│ │ └── framework/
│ │ └── apollo/
│ │ ├── AdminServiceTestConfiguration.java
│ │ ├── LocalAdminServiceApplication.java
│ │ └── adminservice/
│ │ ├── GracefulShutdownConfigurationTest.java
│ │ ├── aop/
│ │ │ ├── NamespaceLockTest.java
│ │ │ └── NamespaceUnlockAspectTest.java
│ │ ├── controller/
│ │ │ ├── AbstractControllerTest.java
│ │ │ ├── AppControllerTest.java
│ │ │ ├── AppNamespaceControllerTest.java
│ │ │ ├── ClusterControllerTest.java
│ │ │ ├── ControllerExceptionTest.java
│ │ │ ├── ControllerIntegrationExceptionTest.java
│ │ │ ├── InstanceConfigControllerTest.java
│ │ │ ├── ItemControllerTest.java
│ │ │ ├── ItemSetControllerTest.java
│ │ │ ├── NamespaceControllerTest.java
│ │ │ ├── ReleaseControllerTest.java
│ │ │ ├── ServerConfigControllerTest.java
│ │ │ └── TestWebSecurityConfig.java
│ │ └── filter/
│ │ ├── AdminServiceAuthenticationFilterTest.java
│ │ └── AdminServiceAuthenticationIntegrationTest.java
│ └── resources/
│ ├── application.properties
│ ├── application.yml
│ ├── controller/
│ │ ├── cleanup.sql
│ │ ├── test-itemset.sql
│ │ ├── test-release.sql
│ │ └── test-server-config.sql
│ ├── data.sql
│ ├── filter/
│ │ ├── test-access-control-disabled.sql
│ │ ├── test-access-control-enabled-no-token.sql
│ │ └── test-access-control-enabled.sql
│ ├── import.sql
│ └── logback-test.xml
├── apollo-assembly/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── ctrip/
│ │ │ └── framework/
│ │ │ └── apollo/
│ │ │ └── assembly/
│ │ │ └── ApolloApplication.java
│ │ └── resources/
│ │ ├── application-database-discovery.properties
│ │ ├── application-github.properties
│ │ ├── application.properties
│ │ ├── application.yml
│ │ └── logback.xml
│ └── test/
│ ├── java/
│ │ └── com/
│ │ └── ctrip/
│ │ └── framework/
│ │ └── apollo/
│ │ └── assembly/
│ │ └── LocalApolloApplication.java
│ └── resources/
│ ├── application.properties
│ ├── application.yml
│ └── logback-test.xml
├── apollo-audit/
│ ├── README.md
│ ├── apollo-audit-annotation/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── ctrip/
│ │ └── framework/
│ │ └── apollo/
│ │ └── audit/
│ │ └── annotation/
│ │ ├── ApolloAuditLog.java
│ │ ├── ApolloAuditLogDataInfluence.java
│ │ ├── ApolloAuditLogDataInfluenceTable.java
│ │ ├── ApolloAuditLogDataInfluenceTableField.java
│ │ └── OpType.java
│ ├── apollo-audit-api/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── ctrip/
│ │ └── framework/
│ │ └── apollo/
│ │ └── audit/
│ │ ├── api/
│ │ │ ├── ApolloAuditLogApi.java
│ │ │ ├── ApolloAuditLogQueryApi.java
│ │ │ └── ApolloAuditLogRecordApi.java
│ │ ├── dto/
│ │ │ ├── ApolloAuditLogDTO.java
│ │ │ ├── ApolloAuditLogDataInfluenceDTO.java
│ │ │ └── ApolloAuditLogDetailsDTO.java
│ │ └── event/
│ │ └── ApolloAuditLogDataInfluenceEvent.java
│ ├── apollo-audit-impl/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── ctrip/
│ │ │ └── framework/
│ │ │ └── apollo/
│ │ │ └── audit/
│ │ │ ├── ApolloAuditProperties.java
│ │ │ ├── ApolloAuditRegistrar.java
│ │ │ ├── aop/
│ │ │ │ └── ApolloAuditSpanAspect.java
│ │ │ ├── component/
│ │ │ │ ├── ApolloAuditHttpInterceptor.java
│ │ │ │ ├── ApolloAuditLogApiJpaImpl.java
│ │ │ │ └── ApolloAuditLogApiNoOpImpl.java
│ │ │ ├── constants/
│ │ │ │ └── ApolloAuditConstants.java
│ │ │ ├── context/
│ │ │ │ ├── ApolloAuditScope.java
│ │ │ │ ├── ApolloAuditScopeManager.java
│ │ │ │ ├── ApolloAuditSpan.java
│ │ │ │ ├── ApolloAuditSpanContext.java
│ │ │ │ ├── ApolloAuditTraceContext.java
│ │ │ │ └── ApolloAuditTracer.java
│ │ │ ├── controller/
│ │ │ │ └── ApolloAuditController.java
│ │ │ ├── entity/
│ │ │ │ ├── ApolloAuditLog.java
│ │ │ │ ├── ApolloAuditLogDataInfluence.java
│ │ │ │ └── BaseEntity.java
│ │ │ ├── listener/
│ │ │ │ └── ApolloAuditLogDataInfluenceEventListener.java
│ │ │ ├── repository/
│ │ │ │ ├── ApolloAuditLogDataInfluenceRepository.java
│ │ │ │ └── ApolloAuditLogRepository.java
│ │ │ ├── service/
│ │ │ │ ├── ApolloAuditLogDataInfluenceService.java
│ │ │ │ └── ApolloAuditLogService.java
│ │ │ ├── spi/
│ │ │ │ ├── ApolloAuditLogQueryApiPreAuthorizer.java
│ │ │ │ ├── ApolloAuditOperatorSupplier.java
│ │ │ │ └── defaultimpl/
│ │ │ │ ├── ApolloAuditLogQueryApiDefaultPreAuthorizer.java
│ │ │ │ └── ApolloAuditOperatorDefaultSupplier.java
│ │ │ └── util/
│ │ │ └── ApolloAuditUtil.java
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── ctrip/
│ │ └── framework/
│ │ └── apollo/
│ │ └── audit/
│ │ ├── MockBeanFactory.java
│ │ ├── MockDataInfluenceEntity.java
│ │ ├── aop/
│ │ │ └── ApolloAuditSpanAspectTest.java
│ │ ├── component/
│ │ │ ├── ApolloAuditHttpInterceptorTest.java
│ │ │ ├── ApolloAuditLogApiJpaImplTest.java
│ │ │ └── ApolloAuditScopeManagerTest.java
│ │ ├── context/
│ │ │ ├── ApolloAuditTraceContextTest.java
│ │ │ └── ApolloAuditTracerTest.java
│ │ ├── controller/
│ │ │ └── ApolloAuditControllerTest.java
│ │ └── spi/
│ │ └── ApolloAuditOperatorSupplierTest.java
│ ├── apollo-audit-spring-boot-starter/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── ctrip/
│ │ │ └── framework/
│ │ │ └── apollo/
│ │ │ └── audit/
│ │ │ └── configuration/
│ │ │ ├── ApolloAuditAutoConfiguration.java
│ │ │ └── ApolloAuditNoOpAutoConfiguration.java
│ │ └── resources/
│ │ └── META-INF/
│ │ ├── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── spring.factories
│ └── pom.xml
├── apollo-biz/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── ctrip/
│ │ └── framework/
│ │ └── apollo/
│ │ └── biz/
│ │ ├── ApolloBizAssemblyConfiguration.java
│ │ ├── ApolloBizConfig.java
│ │ ├── auth/
│ │ │ └── WebSecurityConfig.java
│ │ ├── config/
│ │ │ └── BizConfig.java
│ │ ├── entity/
│ │ │ ├── AccessKey.java
│ │ │ ├── Audit.java
│ │ │ ├── Cluster.java
│ │ │ ├── Commit.java
│ │ │ ├── GrayReleaseRule.java
│ │ │ ├── Instance.java
│ │ │ ├── InstanceConfig.java
│ │ │ ├── Item.java
│ │ │ ├── JpaMapFieldJsonConverter.java
│ │ │ ├── Namespace.java
│ │ │ ├── NamespaceLock.java
│ │ │ ├── Privilege.java
│ │ │ ├── Release.java
│ │ │ ├── ReleaseHistory.java
│ │ │ ├── ReleaseMessage.java
│ │ │ ├── ServerConfig.java
│ │ │ └── ServiceRegistry.java
│ │ ├── eureka/
│ │ │ └── ApolloEurekaClientConfig.java
│ │ ├── grayReleaseRule/
│ │ │ ├── GrayReleaseRuleCache.java
│ │ │ └── GrayReleaseRulesHolder.java
│ │ ├── message/
│ │ │ ├── DatabaseMessageSender.java
│ │ │ ├── MessageSender.java
│ │ │ ├── ReleaseMessageListener.java
│ │ │ ├── ReleaseMessageScanner.java
│ │ │ └── Topics.java
│ │ ├── registry/
│ │ │ ├── DatabaseDiscoveryClient.java
│ │ │ ├── DatabaseDiscoveryClientAlwaysAddSelfInstanceDecoratorImpl.java
│ │ │ ├── DatabaseDiscoveryClientImpl.java
│ │ │ ├── DatabaseDiscoveryClientMemoryCacheDecoratorImpl.java
│ │ │ ├── DatabaseServiceRegistry.java
│ │ │ ├── DatabaseServiceRegistryImpl.java
│ │ │ ├── ServiceInstance.java
│ │ │ ├── configuration/
│ │ │ │ ├── ApolloServiceDiscoveryAutoConfiguration.java
│ │ │ │ ├── ApolloServiceRegistryAutoConfiguration.java
│ │ │ │ └── support/
│ │ │ │ ├── ApolloServiceDiscoveryProperties.java
│ │ │ │ ├── ApolloServiceRegistryClearApplicationRunner.java
│ │ │ │ ├── ApolloServiceRegistryDeregisterApplicationListener.java
│ │ │ │ ├── ApolloServiceRegistryHeartbeatApplicationRunner.java
│ │ │ │ └── ApolloServiceRegistryProperties.java
│ │ │ └── package-info.java
│ │ ├── repository/
│ │ │ ├── AccessKeyRepository.java
│ │ │ ├── AppNamespaceRepository.java
│ │ │ ├── AppRepository.java
│ │ │ ├── AuditRepository.java
│ │ │ ├── ClusterRepository.java
│ │ │ ├── CommitRepository.java
│ │ │ ├── GrayReleaseRuleRepository.java
│ │ │ ├── InstanceConfigRepository.java
│ │ │ ├── InstanceRepository.java
│ │ │ ├── ItemRepository.java
│ │ │ ├── NamespaceLockRepository.java
│ │ │ ├── NamespaceRepository.java
│ │ │ ├── PrivilegeRepository.java
│ │ │ ├── ReleaseHistoryRepository.java
│ │ │ ├── ReleaseMessageRepository.java
│ │ │ ├── ReleaseRepository.java
│ │ │ ├── ServerConfigRepository.java
│ │ │ └── ServiceRegistryRepository.java
│ │ ├── service/
│ │ │ ├── AccessKeyService.java
│ │ │ ├── AdminService.java
│ │ │ ├── AppNamespaceService.java
│ │ │ ├── AppService.java
│ │ │ ├── AuditService.java
│ │ │ ├── BizDBPropertySource.java
│ │ │ ├── ClusterService.java
│ │ │ ├── CommitService.java
│ │ │ ├── InstanceService.java
│ │ │ ├── ItemService.java
│ │ │ ├── ItemSetService.java
│ │ │ ├── NamespaceBranchService.java
│ │ │ ├── NamespaceLockService.java
│ │ │ ├── NamespaceService.java
│ │ │ ├── ReleaseHistoryService.java
│ │ │ ├── ReleaseMessageService.java
│ │ │ ├── ReleaseService.java
│ │ │ ├── ServerConfigService.java
│ │ │ └── ServiceRegistryService.java
│ │ └── utils/
│ │ ├── ConfigChangeContentBuilder.java
│ │ ├── EntityManagerUtil.java
│ │ ├── ReleaseKeyGenerator.java
│ │ └── ReleaseMessageKeyGenerator.java
│ └── test/
│ ├── java/
│ │ └── com/
│ │ └── ctrip/
│ │ └── framework/
│ │ └── apollo/
│ │ └── biz/
│ │ ├── AbstractIntegrationTest.java
│ │ ├── AbstractUnitTest.java
│ │ ├── BizTestConfiguration.java
│ │ ├── MockBeanFactory.java
│ │ ├── config/
│ │ │ └── BizConfigTest.java
│ │ ├── entity/
│ │ │ └── JpaMapFieldJsonConverterTest.java
│ │ ├── grayReleaseRule/
│ │ │ └── GrayReleaseRulesHolderTest.java
│ │ ├── message/
│ │ │ ├── DatabaseMessageSenderTest.java
│ │ │ └── ReleaseMessageScannerTest.java
│ │ ├── registry/
│ │ │ ├── DatabaseDiscoveryClientAlwaysAddSelfInstanceDecoratorImplTest.java
│ │ │ ├── DatabaseDiscoveryClientImplTest.java
│ │ │ ├── DatabaseDiscoveryClientMemoryCacheDecoratorImplTest.java
│ │ │ ├── DatabaseDiscoveryIntegrationTest.java
│ │ │ ├── DatabaseDiscoveryWithoutDecoratorIntegrationTest.java
│ │ │ ├── ServiceInstanceFactory.java
│ │ │ └── configuration/
│ │ │ ├── ApolloServiceRegistryAutoConfigurationNotEnabledTest.java
│ │ │ └── support/
│ │ │ └── ApolloServiceRegistryClearApplicationRunnerIntegrationTest.java
│ │ ├── repository/
│ │ │ ├── AccessKeyRepositoryTest.java
│ │ │ ├── AppNamespaceRepositoryTest.java
│ │ │ ├── AppRepositoryTest.java
│ │ │ ├── InstanceConfigRepositoryTest.java
│ │ │ └── ReleaseHistoryRepositoryTest.java
│ │ ├── service/
│ │ │ ├── AccessKeyServiceTest.java
│ │ │ ├── AdminServiceTest.java
│ │ │ ├── AdminServiceTransactionTest.java
│ │ │ ├── BizDBPropertySourceTest.java
│ │ │ ├── ClusterServiceTest.java
│ │ │ ├── InstanceServiceTest.java
│ │ │ ├── ItemServiceTest.java
│ │ │ ├── ItemSetServiceTest.java
│ │ │ ├── NamespaceBranchServiceTest.java
│ │ │ ├── NamespacePublishInfoTest.java
│ │ │ ├── NamespaceServiceIntegrationTest.java
│ │ │ ├── NamespaceServiceTest.java
│ │ │ ├── ReleaseCreationTest.java
│ │ │ ├── ReleaseHistoryServiceTest.java
│ │ │ ├── ReleaseServiceTest.java
│ │ │ └── ServerConfigServiceTest.java
│ │ └── utils/
│ │ ├── ConfigChangeContentBuilderTest.java
│ │ └── ReleaseKeyGeneratorTest.java
│ └── resources/
│ ├── application.properties
│ ├── data.sql
│ ├── import.sql
│ ├── json/
│ │ └── converter/
│ │ ├── element.1.json
│ │ └── element.2.json
│ ├── logback-test.xml
│ └── sql/
│ ├── accesskey-test.sql
│ ├── clean.sql
│ ├── item-test.sql
│ ├── itemset-test.sql
│ ├── namespace-branch-test.sql
│ ├── namespace-test.sql
│ ├── release-creation-test.sql
│ └── release-history-test.sql
├── apollo-build-sql-converter/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── ctrip/
│ │ └── framework/
│ │ └── apollo/
│ │ └── build/
│ │ └── sql/
│ │ └── converter/
│ │ ├── ApolloH2ConverterUtil.java
│ │ ├── ApolloMysqlDefaultConverterUtil.java
│ │ ├── ApolloSqlConverter.java
│ │ ├── ApolloSqlConverterUtil.java
│ │ ├── SqlStatement.java
│ │ ├── SqlTemplate.java
│ │ ├── SqlTemplateContext.java
│ │ └── SqlTemplateGist.java
│ └── test/
│ ├── java/
│ │ └── com/
│ │ └── ctrip/
│ │ └── framework/
│ │ └── apollo/
│ │ └── build/
│ │ └── sql/
│ │ └── converter/
│ │ ├── ApolloSqlConverterAutoGeneratedTest.java
│ │ ├── ApolloSqlConverterH2Test.java
│ │ └── TestH2Function.java
│ └── resources/
│ └── META-INF/
│ └── sql/
│ └── h2-test/
│ └── delta/
│ ├── v000-v010/
│ │ ├── apolloconfigdb-v000-v010-after.sql
│ │ ├── apolloconfigdb-v000-v010-base.sql
│ │ ├── apolloconfigdb-v000-v010-before.sql
│ │ ├── apolloconfigdb-v000-v010.sql
│ │ ├── apolloportaldb-v000-v010-base.sql
│ │ └── apolloportaldb-v000-v010.sql
│ ├── v040-v050/
│ │ ├── apolloconfigdb-v040-v050.sql
│ │ └── apolloportaldb-v040-v050.sql
│ ├── v060-v062/
│ │ ├── apolloconfigdb-v060-v062.sql
│ │ └── apolloportaldb-v060-v062.sql
│ ├── v080-v090/
│ │ └── apolloportaldb-v080-v090.sql
│ ├── v151-v160/
│ │ └── apolloconfigdb-v151-v160.sql
│ ├── v170-v180/
│ │ ├── apolloconfigdb-v170-v180.sql
│ │ └── apolloportaldb-v170-v180.sql
│ ├── v180-v190/
│ │ ├── apolloconfigdb-v180-v190.sql
│ │ └── apolloportaldb-v180-v190.sql
│ ├── v190-v200/
│ │ ├── apolloconfigdb-v190-v200-after.sql
│ │ ├── apolloconfigdb-v190-v200.sql
│ │ ├── apolloportaldb-v190-v200-after.sql
│ │ └── apolloportaldb-v190-v200.sql
│ ├── v200-v210/
│ │ └── apolloconfigdb-v200-v210.sql
│ └── v210-v220/
│ ├── apolloconfigdb-v210-v220.sql
│ └── apolloportaldb-v210-v220.sql
├── apollo-buildtools/
│ ├── .gitignore
│ ├── pom.xml
│ ├── src/
│ │ └── main/
│ │ ├── resources/
│ │ │ ├── LICENSE-2.0.txt
│ │ │ └── google_checks.xml
│ │ └── scripts/
│ │ └── deploy_jenkins.sh
│ └── style/
│ ├── eclipse-java-google-style.xml
│ ├── intellij-java-google-style.xml
│ └── license/
│ └── apollo-license
├── apollo-common/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── ctrip/
│ │ │ └── framework/
│ │ │ └── apollo/
│ │ │ └── common/
│ │ │ ├── ApolloCommonConfig.java
│ │ │ ├── aop/
│ │ │ │ └── RepositoryAspect.java
│ │ │ ├── condition/
│ │ │ │ ├── ConditionalOnMissingProfile.java
│ │ │ │ ├── ConditionalOnProfile.java
│ │ │ │ └── OnProfileCondition.java
│ │ │ ├── config/
│ │ │ │ ├── RefreshableConfig.java
│ │ │ │ └── RefreshablePropertySource.java
│ │ │ ├── constants/
│ │ │ │ ├── AccessKeyMode.java
│ │ │ │ ├── ApolloServer.java
│ │ │ │ ├── GsonType.java
│ │ │ │ ├── NamespaceBranchStatus.java
│ │ │ │ ├── ReleaseOperation.java
│ │ │ │ └── ReleaseOperationContext.java
│ │ │ ├── controller/
│ │ │ │ ├── ApolloInfoController.java
│ │ │ │ ├── CharacterEncodingFilterConfiguration.java
│ │ │ │ ├── GlobalDefaultExceptionHandler.java
│ │ │ │ ├── HttpMessageConverterConfiguration.java
│ │ │ │ └── WebMvcConfig.java
│ │ │ ├── datasource/
│ │ │ │ ├── ApolloDataSourceScriptDatabaseInitializer.java
│ │ │ │ ├── ApolloDataSourceScriptDatabaseInitializerFactory.java
│ │ │ │ └── ApolloSqlInitializationProperties.java
│ │ │ ├── dto/
│ │ │ │ ├── AccessKeyDTO.java
│ │ │ │ ├── AppDTO.java
│ │ │ │ ├── AppNamespaceDTO.java
│ │ │ │ ├── BaseDTO.java
│ │ │ │ ├── ClusterDTO.java
│ │ │ │ ├── CommitDTO.java
│ │ │ │ ├── GrayReleaseRuleDTO.java
│ │ │ │ ├── GrayReleaseRuleItemDTO.java
│ │ │ │ ├── InstanceConfigDTO.java
│ │ │ │ ├── InstanceDTO.java
│ │ │ │ ├── ItemChangeSets.java
│ │ │ │ ├── ItemDTO.java
│ │ │ │ ├── ItemInfoDTO.java
│ │ │ │ ├── NamespaceDTO.java
│ │ │ │ ├── NamespaceLockDTO.java
│ │ │ │ ├── PageDTO.java
│ │ │ │ ├── ReleaseDTO.java
│ │ │ │ └── ReleaseHistoryDTO.java
│ │ │ ├── entity/
│ │ │ │ ├── App.java
│ │ │ │ ├── AppNamespace.java
│ │ │ │ ├── BaseEntity.java
│ │ │ │ └── EntityPair.java
│ │ │ ├── exception/
│ │ │ │ ├── AbstractApolloHttpException.java
│ │ │ │ ├── BadRequestException.java
│ │ │ │ ├── BeanUtilsException.java
│ │ │ │ ├── NotFoundException.java
│ │ │ │ └── ServiceException.java
│ │ │ ├── http/
│ │ │ │ ├── MultiResponseEntity.java
│ │ │ │ ├── RichResponseEntity.java
│ │ │ │ └── SearchResponseEntity.java
│ │ │ ├── jpa/
│ │ │ │ ├── H2Function.java
│ │ │ │ └── SqlFunctionsMetadataBuilderContributor.java
│ │ │ └── utils/
│ │ │ ├── BeanUtils.java
│ │ │ ├── ExceptionUtils.java
│ │ │ ├── GrayReleaseRuleItemTransformer.java
│ │ │ ├── InputValidator.java
│ │ │ ├── RequestPrecondition.java
│ │ │ ├── UniqueKeyGenerator.java
│ │ │ └── WebUtils.java
│ │ └── resources/
│ │ ├── application-h2.properties
│ │ ├── application-mysql.properties
│ │ ├── application-postgre.properties
│ │ ├── application.yaml
│ │ └── banner.txt
│ └── test/
│ └── java/
│ └── com/
│ └── ctrip/
│ └── framework/
│ └── apollo/
│ └── common/
│ ├── conditional/
│ │ └── ConditionalOnProfileTest.java
│ ├── dto/
│ │ └── ItemInfoDTOTest.java
│ ├── exception/
│ │ ├── BadRequestExceptionTest.java
│ │ └── NotFoundExceptionTest.java
│ ├── http/
│ │ └── SearchResponseEntityTest.java
│ └── utils/
│ ├── BeanUtilsTest.java
│ ├── InputValidatorTest.java
│ └── WebUtilsTest.java
├── apollo-configservice/
│ ├── pom.xml
│ └── src/
│ ├── assembly/
│ │ └── assembly-descriptor.xml
│ ├── main/
│ │ ├── docker/
│ │ │ └── Dockerfile
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── ctrip/
│ │ │ └── framework/
│ │ │ └── apollo/
│ │ │ ├── configservice/
│ │ │ │ ├── ConfigServerEurekaServerConfigure.java
│ │ │ │ ├── ConfigServiceApplication.java
│ │ │ │ ├── ConfigServiceAssemblyConfiguration.java
│ │ │ │ ├── ConfigServiceAutoConfiguration.java
│ │ │ │ ├── ConfigServiceHealthIndicator.java
│ │ │ │ ├── ServletInitializer.java
│ │ │ │ ├── controller/
│ │ │ │ │ ├── ConfigController.java
│ │ │ │ │ ├── ConfigFileController.java
│ │ │ │ │ ├── NotificationController.java
│ │ │ │ │ └── NotificationControllerV2.java
│ │ │ │ ├── filter/
│ │ │ │ │ └── ClientAuthenticationFilter.java
│ │ │ │ ├── service/
│ │ │ │ │ ├── AccessKeyServiceWithCache.java
│ │ │ │ │ ├── AppNamespaceServiceWithCache.java
│ │ │ │ │ ├── ReleaseMessageServiceWithCache.java
│ │ │ │ │ └── config/
│ │ │ │ │ ├── AbstractConfigService.java
│ │ │ │ │ ├── ConfigService.java
│ │ │ │ │ ├── ConfigServiceWithCache.java
│ │ │ │ │ ├── DefaultConfigService.java
│ │ │ │ │ ├── DefaultIncrementalSyncService.java
│ │ │ │ │ └── IncrementalSyncService.java
│ │ │ │ ├── util/
│ │ │ │ │ ├── AccessKeyUtil.java
│ │ │ │ │ ├── InstanceConfigAuditUtil.java
│ │ │ │ │ ├── NamespaceUtil.java
│ │ │ │ │ └── WatchKeysUtil.java
│ │ │ │ └── wrapper/
│ │ │ │ ├── CaseInsensitiveMapWrapper.java
│ │ │ │ ├── CaseInsensitiveMultimapWrapper.java
│ │ │ │ └── DeferredResultWrapper.java
│ │ │ └── metaservice/
│ │ │ ├── ApolloMetaServiceConfig.java
│ │ │ ├── controller/
│ │ │ │ ├── HomePageController.java
│ │ │ │ └── ServiceController.java
│ │ │ └── service/
│ │ │ ├── DatabaseDiscoveryService.java
│ │ │ ├── DefaultDiscoveryService.java
│ │ │ ├── DiscoveryService.java
│ │ │ ├── KubernetesDiscoveryService.java
│ │ │ ├── NacosDiscoveryService.java
│ │ │ └── SpringCloudInnerDiscoveryService.java
│ │ ├── resources/
│ │ │ ├── apollo-configservice.conf
│ │ │ ├── application-consul-discovery.properties
│ │ │ ├── application-custom-defined-discovery.properties
│ │ │ ├── application-database-discovery.properties
│ │ │ ├── application-github.properties
│ │ │ ├── application-kubernetes.properties
│ │ │ ├── application-nacos-discovery.properties
│ │ │ ├── application-zookeeper-discovery.properties
│ │ │ ├── application.properties
│ │ │ ├── application.yml
│ │ │ ├── configservice.properties
│ │ │ ├── jpa/
│ │ │ │ └── configdb.init.h2.sql
│ │ │ └── logback.xml
│ │ └── scripts/
│ │ ├── shutdown.sh
│ │ └── startup.sh
│ └── test/
│ ├── java/
│ │ └── com/
│ │ └── ctrip/
│ │ └── framework/
│ │ └── apollo/
│ │ ├── ConfigServiceTestConfiguration.java
│ │ ├── LocalConfigServiceApplication.java
│ │ ├── configservice/
│ │ │ ├── GracefulShutdownConfigurationTest.java
│ │ │ ├── controller/
│ │ │ │ ├── ConfigControllerTest.java
│ │ │ │ ├── ConfigFileControllerTest.java
│ │ │ │ ├── NotificationControllerTest.java
│ │ │ │ ├── NotificationControllerV2Test.java
│ │ │ │ └── TestWebSecurityConfig.java
│ │ │ ├── filter/
│ │ │ │ └── ClientAuthenticationFilterTest.java
│ │ │ ├── integration/
│ │ │ │ ├── AbstractBaseIntegrationTest.java
│ │ │ │ ├── ConfigControllerIntegrationTest.java
│ │ │ │ ├── ConfigFileControllerIntegrationTest.java
│ │ │ │ ├── NotificationControllerIntegrationTest.java
│ │ │ │ └── NotificationControllerV2IntegrationTest.java
│ │ │ ├── service/
│ │ │ │ ├── AccessKeyServiceWithCacheTest.java
│ │ │ │ ├── AppNamespaceServiceWithCacheTest.java
│ │ │ │ ├── ReleaseMessageServiceWithCacheTest.java
│ │ │ │ └── config/
│ │ │ │ ├── ConfigServiceWithCacheAndCacheKeyIgnoreCaseTest.java
│ │ │ │ ├── ConfigServiceWithCacheTest.java
│ │ │ │ ├── DefaultConfigServiceTest.java
│ │ │ │ └── DefaultIncrementalSyncServiceTest.java
│ │ │ ├── util/
│ │ │ │ ├── AccessKeyUtilTest.java
│ │ │ │ ├── InstanceConfigAuditUtilTest.java
│ │ │ │ ├── NamespaceUtilTest.java
│ │ │ │ └── WatchKeysUtilTest.java
│ │ │ └── wrapper/
│ │ │ ├── CaseInsensitiveMapWrapperTest.java
│ │ │ └── CaseInsensitiveMultimapWrapperTest.java
│ │ └── metaservice/
│ │ ├── controller/
│ │ │ ├── HomePageControllerTest.java
│ │ │ └── ServiceControllerTest.java
│ │ └── service/
│ │ ├── ConsulDiscoveryServiceTest.java
│ │ ├── DefaultDiscoveryServiceTest.java
│ │ ├── KubernetesDiscoveryServiceTest.java
│ │ ├── NacosDiscoveryServiceTest.java
│ │ └── ZookeeperDiscoveryServiceTest.java
│ └── resources/
│ ├── application.properties
│ ├── application.yml
│ ├── data.sql
│ ├── import.sql
│ ├── integration-test/
│ │ ├── cleanup.sql
│ │ ├── test-gray-release.sql
│ │ ├── test-release-message.sql
│ │ ├── test-release-public-dc-override.sql
│ │ ├── test-release-public-default-override.sql
│ │ └── test-release.sql
│ └── logback-test.xml
├── apollo-portal/
│ ├── pom.xml
│ └── src/
│ ├── assembly/
│ │ └── assembly-descriptor.xml
│ ├── main/
│ │ ├── docker/
│ │ │ └── Dockerfile
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── ctrip/
│ │ │ └── framework/
│ │ │ └── apollo/
│ │ │ ├── openapi/
│ │ │ │ ├── PortalOpenApiConfig.java
│ │ │ │ ├── auth/
│ │ │ │ │ └── ConsumerPermissionValidator.java
│ │ │ │ ├── entity/
│ │ │ │ │ ├── Consumer.java
│ │ │ │ │ ├── ConsumerAudit.java
│ │ │ │ │ ├── ConsumerRole.java
│ │ │ │ │ └── ConsumerToken.java
│ │ │ │ ├── filter/
│ │ │ │ │ └── ConsumerAuthenticationFilter.java
│ │ │ │ ├── repository/
│ │ │ │ │ ├── ConsumerAuditRepository.java
│ │ │ │ │ ├── ConsumerRepository.java
│ │ │ │ │ ├── ConsumerRoleRepository.java
│ │ │ │ │ └── ConsumerTokenRepository.java
│ │ │ │ ├── server/
│ │ │ │ │ └── service/
│ │ │ │ │ ├── AppOpenApiService.java
│ │ │ │ │ ├── ClusterOpenApiService.java
│ │ │ │ │ ├── EnvOpenApiService.java
│ │ │ │ │ ├── OrganizationOpenApiService.java
│ │ │ │ │ ├── ServerAppOpenApiService.java
│ │ │ │ │ ├── ServerClusterOpenApiService.java
│ │ │ │ │ ├── ServerEnvOpenApiService.java
│ │ │ │ │ ├── ServerInstanceOpenApiService.java
│ │ │ │ │ ├── ServerItemOpenApiService.java
│ │ │ │ │ ├── ServerNamespaceOpenApiService.java
│ │ │ │ │ ├── ServerOrganizationOpenApiService.java
│ │ │ │ │ └── ServerReleaseOpenApiService.java
│ │ │ │ ├── service/
│ │ │ │ │ ├── ConsumerRolePermissionService.java
│ │ │ │ │ └── ConsumerService.java
│ │ │ │ ├── util/
│ │ │ │ │ ├── ConsumerAuditUtil.java
│ │ │ │ │ ├── ConsumerAuthUtil.java
│ │ │ │ │ ├── OpenApiBeanUtils.java
│ │ │ │ │ └── OpenApiModelConverters.java
│ │ │ │ └── v1/
│ │ │ │ └── controller/
│ │ │ │ ├── AppController.java
│ │ │ │ ├── ClusterController.java
│ │ │ │ ├── EnvController.java
│ │ │ │ ├── InstanceController.java
│ │ │ │ ├── ItemController.java
│ │ │ │ ├── NamespaceBranchController.java
│ │ │ │ ├── NamespaceController.java
│ │ │ │ ├── OrganizationController.java
│ │ │ │ └── ReleaseController.java
│ │ │ └── portal/
│ │ │ ├── PortalApplication.java
│ │ │ ├── PortalAssemblyConfiguration.java
│ │ │ ├── ServletInitializer.java
│ │ │ ├── api/
│ │ │ │ ├── API.java
│ │ │ │ └── AdminServiceAPI.java
│ │ │ ├── audit/
│ │ │ │ ├── ApolloAuditLogQueryApiPortalPreAuthorizer.java
│ │ │ │ └── ApolloAuditOperatorPortalSupplier.java
│ │ │ ├── component/
│ │ │ │ ├── AbstractPermissionValidator.java
│ │ │ │ ├── AdminServiceAddressLocator.java
│ │ │ │ ├── ConfigReleaseWebhookNotifier.java
│ │ │ │ ├── ItemsComparator.java
│ │ │ │ ├── PermissionValidator.java
│ │ │ │ ├── PortalSettings.java
│ │ │ │ ├── RestTemplateFactory.java
│ │ │ │ ├── RetryableRestTemplate.java
│ │ │ │ ├── UnifiedPermissionValidator.java
│ │ │ │ ├── UserIdentityContextHolder.java
│ │ │ │ ├── UserPermissionValidator.java
│ │ │ │ ├── config/
│ │ │ │ │ ├── PortalConfig.java
│ │ │ │ │ └── SpringSessionConfig.java
│ │ │ │ ├── emailbuilder/
│ │ │ │ │ ├── ConfigPublishEmailBuilder.java
│ │ │ │ │ ├── GrayPublishEmailBuilder.java
│ │ │ │ │ ├── MergeEmailBuilder.java
│ │ │ │ │ ├── NormalPublishEmailBuilder.java
│ │ │ │ │ └── RollbackEmailBuilder.java
│ │ │ │ └── txtresolver/
│ │ │ │ ├── ConfigTextResolver.java
│ │ │ │ ├── FileTextResolver.java
│ │ │ │ └── PropertyResolver.java
│ │ │ ├── constant/
│ │ │ │ ├── PermissionType.java
│ │ │ │ ├── RoleType.java
│ │ │ │ ├── TracerEventType.java
│ │ │ │ └── UserIdentityConstants.java
│ │ │ ├── controller/
│ │ │ │ ├── AccessKeyController.java
│ │ │ │ ├── AppController.java
│ │ │ │ ├── ClusterController.java
│ │ │ │ ├── CommitController.java
│ │ │ │ ├── ConfigsExportController.java
│ │ │ │ ├── ConfigsImportController.java
│ │ │ │ ├── ConsumerController.java
│ │ │ │ ├── EnvController.java
│ │ │ │ ├── FavoriteController.java
│ │ │ │ ├── GlobalSearchController.java
│ │ │ │ ├── InstanceController.java
│ │ │ │ ├── ItemController.java
│ │ │ │ ├── NamespaceBranchController.java
│ │ │ │ ├── NamespaceController.java
│ │ │ │ ├── NamespaceLockController.java
│ │ │ │ ├── OrganizationController.java
│ │ │ │ ├── PageSettingController.java
│ │ │ │ ├── PermissionController.java
│ │ │ │ ├── PrefixPathController.java
│ │ │ │ ├── ReleaseController.java
│ │ │ │ ├── ReleaseHistoryController.java
│ │ │ │ ├── SearchController.java
│ │ │ │ ├── ServerConfigController.java
│ │ │ │ ├── SignInController.java
│ │ │ │ ├── SsoHeartbeatController.java
│ │ │ │ ├── SystemInfoController.java
│ │ │ │ └── UserInfoController.java
│ │ │ ├── enricher/
│ │ │ │ ├── AdditionalUserInfoEnricher.java
│ │ │ │ ├── adapter/
│ │ │ │ │ ├── AppDtoUserInfoEnrichedAdapter.java
│ │ │ │ │ ├── BaseDtoUserInfoEnrichedAdapter.java
│ │ │ │ │ └── UserInfoEnrichedAdapter.java
│ │ │ │ └── impl/
│ │ │ │ └── UserDisplayNameEnricher.java
│ │ │ ├── entity/
│ │ │ │ ├── bo/
│ │ │ │ │ ├── ConfigBO.java
│ │ │ │ │ ├── Email.java
│ │ │ │ │ ├── ItemBO.java
│ │ │ │ │ ├── KVEntity.java
│ │ │ │ │ ├── NamespaceBO.java
│ │ │ │ │ ├── ReleaseBO.java
│ │ │ │ │ ├── ReleaseHistoryBO.java
│ │ │ │ │ └── UserInfo.java
│ │ │ │ ├── model/
│ │ │ │ │ ├── AppModel.java
│ │ │ │ │ ├── NamespaceCreationModel.java
│ │ │ │ │ ├── NamespaceGrayDelReleaseModel.java
│ │ │ │ │ ├── NamespaceReleaseModel.java
│ │ │ │ │ ├── NamespaceSyncModel.java
│ │ │ │ │ ├── NamespaceTextModel.java
│ │ │ │ │ └── Verifiable.java
│ │ │ │ ├── po/
│ │ │ │ │ ├── Authority.java
│ │ │ │ │ ├── Favorite.java
│ │ │ │ │ ├── Permission.java
│ │ │ │ │ ├── Role.java
│ │ │ │ │ ├── RolePermission.java
│ │ │ │ │ ├── ServerConfig.java
│ │ │ │ │ ├── UserPO.java
│ │ │ │ │ └── UserRole.java
│ │ │ │ └── vo/
│ │ │ │ ├── AppRolesAssignedUsers.java
│ │ │ │ ├── Change.java
│ │ │ │ ├── ClusterNamespaceRolesAssignedUsers.java
│ │ │ │ ├── EnvClusterInfo.java
│ │ │ │ ├── EnvironmentInfo.java
│ │ │ │ ├── ItemDiffs.java
│ │ │ │ ├── ItemInfo.java
│ │ │ │ ├── LockInfo.java
│ │ │ │ ├── NamespaceEnvRolesAssignedUsers.java
│ │ │ │ ├── NamespaceIdentifier.java
│ │ │ │ ├── NamespaceRolesAssignedUsers.java
│ │ │ │ ├── NamespaceUsage.java
│ │ │ │ ├── Number.java
│ │ │ │ ├── Organization.java
│ │ │ │ ├── PageSetting.java
│ │ │ │ ├── PermissionCondition.java
│ │ │ │ ├── ReleaseCompareResult.java
│ │ │ │ ├── SystemInfo.java
│ │ │ │ └── consumer/
│ │ │ │ ├── ConsumerCreateRequestVO.java
│ │ │ │ └── ConsumerInfo.java
│ │ │ ├── enums/
│ │ │ │ └── ChangeType.java
│ │ │ ├── environment/
│ │ │ │ ├── DatabasePortalMetaServerProvider.java
│ │ │ │ ├── DefaultPortalMetaServerProvider.java
│ │ │ │ ├── Env.java
│ │ │ │ ├── PortalMetaDomainService.java
│ │ │ │ └── PortalMetaServerProvider.java
│ │ │ ├── filter/
│ │ │ │ ├── PortalUserSessionFilter.java
│ │ │ │ └── UserTypeResolverFilter.java
│ │ │ ├── listener/
│ │ │ │ ├── AppCreationEvent.java
│ │ │ │ ├── AppDeletionEvent.java
│ │ │ │ ├── AppInfoChangedEvent.java
│ │ │ │ ├── AppInfoChangedListener.java
│ │ │ │ ├── AppNamespaceCreationEvent.java
│ │ │ │ ├── AppNamespaceDeletionEvent.java
│ │ │ │ ├── ConfigPublishEvent.java
│ │ │ │ ├── ConfigPublishListener.java
│ │ │ │ ├── CreationListener.java
│ │ │ │ └── DeletionListener.java
│ │ │ ├── repository/
│ │ │ │ ├── AppNamespaceRepository.java
│ │ │ │ ├── AppRepository.java
│ │ │ │ ├── AuthorityRepository.java
│ │ │ │ ├── FavoriteRepository.java
│ │ │ │ ├── PermissionRepository.java
│ │ │ │ ├── RolePermissionRepository.java
│ │ │ │ ├── RoleRepository.java
│ │ │ │ ├── ServerConfigRepository.java
│ │ │ │ ├── UserRepository.java
│ │ │ │ └── UserRoleRepository.java
│ │ │ ├── service/
│ │ │ │ ├── AccessKeyService.java
│ │ │ │ ├── AdditionalUserInfoEnrichService.java
│ │ │ │ ├── AdditionalUserInfoEnrichServiceImpl.java
│ │ │ │ ├── AppNamespaceService.java
│ │ │ │ ├── AppService.java
│ │ │ │ ├── ClusterService.java
│ │ │ │ ├── CommitService.java
│ │ │ │ ├── ConfigsExportService.java
│ │ │ │ ├── ConfigsImportService.java
│ │ │ │ ├── FavoriteService.java
│ │ │ │ ├── GlobalSearchService.java
│ │ │ │ ├── InstanceService.java
│ │ │ │ ├── ItemService.java
│ │ │ │ ├── NamespaceBranchService.java
│ │ │ │ ├── NamespaceLockService.java
│ │ │ │ ├── NamespaceService.java
│ │ │ │ ├── PortalDBPropertySource.java
│ │ │ │ ├── ReleaseHistoryService.java
│ │ │ │ ├── ReleaseService.java
│ │ │ │ ├── RoleInitializationService.java
│ │ │ │ ├── RolePermissionService.java
│ │ │ │ ├── ServerConfigService.java
│ │ │ │ └── SystemRoleManagerService.java
│ │ │ ├── spi/
│ │ │ │ ├── EmailService.java
│ │ │ │ ├── LogoutHandler.java
│ │ │ │ ├── MQService.java
│ │ │ │ ├── SsoHeartbeatHandler.java
│ │ │ │ ├── UserInfoHolder.java
│ │ │ │ ├── UserService.java
│ │ │ │ ├── configuration/
│ │ │ │ │ ├── AuthConfiguration.java
│ │ │ │ │ ├── AuthFilterConfiguration.java
│ │ │ │ │ ├── EmailConfiguration.java
│ │ │ │ │ ├── LdapExtendProperties.java
│ │ │ │ │ ├── LdapGroupProperties.java
│ │ │ │ │ ├── LdapMappingProperties.java
│ │ │ │ │ ├── LdapProperties.java
│ │ │ │ │ ├── MQConfiguration.java
│ │ │ │ │ ├── OidcExtendProperties.java
│ │ │ │ │ └── RoleConfiguration.java
│ │ │ │ ├── defaultimpl/
│ │ │ │ │ ├── DefaultEmailService.java
│ │ │ │ │ ├── DefaultLogoutHandler.java
│ │ │ │ │ ├── DefaultMQService.java
│ │ │ │ │ ├── DefaultRoleInitializationService.java
│ │ │ │ │ ├── DefaultRolePermissionService.java
│ │ │ │ │ ├── DefaultSsoHeartbeatHandler.java
│ │ │ │ │ ├── DefaultUserInfoHolder.java
│ │ │ │ │ └── DefaultUserService.java
│ │ │ │ ├── ldap/
│ │ │ │ │ ├── ApolloLdapAuthenticationProvider.java
│ │ │ │ │ ├── FilterLdapByGroupUserSearch.java
│ │ │ │ │ └── LdapUserService.java
│ │ │ │ ├── oidc/
│ │ │ │ │ ├── ExcludeClientCredentialsClientRegistrationRepository.java
│ │ │ │ │ ├── OidcAuthenticationSuccessEventListener.java
│ │ │ │ │ ├── OidcLocalUserService.java
│ │ │ │ │ ├── OidcLocalUserServiceImpl.java
│ │ │ │ │ ├── OidcLogoutHandler.java
│ │ │ │ │ ├── OidcUserInfoHolder.java
│ │ │ │ │ ├── OidcUserInfoUtil.java
│ │ │ │ │ └── PlaceholderPasswordEncoder.java
│ │ │ │ ├── package-info.java
│ │ │ │ └── springsecurity/
│ │ │ │ ├── ApolloPasswordEncoderFactory.java
│ │ │ │ ├── PasswordEncoderAdapter.java
│ │ │ │ ├── SpringSecurityUserInfoHolder.java
│ │ │ │ └── SpringSecurityUserService.java
│ │ │ └── util/
│ │ │ ├── ConfigFileUtils.java
│ │ │ ├── ConfigToFileUtils.java
│ │ │ ├── KeyValueUtils.java
│ │ │ ├── NamespaceBOUtils.java
│ │ │ ├── RelativeDateFormat.java
│ │ │ ├── RoleUtils.java
│ │ │ └── checker/
│ │ │ ├── AuthUserPasswordChecker.java
│ │ │ ├── CheckResult.java
│ │ │ └── UserPasswordChecker.java
│ │ ├── resources/
│ │ │ ├── apollo-env.properties
│ │ │ ├── apollo-portal.conf
│ │ │ ├── application-github.properties
│ │ │ ├── application-ldap-activedirectory-sample.yml
│ │ │ ├── application-ldap-apacheds-sample.yml
│ │ │ ├── application-ldap-openldap-sample.yml
│ │ │ ├── application-oidc-sample.yml
│ │ │ ├── application.properties
│ │ │ ├── application.yml
│ │ │ ├── jpa/
│ │ │ │ └── portaldb.init.h2.sql
│ │ │ ├── logback.xml
│ │ │ ├── portal.properties
│ │ │ └── static/
│ │ │ ├── app/
│ │ │ │ ├── access_key.html
│ │ │ │ ├── manage_cluster.html
│ │ │ │ └── setting.html
│ │ │ ├── app.html
│ │ │ ├── audit_log_menu.html
│ │ │ ├── audit_log_trace_detail.html
│ │ │ ├── cluster/
│ │ │ │ └── ns_role.html
│ │ │ ├── cluster.html
│ │ │ ├── config/
│ │ │ │ ├── diff.html
│ │ │ │ ├── history.html
│ │ │ │ └── sync.html
│ │ │ ├── config.html
│ │ │ ├── config_export.html
│ │ │ ├── default_sso_heartbeat.html
│ │ │ ├── delete_app_cluster_namespace.html
│ │ │ ├── global_search_value.html
│ │ │ ├── i18n/
│ │ │ │ ├── en.json
│ │ │ │ └── zh-CN.json
│ │ │ ├── index.html
│ │ │ ├── login.html
│ │ │ ├── namespace/
│ │ │ │ └── role.html
│ │ │ ├── namespace.html
│ │ │ ├── open/
│ │ │ │ ├── add-consumer.html
│ │ │ │ ├── grant-permission-modal.html
│ │ │ │ └── manage.html
│ │ │ ├── scripts/
│ │ │ │ ├── AppUtils.js
│ │ │ │ ├── PageCommon.js
│ │ │ │ ├── app.js
│ │ │ │ ├── controller/
│ │ │ │ │ ├── AccessKeyController.js
│ │ │ │ │ ├── AppController.js
│ │ │ │ │ ├── AuditLogMenuController.js
│ │ │ │ │ ├── AuditLogTraceDetailController.js
│ │ │ │ │ ├── BackTopController.js
│ │ │ │ │ ├── ClusterController.js
│ │ │ │ │ ├── ConfigExportController.js
│ │ │ │ │ ├── DeleteAppClusterNamespaceController.js
│ │ │ │ │ ├── GlobalSearchValueController.js
│ │ │ │ │ ├── IndexController.js
│ │ │ │ │ ├── LoginController.js
│ │ │ │ │ ├── ManageClusterController.js
│ │ │ │ │ ├── NamespaceController.js
│ │ │ │ │ ├── ServerConfigController.js
│ │ │ │ │ ├── SettingController.js
│ │ │ │ │ ├── SystemInfoController.js
│ │ │ │ │ ├── UserController.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── ConfigBaseInfoController.js
│ │ │ │ │ │ ├── ConfigNamespaceController.js
│ │ │ │ │ │ ├── DiffConfigController.js
│ │ │ │ │ │ ├── ReleaseHistoryController.js
│ │ │ │ │ │ └── SyncConfigController.js
│ │ │ │ │ ├── open/
│ │ │ │ │ │ └── OpenManageController.js
│ │ │ │ │ └── role/
│ │ │ │ │ ├── ClusterNamespaceRoleController.js
│ │ │ │ │ ├── NamespaceRoleController.js
│ │ │ │ │ └── SystemRoleController.js
│ │ │ │ ├── directive/
│ │ │ │ │ ├── delete-namespace-modal-directive.js
│ │ │ │ │ ├── diff-directive.js
│ │ │ │ │ ├── directive.js
│ │ │ │ │ ├── gray-release-rules-modal-directive.js
│ │ │ │ │ ├── import-namespace-modal-directive.js
│ │ │ │ │ ├── item-modal-directive.js
│ │ │ │ │ ├── merge-and-publish-modal-directive.js
│ │ │ │ │ ├── namespace-panel-directive.js
│ │ │ │ │ ├── open-manage-grant-permission-modal-directive.js
│ │ │ │ │ ├── publish-deny-modal-directive.js
│ │ │ │ │ ├── release-modal-directive.js
│ │ │ │ │ ├── rollback-modal-directive.js
│ │ │ │ │ └── show-text-modal-directive.js
│ │ │ │ ├── services/
│ │ │ │ │ ├── AccessKeyService.js
│ │ │ │ │ ├── AppService.js
│ │ │ │ │ ├── AuditLogService.js
│ │ │ │ │ ├── ClusterService.js
│ │ │ │ │ ├── CommitService.js
│ │ │ │ │ ├── CommonService.js
│ │ │ │ │ ├── ConfigService.js
│ │ │ │ │ ├── ConsumerService.js
│ │ │ │ │ ├── EnvService.js
│ │ │ │ │ ├── EventManager.js
│ │ │ │ │ ├── ExportService.js
│ │ │ │ │ ├── FavoriteService.js
│ │ │ │ │ ├── GlobalSearchValueService.js
│ │ │ │ │ ├── InstanceService.js
│ │ │ │ │ ├── NamespaceBranchService.js
│ │ │ │ │ ├── NamespaceLockService.js
│ │ │ │ │ ├── NamespaceService.js
│ │ │ │ │ ├── OrganizationService.js
│ │ │ │ │ ├── PermissionService.js
│ │ │ │ │ ├── ReleaseHistoryService.js
│ │ │ │ │ ├── ReleaseService.js
│ │ │ │ │ ├── ServerConfigService.js
│ │ │ │ │ ├── SystemInfoService.js
│ │ │ │ │ ├── SystemRoleService.js
│ │ │ │ │ └── UserService.js
│ │ │ │ └── valdr.js
│ │ │ ├── server_config_manage.html
│ │ │ ├── styles/
│ │ │ │ ├── audit-log.css
│ │ │ │ └── common-style.css
│ │ │ ├── system-role-manage.html
│ │ │ ├── system_info.html
│ │ │ ├── user-manage.html
│ │ │ ├── vendor/
│ │ │ │ ├── iconfont/
│ │ │ │ │ └── iconfont.css
│ │ │ │ ├── jquery-plugin/
│ │ │ │ │ ├── jquery.textareafullscreen.js
│ │ │ │ │ └── textareafullscreen.css
│ │ │ │ └── ui-ace/
│ │ │ │ ├── ace.js
│ │ │ │ ├── ext-searchbox.js
│ │ │ │ ├── mode-json.js
│ │ │ │ ├── mode-properties.js
│ │ │ │ ├── mode-xml.js
│ │ │ │ ├── mode-yaml.js
│ │ │ │ ├── theme-eclipse.js
│ │ │ │ ├── worker-json.js
│ │ │ │ └── worker-xml.js
│ │ │ └── views/
│ │ │ ├── common/
│ │ │ │ ├── footer.html
│ │ │ │ └── nav.html
│ │ │ └── component/
│ │ │ ├── back-top.html
│ │ │ ├── confirm-dialog.html
│ │ │ ├── delete-namespace-modal.html
│ │ │ ├── diff.html
│ │ │ ├── entrance.html
│ │ │ ├── env-selector.html
│ │ │ ├── gray-release-rules-modal.html
│ │ │ ├── import-namespace-modal.html
│ │ │ ├── item-modal.html
│ │ │ ├── merge-and-publish-modal.html
│ │ │ ├── multiple-user-selector.html
│ │ │ ├── namespace-panel-branch-tab.html
│ │ │ ├── namespace-panel-header.html
│ │ │ ├── namespace-panel-master-tab.html
│ │ │ ├── namespace-panel.html
│ │ │ ├── publish-deny-modal.html
│ │ │ ├── release-modal.html
│ │ │ ├── rollback-modal.html
│ │ │ ├── show-text-modal.html
│ │ │ └── user-selector.html
│ │ └── scripts/
│ │ ├── shutdown.sh
│ │ └── startup.sh
│ └── test/
│ ├── java/
│ │ └── com/
│ │ └── ctrip/
│ │ └── framework/
│ │ └── apollo/
│ │ ├── ControllableAuthorizationConfiguration.java
│ │ ├── LocalPortalApplication.java
│ │ ├── SkipAuthorizationConfiguration.java
│ │ ├── openapi/
│ │ │ ├── auth/
│ │ │ │ └── ConsumerPermissionValidatorTest.java
│ │ │ ├── filter/
│ │ │ │ └── ConsumerAuthenticationFilterTest.java
│ │ │ ├── service/
│ │ │ │ ├── ConsumerRolePermissionServiceTest.java
│ │ │ │ ├── ConsumerServiceIntegrationTest.java
│ │ │ │ └── ConsumerServiceTest.java
│ │ │ ├── util/
│ │ │ │ ├── ConsumerAuditUtilTest.java
│ │ │ │ └── ConsumerAuthUtilTest.java
│ │ │ └── v1/
│ │ │ └── controller/
│ │ │ ├── AbstractControllerTest.java
│ │ │ ├── AppControllerIntegrationTest.java
│ │ │ ├── AppControllerParamBindLowLevelTest.java
│ │ │ ├── AppControllerTest.java
│ │ │ ├── ClusterControllerParamBindLowLevelTest.java
│ │ │ ├── ClusterControllerTest.java
│ │ │ ├── EnvControllerTest.java
│ │ │ ├── NamespaceControllerTest.java
│ │ │ ├── NamespaceControllerWithAuthorizationTest.java
│ │ │ └── OrganizationControllerTest.java
│ │ └── portal/
│ │ ├── AbstractIntegrationTest.java
│ │ ├── AbstractUnitTest.java
│ │ ├── RetryableRestTemplateTest.java
│ │ ├── ServiceExceptionTest.java
│ │ ├── component/
│ │ │ ├── AbstractPermissionValidatorTest.java
│ │ │ ├── UnifiedPermissionValidatorTest.java
│ │ │ ├── UserIdentityContextHolderTest.java
│ │ │ ├── UserPermissionValidatorTest.java
│ │ │ ├── UserPermissionValidatorTestSupplement.java
│ │ │ ├── config/
│ │ │ │ └── PortalConfigTest.java
│ │ │ └── txtresolver/
│ │ │ ├── FileTextResolverTest.java
│ │ │ └── PropertyResolverTest.java
│ │ ├── config/
│ │ │ └── ConfigTest.java
│ │ ├── controller/
│ │ │ ├── ClusterControllerTest.java
│ │ │ ├── CommitControllerTest.java
│ │ │ ├── ConfigsExportControllerTest.java
│ │ │ ├── ConfigsImportControllerTest.java
│ │ │ ├── ConsumerControllerTest.java
│ │ │ ├── EnvControllerTest.java
│ │ │ ├── GlobalSearchControllerTest.java
│ │ │ ├── InstanceControllerTest.java
│ │ │ ├── ItemControllerAuthIntegrationTest.java
│ │ │ ├── ItemControllerTest.java
│ │ │ ├── NamespaceLockControllerTest.java
│ │ │ ├── OrganizationControllerTest.java
│ │ │ ├── PageSettingControllerTest.java
│ │ │ ├── PermissionControllerTest.java
│ │ │ ├── PrefixPathControllerTest.java
│ │ │ ├── ReleaseHistoryControllerTest.java
│ │ │ ├── SearchControllerTest.java
│ │ │ ├── ServerConfigControllerTest.java
│ │ │ ├── SignInControllerTest.java
│ │ │ ├── SsoHeartbeatControllerTest.java
│ │ │ ├── SystemInfoControllerTest.java
│ │ │ └── UserInfoControllerTest.java
│ │ ├── environment/
│ │ │ ├── BaseIntegrationTest.java
│ │ │ ├── DatabasePortalMetaServerProviderTest.java
│ │ │ ├── DefaultPortalMetaServerProviderTest.java
│ │ │ ├── EnvTest.java
│ │ │ └── PortalMetaDomainServiceTest.java
│ │ ├── filter/
│ │ │ ├── PortalOpenApiAuthenticationScenariosTest.java
│ │ │ └── UserTypeResolverFilter.java
│ │ ├── service/
│ │ │ ├── AppNamespaceServiceTest.java
│ │ │ ├── AppServiceTest.java
│ │ │ ├── ConfigServiceTest.java
│ │ │ ├── ConfigsExportServiceTest.java
│ │ │ ├── FavoriteServiceTest.java
│ │ │ ├── GlobalSearchServiceTest.java
│ │ │ └── NamespaceServiceTest.java
│ │ ├── spi/
│ │ │ └── defaultImpl/
│ │ │ ├── RoleInitializationServiceTest.java
│ │ │ └── RolePermissionServiceTest.java
│ │ └── util/
│ │ ├── AuthUserPasswordCheckerTest.java
│ │ ├── ConfigFileUtilsTest.java
│ │ ├── KeyValueUtilsTest.java
│ │ └── RoleUtilsTest.java
│ └── resources/
│ ├── application.properties
│ ├── application.yml
│ ├── import.sql
│ ├── logback-test.xml
│ ├── sql/
│ │ ├── appnamespaceservice/
│ │ │ └── init-appnamespace.sql
│ │ ├── cleanup.sql
│ │ ├── favorites/
│ │ │ └── favorites.sql
│ │ ├── openapi/
│ │ │ ├── ConsumerServiceIntegrationTest.commonData.sql
│ │ │ ├── ConsumerServiceIntegrationTest.testFindAppIdsAuthorizedByConsumerId.sql
│ │ │ └── NamespaceControllerTest.testCreateAppNamespace.sql
│ │ └── permission/
│ │ ├── RolePermissionServiceTest.deleteRolePermissionsByAppIdWithClusterRoles.sql
│ │ ├── consumer_role_permission_service/
│ │ │ ├── test_get_user_permission_set_different_users.sql
│ │ │ ├── test_get_user_permission_set_no_roles.sql
│ │ │ ├── test_get_user_permission_set_roles_without_permissions.sql
│ │ │ └── test_get_user_permission_set_with_permissions.sql
│ │ ├── insert-test-consumerroles.sql
│ │ ├── insert-test-getUserPermissionSet.sql
│ │ ├── insert-test-permissions.sql
│ │ ├── insert-test-rolepermissions.sql
│ │ ├── insert-test-roles.sql
│ │ └── insert-test-userroles.sql
│ ├── static/
│ │ └── scripts/
│ │ └── test_hasDuplicateKeys.js
│ └── yaml/
│ ├── case1.yaml
│ ├── case2.yaml
│ └── case3.yaml
├── changes/
│ ├── changes-1.9.0.md
│ ├── changes-1.9.1.md
│ ├── changes-1.9.2.md
│ ├── changes-2.0.0.md
│ ├── changes-2.0.1.md
│ ├── changes-2.1.0.md
│ ├── changes-2.2.0.md
│ ├── changes-2.3.0.md
│ ├── changes-2.4.0.md
│ └── changes-2.5.0.md
├── docs/
│ ├── .nojekyll
│ ├── CNAME
│ ├── _coverpage.md
│ ├── charts/
│ │ ├── apollo-portal-0.1.0.tgz
│ │ ├── apollo-portal-0.1.1.tgz
│ │ ├── apollo-portal-0.1.2.tgz
│ │ ├── apollo-portal-0.2.0.tgz
│ │ ├── apollo-portal-0.2.1.tgz
│ │ ├── apollo-portal-0.2.2.tgz
│ │ ├── apollo-portal-0.3.0.tgz
│ │ ├── apollo-portal-0.3.1.tgz
│ │ ├── apollo-service-0.1.0.tgz
│ │ ├── apollo-service-0.1.1.tgz
│ │ ├── apollo-service-0.1.2.tgz
│ │ ├── apollo-service-0.2.0.tgz
│ │ ├── apollo-service-0.2.1.tgz
│ │ ├── apollo-service-0.2.2.tgz
│ │ ├── apollo-service-0.3.0.tgz
│ │ ├── apollo-service-0.3.1.tgz
│ │ └── index.yaml
│ ├── css/
│ │ ├── buble.css
│ │ ├── dark.css
│ │ ├── fonts.css
│ │ ├── pure.css
│ │ └── vue.css
│ ├── en/
│ │ ├── README.md
│ │ ├── _navbar.md
│ │ ├── _sidebar.md
│ │ ├── client/
│ │ │ ├── c-sdks-user-guide.md
│ │ │ ├── cpp-sdks-user-guide.md
│ │ │ ├── dotnet-sdk-user-guide.md
│ │ │ ├── golang-sdks-user-guide.md
│ │ │ ├── java-sdk-user-guide.md
│ │ │ ├── k8s-configmap-user-guide.md
│ │ │ ├── nodejs-sdks-user-guide.md
│ │ │ ├── other-language-client-user-guide.md
│ │ │ ├── php-sdks-user-guide.md
│ │ │ ├── python-sdks-user-guide.md
│ │ │ └── rust-sdks-user-guide.md
│ │ ├── community/
│ │ │ ├── team.md
│ │ │ └── thank-you.md
│ │ ├── contribution/
│ │ │ ├── apollo-development-guide.md
│ │ │ └── apollo-release-guide.md
│ │ ├── deployment/
│ │ │ ├── deployment-architecture.md
│ │ │ ├── distributed-deployment-guide.md
│ │ │ ├── quick-start-docker.md
│ │ │ ├── quick-start.md
│ │ │ ├── third-party-tool-btpanel.md
│ │ │ └── third-party-tool-rainbond.md
│ │ ├── design/
│ │ │ ├── apollo-core-concept-namespace.md
│ │ │ ├── apollo-design.md
│ │ │ └── apollo-introduction.md
│ │ ├── extension/
│ │ │ ├── portal-how-to-enable-email-service.md
│ │ │ ├── portal-how-to-enable-session-store.md
│ │ │ ├── portal-how-to-enable-webhook-notification.md
│ │ │ └── portal-how-to-implement-user-login-function.md
│ │ ├── faq/
│ │ │ ├── common-issues-in-deployment-and-development-phase.md
│ │ │ └── faq.md
│ │ ├── misc/
│ │ │ └── apollo-benchmark.md
│ │ ├── portal/
│ │ │ ├── apollo-open-api-platform.md
│ │ │ ├── apollo-user-guide.md
│ │ │ └── apollo-user-practices.md
│ │ └── quick-start.md
│ ├── index.html
│ ├── scripts/
│ │ └── multiple-language-redirect.js
│ └── zh/
│ ├── README.md
│ ├── _navbar.md
│ ├── _sidebar.md
│ ├── client/
│ │ ├── c-sdks-user-guide.md
│ │ ├── cpp-sdks-user-guide.md
│ │ ├── dotnet-sdk-user-guide.md
│ │ ├── golang-sdks-user-guide.md
│ │ ├── java-sdk-user-guide.md
│ │ ├── k8s-configmap-user-guide.md
│ │ ├── nodejs-sdks-user-guide.md
│ │ ├── other-language-client-user-guide.md
│ │ ├── php-sdks-user-guide.md
│ │ ├── python-sdks-user-guide.md
│ │ └── rust-sdks-user-guide.md
│ ├── community/
│ │ ├── team.md
│ │ └── thank-you.md
│ ├── contribution/
│ │ ├── apollo-development-guide.md
│ │ └── apollo-release-guide.md
│ ├── deployment/
│ │ ├── deployment-architecture.md
│ │ ├── distributed-deployment-guide.md
│ │ ├── quick-start-docker.md
│ │ ├── quick-start.md
│ │ ├── third-party-tool-btpanel.md
│ │ └── third-party-tool-rainbond.md
│ ├── design/
│ │ ├── apollo-core-concept-namespace.md
│ │ ├── apollo-design.md
│ │ └── apollo-introduction.md
│ ├── extension/
│ │ ├── portal-how-to-enable-email-service.md
│ │ ├── portal-how-to-enable-session-store.md
│ │ ├── portal-how-to-enable-webhook-notification.md
│ │ └── portal-how-to-implement-user-login-function.md
│ ├── faq/
│ │ ├── common-issues-in-deployment-and-development-phase.md
│ │ └── faq.md
│ ├── misc/
│ │ └── apollo-benchmark.md
│ └── portal/
│ ├── apollo-open-api-platform.md
│ ├── apollo-user-guide.md
│ └── apollo-user-practices.md
├── e2e/
│ ├── README.md
│ └── portal-e2e/
│ ├── .gitignore
│ ├── config/
│ │ ├── application-ldap-e2e.yml
│ │ └── application-oidc-e2e.yml
│ ├── package.json
│ ├── playwright.config.js
│ ├── scripts/
│ │ ├── auth/
│ │ │ ├── setup-ldap.sh
│ │ │ ├── setup-oidc.sh
│ │ │ └── teardown-auth.sh
│ │ └── wait-for-ready.sh
│ └── tests/
│ ├── helpers/
│ │ ├── auth-helpers.js
│ │ └── portal-helpers.js
│ ├── portal-auth-matrix.spec.js
│ ├── portal-configservice.spec.js
│ ├── portal-core.spec.js
│ ├── portal-priority.spec.js
│ └── portal-regression.spec.js
├── mvnw
├── mvnw.cmd
├── pom.xml
└── scripts/
├── build.bat
├── build.sh
├── openapi/
│ └── bash/
│ ├── openapi-usage-example.sh
│ └── openapi.sh
└── sql/
├── profiles/
│ ├── h2-default/
│ │ ├── apolloconfigdb.sql
│ │ ├── apolloportaldb.sql
│ │ └── delta/
│ │ ├── v220-v230/
│ │ │ ├── apolloconfigdb-v220-v230.sql
│ │ │ └── apolloportaldb-v220-v230.sql
│ │ └── v230-v240/
│ │ ├── apolloconfigdb-v230-v240.sql
│ │ └── apolloportaldb-v230-v240.sql
│ ├── mysql-database-not-specified/
│ │ ├── apolloconfigdb.sql
│ │ ├── apolloportaldb.sql
│ │ └── delta/
│ │ ├── v220-v230/
│ │ │ ├── apolloconfigdb-v220-v230.sql
│ │ │ └── apolloportaldb-v220-v230.sql
│ │ └── v230-v240/
│ │ ├── apolloconfigdb-v230-v240.sql
│ │ └── apolloportaldb-v230-v240.sql
│ └── mysql-default/
│ ├── apolloconfigdb.sql
│ ├── apolloportaldb.sql
│ └── delta/
│ ├── v040-v050/
│ │ ├── apolloconfigdb-v040-v050.sql
│ │ └── apolloportaldb-v040-v050.sql
│ ├── v060-v062/
│ │ ├── apolloconfigdb-v060-v062.sql
│ │ └── apolloportaldb-v060-v062.sql
│ ├── v080-v090/
│ │ └── apolloportaldb-v080-v090.sql
│ ├── v151-v160/
│ │ └── apolloconfigdb-v151-v160.sql
│ ├── v170-v180/
│ │ ├── apolloconfigdb-v170-v180.sql
│ │ └── apolloportaldb-v170-v180.sql
│ ├── v180-v190/
│ │ ├── apolloconfigdb-v180-v190.sql
│ │ └── apolloportaldb-v180-v190.sql
│ ├── v190-v200/
│ │ ├── apolloconfigdb-v190-v200-after.sql
│ │ ├── apolloconfigdb-v190-v200.sql
│ │ ├── apolloportaldb-v190-v200-after.sql
│ │ └── apolloportaldb-v190-v200.sql
│ ├── v200-v210/
│ │ └── apolloconfigdb-v200-v210.sql
│ ├── v210-v220/
│ │ ├── apolloconfigdb-v210-v220.sql
│ │ └── apolloportaldb-v210-v220.sql
│ ├── v220-v230/
│ │ ├── apolloconfigdb-v220-v230.sql
│ │ └── apolloportaldb-v220-v230.sql
│ └── v230-v240/
│ ├── apolloconfigdb-v230-v240.sql
│ └── apolloportaldb-v230-v240.sql
└── src/
├── apolloconfigdb.sql
├── apolloportaldb.sql
├── delta/
│ ├── v220-v230/
│ │ ├── apolloconfigdb-v220-v230.sql
│ │ └── apolloportaldb-v220-v230.sql
│ └── v230-v240/
│ ├── apolloconfigdb-v230-v240.sql
│ └── apolloportaldb-v230-v240.sql
└── gist/
├── autoGeneratedDeclaration.sql
├── h2Function.sql
├── setupDatabase.sql
└── useDatabase.sql
Showing preview only (567K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (5943 symbols across 765 files)
FILE: .mvn/wrapper/MavenWrapperDownloader.java
class MavenWrapperDownloader (line 25) | public class MavenWrapperDownloader {
method main (line 51) | public static void main(String args[]) {
method downloadFileFromURL (line 100) | private static void downloadFileFromURL(String urlString, File destina...
FILE: apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/AdminServiceApplication.java
class AdminServiceApplication (line 32) | @EnableAspectJAutoProxy
method main (line 41) | public static void main(String[] args) {
FILE: apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/AdminServiceAssemblyConfiguration.java
class AdminServiceAssemblyConfiguration (line 27) | @Profile("assembly")
method adminServiceAssemblySecurityFilterChain (line 31) | @Bean
FILE: apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/AdminServiceAutoConfiguration.java
class AdminServiceAutoConfiguration (line 25) | @Configuration
method AdminServiceAutoConfiguration (line 30) | public AdminServiceAutoConfiguration(final BizConfig bizConfig) {
method adminServiceAuthenticationFilter (line 34) | @Bean
FILE: apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/AdminServiceHealthIndicator.java
class AdminServiceHealthIndicator (line 25) | @Component
method AdminServiceHealthIndicator (line 30) | public AdminServiceHealthIndicator(final AppService appService) {
method health (line 34) | @Override
method check (line 40) | private void check() {
FILE: apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/ServletInitializer.java
class ServletInitializer (line 27) | public class ServletInitializer extends SpringBootServletInitializer {
method configure (line 29) | @Override
FILE: apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceAcquireLockAspect.java
class NamespaceAcquireLockAspect (line 43) | @Aspect
method NamespaceAcquireLockAspect (line 53) | public NamespaceAcquireLockAspect(final NamespaceLockService namespace...
method requireLockAdvice (line 64) | @Before(
method requireLockAdvice (line 73) | @Before(
method requireLockAdvice (line 82) | @Before(
method requireLockAdvice (line 91) | @Before(value = "@annotation(PreAcquireNamespaceLock) && args(itemId, ...
method acquireLock (line 101) | void acquireLock(String appId, String clusterName, String namespaceNam...
method acquireLock (line 111) | void acquireLock(long namespaceId, String currentUser) {
method acquireLock (line 122) | private void acquireLock(Namespace namespace, String currentUser) {
method tryLock (line 148) | private void tryLock(long namespaceId, String user) {
method checkLock (line 156) | private void checkLock(Namespace namespace, NamespaceLock namespaceLoc...
FILE: apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceUnlockAspect.java
class NamespaceUnlockAspect (line 52) | @Aspect
method NamespaceUnlockAspect (line 64) | public NamespaceUnlockAspect(final NamespaceLockService namespaceLockS...
method requireLockAdvice (line 76) | @After(
method requireLockAdvice (line 85) | @After(
method requireLockAdvice (line 94) | @After(
method requireLockAdvice (line 103) | @After(value = "@annotation(PreAcquireNamespaceLock) && args(itemId, o...
method tryUnlock (line 113) | private void tryUnlock(Namespace namespace) {
method isModified (line 124) | boolean isModified(Namespace namespace) {
method hasNormalItems (line 143) | private boolean hasNormalItems(List<Item> items) {
method generateConfigurationFromItems (line 153) | private Map<String, String> generateConfigurationFromItems(Namespace n...
method generateMapFromItems (line 173) | private Map<String, String> generateMapFromItems(List<Item> items,
FILE: apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/AccessKeyController.java
class AccessKeyController (line 38) | @RestController
method AccessKeyController (line 43) | public AccessKeyController(AccessKeyService accessKeyService) {
method create (line 47) | @PostMapping(value = "/apps/{appId}/accesskeys")
method findByAppId (line 54) | @GetMapping(value = "/apps/{appId}/accesskeys")
method delete (line 60) | @DeleteMapping(value = "/apps/{appId}/accesskeys/{id}")
method enable (line 65) | @PutMapping(value = "/apps/{appId}/accesskeys/{id}/enable")
method disable (line 77) | @PutMapping(value = "/apps/{appId}/accesskeys/{id}/disable")
FILE: apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/AppController.java
class AppController (line 41) | @RestController
method AppController (line 47) | public AppController(final AppService appService, final AdminService a...
method create (line 52) | @PostMapping("/apps")
method delete (line 65) | @DeleteMapping("/apps/{appId:.+}")
method update (line 74) | @PutMapping("/apps/{appId:.+}")
method find (line 83) | @GetMapping("/apps")
method get (line 95) | @GetMapping("/apps/{appId:.+}")
method isAppIdUnique (line 104) | @GetMapping("/apps/{appId}/unique")
FILE: apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/AppNamespaceController.java
class AppNamespaceController (line 40) | @RestController
method AppNamespaceController (line 46) | public AppNamespaceController(final AppNamespaceService appNamespaceSe...
method create (line 52) | @PostMapping("/apps/{appId}/appnamespaces")
method delete (line 77) | @DeleteMapping("/apps/{appId}/appnamespaces/{namespaceName:.+}")
method findPublicAppNamespaceAllNamespaces (line 87) | @GetMapping("/appnamespaces/{publicNamespaceName}/namespaces")
method countPublicAppNamespaceAssociatedNamespaces (line 97) | @GetMapping("/appnamespaces/{publicNamespaceName}/associated-namespace...
method getAppNamespaces (line 102) | @GetMapping("/apps/{appId}/appnamespaces")
FILE: apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/ClusterController.java
class ClusterController (line 37) | @RestController
method ClusterController (line 42) | public ClusterController(final ClusterService clusterService) {
method create (line 46) | @PostMapping("/apps/{appId}/clusters")
method delete (line 66) | @DeleteMapping("/apps/{appId}/clusters/{clusterName:.+}")
method find (line 83) | @GetMapping("/apps/{appId}/clusters")
method get (line 89) | @GetMapping("/apps/{appId}/clusters/{clusterName:.+}")
method isAppIdUnique (line 99) | @GetMapping("/apps/{appId}/cluster/{clusterName}/unique")
FILE: apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/CommitController.java
class CommitController (line 33) | @RestController
method CommitController (line 38) | public CommitController(final CommitService commitService) {
method find (line 42) | @GetMapping("/apps/{appId}/clusters/{clusterName}/namespaces/{namespac...
FILE: apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/IndexController.java
class IndexController (line 23) | @RestController
method index (line 27) | @GetMapping
FILE: apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/InstanceConfigController.java
class InstanceConfigController (line 55) | @RestController
method InstanceConfigController (line 63) | public InstanceConfigController(final ReleaseService releaseService,
method getByRelease (line 69) | @GetMapping("/by-release")
method getByReleasesNotIn (line 116) | @GetMapping("/by-namespace-and-releases-not-in")
method getInstancesByNamespace (line 179) | @GetMapping("/by-namespace")
method getInstancesCountByNamespace (line 199) | @GetMapping("/by-namespace/count")
FILE: apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/ItemController.java
class ItemController (line 55) | @RestController
method ItemController (line 64) | public ItemController(final ItemService itemService, final NamespaceSe...
method create (line 74) | @PreAcquireNamespaceLock
method createComment (line 103) | @PostMapping("/apps/{appId}/clusters/{clusterName}/namespaces/{namespa...
method update (line 130) | @PreAcquireNamespaceLock
method delete (line 171) | @PreAcquireNamespaceLock
method findItems (line 188) | @GetMapping("/apps/{appId}/clusters/{clusterName}/namespaces/{namespac...
method findDeletedItems (line 196) | @GetMapping("/apps/{appId}/clusters/{clusterName}/namespaces/{namespac...
method getItemInfoBySearch (line 222) | @GetMapping("/items-search/key-and-value")
method get (line 230) | @GetMapping("/items/{itemId}")
method get (line 239) | @GetMapping("/apps/{appId}/clusters/{clusterName}/namespaces/{namespac...
method getByEncodedKey (line 250) | @GetMapping("/apps/{appId}/clusters/{clusterName}/namespaces/{namespac...
method findItemsByNamespace (line 258) | @GetMapping(
FILE: apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/ItemSetController.java
class ItemSetController (line 29) | @RestController
method ItemSetController (line 34) | public ItemSetController(final ItemSetService itemSetService) {
method create (line 38) | @PreAcquireNamespaceLock
FILE: apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/NamespaceBranchController.java
class NamespaceBranchController (line 42) | @RestController
method NamespaceBranchController (line 49) | public NamespaceBranchController(final MessageSender messageSender,
method createBranch (line 58) | @PostMapping("/apps/{appId}/clusters/{clusterName}/namespaces/{namespa...
method findBranchGrayRules (line 70) | @GetMapping("/apps/{appId}/clusters/{clusterName}/namespaces/{namespac...
method updateBranchGrayRules (line 92) | @Transactional
method deleteBranch (line 113) | @Transactional
method loadNamespaceBranch (line 130) | @GetMapping("/apps/{appId}/clusters/{clusterName}/namespaces/{namespac...
method checkBranch (line 144) | private void checkBranch(String appId, String clusterName, String name...
method checkNamespace (line 159) | private void checkNamespace(String appId, String clusterName, String n...
FILE: apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/NamespaceController.java
class NamespaceController (line 41) | @RestController
method NamespaceController (line 46) | public NamespaceController(final NamespaceService namespaceService) {
method create (line 50) | @PostMapping("/apps/{appId}/clusters/{clusterName}/namespaces")
method delete (line 65) | @DeleteMapping("/apps/{appId}/clusters/{clusterName}/namespaces/{names...
method find (line 77) | @GetMapping("/apps/{appId}/clusters/{clusterName}/namespaces")
method get (line 84) | @GetMapping("/namespaces/{namespaceId}")
method findByItem (line 96) | @GetMapping("/namespaces/find-by-item")
method get (line 106) | @GetMapping("/apps/{appId}/clusters/{clusterName}/namespaces/{namespac...
method findPublicNamespaceForAssociatedNamespace (line 117) | @GetMapping("/apps/{appId}/clusters/{clusterName}/namespaces/{namespac...
method namespacePublishInfo (line 133) | @GetMapping("/apps/{appId}/namespaces/publish_info")
FILE: apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/NamespaceLockController.java
class NamespaceLockController (line 31) | @RestController
method NamespaceLockController (line 38) | public NamespaceLockController(final NamespaceLockService namespaceLoc...
method getNamespaceLockOwner (line 45) | @GetMapping("/apps/{appId}/clusters/{clusterName}/namespaces/{namespac...
FILE: apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/ReleaseController.java
class ReleaseController (line 48) | @RestController
method ReleaseController (line 59) | public ReleaseController(final ReleaseService releaseService,
method get (line 69) | @GetMapping("/releases/{releaseId}")
method findReleaseByIds (line 78) | @GetMapping("/releases")
method findAllReleases (line 88) | @GetMapping("/apps/{appId}/clusters/{clusterName}/namespaces/{namespac...
method findActiveReleases (line 98) | @GetMapping("/apps/{appId}/clusters/{clusterName}/namespaces/{namespac...
method getLatest (line 107) | @GetMapping("/apps/{appId}/clusters/{clusterName}/namespaces/{namespac...
method publish (line 115) | @Transactional
method updateAndPublish (line 150) | @Transactional
method rollback (line 182) | @Transactional
method publish (line 204) | @Transactional
FILE: apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/ReleaseHistoryController.java
class ReleaseHistoryController (line 41) | @RestController
method ReleaseHistoryController (line 50) | public ReleaseHistoryController(final ReleaseHistoryService releaseHis...
method findReleaseHistoriesByNamespace (line 54) | @GetMapping("/apps/{appId}/clusters/{clusterName}/namespaces/{namespac...
method findReleaseHistoryByReleaseIdAndOperation (line 64) | @GetMapping("/releases/histories/by_release_id_and_operation")
method findReleaseHistoryByPreviousReleaseIdAndOperation (line 75) | @GetMapping("/releases/histories/by_previous_release_id_and_operation")
method transform2PageDTO (line 87) | private PageDTO<ReleaseHistoryDTO> transform2PageDTO(Page<ReleaseHisto...
method transformReleaseHistory2DTO (line 102) | private ReleaseHistoryDTO transformReleaseHistory2DTO(ReleaseHistory r...
FILE: apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/ServerConfigController.java
class ServerConfigController (line 32) | @RestController
method ServerConfigController (line 36) | public ServerConfigController(ServerConfigService serverConfigService) {
method findAllServerConfig (line 40) | @GetMapping("/server/config/find-all-config")
method createOrUpdatePortalDBConfig (line 45) | @PostMapping("/server/config")
FILE: apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/filter/AdminServiceAuthenticationFilter.java
class AdminServiceAuthenticationFilter (line 36) | public class AdminServiceAuthenticationFilter implements Filter {
method AdminServiceAuthenticationFilter (line 47) | public AdminServiceAuthenticationFilter(BizConfig bizConfig) {
method init (line 51) | @Override
method doFilter (line 56) | @Override
method checkAccessToken (line 75) | private boolean checkAccessToken(String token) {
method destroy (line 99) | @Override
FILE: apollo-adminservice/src/test/java/com/ctrip/framework/apollo/AdminServiceTestConfiguration.java
class AdminServiceTestConfiguration (line 28) | @Configuration
FILE: apollo-adminservice/src/test/java/com/ctrip/framework/apollo/LocalAdminServiceApplication.java
class LocalAdminServiceApplication (line 23) | @SpringBootApplication
method main (line 26) | public static void main(String[] args) {
FILE: apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/GracefulShutdownConfigurationTest.java
class GracefulShutdownConfigurationTest (line 44) | @RunWith(SpringJUnit4ClassRunner.class)
method testGracefulShutdownIsConfigured (line 55) | @Test
FILE: apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceLockTest.java
class NamespaceLockTest (line 42) | @RunWith(MockitoJUnitRunner.class)
method acquireLockWithNotLockedAndSwitchON (line 63) | @Test
method acquireLockWithNotLockedAndSwitchOFF (line 73) | @Test
method acquireLockWithAlreadyLockedByOtherGuy (line 89) | @Test(expected = BadRequestException.class)
method acquireLockWithAlreadyLockedBySelf (line 103) | @Test
method acquireLockWithNamespaceIdSwitchOn (line 117) | @Test
method testDuplicateLock (line 132) | @Test(expected = ServiceException.class)
method mockNamespace (line 149) | private Namespace mockNamespace() {
method mockNamespaceLock (line 158) | private NamespaceLock mockNamespaceLock(String locedUser) {
FILE: apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceUnlockAspectTest.java
class NamespaceUnlockAspectTest (line 39) | @RunWith(MockitoJUnitRunner.class)
method testNamespaceHasNoNormalItemsAndRelease (line 53) | @Test
method testNamespaceAddItem (line 68) | @Test
method testNamespaceModifyItem (line 85) | @Test
method testNamespaceDeleteItem (line 102) | @Test
method testChildNamespaceModified (line 119) | @Test
method testChildNamespaceNotModified (line 139) | @Test
method testParentNamespaceNotReleased (line 159) | @Test
method createNamespace (line 179) | private Namespace createNamespace(long namespaceId) {
method createItem (line 185) | private Item createItem(String key, String value) {
method createRelease (line 192) | private Release createRelease(String configuration) {
FILE: apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/controller/AbstractControllerTest.java
class AbstractControllerTest (line 34) | @RunWith(SpringJUnit4ClassRunner.class)
method postConstruct (line 44) | @PostConstruct
method url (line 53) | protected String url(String path) {
method namespaceBaseUrl (line 57) | protected String namespaceBaseUrl() {
method appBaseUrl (line 61) | protected String appBaseUrl() {
method clusterBaseUrl (line 65) | protected String clusterBaseUrl() {
method itemBaseUrl (line 69) | protected String itemBaseUrl() {
FILE: apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/controller/AppControllerTest.java
class AppControllerTest (line 34) | public class AppControllerTest extends AbstractControllerTest {
method getBaseAppUrl (line 39) | private String getBaseAppUrl() {
method testCheckIfAppIdUnique (line 43) | @Test
method testCreate (line 62) | @Test
method testCreateTwice (line 78) | @Test
method testFind (line 101) | @Test
method testFindNotExist (line 113) | @Test(expected = HttpClientErrorException.class)
method testDelete (line 119) | @Test
method shouldFailedWhenAppIdIsInvalid (line 132) | @Test
method generateSampleDTOData (line 147) | private AppDTO generateSampleDTOData() {
FILE: apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/controller/AppNamespaceControllerTest.java
class AppNamespaceControllerTest (line 28) | public class AppNamespaceControllerTest extends AbstractControllerTest {
method testCreate (line 33) | @Test
FILE: apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/controller/ClusterControllerTest.java
class ClusterControllerTest (line 35) | public class ClusterControllerTest extends AbstractControllerTest {
method testDeleteDefaultFail (line 43) | @Test(expected = BadRequestException.class)
method testDeleteSuccess (line 51) | @Test
method shouldFailWhenRequestBodyInvalid (line 59) | @Test
FILE: apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/controller/ControllerExceptionTest.java
class ControllerExceptionTest (line 40) | @RunWith(MockitoJUnitRunner.class)
method testFindNotExists (line 52) | @Test(expected = NotFoundException.class)
method testDeleteNotExists (line 58) | @Test(expected = NotFoundException.class)
method testFindEmpty (line 64) | @Test
method testFindByName (line 77) | @Test
method createFailed (line 85) | @Test(expected = ServiceException.class)
method generateSampleDTOData (line 96) | private AppDTO generateSampleDTOData() {
FILE: apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/controller/ControllerIntegrationExceptionTest.java
class ControllerIntegrationExceptionTest (line 42) | public class ControllerIntegrationExceptionTest extends AbstractControll...
method setUp (line 57) | @Before
method tearDown (line 64) | @After
method testCreateFailed (line 69) | @Test
method generateSampleDTOData (line 87) | private AppDTO generateSampleDTOData() {
FILE: apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/controller/InstanceConfigControllerTest.java
class InstanceConfigControllerTest (line 54) | @RunWith(MockitoJUnitRunner.class)
method setUp (line 66) | @Before
method getByRelease (line 73) | @Test
method testGetByReleaseWhenReleaseIsNotFound (line 140) | @Test(expected = NotFoundException.class)
method testGetByReleasesNotIn (line 149) | @Test
method testGetInstancesByNamespace (line 237) | @Test
method testGetInstancesByNamespaceAndInstanceAppId (line 275) | @Test
method testGetInstancesCountByNamespace (line 315) | @Test
method verifyInstance (line 332) | private void verifyInstance(Instance instance, InstanceDTO instanceDTO) {
method assembleInstance (line 341) | private Instance assembleInstance(long instanceId, String appId, Strin...
method assembleInstanceConfig (line 354) | private InstanceConfig assembleInstanceConfig(long instanceId, String ...
FILE: apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/controller/ItemControllerTest.java
class ItemControllerTest (line 44) | public class ItemControllerTest extends AbstractControllerTest {
method testCreate (line 55) | @Test
method testUpdate (line 90) | @Test
method testDelete (line 129) | @Test
method testSearch (line 159) | @Test
FILE: apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/controller/ItemSetControllerTest.java
class ItemSetControllerTest (line 40) | public class ItemSetControllerTest extends AbstractControllerTest {
method testItemSetCreated (line 45) | @Test
method testItemSetCreatedWithInvalidNamespaceId (line 80) | @Test
method testItemSetUpdated (line 115) | @Test
method testItemSetUpdatedWithInvalidNamespaceId (line 168) | @Test
method mockCreateItemChangeSets (line 217) | private ItemChangeSets mockCreateItemChangeSets(NamespaceDTO namespace...
method testItemSetDeleted (line 231) | @Test
method testItemSetDeletedWithInvalidNamespaceId (line 282) | @Test
method itemSetBaseUrl (line 328) | private String itemSetBaseUrl() {
FILE: apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/controller/NamespaceControllerTest.java
class NamespaceControllerTest (line 31) | public class NamespaceControllerTest extends AbstractControllerTest {
method create (line 32) | @Test
FILE: apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/controller/ReleaseControllerTest.java
class ReleaseControllerTest (line 51) | public class ReleaseControllerTest extends AbstractControllerTest {
method testReleaseBuild (line 57) | @Test
method testMessageSendAfterBuildRelease (line 109) | @Test
FILE: apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/controller/ServerConfigControllerTest.java
class ServerConfigControllerTest (line 31) | class ServerConfigControllerTest extends AbstractControllerTest {
method findAllServerConfig (line 33) | @Test
method createOrUpdatePortalDBConfig (line 46) | @Test
FILE: apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/controller/TestWebSecurityConfig.java
class TestWebSecurityConfig (line 26) | @Configuration
method testSecurityFilterChain (line 30) | @Bean
FILE: apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/filter/AdminServiceAuthenticationFilterTest.java
class AdminServiceAuthenticationFilterTest (line 38) | @RunWith(MockitoJUnitRunner.class)
method setUp (line 49) | @Before
method initVariables (line 55) | private void initVariables() {
method testWithAccessControlDisabled (line 61) | @Test
method testWithAccessControlEnabledWithTokenSpecifiedWithValidTokenPassed (line 74) | @Test
method testWithAccessControlEnabledWithTokenSpecifiedWithInvalidTokenPassed (line 91) | @Test
method testWithAccessControlEnabledWithTokenSpecifiedWithNoTokenPassed (line 110) | @Test
method testWithAccessControlEnabledWithMultipleTokenSpecifiedWithValidTokenPassed (line 128) | @Test
method testWithAccessControlEnabledWithNoTokenSpecifiedWithTokenPassed (line 147) | @Test
method testWithAccessControlEnabledWithNoTokenSpecifiedWithNoTokenPassed (line 163) | @Test
method testWithConfigChanged (line 179) | @Test
FILE: apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/filter/AdminServiceAuthenticationIntegrationTest.java
class AdminServiceAuthenticationIntegrationTest (line 36) | @DirtiesContext
method setUp (line 42) | @Before
method testWithAccessControlDisabledExplicitly (line 47) | @Test
method testWithAccessControlDisabledExplicitlyWithAccessToken (line 60) | @Test
method testWithAccessControlEnabledWithValidAccessToken (line 78) | @Test
method testWithAccessControlEnabledWithNoAccessToken (line 96) | @Test(expected = HttpClientErrorException.class)
method testWithAccessControlEnabledWithInValidAccessToken (line 107) | @Test(expected = HttpClientErrorException.class)
method testWithAccessControlEnabledWithNoTokenSpecified (line 123) | @Test
method doRefresh (line 142) | private void doRefresh(List<RefreshablePropertySource> propertySources) {
FILE: apollo-assembly/src/main/java/com/ctrip/framework/apollo/assembly/ApolloApplication.java
class ApolloApplication (line 36) | @SpringBootApplication(
method main (line 46) | public static void main(String[] args) throws Exception {
FILE: apollo-assembly/src/test/java/com/ctrip/framework/apollo/assembly/LocalApolloApplication.java
class LocalApolloApplication (line 33) | @SpringBootApplication(
method main (line 39) | public static void main(String[] args) throws Exception {
FILE: apollo-audit/apollo-audit-annotation/src/main/java/com/ctrip/framework/apollo/audit/annotation/OpType.java
type OpType (line 25) | public enum OpType {
FILE: apollo-audit/apollo-audit-api/src/main/java/com/ctrip/framework/apollo/audit/api/ApolloAuditLogApi.java
type ApolloAuditLogApi (line 25) | public interface ApolloAuditLogApi extends ApolloAuditLogRecordApi, Apol...
FILE: apollo-audit/apollo-audit-api/src/main/java/com/ctrip/framework/apollo/audit/api/ApolloAuditLogQueryApi.java
type ApolloAuditLogQueryApi (line 31) | public interface ApolloAuditLogQueryApi {
method queryLogs (line 40) | List<ApolloAuditLogDTO> queryLogs(int page, int size);
method queryLogsByOpName (line 52) | List<ApolloAuditLogDTO> queryLogsByOpName(String opName, Date startDat...
method queryTraceDetails (line 73) | List<ApolloAuditLogDetailsDTO> queryTraceDetails(String traceId);
method queryDataInfluencesByField (line 85) | List<ApolloAuditLogDataInfluenceDTO> queryDataInfluencesByField(String...
method searchLogByNameOrTypeOrOperator (line 96) | List<ApolloAuditLogDTO> searchLogByNameOrTypeOrOperator(String query, ...
FILE: apollo-audit/apollo-audit-api/src/main/java/com/ctrip/framework/apollo/audit/api/ApolloAuditLogRecordApi.java
type ApolloAuditLogRecordApi (line 28) | public interface ApolloAuditLogRecordApi {
method appendAuditLog (line 42) | AutoCloseable appendAuditLog(OpType type, String name);
method appendAuditLog (line 56) | AutoCloseable appendAuditLog(OpType type, String name, String descript...
method appendDataInfluence (line 69) | void appendDataInfluence(String entityName, String entityId, String fi...
method appendDataInfluences (line 83) | void appendDataInfluences(List<Object> entities, Class<?> beanDefiniti...
FILE: apollo-audit/apollo-audit-api/src/main/java/com/ctrip/framework/apollo/audit/dto/ApolloAuditLogDTO.java
class ApolloAuditLogDTO (line 21) | public class ApolloAuditLogDTO {
method getId (line 34) | public long getId() {
method setId (line 38) | public void setId(long id) {
method getTraceId (line 42) | public String getTraceId() {
method setTraceId (line 46) | public void setTraceId(String traceId) {
method getSpanId (line 50) | public String getSpanId() {
method setSpanId (line 54) | public void setSpanId(String spanId) {
method getParentSpanId (line 58) | public String getParentSpanId() {
method setParentSpanId (line 62) | public void setParentSpanId(String parentSpanId) {
method getFollowsFromSpanId (line 66) | public String getFollowsFromSpanId() {
method setFollowsFromSpanId (line 70) | public void setFollowsFromSpanId(String followsFromSpanId) {
method getOperator (line 74) | public String getOperator() {
method setOperator (line 78) | public void setOperator(String operator) {
method getOpType (line 82) | public String getOpType() {
method setOpType (line 86) | public void setOpType(String opType) {
method getOpName (line 90) | public String getOpName() {
method setOpName (line 94) | public void setOpName(String opName) {
method getDescription (line 98) | public String getDescription() {
method setDescription (line 102) | public void setDescription(String description) {
method getHappenedTime (line 106) | public Date getHappenedTime() {
method setHappenedTime (line 110) | public void setHappenedTime(Date happenedTime) {
FILE: apollo-audit/apollo-audit-api/src/main/java/com/ctrip/framework/apollo/audit/dto/ApolloAuditLogDataInfluenceDTO.java
class ApolloAuditLogDataInfluenceDTO (line 21) | public class ApolloAuditLogDataInfluenceDTO {
method getId (line 32) | public long getId() {
method setId (line 36) | public void setId(long id) {
method getSpanId (line 40) | public String getSpanId() {
method setSpanId (line 44) | public void setSpanId(String spanId) {
method getInfluenceEntityName (line 48) | public String getInfluenceEntityName() {
method setInfluenceEntityName (line 52) | public void setInfluenceEntityName(String influenceEntityName) {
method getInfluenceEntityId (line 56) | public String getInfluenceEntityId() {
method setInfluenceEntityId (line 60) | public void setInfluenceEntityId(String influenceEntityId) {
method getFieldName (line 64) | public String getFieldName() {
method setFieldName (line 68) | public void setFieldName(String fieldName) {
method getFieldOldValue (line 72) | public String getFieldOldValue() {
method setFieldOldValue (line 76) | public void setFieldOldValue(String fieldOldValue) {
method getFieldNewValue (line 80) | public String getFieldNewValue() {
method setFieldNewValue (line 84) | public void setFieldNewValue(String fieldNewValue) {
method getHappenedTime (line 88) | public Date getHappenedTime() {
method setHappenedTime (line 92) | public void setHappenedTime(Date happenedTime) {
FILE: apollo-audit/apollo-audit-api/src/main/java/com/ctrip/framework/apollo/audit/dto/ApolloAuditLogDetailsDTO.java
class ApolloAuditLogDetailsDTO (line 24) | public class ApolloAuditLogDetailsDTO {
method ApolloAuditLogDetailsDTO (line 29) | public ApolloAuditLogDetailsDTO(ApolloAuditLogDTO logDTO,
method ApolloAuditLogDetailsDTO (line 35) | public ApolloAuditLogDetailsDTO() {}
method getLogDTO (line 37) | public ApolloAuditLogDTO getLogDTO() {
method setLogDTO (line 41) | public void setLogDTO(ApolloAuditLogDTO logDTO) {
method getDataInfluenceDTOList (line 45) | public List<ApolloAuditLogDataInfluenceDTO> getDataInfluenceDTOList() {
method setDataInfluenceDTOList (line 49) | public void setDataInfluenceDTOList(List<ApolloAuditLogDataInfluenceDT...
FILE: apollo-audit/apollo-audit-api/src/main/java/com/ctrip/framework/apollo/audit/event/ApolloAuditLogDataInfluenceEvent.java
class ApolloAuditLogDataInfluenceEvent (line 19) | public class ApolloAuditLogDataInfluenceEvent {
method ApolloAuditLogDataInfluenceEvent (line 24) | public ApolloAuditLogDataInfluenceEvent(Class<?> beanDefinition, Objec...
method getBeanDefinition (line 29) | public Class<?> getBeanDefinition() {
method setBeanDefinition (line 33) | public void setBeanDefinition(Class<?> beanDefinition) {
method getEntity (line 37) | public Object getEntity() {
method setEntity (line 41) | public void setEntity(Object entity) {
FILE: apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/ApolloAuditProperties.java
class ApolloAuditProperties (line 21) | @ConfigurationProperties(prefix = "apollo.audit.log")
method isEnabled (line 26) | public boolean isEnabled() {
method setEnabled (line 30) | public void setEnabled(boolean enabled) {
FILE: apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/ApolloAuditRegistrar.java
class ApolloAuditRegistrar (line 24) | public class ApolloAuditRegistrar implements ImportBeanDefinitionRegistr...
method registerBeanDefinitions (line 26) | @Override
FILE: apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/aop/ApolloAuditSpanAspect.java
class ApolloAuditSpanAspect (line 37) | @Aspect
method ApolloAuditSpanAspect (line 42) | public ApolloAuditSpanAspect(ApolloAuditLogApi api) {
method setAuditSpan (line 46) | @Pointcut("@annotation(auditLog)")
method around (line 49) | @Around(value = "setAuditSpan(auditLog)")
method auditDataInfluenceArg (line 60) | void auditDataInfluenceArg(ProceedingJoinPoint pjp) {
method findMethod (line 93) | Method findMethod(ProceedingJoinPoint pjp) {
method parseArgAndAppend (line 108) | void parseArgAndAppend(String entityName, String fieldName, Object arg) {
FILE: apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/component/ApolloAuditHttpInterceptor.java
class ApolloAuditHttpInterceptor (line 26) | public class ApolloAuditHttpInterceptor implements ClientHttpRequestInte...
method ApolloAuditHttpInterceptor (line 30) | public ApolloAuditHttpInterceptor(ApolloAuditTraceContext traceContext) {
method intercept (line 34) | @Override
FILE: apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/component/ApolloAuditLogApiJpaImpl.java
class ApolloAuditLogApiJpaImpl (line 38) | public class ApolloAuditLogApiJpaImpl implements ApolloAuditLogApi {
method ApolloAuditLogApiJpaImpl (line 44) | public ApolloAuditLogApiJpaImpl(ApolloAuditLogService logService,
method appendAuditLog (line 52) | @Override
method appendAuditLog (line 57) | @Override
method appendDataInfluence (line 69) | @Override
method appendDataInfluences (line 97) | @Override
method queryLogs (line 124) | @Override
method queryLogsByOpName (line 129) | @Override
method queryTraceDetails (line 139) | @Override
method queryDataInfluencesByField (line 149) | @Override
method searchLogByNameOrTypeOrOperator (line 156) | @Override
FILE: apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/component/ApolloAuditLogApiNoOpImpl.java
class ApolloAuditLogApiNoOpImpl (line 28) | public class ApolloAuditLogApiNoOpImpl implements ApolloAuditLogApi {
method appendAuditLog (line 32) | @Override
method appendAuditLog (line 37) | @Override
method appendDataInfluence (line 43) | @Override
method appendDataInfluences (line 47) | @Override
method queryLogs (line 50) | @Override
method queryLogsByOpName (line 55) | @Override
method queryTraceDetails (line 61) | @Override
method queryDataInfluencesByField (line 66) | @Override
method searchLogByNameOrTypeOrOperator (line 72) | @Override
FILE: apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/constants/ApolloAuditConstants.java
type ApolloAuditConstants (line 19) | public interface ApolloAuditConstants {
FILE: apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/context/ApolloAuditScope.java
class ApolloAuditScope (line 19) | public class ApolloAuditScope implements AutoCloseable {
method ApolloAuditScope (line 27) | public ApolloAuditScope(ApolloAuditSpan activeSpan, ApolloAuditScopeMa...
method activeSpan (line 34) | public ApolloAuditSpan activeSpan() {
method close (line 38) | @Override
method getLastSpanId (line 47) | public String getLastSpanId() {
method setLastSpanId (line 51) | public void setLastSpanId(String lastSpanId) {
FILE: apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/context/ApolloAuditScopeManager.java
class ApolloAuditScopeManager (line 19) | public class ApolloAuditScopeManager {
method ApolloAuditScopeManager (line 23) | public ApolloAuditScopeManager() {}
method activate (line 25) | public ApolloAuditScope activate(ApolloAuditSpan span) {
method deactivate (line 30) | public void deactivate() {
method activeSpan (line 34) | public ApolloAuditSpan activeSpan() {
method getScope (line 38) | public ApolloAuditScope getScope() {
method setScope (line 42) | public void setScope(ApolloAuditScope scope) {
FILE: apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/context/ApolloAuditSpan.java
class ApolloAuditSpan (line 22) | public class ApolloAuditSpan {
method context (line 32) | public ApolloAuditSpanContext context() {
method finish (line 37) | public void finish() {
method log (line 41) | public void log() {}
method spanId (line 44) | public String spanId() {
method operator (line 48) | public String operator() {
method traceId (line 52) | public String traceId() {
method parentId (line 56) | public String parentId() {
method followsFromId (line 60) | public String followsFromId() {
method getOpType (line 64) | public OpType getOpType() {
method setOpType (line 68) | public void setOpType(OpType opType) {
method getOpName (line 72) | public String getOpName() {
method setOpName (line 76) | public void setOpName(String opName) {
method getDescription (line 80) | public String getDescription() {
method setDescription (line 84) | public void setDescription(String description) {
method getContext (line 88) | public ApolloAuditSpanContext getContext() {
method setContext (line 92) | public void setContext(ApolloAuditSpanContext context) {
method getStartTime (line 96) | public Date getStartTime() {
method setStartTime (line 100) | public void setStartTime(Date startTime) {
method getEndTime (line 104) | public Date getEndTime() {
method setEndTime (line 108) | public void setEndTime(Date endTime) {
FILE: apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/context/ApolloAuditSpanContext.java
class ApolloAuditSpanContext (line 19) | public class ApolloAuditSpanContext {
method ApolloAuditSpanContext (line 27) | public ApolloAuditSpanContext(String traceId, String spanId) {
method ApolloAuditSpanContext (line 32) | public ApolloAuditSpanContext(String traceId, String spanId, String op...
method getTraceId (line 41) | public String getTraceId() {
method setTraceId (line 45) | public void setTraceId(String traceId) {
method getSpanId (line 49) | public String getSpanId() {
method setSpanId (line 53) | public void setSpanId(String spanId) {
method getOperator (line 57) | public String getOperator() {
method setOperator (line 61) | public void setOperator(String operator) {
method getParentId (line 65) | public String getParentId() {
method setParentId (line 69) | public void setParentId(String parentId) {
method getFollowsFromId (line 73) | public String getFollowsFromId() {
method setFollowsFromId (line 77) | public void setFollowsFromId(String followsFromId) {
FILE: apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/context/ApolloAuditTraceContext.java
class ApolloAuditTraceContext (line 25) | public class ApolloAuditTraceContext {
method ApolloAuditTraceContext (line 29) | public ApolloAuditTraceContext(ApolloAuditOperatorSupplier operatorSup...
method tracer (line 34) | public ApolloAuditTracer tracer() {
method setTracer (line 51) | void setTracer(ApolloAuditTracer tracer) {
FILE: apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/context/ApolloAuditTracer.java
class ApolloAuditTracer (line 35) | public class ApolloAuditTracer {
method ApolloAuditTracer (line 40) | public ApolloAuditTracer(ApolloAuditScopeManager manager,
method scopeManager (line 46) | protected ApolloAuditScopeManager scopeManager() {
method inject (line 50) | public HttpRequest inject(HttpRequest request) {
method startSpan (line 71) | public ApolloAuditSpan startSpan(OpType type, String name, String desc...
method startActiveSpan (line 84) | public ApolloAuditScope startActiveSpan(OpType type, String name, Stri...
method activate (line 89) | public ApolloAuditScope activate(ApolloAuditSpan span) {
method getActiveSpanFromHttp (line 93) | private ApolloAuditSpan getActiveSpanFromHttp() {
method getActiveSpanFromContext (line 114) | private ApolloAuditSpan getActiveSpanFromContext() {
method getActiveSpan (line 118) | public ApolloAuditSpan getActiveSpan() {
method spanBuilder (line 128) | public AuditSpanBuilder spanBuilder(OpType type, String name) {
class AuditSpanBuilder (line 132) | public static class AuditSpanBuilder {
method AuditSpanBuilder (line 143) | public AuditSpanBuilder(OpType type, String name) {
method asChildOf (line 148) | public AuditSpanBuilder asChildOf(ApolloAuditSpan parent) {
method asRootSpan (line 155) | public AuditSpanBuilder asRootSpan(String operator) {
method followsFrom (line 161) | public AuditSpanBuilder followsFrom(String id) {
method description (line 166) | public AuditSpanBuilder description(String val) {
method regenerateByContext (line 171) | public ApolloAuditSpan regenerateByContext(ApolloAuditSpanContext va...
method build (line 177) | public ApolloAuditSpan build() {
FILE: apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/controller/ApolloAuditController.java
class ApolloAuditController (line 38) | @RestController
method ApolloAuditController (line 45) | public ApolloAuditController(ApolloAuditLogApi api, ApolloAuditPropert...
method getProperties (line 50) | @GetMapping("/properties")
method findAllAuditLogs (line 55) | @GetMapping("/logs")
method findTraceDetails (line 61) | @GetMapping("/trace")
method findAllAuditLogsByOpNameAndTime (line 67) | @GetMapping("/logs/opName")
method findDataInfluencesByField (line 78) | @GetMapping("/logs/dataInfluences/field")
method findAuditLogsByNameOrTypeOrOperator (line 86) | @GetMapping("/logs/by-name-or-type-or-operator")
FILE: apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/entity/ApolloAuditLog.java
class ApolloAuditLog (line 24) | @Entity
method builder (line 52) | public static Builder builder() {
method getTraceId (line 56) | public String getTraceId() {
method setTraceId (line 60) | public void setTraceId(String traceId) {
method getSpanId (line 64) | public String getSpanId() {
method setSpanId (line 68) | public void setSpanId(String spanId) {
method getParentSpanId (line 72) | public String getParentSpanId() {
method setParentSpanId (line 76) | public void setParentSpanId(String parentSpanId) {
method getFollowsFromSpanId (line 80) | public String getFollowsFromSpanId() {
method setFollowsFromSpanId (line 84) | public void setFollowsFromSpanId(String followsFromSpanId) {
method getOperator (line 88) | public String getOperator() {
method setOperator (line 92) | public void setOperator(String operator) {
method getOpType (line 96) | public String getOpType() {
method setOpType (line 100) | public void setOpType(String opType) {
method getOpName (line 104) | public String getOpName() {
method setOpName (line 108) | public void setOpName(String opName) {
method getDescription (line 112) | public String getDescription() {
method setDescription (line 116) | public void setDescription(String description) {
class Builder (line 120) | public static class Builder {
method Builder (line 124) | public Builder() {}
method traceId (line 126) | public Builder traceId(String val) {
method spanId (line 131) | public Builder spanId(String val) {
method parentSpanId (line 136) | public Builder parentSpanId(String val) {
method followsFromSpanId (line 141) | public Builder followsFromSpanId(String val) {
method operator (line 146) | public Builder operator(String val) {
method opType (line 151) | public Builder opType(String val) {
method opName (line 156) | public Builder opName(String val) {
method description (line 161) | public Builder description(String val) {
method happenedTime (line 166) | public Builder happenedTime(Date val) {
method build (line 171) | public ApolloAuditLog build() {
FILE: apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/entity/ApolloAuditLogDataInfluence.java
class ApolloAuditLogDataInfluence (line 23) | @Entity
method ApolloAuditLogDataInfluence (line 45) | public ApolloAuditLogDataInfluence() {}
method ApolloAuditLogDataInfluence (line 47) | public ApolloAuditLogDataInfluence(String spanId, String entityName, S...
method builder (line 57) | public static Builder builder() {
method getSpanId (line 61) | public String getSpanId() {
method setSpanId (line 65) | public void setSpanId(String spanId) {
method getInfluenceEntityName (line 69) | public String getInfluenceEntityName() {
method setInfluenceEntityName (line 73) | public void setInfluenceEntityName(String influenceEntityName) {
method getInfluenceEntityId (line 77) | public String getInfluenceEntityId() {
method setInfluenceEntityId (line 81) | public void setInfluenceEntityId(String influenceEntityId) {
method getFieldName (line 85) | public String getFieldName() {
method setFieldName (line 89) | public void setFieldName(String fieldName) {
method getFieldOldValue (line 93) | public String getFieldOldValue() {
method setFieldOldValue (line 97) | public void setFieldOldValue(String fieldOldValue) {
method getFieldNewValue (line 101) | public String getFieldNewValue() {
method setFieldNewValue (line 105) | public void setFieldNewValue(String fieldNewValue) {
class Builder (line 109) | public static class Builder {
method Builder (line 113) | public Builder() {}
method spanId (line 115) | public Builder spanId(String val) {
method entityId (line 120) | public Builder entityId(String val) {
method entityName (line 125) | public Builder entityName(String val) {
method fieldName (line 130) | public Builder fieldName(String val) {
method oldVal (line 135) | public Builder oldVal(String val) {
method newVal (line 140) | public Builder newVal(String val) {
method build (line 145) | public ApolloAuditLogDataInfluence build() {
FILE: apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/entity/BaseEntity.java
class BaseEntity (line 29) | @MappedSuperclass
method getId (line 55) | public long getId() {
method setId (line 59) | public void setId(long id) {
method isDeleted (line 63) | public boolean isDeleted() {
method setDeleted (line 67) | public void setDeleted(boolean deleted) {
method getDeletedAt (line 77) | public long getDeletedAt() {
method getDataChangeCreatedBy (line 81) | public String getDataChangeCreatedBy() {
method setDataChangeCreatedBy (line 85) | public void setDataChangeCreatedBy(String dataChangeCreatedBy) {
method getDataChangeCreatedTime (line 89) | public Date getDataChangeCreatedTime() {
method setDataChangeCreatedTime (line 93) | public void setDataChangeCreatedTime(Date dataChangeCreatedTime) {
method getDataChangeLastModifiedBy (line 97) | public String getDataChangeLastModifiedBy() {
method setDataChangeLastModifiedBy (line 101) | public void setDataChangeLastModifiedBy(String dataChangeLastModifiedB...
method getDataChangeLastModifiedTime (line 105) | public Date getDataChangeLastModifiedTime() {
method setDataChangeLastModifiedTime (line 109) | public void setDataChangeLastModifiedTime(Date dataChangeLastModifiedT...
method prePersist (line 113) | @PrePersist
method preUpdate (line 123) | @PreUpdate
method preRemove (line 128) | @PreRemove
FILE: apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/listener/ApolloAuditLogDataInfluenceEventListener.java
class ApolloAuditLogDataInfluenceEventListener (line 24) | public class ApolloAuditLogDataInfluenceEventListener {
method ApolloAuditLogDataInfluenceEventListener (line 28) | public ApolloAuditLogDataInfluenceEventListener(ApolloAuditLogApi api) {
method handleEvent (line 32) | @EventListener
FILE: apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/repository/ApolloAuditLogDataInfluenceRepository.java
type ApolloAuditLogDataInfluenceRepository (line 24) | public interface ApolloAuditLogDataInfluenceRepository
method findBySpanId (line 27) | List<ApolloAuditLogDataInfluence> findBySpanId(String spanId);
method findByInfluenceEntityNameAndInfluenceEntityId (line 29) | List<ApolloAuditLogDataInfluence> findByInfluenceEntityNameAndInfluenc...
method findByInfluenceEntityNameAndInfluenceEntityIdAndFieldName (line 32) | List<ApolloAuditLogDataInfluence> findByInfluenceEntityNameAndInfluenc...
FILE: apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/repository/ApolloAuditLogRepository.java
type ApolloAuditLogRepository (line 25) | public interface ApolloAuditLogRepository extends JpaRepository<ApolloAu...
method findByTraceIdOrderByDataChangeCreatedTimeDesc (line 27) | List<ApolloAuditLog> findByTraceIdOrderByDataChangeCreatedTimeDesc(Str...
method findByOpName (line 29) | List<ApolloAuditLog> findByOpName(String opName, Pageable page);
method findByOpNameAndDataChangeCreatedTimeGreaterThanEqualAndDataChangeCreatedTimeLessThanEqual (line 31) | List<ApolloAuditLog> findByOpNameAndDataChangeCreatedTimeGreaterThanEq...
method findByOpNameContainingOrOpTypeContainingOrOperatorContaining (line 34) | List<ApolloAuditLog> findByOpNameContainingOrOpTypeContainingOrOperato...
FILE: apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/service/ApolloAuditLogDataInfluenceService.java
class ApolloAuditLogDataInfluenceService (line 29) | public class ApolloAuditLogDataInfluenceService {
method ApolloAuditLogDataInfluenceService (line 33) | public ApolloAuditLogDataInfluenceService(
method save (line 38) | public ApolloAuditLogDataInfluence save(ApolloAuditLogDataInfluence da...
method findBySpanId (line 42) | public List<ApolloAuditLogDataInfluence> findBySpanId(String spanId) {
method findByEntityNameAndEntityIdAndFieldName (line 46) | public List<ApolloAuditLogDataInfluence> findByEntityNameAndEntityIdAn...
method pageSortByTime (line 53) | Pageable pageSortByTime(int page, int size) {
FILE: apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/service/ApolloAuditLogService.java
class ApolloAuditLogService (line 30) | public class ApolloAuditLogService {
method ApolloAuditLogService (line 34) | public ApolloAuditLogService(ApolloAuditLogRepository logRepository) {
method save (line 38) | public ApolloAuditLog save(ApolloAuditLog auditLog) {
method logSpan (line 42) | public void logSpan(ApolloAuditSpan span) {
method findByTraceId (line 52) | public List<ApolloAuditLog> findByTraceId(String traceId) {
method findAll (line 56) | public List<ApolloAuditLog> findAll(int page, int size) {
method findByOpName (line 61) | public List<ApolloAuditLog> findByOpName(String opName, int page, int ...
method findByOpNameAndTime (line 66) | public List<ApolloAuditLog> findByOpNameAndTime(String opName, Date st...
method searchLogByNameOrTypeOrOperator (line 74) | public List<ApolloAuditLog> searchLogByNameOrTypeOrOperator(String que...
method pageSortByTime (line 80) | Pageable pageSortByTime(int page, int size) {
FILE: apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/spi/ApolloAuditLogQueryApiPreAuthorizer.java
type ApolloAuditLogQueryApiPreAuthorizer (line 19) | public interface ApolloAuditLogQueryApiPreAuthorizer {
method hasQueryPermission (line 21) | boolean hasQueryPermission();
FILE: apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/spi/ApolloAuditOperatorSupplier.java
type ApolloAuditOperatorSupplier (line 19) | public interface ApolloAuditOperatorSupplier {
method getOperator (line 21) | String getOperator();
FILE: apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/spi/defaultimpl/ApolloAuditLogQueryApiDefaultPreAuthorizer.java
class ApolloAuditLogQueryApiDefaultPreAuthorizer (line 21) | public class ApolloAuditLogQueryApiDefaultPreAuthorizer
method hasQueryPermission (line 24) | @Override
FILE: apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/spi/defaultimpl/ApolloAuditOperatorDefaultSupplier.java
class ApolloAuditOperatorDefaultSupplier (line 26) | public class ApolloAuditOperatorDefaultSupplier implements ApolloAuditOp...
method getOperator (line 28) | @Override
FILE: apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/util/ApolloAuditUtil.java
class ApolloAuditUtil (line 35) | public class ApolloAuditUtil {
method generateId (line 37) | public static String generateId() {
method getAnnotatedFields (line 41) | public static List<Field> getAnnotatedFields(Class<? extends Annotatio...
method toList (line 47) | public static List<Object> toList(Object obj) {
method getApolloAuditLogTableName (line 56) | public static String getApolloAuditLogTableName(Class<?> clazz) {
method getPersistenceIdFieldByAnnotation (line 62) | public static Field getPersistenceIdFieldByAnnotation(Class<?> clazz) {
method logToDTO (line 76) | public static ApolloAuditLogDTO logToDTO(ApolloAuditLog auditLog) {
method dataInfluenceToDTO (line 91) | public static ApolloAuditLogDataInfluenceDTO dataInfluenceToDTO(
method logListToDTOList (line 105) | public static List<ApolloAuditLogDTO> logListToDTOList(List<ApolloAudi...
method dataInfluenceListToDTOList (line 113) | public static List<ApolloAuditLogDataInfluenceDTO> dataInfluenceListTo...
FILE: apollo-audit/apollo-audit-impl/src/test/java/com/ctrip/framework/apollo/audit/MockBeanFactory.java
class MockBeanFactory (line 27) | public class MockBeanFactory {
method mockAuditLogDTO (line 29) | public static ApolloAuditLogDTO mockAuditLogDTO() {
method mockAuditLogDTOListByLength (line 33) | public static List<ApolloAuditLogDTO> mockAuditLogDTOListByLength(int ...
method mockAuditLog (line 41) | public static ApolloAuditLog mockAuditLog() {
method mockAuditLogListByLength (line 45) | public static List<ApolloAuditLog> mockAuditLogListByLength(int length) {
method mockTraceDetailsDTOListByLength (line 53) | public static List<ApolloAuditLogDetailsDTO> mockTraceDetailsDTOListBy...
method mockDataInfluenceDTO (line 63) | public static ApolloAuditLogDataInfluenceDTO mockDataInfluenceDTO() {
method mockDataInfluenceDTOListByLength (line 67) | public static List<ApolloAuditLogDataInfluenceDTO> mockDataInfluenceDT...
method mockDataInfluence (line 75) | public static ApolloAuditLogDataInfluence mockDataInfluence() {
method mockDataInfluenceListByLength (line 79) | public static List<ApolloAuditLogDataInfluence> mockDataInfluenceListB...
method mockDataInfluenceEntity (line 87) | public static MockDataInfluenceEntity mockDataInfluenceEntity() {
method mockDataInfluenceEntityListByLength (line 91) | public static List<Object> mockDataInfluenceEntityListByLength(int len...
FILE: apollo-audit/apollo-audit-impl/src/test/java/com/ctrip/framework/apollo/audit/MockDataInfluenceEntity.java
class MockDataInfluenceEntity (line 23) | @ApolloAuditLogDataInfluenceTable(tableName = "MockTableName")
method getId (line 34) | public long getId() {
method setId (line 38) | public void setId(long id) {
method getMarkedAttribute (line 42) | public String getMarkedAttribute() {
method setMarkedAttribute (line 46) | public void setMarkedAttribute(String markedAttribute) {
method getUnMarkedAttribute (line 50) | public String getUnMarkedAttribute() {
method setUnMarkedAttribute (line 54) | public void setUnMarkedAttribute(String unMarkedAttribute) {
method isDeleted (line 58) | public boolean isDeleted() {
method setDeleted (line 62) | public void setDeleted(boolean deleted) {
FILE: apollo-audit/apollo-audit-impl/src/test/java/com/ctrip/framework/apollo/audit/aop/ApolloAuditSpanAspectTest.java
class ApolloAuditSpanAspectTest (line 48) | @SpringBootTest
method testAround (line 58) | @Test
method testAuditDataInfluenceArg (line 81) | @Test
method testAuditDataInfluenceArgCaseFindMethodReturnNull (line 94) | @Test
method testFindMethod (line 106) | @Test
method testParseArgAndAppendCaseNullName (line 125) | @Test
method testParseArgAndAppendCaseCollectionTypeArg (line 132) | @Test
method testParseArgAndAppendCaseNormalTypeArg (line 146) | @Test
class MockAuditClass (line 160) | public class MockAuditClass {
method mockAuditMethod (line 162) | public void mockAuditMethod(
method mockAuditMethod (line 167) | public void mockAuditMethod(Object val2) {}
FILE: apollo-audit/apollo-audit-impl/src/test/java/com/ctrip/framework/apollo/audit/component/ApolloAuditHttpInterceptorTest.java
class ApolloAuditHttpInterceptorTest (line 31) | @SpringBootTest
method testInterceptor (line 41) | @Test
method testInterceptorCaseNoTracer (line 57) | @Test
FILE: apollo-audit/apollo-audit-impl/src/test/java/com/ctrip/framework/apollo/audit/component/ApolloAuditLogApiJpaImplTest.java
class ApolloAuditLogApiJpaImplTest (line 52) | @SpringBootTest
method beforeEach (line 91) | @BeforeEach
method testAppendAuditLog (line 97) | @Test
method testAppendDataInfluenceCaseCreateOrUpdate (line 124) | @Test
method testAppendDataInfluenceCaseDelete (line 146) | @Test
method testAppendDataInfluenceCaseTracerIsNull (line 168) | @Test
method testAppendDataInfluenceCaseActiveSpanIsNull (line 175) | @Test
method testAppendDataInfluences (line 183) | @Test
method testAppendDataInfluencesCaseWrongBeanDefinition (line 192) | @Test
method testAppendDataInfluencesCaseIncompleteConditions (line 202) | @Test
method testQueryLogs (line 214) | @Test
method testQueryLogsByOpNameCaseDateIsNull (line 226) | @Test
method testQueryLogsByOpName (line 243) | @Test
method testQueryTraceDetails (line 260) | @Test
method testQueryDataInfluencesByField (line 282) | @Test
FILE: apollo-audit/apollo-audit-impl/src/test/java/com/ctrip/framework/apollo/audit/component/ApolloAuditScopeManagerTest.java
class ApolloAuditScopeManagerTest (line 32) | @SpringBootTest
method testActivate (line 39) | @Test
FILE: apollo-audit/apollo-audit-impl/src/test/java/com/ctrip/framework/apollo/audit/context/ApolloAuditTraceContextTest.java
class ApolloAuditTraceContextTest (line 38) | @SpringBootTest
method beforeEach (line 48) | @BeforeEach
method testGetTracerNotInRequestThread (line 55) | @Test
method testGetTracerCaseNoTracerExistsInRequestThreads (line 61) | @Test
method testGetTracerInRequestThreads (line 71) | @Test
method testGetTracerInAnotherThreadButSameRequest (line 84) | @Test
method testGetTracerInAnotherRequest (line 100) | @Test
FILE: apollo-audit/apollo-audit-impl/src/test/java/com/ctrip/framework/apollo/audit/context/ApolloAuditTracerTest.java
class ApolloAuditTracerTest (line 41) | @SpringBootTest
method beforeEach (line 61) | @BeforeEach
method testInject (line 67) | @Test
method testInjectCaseActiveSpanIsNull (line 86) | @Test
method testStartSpanCaseActiveSpanExistsAndNoFollowsFrom (line 103) | @Test
method testStartSpanCaseActiveSpanExistsAndHasFollowsFrom (line 130) | @Test
method testStartSpanCaseNoActiveSpanExists (line 158) | @Test
method testStartActiveSpan (line 181) | @Test
method testGetActiveSpanFromContext (line 194) | @Test
method testGetActiveSpanFromHttpRequestCaseNotInRequestThread (line 204) | @Test
method testGetActiveSpanFromHttpRequestCaseInRequestThread (line 215) | @Test
FILE: apollo-audit/apollo-audit-impl/src/test/java/com/ctrip/framework/apollo/audit/controller/ApolloAuditControllerTest.java
class ApolloAuditControllerTest (line 39) | @WebMvcTest
method testFindAllAuditLogs (line 54) | @Test
method testFindTraceDetails (line 72) | @Test
method testFindAllAuditLogsByOpNameAndTime (line 92) | @Test
method testFindDataInfluencesByField (line 121) | @Test
FILE: apollo-audit/apollo-audit-impl/src/test/java/com/ctrip/framework/apollo/audit/spi/ApolloAuditOperatorSupplierTest.java
class ApolloAuditOperatorSupplierTest (line 36) | @SpringBootTest
method setUp (line 48) | @BeforeEach
method testGetOperatorCaseActiveSpanExist (line 55) | @Test
method testGetOperatorCaseActiveSpanNotExist (line 67) | @Test
FILE: apollo-audit/apollo-audit-spring-boot-starter/src/main/java/com/ctrip/framework/apollo/audit/configuration/ApolloAuditAutoConfiguration.java
class ApolloAuditAutoConfiguration (line 45) | @Configuration
method ApolloAuditAutoConfiguration (line 55) | public ApolloAuditAutoConfiguration(ApolloAuditProperties apolloAuditP...
method apolloAuditLogDataInfluenceService (line 60) | @Bean
method apolloAuditLogService (line 66) | @Bean
method apolloAuditLogOperatorSupplier (line 71) | @Bean
method apolloAuditTraceContext (line 77) | @Bean
method apolloAuditLogApi (line 83) | @Bean
method apolloAuditSpanAspect (line 90) | @Bean
method apolloAuditHttpInterceptor (line 95) | @Bean
method apolloAuditLogQueryApiPreAuthorizer (line 101) | @Bean(name = "apolloAuditLogQueryApiPreAuthorizer")
method apolloAuditController (line 107) | @Bean
method apolloAuditLogDataInfluenceEventListener (line 113) | @Bean
FILE: apollo-audit/apollo-audit-spring-boot-starter/src/main/java/com/ctrip/framework/apollo/audit/configuration/ApolloAuditNoOpAutoConfiguration.java
class ApolloAuditNoOpAutoConfiguration (line 35) | @Configuration
method ApolloAuditNoOpAutoConfiguration (line 43) | public ApolloAuditNoOpAutoConfiguration(ApolloAuditProperties apolloAu...
method apolloAuditLogApi (line 47) | @Bean
method apolloAuditLogOperatorSupplier (line 53) | @Bean
method apolloAuditTraceContext (line 59) | @Bean
method apolloAuditLogHttpInterceptor (line 65) | @Bean
method apolloAuditLogQueryApiPreAuthorizer (line 72) | @Bean(name = "apolloAuditLogQueryApiPreAuthorizer")
method apolloAuditController (line 78) | @Bean
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/ApolloBizAssemblyConfiguration.java
class ApolloBizAssemblyConfiguration (line 26) | @Profile("assembly")
method dataSourceProperties (line 30) | @Primary
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/ApolloBizConfig.java
class ApolloBizConfig (line 23) | @EnableAutoConfiguration
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/auth/WebSecurityConfig.java
class WebSecurityConfig (line 32) | @ConditionalOnMissingProfile({"auth", "assembly"})
method securityFilterChain (line 38) | @Bean
method userDetailsService (line 53) | @Bean
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/config/BizConfig.java
class BizConfig (line 38) | @Component
method BizConfig (line 79) | public BizConfig(final BizDBPropertySource propertySource) {
method getRefreshablePropertySources (line 83) | @Override
method eurekaServiceUrls (line 88) | public List<String> eurekaServiceUrls() {
method grayReleaseRuleScanInterval (line 97) | public int grayReleaseRuleScanInterval() {
method longPollingTimeoutInMilli (line 103) | public long longPollingTimeoutInMilli() {
method itemKeyLengthLimit (line 111) | public int itemKeyLengthLimit() {
method itemValueLengthLimit (line 116) | public int itemValueLengthLimit() {
method appIdValueLengthLimitOverride (line 121) | public Map<String, Integer> appIdValueLengthLimitOverride() {
method namespaceValueLengthLimitOverride (line 127) | public Map<Long, Integer> namespaceValueLengthLimitOverride() {
method isNamespaceNumLimitEnabled (line 133) | public boolean isNamespaceNumLimitEnabled() {
method namespaceNumLimit (line 137) | public int namespaceNumLimit() {
method namespaceNumLimitWhite (line 142) | public Set<String> namespaceNumLimitWhite() {
method isItemNumLimitEnabled (line 146) | public boolean isItemNumLimitEnabled() {
method itemNumLimit (line 150) | public int itemNumLimit() {
method isNamespaceLockSwitchOff (line 155) | public boolean isNamespaceLockSwitchOff() {
method appNamespaceCacheScanInterval (line 159) | public int appNamespaceCacheScanInterval() {
method appNamespaceCacheScanIntervalTimeUnit (line 165) | public TimeUnit appNamespaceCacheScanIntervalTimeUnit() {
method appNamespaceCacheRebuildInterval (line 169) | public int appNamespaceCacheRebuildInterval() {
method appNamespaceCacheRebuildIntervalTimeUnit (line 175) | public TimeUnit appNamespaceCacheRebuildIntervalTimeUnit() {
method accessKeyCacheScanInterval (line 179) | public int accessKeyCacheScanInterval() {
method accessKeyCacheScanIntervalTimeUnit (line 185) | public TimeUnit accessKeyCacheScanIntervalTimeUnit() {
method accessKeyCacheRebuildInterval (line 189) | public int accessKeyCacheRebuildInterval() {
method accessKeyCacheRebuildIntervalTimeUnit (line 195) | public TimeUnit accessKeyCacheRebuildIntervalTimeUnit() {
method accessKeyAuthTimeDiffTolerance (line 199) | public int accessKeyAuthTimeDiffTolerance() {
method releaseHistoryRetentionSize (line 206) | public int releaseHistoryRetentionSize() {
method releaseHistoryRetentionSizeOverride (line 212) | public Map<String, Integer> releaseHistoryRetentionSizeOverride() {
method releaseMessageCacheScanInterval (line 218) | public int releaseMessageCacheScanInterval() {
method releaseMessageCacheScanIntervalTimeUnit (line 224) | public TimeUnit releaseMessageCacheScanIntervalTimeUnit() {
method releaseMessageScanIntervalInMilli (line 228) | public int releaseMessageScanIntervalInMilli() {
method releaseMessageNotificationBatch (line 234) | public int releaseMessageNotificationBatch() {
method releaseMessageNotificationBatchIntervalInMilli (line 240) | public int releaseMessageNotificationBatchIntervalInMilli() {
method isConfigServiceCacheEnabled (line 247) | public boolean isConfigServiceCacheEnabled() {
method isConfigServiceCacheStatsEnabled (line 251) | public boolean isConfigServiceCacheStatsEnabled() {
method isConfigServiceCacheKeyIgnoreCase (line 255) | public boolean isConfigServiceCacheKeyIgnoreCase() {
method getInstanceConfigAuditMaxSize (line 259) | public int getInstanceConfigAuditMaxSize() {
method getInstanceCacheMaxSize (line 265) | public int getInstanceCacheMaxSize() {
method getInstanceConfigCacheMaxSize (line 270) | public int getInstanceConfigCacheMaxSize() {
method getInstanceConfigAuditTimeThresholdInMilli (line 276) | public long getInstanceConfigAuditTimeThresholdInMilli() {
method isConfigServiceIncrementalChangeEnabled (line 284) | public boolean isConfigServiceIncrementalChangeEnabled() {
method checkInt (line 288) | int checkInt(int value, int min, int max, int defaultValue) {
method isAdminServiceAccessControlEnabled (line 295) | public boolean isAdminServiceAccessControlEnabled() {
method getAdminServiceAccessTokens (line 299) | public String getAdminServiceAccessTokens() {
method parseOverrideConfig (line 303) | private <K, V> Map<K, V> parseOverrideConfig(String configValue, Type ...
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/AccessKey.java
class AccessKey (line 27) | @Entity
method getAppId (line 46) | public String getAppId() {
method setAppId (line 50) | public void setAppId(String appId) {
method getSecret (line 54) | public String getSecret() {
method setSecret (line 58) | public void setSecret(String secret) {
method getMode (line 62) | public int getMode() {
method setMode (line 66) | public void setMode(int mode) {
method isEnabled (line 70) | public boolean isEnabled() {
method setEnabled (line 74) | public void setEnabled(boolean enabled) {
method toString (line 78) | @Override
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/Audit.java
class Audit (line 28) | @Entity
type OP (line 35) | public enum OP {
method getComment (line 51) | public String getComment() {
method getEntityId (line 55) | public Long getEntityId() {
method getEntityName (line 59) | public String getEntityName() {
method getOpName (line 63) | public String getOpName() {
method setComment (line 67) | public void setComment(String comment) {
method setEntityId (line 71) | public void setEntityId(Long entityId) {
method setEntityName (line 75) | public void setEntityName(String entityName) {
method setOpName (line 79) | public void setOpName(String opName) {
method toString (line 83) | @Override
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/Cluster.java
class Cluster (line 31) | @Entity
method getAppId (line 50) | public String getAppId() {
method getName (line 54) | public String getName() {
method setAppId (line 58) | public void setAppId(String appId) {
method setName (line 62) | public void setName(String name) {
method getParentClusterId (line 66) | public long getParentClusterId() {
method setParentClusterId (line 70) | public void setParentClusterId(long parentClusterId) {
method getComment (line 74) | public String getComment() {
method setComment (line 78) | public void setComment(String comment) {
method toString (line 82) | @Override
method compareTo (line 88) | @Override
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/Commit.java
class Commit (line 29) | @Entity
method getChangeSets (line 52) | public String getChangeSets() {
method setChangeSets (line 56) | public void setChangeSets(String changeSets) {
method getAppId (line 60) | public String getAppId() {
method setAppId (line 64) | public void setAppId(String appId) {
method getClusterName (line 68) | public String getClusterName() {
method setClusterName (line 72) | public void setClusterName(String clusterName) {
method getNamespaceName (line 76) | public String getNamespaceName() {
method setNamespaceName (line 80) | public void setNamespaceName(String namespaceName) {
method getComment (line 84) | public String getComment() {
method setComment (line 88) | public void setComment(String comment) {
method toString (line 92) | @Override
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/GrayReleaseRule.java
class GrayReleaseRule (line 28) | @Entity
method getAppId (line 56) | public String getAppId() {
method setAppId (line 60) | public void setAppId(String appId) {
method getClusterName (line 64) | public String getClusterName() {
method setClusterName (line 68) | public void setClusterName(String clusterName) {
method getNamespaceName (line 72) | public String getNamespaceName() {
method setNamespaceName (line 76) | public void setNamespaceName(String namespaceName) {
method getBranchName (line 80) | public String getBranchName() {
method setBranchName (line 84) | public void setBranchName(String branchName) {
method getRules (line 88) | public String getRules() {
method setRules (line 92) | public void setRules(String rules) {
method getReleaseId (line 96) | public Long getReleaseId() {
method setReleaseId (line 100) | public void setReleaseId(Long releaseId) {
method getBranchStatus (line 104) | public int getBranchStatus() {
method setBranchStatus (line 108) | public void setBranchStatus(int branchStatus) {
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/Instance.java
class Instance (line 34) | @Entity
method prePersist (line 60) | @PrePersist
method getId (line 70) | public long getId() {
method setId (line 74) | public void setId(long id) {
method getAppId (line 78) | public String getAppId() {
method setAppId (line 82) | public void setAppId(String appId) {
method getClusterName (line 86) | public String getClusterName() {
method setClusterName (line 90) | public void setClusterName(String clusterName) {
method getDataCenter (line 94) | public String getDataCenter() {
method setDataCenter (line 98) | public void setDataCenter(String dataCenter) {
method getIp (line 102) | public String getIp() {
method setIp (line 106) | public void setIp(String ip) {
method getDataChangeCreatedTime (line 110) | public Date getDataChangeCreatedTime() {
method setDataChangeCreatedTime (line 114) | public void setDataChangeCreatedTime(Date dataChangeCreatedTime) {
method getDataChangeLastModifiedTime (line 118) | public Date getDataChangeLastModifiedTime() {
method setDataChangeLastModifiedTime (line 122) | public void setDataChangeLastModifiedTime(Date dataChangeLastModifiedT...
method toString (line 126) | @Override
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/InstanceConfig.java
class InstanceConfig (line 35) | @Entity
method prePersist (line 67) | @PrePersist
method preUpdate (line 77) | @PreUpdate
method getId (line 82) | public long getId() {
method setId (line 86) | public void setId(long id) {
method getInstanceId (line 90) | public long getInstanceId() {
method setInstanceId (line 94) | public void setInstanceId(long instanceId) {
method getConfigAppId (line 98) | public String getConfigAppId() {
method setConfigAppId (line 102) | public void setConfigAppId(String configAppId) {
method getConfigNamespaceName (line 106) | public String getConfigNamespaceName() {
method setConfigNamespaceName (line 110) | public void setConfigNamespaceName(String configNamespaceName) {
method getReleaseKey (line 114) | public String getReleaseKey() {
method setReleaseKey (line 118) | public void setReleaseKey(String releaseKey) {
method getDataChangeCreatedTime (line 122) | public Date getDataChangeCreatedTime() {
method setDataChangeCreatedTime (line 126) | public void setDataChangeCreatedTime(Date dataChangeCreatedTime) {
method getDataChangeLastModifiedTime (line 130) | public Date getDataChangeLastModifiedTime() {
method setDataChangeLastModifiedTime (line 134) | public void setDataChangeLastModifiedTime(Date dataChangeLastModifiedT...
method getConfigClusterName (line 138) | public String getConfigClusterName() {
method setConfigClusterName (line 142) | public void setConfigClusterName(String configClusterName) {
method getReleaseDeliveryTime (line 146) | public Date getReleaseDeliveryTime() {
method setReleaseDeliveryTime (line 150) | public void setReleaseDeliveryTime(Date releaseDeliveryTime) {
method toString (line 154) | @Override
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/Item.java
class Item (line 29) | @Entity
method getComment (line 55) | public String getComment() {
method getKey (line 59) | public String getKey() {
method getNamespaceId (line 63) | public long getNamespaceId() {
method getValue (line 67) | public String getValue() {
method setComment (line 71) | public void setComment(String comment) {
method setKey (line 75) | public void setKey(String key) {
method setNamespaceId (line 79) | public void setNamespaceId(long namespaceId) {
method setValue (line 83) | public void setValue(String value) {
method getLineNum (line 87) | public Integer getLineNum() {
method setLineNum (line 91) | public void setLineNum(Integer lineNum) {
method getType (line 95) | public int getType() {
method setType (line 99) | public void setType(int type) {
method toString (line 103) | @Override
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/JpaMapFieldJsonConverter.java
class JpaMapFieldJsonConverter (line 27) | @Converter(autoApply = true)
method convertToDatabaseColumn (line 38) | @Override
method convertToEntityAttribute (line 43) | @Override
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/Namespace.java
class Namespace (line 28) | @Entity
method Namespace (line 44) | public Namespace() {
method Namespace (line 48) | public Namespace(String appId, String clusterName, String namespaceNam...
method getAppId (line 54) | public String getAppId() {
method getClusterName (line 58) | public String getClusterName() {
method getNamespaceName (line 62) | public String getNamespaceName() {
method setAppId (line 66) | public void setAppId(String appId) {
method setClusterName (line 70) | public void setClusterName(String clusterName) {
method setNamespaceName (line 74) | public void setNamespaceName(String namespaceName) {
method toString (line 78) | @Override
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/NamespaceLock.java
class NamespaceLock (line 27) | @Entity
method getNamespaceId (line 35) | public long getNamespaceId() {
method setNamespaceId (line 39) | public void setNamespaceId(long namespaceId) {
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/Privilege.java
class Privilege (line 28) | @Entity
method getName (line 44) | public String getName() {
method getNamespaceId (line 48) | public long getNamespaceId() {
method getPrivilType (line 52) | public String getPrivilType() {
method setName (line 56) | public void setName(String name) {
method setNamespaceId (line 60) | public void setNamespaceId(long namespaceId) {
method setPrivilType (line 64) | public void setPrivilType(String privilType) {
method toString (line 68) | @Override
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/Release.java
class Release (line 32) | @Entity
method getReleaseKey (line 63) | public String getReleaseKey() {
method getAppId (line 67) | public String getAppId() {
method getClusterName (line 71) | public String getClusterName() {
method getComment (line 75) | public String getComment() {
method getConfigurations (line 79) | public String getConfigurations() {
method getNamespaceName (line 83) | public String getNamespaceName() {
method getName (line 87) | public String getName() {
method setReleaseKey (line 91) | public void setReleaseKey(String releaseKey) {
method setAppId (line 95) | public void setAppId(String appId) {
method setClusterName (line 99) | public void setClusterName(String clusterName) {
method setComment (line 103) | public void setComment(String comment) {
method setConfigurations (line 107) | public void setConfigurations(String configurations) {
method setNamespaceName (line 111) | public void setNamespaceName(String namespaceName) {
method setName (line 115) | public void setName(String name) {
method isAbandoned (line 119) | public boolean isAbandoned() {
method setAbandoned (line 123) | public void setAbandoned(boolean abandoned) {
method toString (line 127) | @Override
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/ReleaseHistory.java
class ReleaseHistory (line 31) | @Entity
method getAppId (line 61) | public String getAppId() {
method setAppId (line 65) | public void setAppId(String appId) {
method getClusterName (line 69) | public String getClusterName() {
method setClusterName (line 73) | public void setClusterName(String clusterName) {
method getNamespaceName (line 77) | public String getNamespaceName() {
method setNamespaceName (line 81) | public void setNamespaceName(String namespaceName) {
method getBranchName (line 85) | public String getBranchName() {
method setBranchName (line 89) | public void setBranchName(String branchName) {
method getReleaseId (line 93) | public long getReleaseId() {
method setReleaseId (line 97) | public void setReleaseId(long releaseId) {
method getPreviousReleaseId (line 101) | public long getPreviousReleaseId() {
method setPreviousReleaseId (line 105) | public void setPreviousReleaseId(long previousReleaseId) {
method getOperation (line 109) | public int getOperation() {
method setOperation (line 113) | public void setOperation(int operation) {
method getOperationContext (line 117) | public String getOperationContext() {
method setOperationContext (line 121) | public void setOperationContext(String operationContext) {
method toString (line 125) | @Override
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/ReleaseMessage.java
class ReleaseMessage (line 34) | @Entity
method prePersist (line 48) | @PrePersist
method ReleaseMessage (line 55) | public ReleaseMessage() {}
method ReleaseMessage (line 57) | public ReleaseMessage(String message) {
method getId (line 61) | public long getId() {
method setId (line 65) | public void setId(long id) {
method getMessage (line 69) | public String getMessage() {
method setMessage (line 73) | public void setMessage(String message) {
method toString (line 77) | @Override
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/ServerConfig.java
class ServerConfig (line 31) | @Entity
method getKey (line 49) | public String getKey() {
method setKey (line 53) | public void setKey(String key) {
method getValue (line 57) | public String getValue() {
method setValue (line 61) | public void setValue(String value) {
method getComment (line 65) | public String getComment() {
method setComment (line 69) | public void setComment(String comment) {
method getCluster (line 73) | public String getCluster() {
method setCluster (line 77) | public void setCluster(String cluster) {
method toString (line 81) | @Override
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/ServiceRegistry.java
class ServiceRegistry (line 36) | @Entity
method prePersist (line 73) | @PrePersist
method toString (line 83) | @Override
method getId (line 91) | public long getId() {
method setId (line 95) | public void setId(long id) {
method getServiceName (line 99) | public String getServiceName() {
method setServiceName (line 103) | public void setServiceName(String serviceName) {
method getUri (line 107) | public String getUri() {
method setUri (line 111) | public void setUri(String uri) {
method getCluster (line 115) | public String getCluster() {
method setCluster (line 119) | public void setCluster(String cluster) {
method getMetadata (line 123) | public Map<String, String> getMetadata() {
method setMetadata (line 127) | public void setMetadata(Map<String, String> metadata) {
method getDataChangeCreatedTime (line 131) | public LocalDateTime getDataChangeCreatedTime() {
method setDataChangeCreatedTime (line 135) | public void setDataChangeCreatedTime(LocalDateTime dataChangeCreatedTi...
method getDataChangeLastModifiedTime (line 139) | public LocalDateTime getDataChangeLastModifiedTime() {
method setDataChangeLastModifiedTime (line 143) | public void setDataChangeLastModifiedTime(LocalDateTime dataChangeLast...
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/eureka/ApolloEurekaClientConfig.java
class ApolloEurekaClientConfig (line 32) | @Component
method ApolloEurekaClientConfig (line 42) | public ApolloEurekaClientConfig(final BizConfig bizConfig, final Refre...
method getEurekaServerServiceUrls (line 50) | @Override
method listenApplicationReadyEvent (line 56) | @EventListener
method refreshEurekaClient (line 61) | private void refreshEurekaClient() {
method equals (line 69) | @Override
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/grayReleaseRule/GrayReleaseRuleCache.java
class GrayReleaseRuleCache (line 26) | public class GrayReleaseRuleCache implements Comparable<GrayReleaseRuleC...
method GrayReleaseRuleCache (line 35) | public GrayReleaseRuleCache(long ruleId, String branchName, String nam...
method getRuleId (line 46) | public long getRuleId() {
method getRuleItems (line 50) | public Set<GrayReleaseRuleItemDTO> getRuleItems() {
method getBranchName (line 54) | public String getBranchName() {
method getBranchStatus (line 58) | public int getBranchStatus() {
method getReleaseId (line 62) | public long getReleaseId() {
method getLoadVersion (line 66) | public long getLoadVersion() {
method setLoadVersion (line 70) | public void setLoadVersion(long loadVersion) {
method getNamespaceName (line 74) | public String getNamespaceName() {
method matches (line 78) | public boolean matches(String clientAppId, String clientIp, String cli...
method compareTo (line 87) | @Override
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/grayReleaseRule/GrayReleaseRulesHolder.java
class GrayReleaseRulesHolder (line 58) | public class GrayReleaseRulesHolder implements ReleaseMessageListener, I...
method GrayReleaseRulesHolder (line 76) | public GrayReleaseRulesHolder(final GrayReleaseRuleRepository grayRele...
method afterPropertiesSet (line 91) | @Override
method handleMessage (line 100) | @Override
method periodicScanRules (line 122) | private void periodicScanRules() {
method findReleaseIdFromGrayReleaseRule (line 137) | public Long findReleaseIdFromGrayReleaseRule(String clientAppId, Strin...
method hasGrayReleaseRule (line 162) | public boolean hasGrayReleaseRule(String clientAppId, String clientIp,...
method scanGrayReleaseRules (line 181) | private void scanGrayReleaseRules() {
method mergeGrayReleaseRules (line 199) | private void mergeGrayReleaseRules(List<GrayReleaseRule> grayReleaseRu...
method addCache (line 243) | private void addCache(String key, GrayReleaseRuleCache ruleCache) {
method removeCache (line 261) | private void removeCache(String key, GrayReleaseRuleCache ruleCache) {
method transformRuleToRuleCache (line 277) | private GrayReleaseRuleCache transformRuleToRuleCache(GrayReleaseRule ...
method populateDataBaseInterval (line 291) | private void populateDataBaseInterval() {
method getDatabaseScanIntervalSecond (line 295) | private int getDatabaseScanIntervalSecond() {
method getDatabaseScanTimeUnit (line 299) | private TimeUnit getDatabaseScanTimeUnit() {
method assembleGrayReleaseRuleKey (line 303) | private String assembleGrayReleaseRuleKey(String configAppId, String c...
method assembleReversedGrayReleaseRuleKey (line 308) | private String assembleReversedGrayReleaseRuleKey(String clientAppId, ...
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/message/DatabaseMessageSender.java
class DatabaseMessageSender (line 43) | @Component
method DatabaseMessageSender (line 53) | public DatabaseMessageSender(final ReleaseMessageRepository releaseMes...
method sendMessage (line 60) | @Override
method initialize (line 86) | @PostConstruct
method cleanMessage (line 104) | private void cleanMessage(Long id) {
method stopClean (line 125) | @PreDestroy
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/message/MessageSender.java
type MessageSender (line 22) | public interface MessageSender {
method sendMessage (line 23) | void sendMessage(String message, String channel);
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/message/ReleaseMessageListener.java
type ReleaseMessageListener (line 24) | public interface ReleaseMessageListener {
method handleMessage (line 25) | void handleMessage(ReleaseMessage message, String channel);
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/message/ReleaseMessageScanner.java
class ReleaseMessageScanner (line 45) | public class ReleaseMessageScanner implements InitializingBean {
method ReleaseMessageScanner (line 58) | public ReleaseMessageScanner(final BizConfig bizConfig,
method afterPropertiesSet (line 68) | @Override
method addMessageListener (line 93) | public void addMessageListener(ReleaseMessageListener listener) {
method scanMessages (line 102) | private void scanMessages() {
method scanAndSendMessages (line 114) | private boolean scanAndSendMessages() {
method scanMissingMessages (line 132) | private void scanMissingMessages() {
method growAndCleanMissingMessages (line 143) | private void growAndCleanMissingMessages() {
method recordMissingReleaseMessageIds (line 155) | private void recordMissingReleaseMessageIds(List<ReleaseMessage> messa...
method loadLargestMessageId (line 171) | private long loadLargestMessageId() {
method fireMessageScanned (line 180) | private void fireMessageScanned(Iterable<ReleaseMessage> messages) {
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/message/Topics.java
class Topics (line 22) | public class Topics {
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/registry/DatabaseDiscoveryClient.java
type DatabaseDiscoveryClient (line 25) | public interface DatabaseDiscoveryClient {
method getInstances (line 33) | List<ServiceInstance> getInstances(String serviceName);
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/registry/DatabaseDiscoveryClientAlwaysAddSelfInstanceDecoratorImpl.java
class DatabaseDiscoveryClientAlwaysAddSelfInstanceDecoratorImpl (line 31) | public class DatabaseDiscoveryClientAlwaysAddSelfInstanceDecoratorImpl
method DatabaseDiscoveryClientAlwaysAddSelfInstanceDecoratorImpl (line 38) | public DatabaseDiscoveryClientAlwaysAddSelfInstanceDecoratorImpl(Datab...
method containSelf (line 44) | static boolean containSelf(List<ServiceInstance> serviceInstances, Ser...
method getInstances (line 64) | @Override
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/registry/DatabaseDiscoveryClientImpl.java
class DatabaseDiscoveryClientImpl (line 28) | public class DatabaseDiscoveryClientImpl implements DatabaseDiscoveryCli...
method DatabaseDiscoveryClientImpl (line 35) | public DatabaseDiscoveryClientImpl(ServiceRegistryService serviceRegis...
method getInstances (line 45) | @Override
method convert (line 60) | static ApolloServiceRegistryProperties convert(ServiceRegistry service...
method filterByCluster (line 68) | static List<ServiceRegistry> filterByCluster(List<ServiceRegistry> lis...
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/registry/DatabaseDiscoveryClientMemoryCacheDecoratorImpl.java
class DatabaseDiscoveryClientMemoryCacheDecoratorImpl (line 38) | public class DatabaseDiscoveryClientMemoryCacheDecoratorImpl implements ...
method DatabaseDiscoveryClientMemoryCacheDecoratorImpl (line 52) | public DatabaseDiscoveryClientMemoryCacheDecoratorImpl(DatabaseDiscove...
method init (line 56) | public void init() {
method updateCacheTask (line 77) | void updateCacheTask() {
method readFromDatabase (line 87) | List<ServiceInstance> readFromDatabase(String serviceName) {
method getInstances (line 94) | @Override
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/registry/DatabaseServiceRegistry.java
type DatabaseServiceRegistry (line 22) | public interface DatabaseServiceRegistry {
method register (line 27) | void register(ServiceInstance instance);
method deregister (line 32) | void deregister(ServiceInstance instance);
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/registry/DatabaseServiceRegistryImpl.java
class DatabaseServiceRegistryImpl (line 22) | public class DatabaseServiceRegistryImpl implements DatabaseServiceRegis...
method DatabaseServiceRegistryImpl (line 26) | public DatabaseServiceRegistryImpl(ServiceRegistryService serviceRegis...
method convert (line 30) | static ServiceRegistry convert(ServiceInstance instance) {
method register (line 39) | @Override
method deregister (line 45) | @Override
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/registry/ServiceInstance.java
type ServiceInstance (line 25) | public interface ServiceInstance {
method getServiceName (line 30) | String getServiceName();
method getUri (line 42) | URI getUri();
method getCluster (line 51) | String getCluster();
method getMetadata (line 57) | Map<String, String> getMetadata();
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/registry/configuration/ApolloServiceDiscoveryAutoConfiguration.java
class ApolloServiceDiscoveryAutoConfiguration (line 33) | @Configuration
method wrapMemoryCache (line 39) | private static DatabaseDiscoveryClient wrapMemoryCache(DatabaseDiscove...
method wrapAlwaysAddSelfInstance (line 46) | private static DatabaseDiscoveryClient wrapAlwaysAddSelfInstance(
method databaseDiscoveryClient (line 52) | @Bean
method apolloServiceRegistryClearApplicationRunner (line 62) | @Bean
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/registry/configuration/ApolloServiceRegistryAutoConfiguration.java
class ApolloServiceRegistryAutoConfiguration (line 32) | @Configuration
method registryService (line 37) | @Bean
method databaseServiceRegistry (line 43) | @Bean
method apolloServiceRegistryHeartbeatApplicationRunner (line 50) | @Bean
method apolloServiceRegistryDeregisterApplicationListener (line 57) | @Bean
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/registry/configuration/support/ApolloServiceDiscoveryProperties.java
class ApolloServiceDiscoveryProperties (line 26) | @ConfigurationProperties(prefix = ApolloServiceDiscoveryProperties.PREFIX)
method getHealthCheckIntervalInSecond (line 45) | public long getHealthCheckIntervalInSecond() {
method setHealthCheckIntervalInSecond (line 49) | public void setHealthCheckIntervalInSecond(long healthCheckIntervalInS...
method isEnabled (line 53) | public boolean isEnabled() {
method setEnabled (line 57) | public void setEnabled(boolean enabled) {
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/registry/configuration/support/ApolloServiceRegistryClearApplicationRunner.java
class ApolloServiceRegistryClearApplicationRunner (line 35) | public class ApolloServiceRegistryClearApplicationRunner implements Appl...
method ApolloServiceRegistryClearApplicationRunner (line 48) | public ApolloServiceRegistryClearApplicationRunner(
method clearUnhealthyInstances (line 58) | void clearUnhealthyInstances() {
method run (line 71) | @Override
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/registry/configuration/support/ApolloServiceRegistryDeregisterApplicationListener.java
class ApolloServiceRegistryDeregisterApplicationListener (line 28) | public class ApolloServiceRegistryDeregisterApplicationListener
method ApolloServiceRegistryDeregisterApplicationListener (line 37) | public ApolloServiceRegistryDeregisterApplicationListener(
method onApplicationEvent (line 43) | @Override
method deregister (line 48) | private void deregister() {
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/registry/configuration/support/ApolloServiceRegistryHeartbeatApplicationRunner.java
class ApolloServiceRegistryHeartbeatApplicationRunner (line 32) | public class ApolloServiceRegistryHeartbeatApplicationRunner implements ...
method ApolloServiceRegistryHeartbeatApplicationRunner (line 46) | public ApolloServiceRegistryHeartbeatApplicationRunner(
method run (line 54) | @Override
method heartbeat (line 65) | private void heartbeat() {
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/registry/configuration/support/ApolloServiceRegistryProperties.java
class ApolloServiceRegistryProperties (line 38) | @ConfigurationProperties(prefix = ApolloServiceRegistryProperties.PREFIX)
method postConstruct (line 83) | @PostConstruct
method isEnabled (line 99) | public boolean isEnabled() {
method setEnabled (line 103) | public void setEnabled(boolean enabled) {
method getServiceName (line 107) | @Override
method getUri (line 112) | @Override
method setUri (line 121) | public void setUri(String uri) {
method setServiceName (line 125) | public void setServiceName(String serviceName) {
method getCluster (line 129) | @Override
method setCluster (line 134) | public void setCluster(String cluster) {
method getMetadata (line 138) | @Override
method setMetadata (line 143) | public void setMetadata(Map<String, String> metadata) {
method getHeartbeatIntervalInSecond (line 147) | public long getHeartbeatIntervalInSecond() {
method setHeartbeatIntervalInSecond (line 151) | public void setHeartbeatIntervalInSecond(long heartbeatIntervalInSecon...
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/AccessKeyRepository.java
type AccessKeyRepository (line 25) | public interface AccessKeyRepository extends JpaRepository<AccessKey, Lo...
method countByAppId (line 27) | long countByAppId(String appId);
method findOneByAppIdAndId (line 29) | AccessKey findOneByAppIdAndId(String appId, long id);
method findByAppId (line 31) | List<AccessKey> findByAppId(String appId);
method findFirst500ByDataChangeLastModifiedTimeGreaterThanOrderByDataChangeLastModifiedTimeAsc (line 33) | List<AccessKey> findFirst500ByDataChangeLastModifiedTimeGreaterThanOrd...
method findFirst500ByDataChangeLastModifiedTimeGreaterThanEqualAndDataChangeLastModifiedTimeLessThanOrderByDataChangeLastModifiedTimeAsc (line 36) | List<AccessKey> findFirst500ByDataChangeLastModifiedTimeGreaterThanEqu...
method findByDataChangeLastModifiedTime (line 39) | List<AccessKey> findByDataChangeLastModifiedTime(Date date);
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/AppNamespaceRepository.java
type AppNamespaceRepository (line 29) | public interface AppNamespaceRepository extends JpaRepository<AppNamespa...
method findByAppIdAndName (line 31) | AppNamespace findByAppIdAndName(String appId, String namespaceName);
method findByAppIdAndNameIn (line 33) | List<AppNamespace> findByAppIdAndNameIn(String appId, Set<String> name...
method findByNameAndIsPublicTrue (line 35) | AppNamespace findByNameAndIsPublicTrue(String namespaceName);
method findByNameInAndIsPublicTrue (line 37) | List<AppNamespace> findByNameInAndIsPublicTrue(Set<String> namespaceNa...
method findByAppIdAndIsPublic (line 39) | List<AppNamespace> findByAppIdAndIsPublic(String appId, boolean isPubl...
method findByAppIdOrderByIdAsc (line 41) | List<AppNamespace> findByAppIdOrderByIdAsc(String appId);
method findFirst500ByIdGreaterThanOrderByIdAsc (line 43) | List<AppNamespace> findFirst500ByIdGreaterThanOrderByIdAsc(long id);
method batchDeleteByAppId (line 45) | @Modifying
method delete (line 51) | @Modifying
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/AppRepository.java
type AppRepository (line 27) | public interface AppRepository extends JpaRepository<App, Long> {
method findByName (line 29) | @Query("SELECT a from App a WHERE a.name LIKE %:name%")
method findByAppId (line 32) | App findByAppId(String appId);
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/AuditRepository.java
type AuditRepository (line 27) | public interface AuditRepository extends JpaRepository<Audit, Long> {
method findByOwner (line 29) | @Query("SELECT a from Audit a WHERE a.dataChangeCreatedBy = :owner")
method findAudits (line 32) | @Query("SELECT a from Audit a WHERE a.dataChangeCreatedBy = :owner AND...
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/ClusterRepository.java
type ClusterRepository (line 26) | public interface ClusterRepository extends JpaRepository<Cluster, Long> {
method findByAppIdAndParentClusterId (line 28) | List<Cluster> findByAppIdAndParentClusterId(String appId, Long parentC...
method findByAppId (line 30) | List<Cluster> findByAppId(String appId);
method findByAppIdAndName (line 32) | Cluster findByAppIdAndName(String appId, String name);
method findByParentClusterId (line 34) | List<Cluster> findByParentClusterId(Long parentClusterId);
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/CommitRepository.java
type CommitRepository (line 29) | public interface CommitRepository extends JpaRepository<Commit, Long> {
method findByAppIdAndClusterNameAndNamespaceNameOrderByIdDesc (line 31) | List<Commit> findByAppIdAndClusterNameAndNamespaceNameOrderByIdDesc(St...
method findByAppIdAndClusterNameAndNamespaceNameAndDataChangeLastModifiedTimeGreaterThanEqualOrderByIdDesc (line 34) | List<Commit> findByAppIdAndClusterNameAndNamespaceNameAndDataChangeLas...
method batchDelete (line 38) | @Modifying
method findByAppIdAndClusterNameAndNamespaceNameAndChangeSetsLikeOrderByIdDesc (line 45) | List<Commit> findByAppIdAndClusterNameAndNamespaceNameAndChangeSetsLik...
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/GrayReleaseRuleRepository.java
type GrayReleaseRuleRepository (line 26) | public interface GrayReleaseRuleRepository extends JpaRepository<GrayRel...
method findTopByAppIdAndClusterNameAndNamespaceNameAndBranchNameOrderByIdDesc (line 28) | GrayReleaseRule findTopByAppIdAndClusterNameAndNamespaceNameAndBranchN...
method findByAppIdAndClusterNameAndNamespaceName (line 31) | List<GrayReleaseRule> findByAppIdAndClusterNameAndNamespaceName(String...
method findFirst500ByIdGreaterThanOrderByIdAsc (line 34) | List<GrayReleaseRule> findFirst500ByIdGreaterThanOrderByIdAsc(Long id);
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/InstanceConfigRepository.java
type InstanceConfigRepository (line 32) | public interface InstanceConfigRepository extends JpaRepository<Instance...
method findByInstanceIdAndConfigAppIdAndConfigNamespaceName (line 34) | InstanceConfig findByInstanceIdAndConfigAppIdAndConfigNamespaceName(lo...
method findByReleaseKeyAndDataChangeLastModifiedTimeAfter (line 37) | Page<InstanceConfig> findByReleaseKeyAndDataChangeLastModifiedTimeAfte...
method findByConfigAppIdAndConfigClusterNameAndConfigNamespaceNameAndDataChangeLastModifiedTimeAfter (line 40) | Page<InstanceConfig> findByConfigAppIdAndConfigClusterNameAndConfigNam...
method findByConfigAppIdAndConfigClusterNameAndConfigNamespaceNameAndDataChangeLastModifiedTimeAfterAndReleaseKeyNotIn (line 43) | List<InstanceConfig> findByConfigAppIdAndConfigClusterNameAndConfigNam...
method batchDelete (line 47) | @Modifying
method findInstanceIdsByNamespaceAndInstanceAppId (line 52) | @Query(
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/InstanceRepository.java
type InstanceRepository (line 23) | public interface InstanceRepository extends JpaRepository<Instance, Long> {
method findByAppIdAndClusterNameAndDataCenterAndIp (line 24) | Instance findByAppIdAndClusterNameAndDataCenterAndIp(String appId, Str...
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/ItemRepository.java
type ItemRepository (line 32) | public interface ItemRepository extends JpaRepository<Item, Long> {
method findByNamespaceIdAndKey (line 34) | Item findByNamespaceIdAndKey(Long namespaceId, String key);
method findByNamespaceIdOrderByLineNumAsc (line 36) | List<Item> findByNamespaceIdOrderByLineNumAsc(Long namespaceId);
method findByNamespaceId (line 38) | List<Item> findByNamespaceId(Long namespaceId);
method findByNamespaceIdAndDataChangeLastModifiedTimeGreaterThan (line 40) | List<Item> findByNamespaceIdAndDataChangeLastModifiedTimeGreaterThan(L...
method findByKey (line 42) | Page<Item> findByKey(String key, Pageable pageable);
method findByNamespaceId (line 44) | Page<Item> findByNamespaceId(Long namespaceId, Pageable pageable);
method findFirst1ByNamespaceIdOrderByLineNumDesc (line 46) | Item findFirst1ByNamespaceIdOrderByLineNumDesc(Long namespaceId);
method findItemsByKeyAndValueLike (line 48) | @Query("SELECT new com.ctrip.framework.apollo.common.dto.ItemInfoDTO(n...
method findItemsByKeyLike (line 54) | @Query("SELECT new com.ctrip.framework.apollo.common.dto.ItemInfoDTO(n...
method findItemsByValueLike (line 59) | @Query("SELECT new com.ctrip.framework.apollo.common.dto.ItemInfoDTO(n...
method deleteByNamespaceId (line 64) | @Modifying
method countByNamespaceIdAndFilterKeyEmpty (line 70) | @Query("select count(*) from Item where namespaceId = :namespaceId and...
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/NamespaceLockRepository.java
type NamespaceLockRepository (line 23) | public interface NamespaceLockRepository extends JpaRepository<Namespace...
method findByNamespaceId (line 25) | NamespaceLock findByNamespaceId(Long namespaceId);
method deleteByNamespaceId (line 27) | Long deleteByNamespaceId(Long namespaceId);
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/NamespaceRepository.java
type NamespaceRepository (line 29) | public interface NamespaceRepository extends JpaRepository<Namespace, Lo...
method findByAppIdAndClusterNameOrderByIdAsc (line 31) | List<Namespace> findByAppIdAndClusterNameOrderByIdAsc(String appId, St...
method findByAppIdAndClusterNameAndNamespaceName (line 33) | Namespace findByAppIdAndClusterNameAndNamespaceName(String appId, Stri...
method batchDelete (line 36) | @Modifying
method findByAppIdAndNamespaceNameOrderByIdAsc (line 42) | List<Namespace> findByAppIdAndNamespaceNameOrderByIdAsc(String appId, ...
method findByNamespaceName (line 44) | List<Namespace> findByNamespaceName(String namespaceName, Pageable page);
method findByIdIn (line 46) | List<Namespace> findByIdIn(Set<Long> namespaceIds);
method countByNamespaceNameAndAppIdNot (line 48) | int countByNamespaceNameAndAppIdNot(String namespaceName, String appId);
method countByAppIdAndClusterName (line 50) | int countByAppIdAndClusterName(String appId, String clusterName);
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/PrivilegeRepository.java
type PrivilegeRepository (line 25) | public interface PrivilegeRepository extends JpaRepository<Privilege, Lo...
method findByNamespaceId (line 27) | List<Privilege> findByNamespaceId(long namespaceId);
method findByNamespaceIdAndPrivilType (line 29) | List<Privilege> findByNamespaceIdAndPrivilType(long namespaceId, Strin...
method findByNamespaceIdAndNameAndPrivilType (line 31) | Privilege findByNamespaceIdAndNameAndPrivilType(long namespaceId, Stri...
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/ReleaseHistoryRepository.java
type ReleaseHistoryRepository (line 31) | public interface ReleaseHistoryRepository extends JpaRepository<ReleaseH...
method findByAppIdAndClusterNameAndNamespaceNameOrderByIdDesc (line 32) | Page<ReleaseHistory> findByAppIdAndClusterNameAndNamespaceNameOrderByI...
method findByReleaseIdAndOperationOrderByIdDesc (line 35) | Page<ReleaseHistory> findByReleaseIdAndOperationOrderByIdDesc(long rel...
method findByPreviousReleaseIdAndOperationOrderByIdDesc (line 38) | Page<ReleaseHistory> findByPreviousReleaseIdAndOperationOrderByIdDesc(...
method findByReleaseIdAndOperationInOrderByIdDesc (line 41) | Page<ReleaseHistory> findByReleaseIdAndOperationInOrderByIdDesc(long r...
method batchDelete (line 44) | @Modifying
method findByAppIdAndClusterNameAndNamespaceNameAndBranchNameOrderByIdDesc (line 51) | Page<ReleaseHistory> findByAppIdAndClusterNameAndNamespaceNameAndBranc...
method findFirst100ByAppIdAndClusterNameAndNamespaceNameAndBranchNameAndIdLessThanEqualOrderByIdAsc (line 54) | List<ReleaseHistory> findFirst100ByAppIdAndClusterNameAndNamespaceName...
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/ReleaseMessageRepository.java
type ReleaseMessageRepository (line 31) | public interface ReleaseMessageRepository extends JpaRepository<ReleaseM...
method findFirst500ByIdGreaterThanOrderByIdAsc (line 32) | List<ReleaseMessage> findFirst500ByIdGreaterThanOrderByIdAsc(Long id);
method findTopByOrderByIdDesc (line 34) | ReleaseMessage findTopByOrderByIdDesc();
method findTopByMessageInOrderByIdDesc (line 36) | ReleaseMessage findTopByMessageInOrderByIdDesc(Collection<String> mess...
method findFirst100ByMessageAndIdLessThanOrderByIdAsc (line 38) | List<ReleaseMessage> findFirst100ByMessageAndIdLessThanOrderByIdAsc(St...
method findLatestReleaseMessagesGroupByMessages (line 40) | @Query("select message, max(id) as id from ReleaseMessage where messag...
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/ReleaseRepository.java
type ReleaseRepository (line 33) | public interface ReleaseRepository extends JpaRepository<Release, Long> {
method findFirstByAppIdAndClusterNameAndNamespaceNameAndIsAbandonedFalseOrderByIdDesc (line 35) | Release findFirstByAppIdAndClusterNameAndNamespaceNameAndIsAbandonedFa...
method findByIdAndIsAbandonedFalse (line 39) | Release findByIdAndIsAbandonedFalse(long id);
method findByReleaseKey (line 41) | Release findByReleaseKey(String releaseKey);
method findByAppIdAndClusterNameAndNamespaceNameOrderByIdDesc (line 43) | List<Release> findByAppIdAndClusterNameAndNamespaceNameOrderByIdDesc(S...
method findByAppIdAndClusterNameAndNamespaceNameAndIsAbandonedFalseOrderByIdDesc (line 46) | List<Release> findByAppIdAndClusterNameAndNamespaceNameAndIsAbandonedF...
method findByAppIdAndClusterNameAndNamespaceNameAndIsAbandonedFalseAndIdBetweenOrderByIdDesc (line 49) | List<Release> findByAppIdAndClusterNameAndNamespaceNameAndIsAbandonedF...
method findByReleaseKeyIn (line 52) | List<Release> findByReleaseKeyIn(Set<String> releaseKeys);
method findByIdIn (line 54) | List<Release> findByIdIn(Set<Long> releaseIds);
method batchDelete (line 56) | @Modifying
method findByAppIdAndClusterNameAndNamespaceNameOrderByIdAsc (line 64) | List<Release> findByAppIdAndClusterNameAndNamespaceNameOrderByIdAsc(St...
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/ServerConfigRepository.java
type ServerConfigRepository (line 26) | public interface ServerConfigRepository extends JpaRepository<ServerConf...
method findTopByKeyAndCluster (line 27) | ServerConfig findTopByKeyAndCluster(String key, String cluster);
method findByKey (line 29) | ServerConfig findByKey(String key);
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/ServiceRegistryRepository.java
type ServiceRegistryRepository (line 24) | public interface ServiceRegistryRepository extends JpaRepository<Service...
method findByServiceNameAndDataChangeLastModifiedTimeGreaterThan (line 26) | List<ServiceRegistry> findByServiceNameAndDataChangeLastModifiedTimeGr...
method findByServiceNameAndUri (line 29) | ServiceRegistry findByServiceNameAndUri(String serviceName, String uri);
method deleteByDataChangeLastModifiedTimeLessThan (line 31) | List<ServiceRegistry> deleteByDataChangeLastModifiedTimeLessThan(Local...
method deleteByServiceNameAndUri (line 33) | int deleteByServiceNameAndUri(String serviceName, String uri);
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/AccessKeyService.java
class AccessKeyService (line 30) | @Service
method AccessKeyService (line 38) | public AccessKeyService(AccessKeyRepository accessKeyRepository, Audit...
method findByAppId (line 43) | public List<AccessKey> findByAppId(String appId) {
method create (line 47) | @Transactional
method update (line 65) | @Transactional
method delete (line 84) | @Transactional
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/AdminService.java
class AdminService (line 31) | @Service
method AdminService (line 40) | public AdminService(final AppService appService,
method createNewApp (line 49) | @Transactional
method deleteApp (line 65) | @Transactional
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/AppNamespaceService.java
class AppNamespaceService (line 44) | @Service
method AppNamespaceService (line 54) | public AppNamespaceService(final AppNamespaceRepository appNamespaceRe...
method isAppNamespaceNameUnique (line 63) | public boolean isAppNamespaceNameUnique(String appId, String namespace...
method findPublicNamespaceByName (line 69) | public AppNamespace findPublicNamespaceByName(String namespaceName) {
method findByAppId (line 74) | public List<AppNamespace> findByAppId(String appId) {
method findPublicNamespacesByNames (line 78) | public List<AppNamespace> findPublicNamespacesByNames(Set<String> name...
method findPrivateAppNamespace (line 86) | public List<AppNamespace> findPrivateAppNamespace(String appId) {
method findOne (line 90) | public AppNamespace findOne(String appId, String namespaceName) {
method findByAppIdAndNamespaces (line 96) | public List<AppNamespace> findByAppIdAndNamespaces(String appId, Set<S...
method createDefaultAppNamespace (line 104) | @Transactional
method createAppNamespace (line 123) | @Transactional
method update (line 143) | public AppNamespace update(AppNamespace appNamespace) {
method createNamespaceForAppNamespaceInAllCluster (line 155) | public void createNamespaceForAppNamespaceInAllCluster(String appId, S...
method batchDelete (line 178) | @Transactional
method deleteAppNamespace (line 183) | @Transactional
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/AppService.java
class AppService (line 34) | @Service
method AppService (line 40) | public AppService(final AppRepository appRepository, final AuditServic...
method isAppIdUnique (line 45) | public boolean isAppIdUnique(String appId) {
method delete (line 50) | @Transactional
method findAll (line 64) | public List<App> findAll(Pageable pageable) {
method findByName (line 69) | public List<App> findByName(String name) {
method findOne (line 73) | public App findOne(String appId) {
method save (line 77) | @Transactional
method update (line 92) | @Transactional
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/AuditService.java
class AuditService (line 26) | @Service
method AuditService (line 31) | public AuditService(final AuditRepository auditRepository) {
method findByOwner (line 35) | List<Audit> findByOwner(String owner) {
method find (line 39) | List<Audit> find(String owner, String entity, String op) {
method audit (line 43) | @Transactional
method audit (line 53) | @Transactional
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/BizDBPropertySource.java
class BizDBPropertySource (line 47) | @Component
method BizDBPropertySource (line 58) | @Autowired
method runSqlScript (line 67) | @PostConstruct
method getCurrentDataCenter (line 77) | String getCurrentDataCenter() {
method refresh (line 81) | @Override
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/ClusterService.java
class ClusterService (line 35) | @Service
method ClusterService (line 42) | public ClusterService(final ClusterRepository clusterRepository, final...
method isClusterNameUnique (line 50) | public boolean isClusterNameUnique(String appId, String clusterName) {
method findOne (line 56) | public Cluster findOne(String appId, String name) {
method findOne (line 60) | public Cluster findOne(long clusterId) {
method findParentClusters (line 64) | public List<Cluster> findParentClusters(String appId) {
method saveWithInstanceOfAppNamespaces (line 79) | @Transactional
method saveWithoutInstanceOfAppNamespaces (line 90) | @Transactional
method delete (line 104) | @Transactional
method update (line 121) | @Transactional
method createDefaultCluster (line 134) | @Transactional
method findChildClusters (line 149) | public List<Cluster> findChildClusters(String appId, String parentClus...
method findClusters (line 158) | public List<Cluster> findClusters(String appId) {
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/CommitService.java
class CommitService (line 28) | @Service
method CommitService (line 33) | public CommitService(final CommitRepository commitRepository) {
method createCommit (line 37) | public void createCommit(String appId, String clusterName, String name...
method find (line 51) | public List<Commit> find(String appId, String clusterName, String name...
method find (line 56) | public List<Commit> find(String appId, String clusterName, String name...
method findByKey (line 63) | public List<Commit> findByKey(String appId, String clusterName, String...
method batchDelete (line 70) | @Transactional
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/InstanceService.java
class InstanceService (line 43) | @Service
method InstanceService (line 48) | public InstanceService(final InstanceRepository instanceRepository,
method findInstance (line 54) | public Instance findInstance(String appId, String clusterName, String ...
method findInstancesByIds (line 59) | public List<Instance> findInstancesByIds(Set<Long> instanceIds) {
method createInstance (line 64) | @Transactional
method findInstanceConfig (line 71) | public InstanceConfig findInstanceConfig(long instanceId, String confi...
method findActiveInstanceConfigsByReleaseKey (line 77) | public Page<InstanceConfig> findActiveInstanceConfigsByReleaseKey(Stri...
method findInstancesByNamespace (line 83) | public Page<Instance> findInstancesByNamespace(String appId, String cl...
method findInstancesByNamespaceAndInstanceAppId (line 99) | public Page<Instance> findInstancesByNamespaceAndInstanceAppId(String ...
method findInstanceConfigsByNamespaceWithReleaseKeysNotIn (line 115) | public List<InstanceConfig> findInstanceConfigsByNamespaceWithReleaseK...
method getValidInstanceConfigDate (line 132) | private Date getValidInstanceConfigDate() {
method createInstanceConfig (line 139) | @Transactional
method updateInstanceConfig (line 146) | @Transactional
method batchDeleteInstanceConfig (line 162) | @Transactional
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/ItemService.java
class ItemService (line 41) | @Service
method ItemService (line 51) | public ItemService(final ItemRepository itemRepository,
method delete (line 61) | @Transactional
method batchDelete (line 76) | @Transactional
method findOne (line 82) | public Item findOne(String appId, String clusterName, String namespace...
method findLastOne (line 88) | public Item findLastOne(String appId, String clusterName, String names...
method findLastOne (line 94) | public Item findLastOne(long namespaceId) {
method findOne (line 98) | public Item findOne(long itemId) {
method findItemsWithoutOrdered (line 102) | public List<Item> findItemsWithoutOrdered(Long namespaceId) {
method findItemsWithoutOrdered (line 110) | public List<Item> findItemsWithoutOrdered(String appId, String cluster...
method findItemsWithOrdered (line 119) | public List<Item> findItemsWithOrdered(Long namespaceId) {
method findItemsWithOrdered (line 127) | public List<Item> findItemsWithOrdered(String appId, String clusterNam...
method findItemsModifiedAfterDate (line 135) | public List<Item> findItemsModifiedAfterDate(long namespaceId, Date da...
method findNonEmptyItemCount (line 140) | public int findNonEmptyItemCount(long namespaceId) {
method findItemsByKey (line 144) | public Page<Item> findItemsByKey(String key, Pageable pageable) {
method findItemsByNamespace (line 148) | public Page<Item> findItemsByNamespace(String appId, String clusterNam...
method getItemInfoBySearch (line 155) | public Page<ItemInfoDTO> getItemInfoBySearch(String key, String value,...
method save (line 167) | @Transactional
method saveComment (line 189) | @Transactional
method update (line 209) | @Transactional
method checkItemValueLength (line 223) | private boolean checkItemValueLength(long namespaceId, String value) {
method getGrayNamespaceItemValueLengthLimit (line 239) | private int getGrayNamespaceItemValueLengthLimit(Namespace grayNamespace,
method checkItemKeyLength (line 251) | private boolean checkItemKeyLength(String key) {
method checkItemType (line 258) | private boolean checkItemType(int type) {
method getItemValueLengthLimit (line 265) | private int getItemValueLengthLimit(Namespace namespace) {
method findNamespaceByAppIdAndClusterNameAndNamespaceName (line 281) | private Namespace findNamespaceByAppIdAndClusterNameAndNamespaceName(S...
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/ItemSetService.java
class ItemSetService (line 36) | @Service
method ItemSetService (line 45) | public ItemSetService(final AuditService auditService, final CommitSer...
method updateSet (line 55) | @Transactional
method updateSet (line 61) | @Transactional
method doDeleteItems (line 112) | private void doDeleteItems(List<ItemDTO> toDeleteItems, Namespace name...
method doUpdateItems (line 125) | private void doUpdateItems(List<ItemDTO> toUpdateItems, Namespace name...
method doCreateItems (line 152) | private void doCreateItems(List<ItemDTO> toCreateItems, Namespace name...
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/NamespaceBranchService.java
class NamespaceBranchService (line 38) | @Service
method NamespaceBranchService (line 48) | public NamespaceBranchService(final AuditService auditService,
method createBranch (line 60) | @Transactional
method findBranch (line 84) | public Namespace findBranch(String appId, String parentClusterName, St...
method findBranchGrayRules (line 88) | public GrayReleaseRule findBranchGrayRules(String appId, String cluste...
method updateBranchGrayRules (line 95) | @Transactional
method doUpdateBranchGrayRules (line 102) | private void doUpdateBranchGrayRules(String appId, String clusterName,...
method updateRulesReleaseId (line 137) | @Transactional
method deleteBranch (line 166) | @Transactional
method createChildCluster (line 205) | private Cluster createChildCluster(String appId, Cluster parentCluster...
method createNamespaceBranch (line 220) | private Namespace createNamespaceBranch(String appId, String clusterNa...
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/NamespaceLockService.java
class NamespaceLockService (line 24) | @Service
method NamespaceLockService (line 29) | public NamespaceLockService(final NamespaceLockRepository namespaceLoc...
method findLock (line 33) | public NamespaceLock findLock(Long namespaceId) {
method tryLock (line 38) | @Transactional
method unlock (line 43) | @Transactional
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/NamespaceService.java
class NamespaceService (line 55) | @Service
method NamespaceService (line 74) | public NamespaceService(final ReleaseHistoryService releaseHistoryServ...
method findOne (line 98) | public Namespace findOne(Long namespaceId) {
method findOne (line 102) | public Namespace findOne(String appId, String clusterName, String name...
method findByItem (line 110) | public Page<Namespace> findByItem(String itemKey, Pageable pageable) {
method findPublicNamespaceForAssociatedNamespace (line 122) | public Namespace findPublicNamespaceForAssociatedNamespace(String clus...
method findPublicAppNamespaceAllNamespaces (line 175) | public List<Namespace> findPublicAppNamespaceAllNamespaces(String name...
method filterChildNamespace (line 188) | private List<Namespace> filterChildNamespace(List<Namespace> namespace...
method countPublicAppNamespaceAssociatedNamespaces (line 204) | public int countPublicAppNamespaceAssociatedNamespaces(String publicNa...
method findNamespaces (line 217) | public List<Namespace> findNamespaces(String appId, String clusterName) {
method findByAppIdAndNamespaceName (line 226) | public List<Namespace> findByAppIdAndNamespaceName(String appId, Strin...
method findChildNamespace (line 230) | public Namespace findChildNamespace(String appId, String parentCluster...
method findChildNamespace (line 254) | public Namespace findChildNamespace(Namespace parentNamespace) {
method findParentNamespace (line 263) | public Namespace findParentNamespace(String appId, String clusterName,...
method findParentNamespace (line 267) | public Namespace findParentNamespace(Namespace namespace) {
method isChildNamespace (line 280) | public boolean isChildNamespace(String appId, String clusterName, Stri...
method isChildNamespace (line 284) | public boolean isChildNamespace(Namespace namespace) {
method isNamespaceUnique (line 288) | public boolean isNamespaceUnique(String appId, String cluster, String ...
method deleteByAppIdAndClusterName (line 296) | @Transactional
method deleteNamespace (line 308) | @Transactional
method save (line 356) | @Transactional
method update (line 382) | @Transactional
method instanceOfAppNamespaces (line 395) | @Transactional
method namespacePublishInfo (line 413) | public Map<String, Boolean> namespacePublishInfo(String appId) {
method isNamespaceNotPublished (line 440) | private boolean isNamespaceNotPublished(Namespace namespace) {
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/ReleaseHistoryService.java
class ReleaseHistoryService (line 58) | @Service
method ReleaseHistoryService (line 75) | public ReleaseHistoryService(final ReleaseHistoryRepository releaseHis...
method initialize (line 85) | @PostConstruct
method findReleaseHistoriesByNamespace (line 104) | public Page<ReleaseHistory> findReleaseHistoriesByNamespace(String app...
method findByReleaseIdAndOperation (line 110) | public Page<ReleaseHistory> findByReleaseIdAndOperation(long releaseId...
method findByPreviousReleaseIdAndOperation (line 116) | public Page<ReleaseHistory> findByPreviousReleaseIdAndOperation(long p...
method findByReleaseIdAndOperationInOrderByIdDesc (line 122) | public Page<ReleaseHistory> findByReleaseIdAndOperationInOrderByIdDesc...
method createReleaseHistory (line 128) | @Transactional
method batchDelete (line 164) | @Transactional
method releaseHistoryRetentionMaxId (line 169) | private Optional<Long> releaseHistoryRetentionMaxId(ReleaseHistory rel...
method cleanReleaseHistory (line 182) | private void cleanReleaseHistory(ReleaseHistory cleanRelease) {
method getReleaseHistoryRetentionLimit (line 218) | private int getReleaseHistoryRetentionLimit(ReleaseHistory releaseHist...
method stopClean (line 227) | @PreDestroy
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/ReleaseMessageService.java
class ReleaseMessageService (line 33) | @Service
method ReleaseMessageService (line 37) | public ReleaseMessageService(final ReleaseMessageRepository releaseMes...
method findLatestReleaseMessageForMessages (line 41) | public ReleaseMessage findLatestReleaseMessageForMessages(Collection<S...
method findLatestReleaseMessagesGroupByMessages (line 48) | public List<ReleaseMessage> findLatestReleaseMessagesGroupByMessages(
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/ReleaseService.java
class ReleaseService (line 62) | @Service
method ReleaseService (line 84) | public ReleaseService(final ReleaseRepository releaseRepository, final...
method findOne (line 98) | public Release findOne(long releaseId) {
method findActiveOne (line 103) | public Release findActiveOne(long releaseId) {
method findByReleaseIds (line 107) | public List<Release> findByReleaseIds(Set<Long> releaseIds) {
method findByReleaseKeys (line 115) | public List<Release> findByReleaseKeys(Set<String> releaseKeys) {
method findByReleaseKey (line 119) | public Release findByReleaseKey(String releaseKey) {
method findLatestActiveRelease (line 123) | public Release findLatestActiveRelease(Namespace namespace) {
method findLatestActiveRelease (line 129) | public Release findLatestActiveRelease(String appId, String clusterNam...
method findAllReleases (line 135) | public List<Release> findAllReleases(String appId, String clusterName,...
method findActiveReleases (line 146) | public List<Release> findActiveReleases(String appId, String clusterNa...
method findActiveReleasesBetween (line 157) | private List<Release> findActiveReleasesBetween(String appId, String c...
method mergeBranchChangeSetsAndRelease (line 168) | @Transactional
method publish (line 194) | @Transactional
method publishBranchNamespace (line 233) | private Release publishBranchNamespace(Namespace parentNamespace, Name...
method grayDeletionPublish (line 257) | @Transactional
method checkLock (line 275) | private void checkLock(Namespace namespace, boolean isEmergencyPublish...
method mergeFromMasterAndPublishBranch (line 284) | private void mergeFromMasterAndPublishBranch(Namespace parentNamespace...
method getBranchReleaseKeys (line 319) | private Collection<String> getBranchReleaseKeys(long releaseId) {
method publishBranchNamespace (line 344) | private Release publishBranchNamespace(Namespace parentNamespace, Name...
method masterRelease (line 352) | private Release masterRelease(Namespace namespace, String releaseName,...
method branchRelease (line 367) | private Release branchRelease(Namespace parentNamespace, Namespace chi...
method mergeConfiguration (line 402) | private Map<String, String> mergeConfiguration(Map<String, String> bas...
method getNamespaceItems (line 416) | private Map<String, String> getNamespaceItems(Namespace namespace) {
method createRelease (line 429) | private Release createRelease(Namespace namespace, String name, String...
method rollback (line 451) | @Transactional
method rollbackTo (line 489) | @Transactional
method rollbackChildNamespace (line 532) | private void rollbackChildNamespace(String appId, String clusterName, ...
method calculateChildNamespaceToPublishConfiguration (line 575) | private Map<String, String> calculateChildNamespaceToPublishConfigurat...
method calculateBranchModifiedItemsAccordingToRelease (line 590) | private Map<String, String> calculateBranchModifiedItemsAccordingToRel...
method batchDelete (line 628) | @Transactional
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/ServerConfigService.java
class ServerConfigService (line 31) | @Service
method ServerConfigService (line 36) | public ServerConfigService(ServerConfigRepository serverConfigReposito...
method findAll (line 40) | public List<ServerConfig> findAll() {
method createOrUpdateConfig (line 45) | @Transactional
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/ServiceRegistryService.java
class ServiceRegistryService (line 26) | public class ServiceRegistryService {
method ServiceRegistryService (line 30) | public ServiceRegistryService(ServiceRegistryRepository repository) {
method saveIfNotExistByServiceNameAndUri (line 34) | public ServiceRegistry saveIfNotExistByServiceNameAndUri(ServiceRegist...
method delete (line 51) | @Transactional
method findByServiceNameDataChangeLastModifiedTimeGreaterThan (line 57) | public List<ServiceRegistry> findByServiceNameDataChangeLastModifiedTi...
method deleteTimeBefore (line 63) | @Transactional
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/utils/ConfigChangeContentBuilder.java
class ConfigChangeContentBuilder (line 28) | public class ConfigChangeContentBuilder {
method createItem (line 36) | public ConfigChangeContentBuilder createItem(Item item) {
method updateItem (line 43) | public ConfigChangeContentBuilder updateItem(Item oldItem, Item newIte...
method deleteItem (line 51) | public ConfigChangeContentBuilder deleteItem(Item item) {
method hasContent (line 58) | public boolean hasContent() {
method build (line 62) | public String build() {
class ItemPair (line 81) | static class ItemPair {
method ItemPair (line 86) | public ItemPair(Item oldItem, Item newItem) {
method cloneItem (line 92) | Item cloneItem(Item source) {
method convertJsonString (line 100) | public static ConfigChangeContentBuilder convertJsonString(String cont...
method getCreateItems (line 104) | public List<Item> getCreateItems() {
method getUpdateItems (line 108) | public List<ItemPair> getUpdateItems() {
method getDeleteItems (line 112) | public List<Item> getDeleteItems() {
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/utils/EntityManagerUtil.java
class EntityManagerUtil (line 30) | @Component
method closeEntityManager (line 39) | public void closeEntityManager() {
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/utils/ReleaseKeyGenerator.java
class ReleaseKeyGenerator (line 26) | public class ReleaseKeyGenerator extends UniqueKeyGenerator {
method generateReleaseKey (line 35) | public static String generateReleaseKey(Namespace namespace) {
FILE: apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/utils/ReleaseMessageKeyGenerator.java
class ReleaseMessageKeyGenerator (line 29) | public class ReleaseMessageKeyGenerator {
method generate (line 37) | public static String generate(String appId, String cluster, String nam...
method messageToList (line 41) | public static List<String> messageToList(String message) {
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/AbstractIntegrationTest.java
class AbstractIntegrationTest (line 26) | @RunWith(SpringJUnit4ClassRunner.class)
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/AbstractUnitTest.java
class AbstractUnitTest (line 22) | @RunWith(MockitoJUnitRunner.class)
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/BizTestConfiguration.java
class BizTestConfiguration (line 25) | @Configuration
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/MockBeanFactory.java
class MockBeanFactory (line 25) | public class MockBeanFactory {
method mockNamespace (line 27) | public static Namespace mockNamespace(String appId, String clusterName...
method mockAppNamespace (line 37) | public static AppNamespace mockAppNamespace(String appId, String name,...
method mockServerConfig (line 47) | public static ServerConfig mockServerConfig(String key, String value, ...
method mockRelease (line 57) | public static Release mockRelease(long releaseId, String releaseKey, S...
method mockItem (line 71) | public static Item mockItem(long id, long namespaceId, String itemKey,...
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/config/BizConfigTest.java
class BizConfigTest (line 40) | @RunWith(MockitoJUnitRunner.class)
method setUp (line 53) | @Before
method testReleaseMessageNotificationBatch (line 60) | @Test
method testReleaseMessageNotificationBatchWithDefaultValue (line 69) | @Test
method testReleaseMessageNotificationBatchWithInvalidNumber (line 76) | @Test
method testReleaseHistoryRetentionSize (line 86) | @Test
method testReleaseHistoryRetentionSizeOverride (line 95) | @Test
method testAppIdValueLengthLimitOverride (line 117) | @Test
method testReleaseMessageNotificationBatchWithNAN (line 159) | @Test
method testCheckInt (line 168) | @Test
method testIsConfigServiceCacheKeyIgnoreCase (line 186) | @Test
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/entity/JpaMapFieldJsonConverterTest.java
class JpaMapFieldJsonConverterTest (line 31) | class JpaMapFieldJsonConverterTest {
method readAllContentOf (line 35) | static String readAllContentOf(String path) throws IOException {
method convertToDatabaseColumn_null (line 41) | @Test
method convertToDatabaseColumn_empty (line 46) | @Test
method convertToDatabaseColumn_oneElement (line 51) | @Test
method convertToDatabaseColumn_twoElement (line 60) | @Test
method convertToEntityAttribute_null (line 70) | @Test
method convertToEntityAttribute_null_oneElement (line 76) | @Test
method convertToEntityAttribute_null_twoElement (line 85) | @Test
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/grayReleaseRule/GrayReleaseRulesHolderTest.java
class GrayReleaseRulesHolderTest (line 53) | @RunWith(MockitoJUnitRunner.class)
method setUp (line 64) | @Before
method testScanGrayReleaseRules (line 70) | @Test
method assembleGrayReleaseRule (line 177) | private GrayReleaseRule assembleGrayReleaseRule(String appId, String c...
method assembleRuleItem (line 193) | private GrayReleaseRuleItemDTO assembleRuleItem(String clientAppId, Se...
method assembleReleaseMessage (line 198) | private ReleaseMessage assembleReleaseMessage(String appId, String clu...
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/message/DatabaseMessageSenderTest.java
class DatabaseMessageSenderTest (line 33) | public class DatabaseMessageSenderTest extends AbstractUnitTest {
method setUp (line 38) | @Before
method testSendMessage (line 43) | @Test
method testSendUnsupportedMessage (line 59) | @Test
method testSendMessageFailed (line 69) | @Test(expected = RuntimeException.class)
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/message/ReleaseMessageScannerTest.java
class ReleaseMessageScannerTest (line 44) | public class ReleaseMessageScannerTest extends AbstractUnitTest {
method setUp (line 52) | @Before
method testScanMessageAndNotifyMessageListener (line 64) | @Test
method testScanMessageWithGapAndNotifyMessageListener (line 100) | @Test
method assembleReleaseMessage (line 183) | private ReleaseMessage assembleReleaseMessage(long id, String message) {
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/registry/DatabaseDiscoveryClientAlwaysAddSelfInstanceDecoratorImplTest.java
class DatabaseDiscoveryClientAlwaysAddSelfInstanceDecoratorImplTest (line 28) | class DatabaseDiscoveryClientAlwaysAddSelfInstanceDecoratorImplTest {
method getInstances_other_service_name (line 30) | @Test
method getInstances_contain_self (line 54) | @Test
method getInstances_same_service_name_without_self (line 83) | @Test
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/registry/DatabaseDiscoveryClientImplTest.java
class DatabaseDiscoveryClientImplTest (line 34) | class DatabaseDiscoveryClientImplTest {
method newServiceRegistry (line 36) | private static ServiceRegistry newServiceRegistry(String serviceName, ...
method newServiceRegistry (line 48) | private static ServiceRegistry newServiceRegistry(String serviceName, ...
method getInstances_filterByCluster (line 53) | @Test
method getInstances_filterByHealthCheck (line 75) | @Test
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/registry/DatabaseDiscoveryClientMemoryCacheDecoratorImplTest.java
class DatabaseDiscoveryClientMemoryCacheDecoratorImplTest (line 28) | class DatabaseDiscoveryClientMemoryCacheDecoratorImplTest {
method init (line 30) | @Test
method updateCacheTask_empty (line 38) | @Test
method updateCacheTask_exception (line 48) | @Test
method getInstances_from_cache (line 71) | @Test
method getInstances_from_cache_when_database_updated (line 94) | @Test
method getInstances_from_cache_when_database_crash (line 142) | @Test
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/registry/DatabaseDiscoveryIntegrationTest.java
class DatabaseDiscoveryIntegrationTest (line 36) | @TestPropertySource(properties = {"apollo.service.registry.enabled=true",
method registerThenDiscoveryThenDelete (line 54) | @Test
method registerThenDiscoveryNone (line 81) | @Test
method registerTwice (line 94) | @Test
method registerTwoInstancesThenDeleteOne (line 110) | @Test
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/registry/DatabaseDiscoveryWithoutDecoratorIntegrationTest.java
class DatabaseDiscoveryWithoutDecoratorIntegrationTest (line 45) | @TestPropertySource(properties = {"apollo.service.registry.enabled=true",
method registerThenDiscoveryThenDelete (line 68) | @Test
method registerThenDiscoveryNone (line 95) | @Test
method registerTwice (line 108) | @Test
method registerTwoInstancesThenDeleteOne (line 124) | @Test
class ApolloServiceDiscoveryWithoutDecoratorAutoConfiguration (line 155) | @Configuration
method databaseDiscoveryClient (line 162) | @Bean
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/registry/ServiceInstanceFactory.java
class ServiceInstanceFactory (line 21) | public class ServiceInstanceFactory {
method newServiceInstance (line 22) | static ServiceInstance newServiceInstance(String serviceName, String u...
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/registry/configuration/ApolloServiceRegistryAutoConfigurationNotEnabledTest.java
class ApolloServiceRegistryAutoConfigurationNotEnabledTest (line 38) | @SpringBootTest
method assertNoSuchBean (line 47) | private void assertNoSuchBean(Class<?> requiredType) {
method ensureNoSuchBeans (line 52) | @Test
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/registry/configuration/support/ApolloServiceRegistryClearApplicationRunnerIntegrationTest.java
class ApolloServiceRegistryClearApplicationRunnerIntegrationTest (line 33) | @TestPropertySource(properties = {"apollo.service.registry.enabled=true",
method clearUnhealthyInstances (line 47) | @Test
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/repository/AccessKeyRepositoryTest.java
class AccessKeyRepositoryTest (line 35) | public class AccessKeyRepositoryTest extends AbstractIntegrationTest {
method testSave (line 40) | @Test
method testFindByAppId (line 55) | @Test
method testFindFirst500ByDataChangeLastModifiedTimeGreaterThanOrderByDataChangeLastModifiedTime (line 68) | @Test
method testFindFirst500ByDataChangeLastModifiedTimeGreaterThanEqualAndDataChangeLastModifiedTimeLessThanOrderByDataChangeLastModifiedTime (line 87) | @Test
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/repository/AppNamespaceRepositoryTest.java
class AppNamespaceRepositoryTest (line 28) | public class AppNamespaceRepositoryTest extends AbstractIntegrationTest {
method testFindByNameAndIsPublicTrue (line 33) | @Test
method testFindByNameAndNoPublicNamespace (line 40) | @Test
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/repository/AppRepositoryTest.java
class AppRepositoryTest (line 26) | public class AppRepositoryTest extends AbstractIntegrationTest {
method testCreate (line 31) | @Test
method testRemove (line 51) | @Test
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/repository/InstanceConfigRepositoryTest.java
class InstanceConfigRepositoryTest (line 37) | public class InstanceConfigRepositoryTest extends AbstractIntegrationTest {
method shouldPaginated (line 43) | @Rollback
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/repository/ReleaseHistoryRepositoryTest.java
class ReleaseHistoryRepositoryTest (line 36) | public class ReleaseHistoryRepositoryTest extends AbstractIntegrationTest {
method testFindReleaseHistoryRetentionMaxId (line 41) | @Test
method testFindFirst100ByAppIdAndClusterNameAndNamespaceNameAndBranchNameAndIdLessThanEqualOrderByIdAsc (line 68) | @Test
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/service/AccessKeyServiceTest.java
class AccessKeyServiceTest (line 30) | public class AccessKeyServiceTest extends AbstractIntegrationTest {
method testCreate (line 35) | @Test
method testCreateWithException (line 46) | @Test(expected = BadRequestException.class)
method assembleAccessKey (line 58) | private AccessKey assembleAccessKey(String appId, String secret) {
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/service/AdminServiceTest.java
class AdminServiceTest (line 33) | public class AdminServiceTest extends AbstractIntegrationTest {
method testCreateNewApp (line 53) | @Test
method testCreateDuplicateApp (line 81) | @Test(expected = ServiceException.class)
method testDeleteApp (line 99) | @Test
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/service/AdminServiceTransactionTest.java
class AdminServiceTransactionTest (line 37) | public class AdminServiceTransactionTest extends AbstractIntegrationTest {
method verifyInitialDatabaseState (line 54) | @BeforeTransaction
method setUpTestDataWithinTransaction (line 65) | @Before
method modifyDatabaseWithinTransaction (line 73) | @Test
method tearDownWithinTransaction (line 89) | @After
method verifyFinalDatabaseState (line 97) | @AfterTransaction
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/service/BizDBPropertySourceTest.java
class BizDBPropertySourceTest (line 44) | public class BizDBPropertySourceTest extends AbstractUnitTest {
method initTestData (line 64) | @Before
method clear (line 93) | @After
method testGetClusterConfig (line 98) | @Test
method testGetDcConfig (line 106) | @Test
method testGetDefaultConfig (line 113) | @Test
method testGetNull (line 121) | @Test
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/service/ClusterServiceTest.java
class ClusterServiceTest (line 28) | public class ClusterServiceTest extends AbstractIntegrationTest {
method testCreateDuplicateCluster (line 36) | @Test(expected = ServiceException.class)
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/service/InstanceServiceTest.java
class InstanceServiceTest (line 46) | public class InstanceServiceTest extends AbstractIntegrationTest {
method testCreateAndFindInstance (line 50) | @Test
method testFindInstancesByIds (line 71) | @Test
method testCreateAndFindInstanceConfig (line 93) | @Test
method testFindActiveInstanceConfigs (line 128) | @Test
method testFindInstancesByNamespace (line 156) | @Test
method testFindInstancesByNamespaceAndInstanceAppId (line 187) | @Test
method testFindInstanceConfigsByNamespaceWithReleaseKeysNotIn (line 223) | @Test
method prepareInstanceConfigForInstance (line 253) | private InstanceConfig prepareInstanceConfigForInstance(long instanceI...
method assembleInstance (line 264) | private Instance assembleInstance(String appId, String clusterName, St...
method assembleInstanceConfig (line 275) | private InstanceConfig assembleInstanceConfig(long instanceId, String ...
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/service/ItemServiceTest.java
class ItemServiceTest (line 38) | public class ItemServiceTest extends AbstractIntegrationTest {
method setUp (line 55) | @Before
method testSaveItem (line 60) | @Test
method testSaveItemWithNamespaceValueLengthLimitOverride (line 78) | @Test
method testSaveItemWithAppIdValueLengthLimitOverride (line 102) | @Test
method testUpdateItem (line 127) | @Test
method testSearchItem (line 141) | @Test
method createItem (line 170) | private Item createItem(long namespaceId, String key, String value, in...
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/service/ItemSetServiceTest.java
class ItemSetServiceTest (line 34) | public class ItemSetServiceTest extends AbstractIntegrationTest {
method testUpdateSetWithoutItemNumLimit (line 47) | @Test
method testUpdateSetWithItemNumLimit (line 75) | @Test
method testUpdateSetWithItemNumLimit2 (line 108) | @Test
method buildNormalItem (line 140) | private ItemDTO buildNormalItem(Long id, Long namespaceId, String key,...
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/service/NamespaceBranchServiceTest.java
class NamespaceBranchServiceTest (line 41) | public class NamespaceBranchServiceTest extends AbstractIntegrationTest {
method testFindBranch (line 56) | @Test
method testUpdateBranchGrayRulesWithUpdateOnce (line 67) | @Test
method testUpdateBranchGrayRulesWithUpdateTwice (line 97) | @Test
method containRules (line 140) | private boolean containRules(String context, String rules) {
method testUpdateRulesReleaseIdWithOldRuleNotExist (line 166) | @Test
method testUpdateRulesReleaseIdWithOldRuleExist (line 182) | @Test
method testDeleteBranch (line 207) | @Test
method instanceGrayReleaseRule (line 243) | private GrayReleaseRule instanceGrayReleaseRule() {
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/service/NamespacePublishInfoTest.java
class NamespacePublishInfoTest (line 40) | public class NamespacePublishInfoTest extends AbstractUnitTest {
method testNamespaceNotEverPublishedButHasItems (line 56) | @Test
method testNamespaceEverPublishedAndNotModifiedAfter (line 74) | @Test
method testNamespaceEverPublishedAndModifiedAfter (line 96) | @Test
method createCluster (line 118) | private Cluster createCluster(String clusterName) {
method createNamespace (line 128) | private Namespace createNamespace(String clusterName, String namespace...
method createItem (line 139) | private Item createItem(long namespaceId, String key, String value) {
method createRelease (line 149) | private Release createRelease(String configuration) {
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/service/NamespaceServiceIntegrationTest.java
class NamespaceServiceIntegrationTest (line 54) | public class NamespaceServiceIntegrationTest extends AbstractIntegration...
method testDeleteNamespace (line 87) | @Test
method testGetCommitsByModifiedTime (line 124) | @Test
method testNamespaceNumLimit (line 152) | @Test
method testNamespaceNumLimitFalse (line 183) | @Test
method testNamespaceNumLimitWhite (line 207) | @Test
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/service/NamespaceServiceTest.java
class NamespaceServiceTest (line 41) | public class NamespaceServiceTest extends AbstractUnitTest {
method testFindPublicAppNamespaceWithWrongNamespace (line 55) | @Test(expected = BadRequestException.class)
method testFindPublicAppNamespace (line 64) | @Test
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/service/ReleaseCreationTest.java
class ReleaseCreationTest (line 39) | public class ReleaseCreationTest extends AbstractIntegrationTest {
method testPublishNormalNamespace (line 55) | @Test
method testPublishMasterNamespaceAndBranchHasNotItems (line 99) | @Test
method testPublishMasterNamespaceAndBranchHasItems (line 176) | @Test
method testModifyMasterNamespaceItemsAndBranchAlsoModify (line 250) | @Test
method testPublishBranchAtFirstTime (line 322) | @Test
method testPublishBranch (line 395) | @Test
method testRollback (line 469) | @Test
method instanceNamespace (line 522) | private Namespace instanceNamespace(long id, String clusterName) {
method parseConfiguration (line 531) | private Map<String, String> parseConfiguration(String configuration) {
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/service/ReleaseHistoryServiceTest.java
class ReleaseHistoryServiceTest (line 56) | @RunWith(SpringJUnit4ClassRunner.class)
method setUp (line 79) | @Before
method testCleanReleaseHistory (line 89) | @Test
method testCleanReleaseHistoryTransactionalRollBack (line 128) | @Test
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/service/ReleaseServiceTest.java
class ReleaseServiceTest (line 48) | public class ReleaseServiceTest extends AbstractUnitTest {
method init (line 70) | @Before
method testNamespaceNotExist (line 89) | @Test(expected = BadRequestException.class)
method testHasNoRelease (line 97) | @Test(expected = BadRequestException.class)
method testRollback (line 110) | @Test
method testRollbackTo (line 128) | @Test
method testFindRelease (line 159) | @Test
method testLoadConfigWithConfigNotFound (line 189) | @Test
method testFindByReleaseIds (line 209) | @Test
method testFindByReleaseKeys (line 225) | @Test
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/service/ServerConfigServiceTest.java
class ServerConfigServiceTest (line 32) | public class ServerConfigServiceTest extends AbstractIntegrationTest {
method findAll (line 37) | @Test
method createOrUpdateConfig (line 44) | @Test
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/utils/ConfigChangeContentBuilderTest.java
class ConfigChangeContentBuilderTest (line 33) | public class ConfigChangeContentBuilderTest {
method initConfig (line 42) | @Before
method testHasContent (line 58) | @Test
method testHasContentFalseCheck (line 67) | @Test
method testConvertJsonString (line 75) | @Test
FILE: apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/utils/ReleaseKeyGeneratorTest.java
class ReleaseKeyGeneratorTest (line 38) | public class ReleaseKeyGeneratorTest {
method testGenerateReleaseKey (line 40) | @Test
method testMessageToList (line 70) | @Test
method generateReleaseKeysTask (line 86) | private Runnable generateReleaseKeysTask(Namespace namespace, Set<Stri...
FILE: apollo-build-sql-converter/src/main/java/com/ctrip/framework/apollo/build/sql/converter/ApolloH2ConverterUtil.java
class ApolloH2ConverterUtil (line 31) | public class ApolloH2ConverterUtil {
method convert (line 33) | public static void convert(SqlTemplate sqlTemplate, String targetSql,
method convertAssemblyH2Line (line 68) | private static String convertAssemblyH2Line(SqlStatement sqlStatement) {
method convertCreateTable (line 96) | private static String convertCreateTable(String convertedText, SqlStat...
method convertTableConfig (line 117) | private static String convertTableConfig(String convertedText, SqlStat...
method convertIndexWithTable (line 141) | private static String convertIndexWithTable(String convertedText, Stri...
method convertColumn (line 165) | private static String convertColumn(String convertedText, SqlStatement...
method convertAlterTable (line 183) | private static String convertAlterTable(String convertedText, SqlState...
method convertAlterTableMulti (line 215) | private static String convertAlterTableMulti(String convertedText, Sql...
method convertIndexOnTable (line 262) | private static String convertIndexOnTable(String convertedText, String...
method removePrefixIndex (line 281) | private static String removePrefixIndex(String convertedText) {
FILE: apollo-build-sql-converter/src/main/java/com/ctrip/framework/apollo/build/sql/converter/ApolloMysqlDefaultConverterUtil.java
class ApolloMysqlDefaultConverterUtil (line 27) | public class ApolloMysqlDefaultConverterUtil {
method convert (line 29) | public static void convert(SqlTemplate sqlTemplate, String targetSql,
method convertMainMysqlLine (line 58) | private static String convertMainMysqlLine(SqlStatement sqlStatement, ...
FILE: apollo-build-sql-converter/src/main/java/com/ctrip/framework/apollo/build/sql/converter/ApolloSqlConverter.java
class ApolloSqlConverter (line 26) | public class ApolloSqlConverter {
method main (line 28) | public static void main(String[] args) {
method convert (line 38) | public static List<String> convert(String repositoryDir, String srcDir...
method createConfiguration (line 62) | private static Configuration createConfiguration(String srcDir) {
method convertMysqlDefaultList (line 73) | private static void convertMysqlDefaultList(List<SqlTemplate> template...
method convertMysqlDatabaseNotSpecifiedList (line 89) | private static void convertMysqlDatabaseNotSpecifiedList(List<SqlTempl...
method convertH2DefaultList (line 104) | private static void convertH2DefaultList(List<SqlTemplate> templateLis...
FILE: apollo-build-sql-converter/src/main/java/com/ctrip/framework/apollo/build/sql/converter/ApolloSqlConverterUtil.java
class ApolloSqlConverterUtil (line 46) | public class ApolloSqlConverterUtil {
method getRepositoryDir (line 60) | public static String getRepositoryDir() {
method ensureDirectories (line 81) | public static void ensureDirectories(String targetFilePath) {
method process (line 91) | public static String process(SqlTemplate sqlTemplate, SqlTemplateConte...
method replacePrefix (line 102) | public static String replacePrefix(String origin, String prefix, Strin...
method replacePath (line 109) | public static String replacePath(String origin, String src, String tar...
method getGists (line 116) | public static SqlTemplateGist getGists(String repositoryDir) {
method getGist (line 126) | private static String getGist(String gistPath) {
method getSqlList (line 150) | public static List<String> getSqlList(String dir, Set<String> ignoreDi...
method getSqlList (line 163) | public static List<String> getSqlList(String dir) {
method list (line 167) | public static List<Path> list(Path dir) {
method listSorted (line 179) | public static List<Path> listSorted(Path dir, Comparator<Path> compara...
method listSorted (line 186) | public static List<Path> listSorted(Path dir) {
method deleteDir (line 190) | public static void deleteDir(Path dir) {
method deleteDirInternal (line 198) | private static void deleteDirInternal(Path dir) throws IOException {
method deltaSqlComparator (line 216) | public static Comparator<String> deltaSqlComparator() {
method getDeltaSqlList (line 245) | private static List<String> getDeltaSqlList(String dir, Set<String> ig...
method toTemplates (line 273) | public static List<SqlTemplate> toTemplates(List<String> srcSqlList, S...
method toStatements (line 289) | public static List<SqlStatement> toStatements(String rawText) {
method commentLine (line 319) | private static void commentLine(String line, AtomicReference<StringJoi...
method noCommentLine (line 343) | private static void noCommentLine(String line, AtomicReference<StringJ...
method createStatement (line 387) | private static SqlStatement createStatement(StringJoiner sqlStatementR...
method resetStatementBuffer (line 394) | private static void resetStatementBuffer(AtomicReference<StringJoiner>...
FILE: apollo-build-sql-converter/src/main/java/com/ctrip/framework/apollo/build/sql/converter/SqlStatement.java
class SqlStatement (line 23) | public class SqlStatement {
method SqlStatement (line 31) | SqlStatement(Builder builder) {
method builder (line 37) | public static Builder builder() {
method toBuilder (line 41) | public Builder toBuilder() {
method getRawText (line 49) | public String getRawText() {
method getSingleLineText (line 53) | public String getSingleLineText() {
method getTextLines (line 57) | public List<String> getTextLines() {
method toString (line 61) | @Override
class Builder (line 68) | public static final class Builder {
method Builder (line 74) | Builder() {}
method rawText (line 76) | public Builder rawText(String rawText) {
method singleLineText (line 81) | public Builder singleLineText(String singleLineText) {
method textLines (line 86) | public Builder textLines(List<String> textLines) {
method build (line 93) | public SqlStatement build() {
FILE: apollo-build-sql-converter/src/main/java/com/ctrip/framework/apollo/build/sql/converter/SqlTemplate.java
class SqlTemplate (line 21) | public class SqlTemplate {
method SqlTemplate (line 27) | public SqlTemplate(String srcPath, Template template) {
method getSrcPath (line 32) | public String getSrcPath() {
method getTemplate (line 36) | public Template getTemplate() {
FILE: apollo-build-sql-converter/src/main/java/com/ctrip/framework/apollo/build/sql/converter/SqlTemplateContext.java
class SqlTemplateContext (line 21) | public class SqlTemplateContext {
method SqlTemplateContext (line 28) | SqlTemplateContext(Builder builder) {
method builder (line 32) | public static Builder builder() {
method toBuilder (line 36) | public Builder toBuilder() {
method getGists (line 42) | public SqlTemplateGist getGists() {
method toString (line 46) | @Override
class Builder (line 53) | public static final class Builder {
method Builder (line 57) | Builder() {}
method gists (line 59) | public Builder gists(SqlTemplateGist gists) {
method build (line 64) | public SqlTemplateContext build() {
FILE: apollo-build-sql-converter/src/main/java/com/ctrip/framework/apollo/build/sql/converter/SqlTemplateGist.java
class SqlTemplateGist (line 21) | public class SqlTemplateGist {
method SqlTemplateGist (line 31) | SqlTemplateGist(Builder builder) {
method builder (line 38) | public static Builder builder() {
method toBuilder (line 42) | public Builder toBuilder() {
method getAutoGeneratedDeclaration (line 51) | public String getAutoGeneratedDeclaration() {
method getH2Function (line 55) | public String getH2Function() {
method getSetupDatabase (line 59) | public String getSetupDatabase() {
method getUseDatabase (line 63) | public String getUseDatabase() {
method toString (line 67) | @Override
class Builder (line 77) | public static final class Builder {
method Builder (line 84) | Builder() {}
method autoGeneratedDeclaration (line 86) | public Builder autoGeneratedDeclaration(String autoGeneratedDeclarat...
method h2Function (line 91) | public Builder h2Function(String h2Function) {
method setupDatabase (line 96) | public Builder setupDatabase(String setupDatabase) {
method useDatabase (line 101) | public Builder useDatabase(String useDatabase) {
method build (line 106) | public SqlTemplateGist build() {
FILE: apollo-build-sql-converter/src/test/java/com/ctrip/framework/apollo/build/sql/converter/ApolloSqlConverterAutoGeneratedTest.java
class ApolloSqlConverterAutoGeneratedTest (line 34) | class ApolloSqlConverterAutoGeneratedTest {
method checkAutoGenerated (line 42) | @Test
method checkSqlList (line 61) | private void checkSqlList(List<String> srcSqlList, String srcDir, Stri...
method checkMysqlDefaultList (line 75) | private void checkMysqlDefaultList(List<String> srcSqlList, String src...
method getIgnoreDirs (line 109) | private Set<String> getIgnoreDirs(String repositoryTargetDir) {
method findRedundantSqlList (line 123) | private List<String> findRedundantSqlList(String checkerTargetDir, Lis...
method findMissingSqlList (line 131) | private List<String> findMissingSqlList(String checkerTargetDir, List<...
method findMissing (line 139) | private Map<String, String> findMissing(String sourceDir, List<String>...
method doCheck (line 152) | private void doCheck(String checkerTargetSql, String repositoryTargetS...
method checkMysqlDatabaseNotSpecifiedList (line 192) | private void checkMysqlDatabaseNotSpecifiedList(List<String> srcSqlLis...
method checkH2DefaultList (line 206) | private void checkH2DefaultList(List<String> srcSqlList, String srcDir...
FILE: apollo-build-sql-converter/src/test/java/com/ctrip/framework/apollo/build/sql/converter/ApolloSqlConverterH2Test.java
class ApolloSqlConverterH2Test (line 30) | class ApolloSqlConverterH2Test {
method checkH2 (line 32) | @Test
method checkSort (line 81) | private void checkSort(List<String> testSrcSqlList) {
method getIndex (line 97) | private int getIndex(List<String> srcSqlList, String fileName) {
method checkConfigDatabase (line 107) | private void checkConfigDatabase(String h2Path, List<String> checkerSq...
method checkPortalDatabase (line 134) | private void checkPortalDatabase(String h2Path, List<String> checkerSq...
FILE: apollo-build-sql-converter/src/test/java/com/ctrip/framework/apollo/build/sql/converter/TestH2Function.java
class TestH2Function (line 19) | public class TestH2Function {
method unixTimestamp (line 21) | public static long unixTimestamp(java.sql.Timestamp timestamp) {
FILE: apollo-build-sql-converter/src/test/resources/META-INF/sql/h2-test/delta/v000-v010/apolloconfigdb-v000-v010-base.sql
type `App` (line 34) | CREATE TABLE `App` (
type `AppNamespace` (line 60) | CREATE TABLE `AppNamespace` (
type `Audit` (line 84) | CREATE TABLE `Audit` (
type `Cluster` (line 106) | CREATE TABLE `Cluster` (
type `Commit` (line 128) | CREATE TABLE `Commit` (
type `GrayReleaseRule` (line 152) | CREATE TABLE `GrayReleaseRule` (
type `Instance` (line 177) | CREATE TABLE `Instance` (
type `InstanceConfig` (line 198) | CREATE TABLE `InstanceConfig` (
type `Item` (line 222) | CREATE TABLE `Item` (
type `Namespace` (line 246) | CREATE TABLE `Namespace` (
type `NamespaceLock` (line 268) | CREATE TABLE `NamespaceLock` (
type `Privilege` (line 288) | CREATE TABLE `Privilege` (
type `Release` (line 310) | CREATE TABLE `Release` (
type `ReleaseHistory` (line 338) | CREATE TABLE `ReleaseHistory` (
type `ReleaseMessage` (line 365) | CREATE TABLE `ReleaseMessage` (
type `ServerConfig` (line 381) | CREATE TABLE `ServerConfig` (
FILE: apollo-build-sql-converter/src/test/resources/META-INF/sql/h2-test/delta/v000-v010/apolloportaldb-v000-v010-base.sql
type `App` (line 34) | CREATE TABLE `App` (
type `AppNamespace` (line 60) | CREATE TABLE `AppNamespace` (
type `Consumer` (line 84) | CREATE TABLE `Consumer` (
type `ConsumerAudit` (line 109) | CREATE TABLE `ConsumerAudit` (
type `ConsumerRole` (line 128) | CREATE TABLE `ConsumerRole` (
type `ConsumerToken` (line 150) | CREATE TABLE `ConsumerToken` (
type `Favorite` (line 170) | CREATE TABLE `Favorite` (
type `Permission` (line 191) | CREATE TABLE `Permission` (
type `Role` (line 212) | CREATE TABLE `Role` (
type `RolePermission` (line 232) | CREATE TABLE `RolePermission` (
type `ServerConfig` (line 254) | CREATE TABLE `ServerConfig` (
type `UserRole` (line 276) | CREATE TABLE `UserRole` (
FILE: apollo-build-sql-converter/src/test/resources/META-INF/sql/h2-test/delta/v060-v062/apolloconfigdb-v060-v062.sql
type `IX_NAME` (line 23) | CREATE INDEX `IX_NAME` ON App (`Name`(191))
FILE: apollo-build-sql-converter/src/test/resources/META-INF/sql/h2-test/delta/v060-v062/apolloportaldb-v060-v062.sql
type `IX_NAME` (line 23) | CREATE INDEX `IX_NAME` ON App (`Name`(191))
FILE: apollo-build-sql-converter/src/test/resources/META-INF/sql/h2-test/delta/v080-v090/apolloportaldb-v080-v090.sql
type `Users` (line 22) | CREATE TABLE `Users` (
type `Authorities` (line 31) | CREATE TABLE `Authorities` (
FILE: apollo-build-sql-converter/src/test/resources/META-INF/sql/h2-test/delta/v151-v160/apolloconfigdb-v151-v160.sql
type `AccessKey` (line 22) | CREATE TABLE `AccessKey` (
FILE: apollo-build-sql-converter/src/test/resources/META-INF/sql/h2-test/delta/v180-v190/apolloportaldb-v180-v190.sql
type SPRING_SESSION (line 79) | CREATE TABLE SPRING_SESSION (
type SPRING_SESSION_IX1 (line 90) | CREATE UNIQUE INDEX SPRING_SESSION_IX1 ON SPRING_SESSION (SESSION_ID)
type SPRING_SESSION_IX2 (line 91) | CREATE INDEX SPRING_SESSION_IX2 ON SPRING_SESSION (EXPIRY_TIME)
type SPRING_SESSION_IX3 (line 92) | CREATE INDEX SPRING_SESSION_IX3 ON SPRING_SESSION (PRINCIPAL_NAME)
type SPRING_SESSION_ATTRIBUTES (line 94) | CREATE TABLE SPRING_SESSION_ATTRIBUTES (
FILE: apollo-build-sql-converter/src/test/resources/META-INF/sql/h2-test/delta/v200-v210/apolloconfigdb-v200-v210.sql
type IX_PreviousReleaseId (line 23) | CREATE INDEX IX_PreviousReleaseId ON ReleaseHistory(PreviousReleaseId)
type `ServiceRegistry` (line 28) | CREATE TABLE `ServiceRegistry` (
FILE: apollo-build-sql-converter/src/test/resources/META-INF/sql/h2-test/delta/v210-v220/apolloconfigdb-v210-v220.sql
type `AuditLog` (line 51) | CREATE TABLE `AuditLog` (
type `AuditLogDataInfluence` (line 77) | CREATE TABLE `AuditLogDataInfluence` (
FILE: apollo-build-sql-converter/src/test/resources/META-INF/sql/h2-test/delta/v210-v220/apolloportaldb-v210-v220.sql
type `AuditLog` (line 37) | CREATE TABLE `AuditLog` (
type `AuditLogDataInfluence` (line 63) | CREATE TABLE `AuditLogDataInfluence` (
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/ApolloCommonConfig.java
class ApolloCommonConfig (line 27) | @EnableAutoConfiguration
method requestRejectedHandler (line 36) | @Bean
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/aop/RepositoryAspect.java
class RepositoryAspect (line 28) | @Aspect
method anyRepositoryMethod (line 32) | @Pointcut("execution(public * org.springframework.data.repository.Repo...
method invokeWithCatTransaction (line 35) | @Around("anyRepositoryMethod()")
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/condition/OnProfileCondition.java
class OnProfileCondition (line 33) | public class OnProfileCondition implements Condition {
method matches (line 34) | @Override
method retrieveAnnotatedProfiles (line 47) | private Set<String> retrieveAnnotatedProfiles(AnnotatedTypeMetadata me...
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/config/RefreshableConfig.java
class RefreshableConfig (line 40) | public abstract class RefreshableConfig implements DisposableBean {
method getRefreshablePropertySources (line 60) | protected abstract List<RefreshablePropertySource> getRefreshablePrope...
method setup (line 62) | @PostConstruct
method destroy (line 90) | @Override
method getIntProperty (line 97) | public int getIntProperty(String key, int defaultValue) {
method getBooleanProperty (line 107) | public boolean getBooleanProperty(String key, boolean defaultValue) {
method getArrayProperty (line 117) | public String[] getArrayProperty(String key, String[] defaultValue) {
method getValue (line 127) | public String getValue(String key, String defaultValue) {
method getValue (line 136) | public String getValue(String key) {
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/config/RefreshablePropertySource.java
class RefreshablePropertySource (line 23) | public abstract class RefreshablePropertySource extends MapPropertySource {
method RefreshablePropertySource (line 26) | public RefreshablePropertySource(String name, Map<String, Object> sour...
method getProperty (line 30) | @Override
method refresh (line 38) | protected abstract void refresh();
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/constants/AccessKeyMode.java
type AccessKeyMode (line 19) | public interface AccessKeyMode {
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/constants/ApolloServer.java
class ApolloServer (line 22) | public class ApolloServer {
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/constants/GsonType.java
type GsonType (line 28) | public interface GsonType {
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/constants/NamespaceBranchStatus.java
type NamespaceBranchStatus (line 19) | public interface NamespaceBranchStatus {
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/constants/ReleaseOperation.java
type ReleaseOperation (line 22) | public interface ReleaseOperation {
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/constants/ReleaseOperationContext.java
type ReleaseOperationContext (line 22) | public interface ReleaseOperationContext {
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/controller/ApolloInfoController.java
class ApolloInfoController (line 24) | @RestController
method getNet (line 28) | @RequestMapping("net")
method getServer (line 33) | @RequestMapping("server")
method getVersion (line 38) | @RequestMapping("version")
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/controller/CharacterEncodingFilterConfiguration.java
class CharacterEncodingFilterConfiguration (line 26) | @Configuration
method encodingFilter (line 29) | @Bean
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/controller/GlobalDefaultExceptionHandler.java
class GlobalDefaultExceptionHandler (line 55) | @ControllerAdvice
method exception (line 64) | @ExceptionHandler(Throwable.class)
method badRequest (line 69) | @ExceptionHandler({HttpRequestMethodNotSupportedException.class, HttpM...
method restTemplateException (line 75) | @ExceptionHandler(HttpStatusCodeException.class)
method accessDeny (line 81) | @ExceptionHandler(AccessDeniedException.class)
method badRequest (line 88) | @ExceptionHandler({AbstractApolloHttpException.class})
method handleMethodArgumentNotValidException (line 94) | @ExceptionHandler(MethodArgumentNotValidException.class)
method handleConstraintViolationException (line 106) | @ExceptionHandler(ConstraintViolationException.class)
method handleError (line 112) | private ResponseEntity<Map<String, Object>> handleError(HttpServletReq...
method handleError (line 117) | private ResponseEntity<Map<String, Object>> handleError(HttpServletReq...
method printLog (line 153) | private void printLog(String message, Throwable ex, Level logLevel) {
method getMessageWithRootCause (line 175) | private String getMessageWithRootCause(Throwable ex) {
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/controller/HttpMessageConverterConfiguration.java
class HttpMessageConverterConfiguration (line 41) | @Configuration
method messageConverters (line 43) | @Bean
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/controller/WebMvcConfig.java
class WebMvcConfig (line 31) | @Configuration
method addArgumentResolvers (line 35) | @Override
method configureContentNegotiation (line 44) | @Override
method customize (line 49) | @Override
method addResourceHandlers (line 56) | @Override
method addCacheControl (line 68) | private void addCacheControl(ResourceHandlerRegistry registry, String ...
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/datasource/ApolloDataSourceScriptDatabaseInitializer.java
class ApolloDataSourceScriptDatabaseInitializer (line 30) | public class ApolloDataSourceScriptDatabaseInitializer extends DataSourc...
method ApolloDataSourceScriptDatabaseInitializer (line 35) | public ApolloDataSourceScriptDatabaseInitializer(DataSource dataSource,
method getJdbcUrl (line 55) | private String getJdbcUrl(DataSource dataSource) {
method isEnabled (line 66) | private boolean isEnabled(DatabaseInitializationSettings settings) {
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/datasource/ApolloDataSourceScriptDatabaseInitializerFactory.java
class ApolloDataSourceScriptDatabaseInitializerFactory (line 36) | public class ApolloDataSourceScriptDatabaseInitializerFactory {
method create (line 38) | public static ApolloDataSourceScriptDatabaseInitializer create(DataSou...
method determineDataSource (line 45) | private static DataSource determineDataSource(DataSource dataSource,
method getSettings (line 57) | private static DatabaseInitializationSettings getSettings(DataSource d...
method resolveLocations (line 81) | private static List<String> resolveLocations(Collection<String> locati...
method convertRepositoryLocations (line 101) | private static Collection<String> convertRepositoryLocations(Collectio...
method findSuffix (line 118) | private static String findSuffix(DataSource dataSource) {
method findRepositoryDirectory (line 133) | private static String findRepositoryDirectory() {
method convertRepositoryLocation (line 156) | private static String convertRepositoryLocation(String location, Strin...
method scriptLocations (line 168) | private static List<String> scriptLocations(List<String> locations, St...
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/datasource/ApolloSqlInitializationProperties.java
class ApolloSqlInitializationProperties (line 23) | public class ApolloSqlInitializationProperties {
method getSchemaLocations (line 71) | public List<String> getSchemaLocations() {
method setSchemaLocations (line 75) | public void setSchemaLocations(List<String> schemaLocations) {
method getDataLocations (line 79) | public List<String> getDataLocations() {
method setDataLocations (line 83) | public void setDataLocations(List<String> dataLocations) {
method getPlatform (line 87) | public String getPlatform() {
method setPlatform (line 91) | public void setPlatform(String platform) {
method getUsername (line 95) | public String getUsername() {
method setUsername (line 99) | public void setUsername(String username) {
method getPassword (line 103) | public String getPassword() {
method setPassword (line 107) | public void setPassword(String password) {
method isContinueOnError (line 111) | public boolean isContinueOnError() {
method setContinueOnError (line 115) | public void setContinueOnError(boolean continueOnError) {
method getSeparator (line 119) | public String getSeparator() {
method setSeparator (line 123) | public void setSeparator(String separator) {
method getEncoding (line 127) | public Charset getEncoding() {
method setEncoding (line 131) | public void setEncoding(Charset encoding) {
method getMode (line 135) | public DatabaseInitializationMode getMode() {
method setMode (line 139) | public void setMode(DatabaseInitializationMode mode) {
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/dto/AccessKeyDTO.java
class AccessKeyDTO (line 19) | public class AccessKeyDTO extends BaseDTO {
method getId (line 31) | public Long getId() {
method setId (line 35) | public void setId(Long id) {
method getSecret (line 39) | public String getSecret() {
method setSecret (line 43) | public void setSecret(String secret) {
method getAppId (line 47) | public String getAppId() {
method setAppId (line 51) | public void setAppId(String appId) {
method getMode (line 55) | public Integer getMode() {
method setMode (line 59) | public void setMode(Integer mode) {
method getEnabled (line 63) | public Boolean getEnabled() {
method setEnabled (line 67) | public void setEnabled(Boolean enabled) {
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/dto/AppDTO.java
class AppDTO (line 22) | public class AppDTO extends BaseDTO {
method getId (line 42) | public long getId() {
method setId (line 46) | public void setId(long id) {
method getName (line 50) | public String getName() {
method setName (line 54) | public void setName(String name) {
method getAppId (line 58) | public String getAppId() {
method setAppId (line 62) | public void setAppId(String appId) {
method getOrgId (line 66) | public String getOrgId() {
method setOrgId (line 70) | public void setOrgId(String orgId) {
method getOrgName (line 74) | public String getOrgName() {
method setOrgName (line 78) | public void setOrgName(String orgName) {
method getOwnerName (line 82) | public String getOwnerName() {
method setOwnerName (line 86) | public void setOwnerName(String ownerName) {
method getOwnerDisplayName (line 90) | public String getOwnerDisplayName() {
method setOwnerDisplayName (line 94) | public void setOwnerDisplayName(String ownerDisplayName) {
method getOwnerEmail (line 98) | public String getOwnerEmail() {
method setOwnerEmail (line 102) | public void setOwnerEmail(String ownerEmail) {
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/dto/AppNamespaceDTO.java
class AppNamespaceDTO (line 20) | public class AppNamespaceDTO extends BaseDTO {
method getId (line 33) | public long getId() {
method setId (line 37) | public void setId(long id) {
method getName (line 41) | public String getName() {
method setName (line 45) | public void setName(String name) {
method getAppId (line 49) | public String getAppId() {
method setAppId (line 53) | public void setAppId(String appId) {
method getFormat (line 57) | public String getFormat() {
method setFormat (line 61) | public void setFormat(String format) {
method isPublic (line 65) | public boolean isPublic() {
method setPublic (line 69) | public void setPublic(boolean aPublic) {
method getComment (line 73) | public String getComment() {
method setComment (line 77) | public void setComment(String comment) {
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/dto/BaseDTO.java
class BaseDTO (line 22) | public class BaseDTO {
method getDataChangeCreatedBy (line 36) | public String getDataChangeCreatedBy() {
method setDataChangeCreatedBy (line 40) | public void setDataChangeCreatedBy(String dataChangeCreatedBy) {
method getDataChangeLastModifiedBy (line 44) | public String getDataChangeLastModifiedBy() {
method setDataChangeLastModifiedBy (line 48) | public void setDataChangeLastModifiedBy(String dataChangeLastModifiedB...
method getDataChangeCreatedByDisplayName (line 52) | public String getDataChangeCreatedByDisplayName() {
method setDataChangeCreatedByDisplayName (line 56) | public void setDataChangeCreatedByDisplayName(String dataChangeCreated...
method getDataChangeLastModifiedByDisplayName (line 60) | public String getDataChangeLastModifiedByDisplayName() {
method setDataChangeLastModifiedByDisplayName (line 64) | public void setDataChangeLastModifiedByDisplayName(String dataChangeLa...
method getDataChangeCreatedTime (line 68) | public Date getDataChangeCreatedTime() {
method setDataChangeCreatedTime (line 72) | public void setDataChangeCreatedTime(Date dataChangeCreatedTime) {
method getDataChangeLastModifiedTime (line 76) | public Date getDataChangeLastModifiedTime() {
method setDataChangeLastModifiedTime (line 80) | public void setDataChangeLastModifiedTime(Date dataChangeLastModifiedT...
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/dto/ClusterDTO.java
class ClusterDTO (line 23) | public class ClusterDTO extends BaseDTO {
method getId (line 39) | public long getId() {
method setId (line 43) | public void setId(long id) {
method getName (line 47) | public String getName() {
method setName (line 51) | public void setName(String name) {
method getAppId (line 55) | public String getAppId() {
method setAppId (line 59) | public void setAppId(String appId) {
method getParentClusterId (line 63) | public long getParentClusterId() {
method setParentClusterId (line 67) | public void setParentClusterId(long parentClusterId) {
method getComment (line 71) | public String getComment() {
method setComment (line 75) | public void setComment(String comment) {
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/dto/CommitDTO.java
class CommitDTO (line 19) | public class CommitDTO extends BaseDTO {
method getChangeSets (line 31) | public String getChangeSets() {
method setChangeSets (line 35) | public void setChangeSets(String changeSets) {
method getAppId (line 39) | public String getAppId() {
method setAppId (line 43) | public void setAppId(String appId) {
method getClusterName (line 47) | public String getClusterName() {
method setClusterName (line 51) | public void setClusterName(String clusterName) {
method getNamespaceName (line 55) | public String getNamespaceName() {
method setNamespaceName (line 59) | public void setNamespaceName(String namespaceName) {
method getComment (line 63) | public String getComment() {
method setComment (line 67) | public void setComment(String comment) {
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/dto/GrayReleaseRuleDTO.java
class GrayReleaseRuleDTO (line 24) | public class GrayReleaseRuleDTO extends BaseDTO {
method GrayReleaseRuleDTO (line 38) | public GrayReleaseRuleDTO(String appId, String clusterName, String nam...
method getAppId (line 47) | public String getAppId() {
method getClusterName (line 51) | public String getClusterName() {
method getNamespaceName (line 55) | public String getNamespaceName() {
method getBranchName (line 59) | public String getBranchName() {
method getRuleItems (line 63) | public Set<GrayReleaseRuleItemDTO> getRuleItems() {
method setRuleItems (line 67) | public void setRuleItems(Set<GrayReleaseRuleItemDTO> ruleItems) {
method addRuleItem (line 71) | public void addRuleItem(GrayReleaseRuleItemDTO ruleItem) {
method getReleaseId (line 75) | public Long getReleaseId() {
method setReleaseId (line 79) | public void setReleaseId(Long releaseId) {
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/dto/GrayReleaseRuleItemDTO.java
class GrayReleaseRuleItemDTO (line 28) | public class GrayReleaseRuleItemDTO {
method GrayReleaseRuleItemDTO (line 37) | public GrayReleaseRuleItemDTO() {
method GrayReleaseRuleItemDTO (line 41) | public GrayReleaseRuleItemDTO(String clientAppId) {
method GrayReleaseRuleItemDTO (line 45) | public GrayReleaseRuleItemDTO(String clientAppId, Set<String> clientIp...
method getClientAppId (line 52) | public String getClientAppId() {
method getClientIpList (line 56) | public Set<String> getClientIpList() {
method getClientLabelList (line 60) | public Set<String> getClientLabelList() {
method matches (line 64) | public boolean matches(String clientAppId, String clientIp, String cli...
method appIdMatches (line 69) | private boolean appIdMatches(String clientAppId) {
method ipMatches (line 73) | private boolean ipMatches(String clientIp) {
method labelMatches (line 77) | private boolean labelMatches(String clientLabel) {
method toString (line 81) | @Override
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/dto/InstanceConfigDTO.java
class InstanceConfigDTO (line 24) | public class InstanceConfigDTO {
method getRelease (line 29) | public ReleaseDTO getRelease() {
method setRelease (line 33) | public void setRelease(ReleaseDTO release) {
method getDataChangeLastModifiedTime (line 37) | public Date getDataChangeLastModifiedTime() {
method setDataChangeLastModifiedTime (line 41) | public void setDataChangeLastModifiedTime(Date dataChangeLastModifiedT...
method getReleaseDeliveryTime (line 45) | public Date getReleaseDeliveryTime() {
method setReleaseDeliveryTime (line 49) | public void setReleaseDeliveryTime(Date releaseDeliveryTime) {
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/dto/InstanceDTO.java
class InstanceDTO (line 25) | public class InstanceDTO {
method getId (line 40) | public long getId() {
method setId (line 44) | public void setId(long id) {
method getAppId (line 48) | public String getAppId() {
method setAppId (line 52) | public void setAppId(String appId) {
method getClusterName (line 56) | public String getClusterName() {
method setClusterName (line 60) | public void setClusterName(String clusterName) {
method getDataCenter (line 64) | public String getDataCenter() {
method setDataCenter (line 68) | public void setDataCenter(String dataCenter) {
method getIp (line 72) | public String getIp() {
method setIp (line 76) | public void setIp(String ip) {
method getConfigs (line 80) | public List<InstanceConfigDTO> getConfigs() {
method setConfigs (line 84) | public void setConfigs(List<InstanceConfigDTO> configs) {
method getDataChangeCreatedTime (line 88) | public Date getDataChangeCreatedTime() {
method setDataChangeCreatedTime (line 92) | public void setDataChangeCreatedTime(Date dataChangeCreatedTime) {
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/dto/ItemChangeSets.java
class ItemChangeSets (line 25) | public class ItemChangeSets extends BaseDTO {
method addCreateItem (line 31) | public void addCreateItem(ItemDTO item) {
method addUpdateItem (line 35) | public void addUpdateItem(ItemDTO item) {
method addDeleteItem (line 39) | public void addDeleteItem(ItemDTO item) {
method isEmpty (line 43) | public boolean isEmpty() {
method getCreateItems (line 47) | public List<ItemDTO> getCreateItems() {
method getUpdateItems (line 51) | public List<ItemDTO> getUpdateItems() {
method getDeleteItems (line 55) | public List<ItemDTO> getDeleteItems() {
method setCreateItems (line 59) | public void setCreateItems(List<ItemDTO> createItems) {
method setUpdateItems (line 63) | public void setUpdateItems(List<ItemDTO> updateItems) {
method setDeleteItems (line 67) | public void setDeleteItems(List<ItemDTO> deleteItems) {
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/dto/ItemDTO.java
class ItemDTO (line 20) | public class ItemDTO extends BaseDTO {
method ItemDTO (line 36) | public ItemDTO() {
method ItemDTO (line 40) | public ItemDTO(String key, String value, String comment, int lineNum) {
method getId (line 47) | public long getId() {
method setId (line 51) | public void setId(long id) {
method getComment (line 55) | public String getComment() {
method getKey (line 59) | public String getKey() {
method getNamespaceId (line 63) | public long getNamespaceId() {
method getValue (line 67) | public String getValue() {
method setComment (line 71) | public void setComment(String comment) {
method setKey (line 75) | public void setKey(String key) {
method setNamespaceId (line 79) | public void setNamespaceId(long namespaceId) {
method setValue (line 83) | public void setValue(String value) {
method getLineNum (line 87) | public int getLineNum() {
method setLineNum (line 91) | public void setLineNum(int lineNum) {
method getType (line 95) | public int getType() {
method setType (line 99) | public void setType(int type) {
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/dto/ItemInfoDTO.java
class ItemInfoDTO (line 20) | public class ItemInfoDTO extends BaseDTO {
method ItemInfoDTO (line 27) | public ItemInfoDTO() {}
method ItemInfoDTO (line 29) | public ItemInfoDTO(String appId, String clusterName, String namespaceN...
method getAppId (line 38) | public String getAppId() {
method setAppId (line 42) | public void setAppId(String appId) {
method getClusterName (line 46) | public String getClusterName() {
method setClusterName (line 50) | public void setClusterName(String clusterName) {
method getNamespaceName (line 54) | public String getNamespaceName() {
method setNamespaceName (line 58) | public void setNamespaceName(String namespaceName) {
method getKey (line 62) | public String getKey() {
method setKey (line 66) | public void setKey(String key) {
method getValue (line 70) | public String getValue() {
method setValue (line 74) | public void setValue(String value) {
method toString (line 78) | @Override
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/dto/NamespaceDTO.java
class NamespaceDTO (line 22) | public class NamespaceDTO extends BaseDTO {
method getId (line 33) | public long getId() {
method setId (line 37) | public void setId(long id) {
method getAppId (line 41) | public String getAppId() {
method getClusterName (line 45) | public String getClusterName() {
method getNamespaceName (line 49) | public String getNamespaceName() {
method setAppId (line 53) | public void setAppId(String appId) {
method setClusterName (line 57) | public void setClusterName(String clusterName) {
method setNamespaceName (line 61) | public void setNamespaceName(String namespaceName) {
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/dto/NamespaceLockDTO.java
class NamespaceLockDTO (line 19) | public class NamespaceLockDTO extends BaseDTO {
method getNamespaceId (line 23) | public long getNamespaceId() {
method setNamespaceId (line 27) | public void setNamespaceId(long namespaceId) {
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/dto/PageDTO.java
class PageDTO (line 27) | public class PageDTO<T> {
method PageDTO (line 33) | public PageDTO(List<T> content, Pageable pageable, long total) {
method getTotal (line 40) | public long getTotal() {
method getContent (line 44) | public List<T> getContent() {
method getPage (line 48) | public int getPage() {
method getSize (line 52) | public int getSize() {
method hasContent (line 56) | public boolean hasContent() {
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/dto/ReleaseDTO.java
class ReleaseDTO (line 19) | public class ReleaseDTO extends BaseDTO {
method getId (line 38) | public long getId() {
method setId (line 42) | public void setId(long id) {
method getReleaseKey (line 46) | public String getReleaseKey() {
method setReleaseKey (line 50) | public void setReleaseKey(String releaseKey) {
method getAppId (line 54) | public String getAppId() {
method getClusterName (line 58) | public String getClusterName() {
method getComment (line 62) | public String getComment() {
method getConfigurations (line 66) | public String getConfigurations() {
method getName (line 70) | public String getName() {
method getNamespaceName (line 74) | public String getNamespaceName() {
method setAppId (line 78) | public void setAppId(String appId) {
method setClusterName (line 82) | public void setClusterName(String clusterName) {
method setComment (line 86) | public void setComment(String comment) {
method setConfigurations (line 90) | public void setConfigurations(String configurations) {
method setName (line 94) | public void setName(String name) {
method setNamespaceName (line 98) | public void setNamespaceName(String namespaceName) {
method isAbandoned (line 102) | public boolean isAbandoned() {
method setAbandoned (line 106) | public void setAbandoned(boolean abandoned) {
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/dto/ReleaseHistoryDTO.java
class ReleaseHistoryDTO (line 22) | public class ReleaseHistoryDTO extends BaseDTO {
method ReleaseHistoryDTO (line 42) | public ReleaseHistoryDTO() {}
method getId (line 44) | public long getId() {
method setId (line 48) | public void setId(long id) {
method getAppId (line 52) | public String getAppId() {
method setAppId (line 56) | public void setAppId(String appId) {
method getClusterName (line 60) | public String getClusterName() {
method setClusterName (line 64) | public void setClusterName(String clusterName) {
method getNamespaceName (line 68) | public String getNamespaceName() {
method setNamespaceName (line 72) | public void setNamespaceName(String namespaceName) {
method getBranchName (line 76) | public String getBranchName() {
method setBranchName (line 80) | public void setBranchName(String branchName) {
method getReleaseId (line 84) | public long getReleaseId() {
method setReleaseId (line 88) | public void setReleaseId(long releaseId) {
method getPreviousReleaseId (line 92) | public long getPreviousReleaseId() {
method setPreviousReleaseId (line 96) | public void setPreviousReleaseId(long previousReleaseId) {
method getOperation (line 100) | public int getOperation() {
method setOperation (line 104) | public void setOperation(int operation) {
method getOperationContext (line 108) | public Map<String, Object> getOperationContext() {
method setOperationContext (line 112) | public void setOperationContext(Map<String, Object> operationContext) {
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/entity/App.java
class App (line 31) | @Entity
method getAppId (line 65) | public String getAppId() {
method getName (line 69) | public String getName() {
method getOrgId (line 73) | public String getOrgId() {
method getOrgName (line 77) | public String getOrgName() {
method getOwnerEmail (line 81) | public String getOwnerEmail() {
method getOwnerName (line 85) | public String getOwnerName() {
method setAppId (line 89) | public void setAppId(String appId) {
method setName (line 93) | public void setName(String name) {
method setOrgId (line 97) | public void setOrgId(String orgId) {
method setOrgName (line 101) | public void setOrgName(String orgName) {
method setOwnerEmail (line 105) | public void setOwnerEmail(String ownerEmail) {
method setOwnerName (line 109) | public void setOwnerName(String ownerName) {
method toString (line 113) | @Override
class Builder (line 120) | public static class Builder {
method Builder (line 122) | public Builder() {}
method name (line 126) | public Builder name(String name) {
method appId (line 131) | public Builder appId(String appId) {
method orgId (line 136) | public Builder orgId(String orgId) {
method orgName (line 141) | public Builder orgName(String orgName) {
method ownerName (line 146) | public Builder ownerName(String ownerName) {
method ownerEmail (line 151) | public Builder ownerEmail(String ownerEmail) {
method build (line 156) | public App build() {
method builder (line 162) | public static Builder builder() {
FILE: apollo-common/src/main/java/com/ctrip/framework/apollo/common/entity/AppNamespace.java
class AppNamespace (line 34) | @Entity
method getAppId (line 66) | public String getAppId() {
method getComment (line 70) | public String getComment() {
method getName (line 74) | public String getName() {
method setAppId (line 78) | public void setAppId(String appId) {
method setComment (line 82) | public void setComment(String comment) {
method setName (line 86) | public void setName(String name) {
method isPublic (line 90) | public boolean isPublic() {
method setPublic (line 94) | public void setPublic(boolean aPublic) {
method formatAsEnum (l
Condensed preview — 1211 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (6,959K chars).
[
{
"path": ".gitattributes",
"chars": 91,
"preview": "text=auto\n*.sh text eol=lf\n\n.github/workflows/*.lock.yml linguist-generated=true merge=ours"
},
{
"path": ".github/FUNDING.yml",
"chars": 753,
"preview": "#\n# Copyright 2024 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report_en.md",
"chars": 1221,
"preview": "---\r\nname: Bug report\r\nabout: Create a report to help us improve\r\ntitle: ''\r\nlabels: ''\r\nassignees: ''\r\n---\r\n\r\n<!-- The "
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report_zh.md",
"chars": 676,
"preview": "---\r\nname: 报告Bug/使用疑问\r\nabout: 提交Apollo Bug/使用疑问,使用这个模板\r\ntitle: ''\r\nlabels: ''\r\nassignees: ''\r\n---\r\n\r\n<!-- 这段文字不会显示在你的内容中"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request_en.md",
"chars": 615,
"preview": "---\r\nname: Feature request\r\nabout: Suggest an idea for this project\r\ntitle: ''\r\nlabels: ''\r\nassignees: ''\r\n\r\n---\r\n\r\n**Is"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request_zh.md",
"chars": 219,
"preview": "---\nname: 请求特性\nabout: 给这个项目提一些建议、想法\ntitle: ''\nlabels: ''\nassignees: ''\n---\n\n**你的特性请求和某个问题有关吗?请描述**\n\n清晰简洁地描述这个问题是什么。即,当碰到"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 734,
"preview": "## What's the purpose of this PR\n\nXXXXX\n\n## Which issue(s) this PR fixes:\nFixes #\n\n## Brief changelog\n\nXXXXX\n\nFollow thi"
},
{
"path": ".github/aw/actions-lock.json",
"chars": 360,
"preview": "{\n \"entries\": {\n \"actions/github-script@v8\": {\n \"repo\": \"actions/github-script\",\n \"version\": \"v8\",\n \""
},
{
"path": ".github/stale.yml",
"chars": 3216,
"preview": "#\n# Copyright 2024 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": ".github/workflows/build.yml",
"chars": 1924,
"preview": "#\n# Copyright 2024 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": ".github/workflows/cla.yml",
"chars": 2960,
"preview": "#\n# Copyright 2024 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": ".github/workflows/code-style-check.yml",
"chars": 1251,
"preview": "#\n# Copyright 2025 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": ".github/workflows/codeql.yml",
"chars": 2516,
"preview": "name: \"CodeQL\"\n\non:\n push:\n branches: [ 'master' ]\n pull_request:\n # The branches below must be a subset of the "
},
{
"path": ".github/workflows/commit_lint.yml",
"chars": 207,
"preview": "name: commit lint\non:\n pull_request:\n branches:\n - main\n\njobs:\n commitlint:\n runs-on: ubuntu-latest\n ste"
},
{
"path": ".github/workflows/docker-publish.yml",
"chars": 3901,
"preview": "#\n# Copyright 2024 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": ".github/workflows/docker-validation.yml",
"chars": 5666,
"preview": "#\n# Copyright 2024 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": ".github/workflows/issue-triage.lock.yml",
"chars": 49994,
"preview": "#\n# ___ _ _ \n# / _ \\ | | (_) \n# | |_| | __ _ ___ _ __ | |_ _ ___ \n#"
},
{
"path": ".github/workflows/issue-triage.md",
"chars": 3713,
"preview": "---\nname: Apollo Issue Triage\non:\n issues:\n types: [opened]\n\npermissions: read-all\nroles: all\n\nnetwork:\n allowed:\n "
},
{
"path": ".github/workflows/javascript-test.yml",
"chars": 2217,
"preview": "#\n# Copyright 2025 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": ".github/workflows/license.yml",
"chars": 1049,
"preview": "#\n# Copyright 2024 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": ".github/workflows/portal-login-e2e.yml",
"chars": 6511,
"preview": "#\n# Copyright 2026 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": ".github/workflows/portal-ui-e2e.yml",
"chars": 3664,
"preview": "#\n# Copyright 2026 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": ".github/workflows/release-packages.yml",
"chars": 4841,
"preview": "#\n# Copyright 2024 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": ".gitignore",
"chars": 317,
"preview": "*.class\n.DS_Store\napplication.pid\n\n# Mobile Tools for Java (J2ME)\n.mtj.tmp/\n\n# Package Files #\n*.jar\n*.war\n*.ear\n\n# virt"
},
{
"path": ".licenserc.yaml",
"chars": 1594,
"preview": "#\n# Copyright 2024 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": ".mergify.yml",
"chars": 2029,
"preview": "#\n# Copyright 2026 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": ".mvn/wrapper/MavenWrapperDownloader.java",
"chars": 4473,
"preview": "/*\nLicensed to the Apache Software Foundation (ASF) under one\nor more contributor license agreements. See the NOTICE fi"
},
{
"path": ".mvn/wrapper/maven-wrapper.properties",
"chars": 115,
"preview": "distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.5.4/apache-maven-3.5.4-bin.zip"
},
{
"path": "AGENTS.md",
"chars": 4101,
"preview": "# Repository Guidelines\n\n## Project Structure & Module Organization\n- Multi-module Maven repo with root `pom.xml` and se"
},
{
"path": "CHANGES.md",
"chars": 318,
"preview": "Changes by Version\n==================\nRelease Notes.\n\nApollo 3.0.0\n\n------------------\n* [Fix: include super admin in ha"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 3227,
"preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
},
{
"path": "CONTRIBUTING.md",
"chars": 2677,
"preview": "## Contributing to apollo\n\nApollo is released under the non-restrictive Apache 2.0 license, and follows a very standard "
},
{
"path": "GOVERNANCE.md",
"chars": 6024,
"preview": "# Overview \n\nApollo is a meritocratic, consensus-based community project. Anyone with an interest in the project can joi"
},
{
"path": "LICENSE",
"chars": 11357,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "README.md",
"chars": 48448,
"preview": "<img src=\"https://cdn.jsdelivr.net/gh/apolloconfig/apollo@master/doc/images/logo/logo-simple.png\" alt=\"apollo-logo\" widt"
},
{
"path": "SECURITY.md",
"chars": 596,
"preview": "# Security Policy\n\n## Reporting a Vulnerability\n\nIf you have apprehensions regarding Apollo's security or you discover v"
},
{
"path": "apollo-adminservice/pom.xml",
"chars": 5336,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n ~ Copyright 2024 Apollo Authors\n ~\n ~ Licensed under the Apache License"
},
{
"path": "apollo-adminservice/src/assembly/assembly-descriptor.xml",
"chars": 1989,
"preview": "<!--\n ~ Copyright 2024 Apollo Authors\n ~\n ~ Licensed under the Apache License, Version 2.0 (the \"License\");\n ~ you m"
},
{
"path": "apollo-adminservice/src/main/docker/Dockerfile",
"chars": 2035,
"preview": "#\n# Copyright 2024 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/AdminServiceApplication.java",
"chars": 1922,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/AdminServiceAssemblyConfiguration.java",
"chars": 1401,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/AdminServiceAutoConfiguration.java",
"chars": 2073,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/AdminServiceHealthIndicator.java",
"chars": 1359,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/ServletInitializer.java",
"chars": 1127,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceAcquireLockAspect.java",
"chars": 6133,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceUnlockAspect.java",
"chars": 6596,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/aop/PreAcquireNamespaceLock.java",
"chars": 963,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/AccessKeyController.java",
"chars": 3355,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/AppController.java",
"chars": 3850,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/AppNamespaceController.java",
"chars": 4634,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/ClusterController.java",
"chars": 4066,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/CommitController.java",
"chars": 2083,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/IndexController.java",
"chars": 1000,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/InstanceConfigController.java",
"chars": 8753,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/ItemController.java",
"chars": 11907,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/ItemSetController.java",
"chars": 1847,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/NamespaceBranchController.java",
"chars": 7064,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/NamespaceController.java",
"chars": 5718,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/NamespaceLockController.java",
"chars": 2557,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/ReleaseController.java",
"chars": 10362,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/ReleaseHistoryController.java",
"chars": 4336,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/ServerConfigController.java",
"chars": 1744,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/filter/AdminServiceAuthenticationFilter.java",
"chars": 3228,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/main/resources/adminservice.properties",
"chars": 768,
"preview": "#\n# Copyright 2024 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": "apollo-adminservice/src/main/resources/apollo-adminservice.conf",
"chars": 233,
"preview": "MODE=service\nPID_FOLDER=.\n# console appender log file folder\nLOG_FOLDER=/opt/logs/\n# console appender log file name\nLOG_"
},
{
"path": "apollo-adminservice/src/main/resources/application-consul-discovery.properties",
"chars": 863,
"preview": "#\n# Copyright 2024 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": "apollo-adminservice/src/main/resources/application-custom-defined-discovery.properties",
"chars": 643,
"preview": "#\n# Copyright 2024 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": "apollo-adminservice/src/main/resources/application-database-discovery.properties",
"chars": 778,
"preview": "#\n# Copyright 2024 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": "apollo-adminservice/src/main/resources/application-github.properties",
"chars": 758,
"preview": "#\n# Copyright 2024 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": "apollo-adminservice/src/main/resources/application-kubernetes.properties",
"chars": 642,
"preview": "#\n# Copyright 2024 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": "apollo-adminservice/src/main/resources/application-nacos-discovery.properties",
"chars": 789,
"preview": "#\n# Copyright 2024 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": "apollo-adminservice/src/main/resources/application-zookeeper-discovery.properties",
"chars": 848,
"preview": "#\n# Copyright 2024 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": "apollo-adminservice/src/main/resources/application.properties",
"chars": 1102,
"preview": "#\n# Copyright 2024 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": "apollo-adminservice/src/main/resources/application.yml",
"chars": 1700,
"preview": "#\n# Copyright 2024 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": "apollo-adminservice/src/main/resources/logback.xml",
"chars": 2118,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n ~ Copyright 2024 Apollo Authors\n ~\n ~ Licensed under the Apache License,"
},
{
"path": "apollo-adminservice/src/main/scripts/shutdown.sh",
"chars": 947,
"preview": "#!/bin/bash\n#\n# Copyright 2024 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you "
},
{
"path": "apollo-adminservice/src/main/scripts/startup.sh",
"chars": 7916,
"preview": "#!/bin/bash\n#\n# Copyright 2024 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you "
},
{
"path": "apollo-adminservice/src/test/java/com/ctrip/framework/apollo/AdminServiceTestConfiguration.java",
"chars": 1410,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/test/java/com/ctrip/framework/apollo/LocalAdminServiceApplication.java",
"chars": 1061,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/GracefulShutdownConfigurationTest.java",
"chars": 2843,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceLockTest.java",
"chars": 6026,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceUnlockAspectTest.java",
"chars": 7188,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/controller/AbstractControllerTest.java",
"chars": 2523,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/controller/AppControllerTest.java",
"chars": 6152,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/controller/AppNamespaceControllerTest.java",
"chars": 2250,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/controller/ClusterControllerTest.java",
"chars": 3076,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/controller/ControllerExceptionTest.java",
"chars": 3386,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/controller/ControllerIntegrationExceptionTest.java",
"chars": 3004,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/controller/InstanceConfigControllerTest.java",
"chars": 15340,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/controller/ItemControllerTest.java",
"chars": 7457,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/controller/ItemSetControllerTest.java",
"chars": 14719,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/controller/NamespaceControllerTest.java",
"chars": 1771,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/controller/ReleaseControllerTest.java",
"chars": 5902,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/controller/ServerConfigControllerTest.java",
"chars": 2965,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/controller/TestWebSecurityConfig.java",
"chars": 1612,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/filter/AdminServiceAuthenticationFilterTest.java",
"chars": 9390,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/filter/AdminServiceAuthenticationIntegrationTest.java",
"chars": 6411,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-adminservice/src/test/resources/application.properties",
"chars": 1446,
"preview": "#\n# Copyright 2024 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": "apollo-adminservice/src/test/resources/application.yml",
"chars": 1129,
"preview": "#\n# Copyright 2024 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": "apollo-adminservice/src/test/resources/controller/cleanup.sql",
"chars": 788,
"preview": "--\n-- Copyright 2024 Apollo Authors\n--\n-- Licensed under the Apache License, Version 2.0 (the \"License\");\n-- you may not"
},
{
"path": "apollo-adminservice/src/test/resources/controller/test-itemset.sql",
"chars": 1176,
"preview": "--\n-- Copyright 2024 Apollo Authors\n--\n-- Licensed under the Apache License, Version 2.0 (the \"License\");\n-- you may not"
},
{
"path": "apollo-adminservice/src/test/resources/controller/test-release.sql",
"chars": 1321,
"preview": "--\n-- Copyright 2024 Apollo Authors\n--\n-- Licensed under the Apache License, Version 2.0 (the \"License\");\n-- you may not"
},
{
"path": "apollo-adminservice/src/test/resources/controller/test-server-config.sql",
"chars": 685,
"preview": "--\n-- Copyright 2024 Apollo Authors\n--\n-- Licensed under the Apache License, Version 2.0 (the \"License\");\n-- you may not"
},
{
"path": "apollo-adminservice/src/test/resources/data.sql",
"chars": 3348,
"preview": "--\n-- Copyright 2024 Apollo Authors\n--\n-- Licensed under the Apache License, Version 2.0 (the \"License\");\n-- you may not"
},
{
"path": "apollo-adminservice/src/test/resources/filter/test-access-control-disabled.sql",
"chars": 791,
"preview": "--\n-- Copyright 2024 Apollo Authors\n--\n-- Licensed under the Apache License, Version 2.0 (the \"License\");\n-- you may not"
},
{
"path": "apollo-adminservice/src/test/resources/filter/test-access-control-enabled-no-token.sql",
"chars": 719,
"preview": "--\n-- Copyright 2024 Apollo Authors\n--\n-- Licensed under the Apache License, Version 2.0 (the \"License\");\n-- you may not"
},
{
"path": "apollo-adminservice/src/test/resources/filter/test-access-control-enabled.sql",
"chars": 790,
"preview": "--\n-- Copyright 2024 Apollo Authors\n--\n-- Licensed under the Apache License, Version 2.0 (the \"License\");\n-- you may not"
},
{
"path": "apollo-adminservice/src/test/resources/import.sql",
"chars": 2219,
"preview": "--\n-- Copyright 2024 Apollo Authors\n--\n-- Licensed under the Apache License, Version 2.0 (the \"License\");\n-- you may not"
},
{
"path": "apollo-adminservice/src/test/resources/logback-test.xml",
"chars": 992,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n ~ Copyright 2024 Apollo Authors\n ~\n ~ Licensed under the Apache License,"
},
{
"path": "apollo-assembly/pom.xml",
"chars": 2770,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n ~ Copyright 2024 Apollo Authors\n ~\n ~ Licensed under the Apache License"
},
{
"path": "apollo-assembly/src/main/java/com/ctrip/framework/apollo/assembly/ApolloApplication.java",
"chars": 3949,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-assembly/src/main/resources/application-database-discovery.properties",
"chars": 1000,
"preview": "#\n# Copyright 2024 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": "apollo-assembly/src/main/resources/application-github.properties",
"chars": 2024,
"preview": "#\n# Copyright 2024 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": "apollo-assembly/src/main/resources/application.properties",
"chars": 1101,
"preview": "#\n# Copyright 2024 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": "apollo-assembly/src/main/resources/application.yml",
"chars": 2162,
"preview": "#\n# Copyright 2024 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": "apollo-assembly/src/main/resources/logback.xml",
"chars": 2718,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n ~ Copyright 2024 Apollo Authors\n ~\n ~ Licensed under the Apache License,"
},
{
"path": "apollo-assembly/src/test/java/com/ctrip/framework/apollo/assembly/LocalApolloApplication.java",
"chars": 3128,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-assembly/src/test/resources/application.properties",
"chars": 1921,
"preview": "#\n# Copyright 2024 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": "apollo-assembly/src/test/resources/application.yml",
"chars": 616,
"preview": "#\n# Copyright 2024 Apollo Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use "
},
{
"path": "apollo-assembly/src/test/resources/logback-test.xml",
"chars": 992,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n ~ Copyright 2024 Apollo Authors\n ~\n ~ Licensed under the Apache License,"
},
{
"path": "apollo-audit/README.md",
"chars": 4388,
"preview": "# Features: Apollo-Audit-Log\n\nThis module provides audit log functions for other Apollo modules.\n\nOnly apolloconfig's de"
},
{
"path": "apollo-audit/apollo-audit-annotation/pom.xml",
"chars": 1144,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n ~ Copyright 2024 Apollo Authors\n ~\n ~ Licensed under the Apache License,"
},
{
"path": "apollo-audit/apollo-audit-annotation/src/main/java/com/ctrip/framework/apollo/audit/annotation/ApolloAuditLog.java",
"chars": 1868,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-annotation/src/main/java/com/ctrip/framework/apollo/audit/annotation/ApolloAuditLogDataInfluence.java",
"chars": 1336,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-annotation/src/main/java/com/ctrip/framework/apollo/audit/annotation/ApolloAuditLogDataInfluenceTable.java",
"chars": 1801,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-annotation/src/main/java/com/ctrip/framework/apollo/audit/annotation/ApolloAuditLogDataInfluenceTableField.java",
"chars": 1925,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-annotation/src/main/java/com/ctrip/framework/apollo/audit/annotation/OpType.java",
"chars": 794,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-api/pom.xml",
"chars": 1315,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n ~ Copyright 2024 Apollo Authors\n ~\n ~ Licensed under the Apache License,"
},
{
"path": "apollo-audit/apollo-audit-api/src/main/java/com/ctrip/framework/apollo/audit/api/ApolloAuditLogApi.java",
"chars": 847,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-api/src/main/java/com/ctrip/framework/apollo/audit/api/ApolloAuditLogQueryApi.java",
"chars": 3089,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-api/src/main/java/com/ctrip/framework/apollo/audit/api/ApolloAuditLogRecordApi.java",
"chars": 3077,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-api/src/main/java/com/ctrip/framework/apollo/audit/dto/ApolloAuditLogDTO.java",
"chars": 2391,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-api/src/main/java/com/ctrip/framework/apollo/audit/dto/ApolloAuditLogDataInfluenceDTO.java",
"chars": 2214,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-api/src/main/java/com/ctrip/framework/apollo/audit/dto/ApolloAuditLogDetailsDTO.java",
"chars": 1540,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-api/src/main/java/com/ctrip/framework/apollo/audit/event/ApolloAuditLogDataInfluenceEvent.java",
"chars": 1218,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/pom.xml",
"chars": 1882,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n ~ Copyright 2024 Apollo Authors\n ~\n ~ Licensed under the Apache License,"
},
{
"path": "apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/ApolloAuditProperties.java",
"chars": 979,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/ApolloAuditRegistrar.java",
"chars": 1287,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/aop/ApolloAuditSpanAspect.java",
"chars": 4349,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/component/ApolloAuditHttpInterceptor.java",
"chars": 1551,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/component/ApolloAuditLogApiJpaImpl.java",
"chars": 6415,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/component/ApolloAuditLogApiNoOpImpl.java",
"chars": 2443,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/constants/ApolloAuditConstants.java",
"chars": 1009,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/context/ApolloAuditScope.java",
"chars": 1516,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/context/ApolloAuditScopeManager.java",
"chars": 1205,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/context/ApolloAuditSpan.java",
"chars": 2315,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/context/ApolloAuditSpanContext.java",
"chars": 1938,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/context/ApolloAuditTraceContext.java",
"chars": 2101,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/context/ApolloAuditTracer.java",
"chars": 6583,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/controller/ApolloAuditController.java",
"chars": 3745,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/entity/ApolloAuditLog.java",
"chars": 3823,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/entity/ApolloAuditLogDataInfluence.java",
"chars": 3646,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/entity/BaseEntity.java",
"chars": 3535,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/listener/ApolloAuditLogDataInfluenceEventListener.java",
"chars": 1288,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/repository/ApolloAuditLogDataInfluenceRepository.java",
"chars": 1399,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/repository/ApolloAuditLogRepository.java",
"chars": 1461,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/service/ApolloAuditLogDataInfluenceService.java",
"chars": 2210,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/service/ApolloAuditLogService.java",
"chars": 3264,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/spi/ApolloAuditLogQueryApiPreAuthorizer.java",
"chars": 735,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/spi/ApolloAuditOperatorSupplier.java",
"chars": 719,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/spi/defaultimpl/ApolloAuditLogQueryApiDefaultPreAuthorizer.java",
"chars": 923,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/spi/defaultimpl/ApolloAuditOperatorDefaultSupplier.java",
"chars": 1710,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/util/ApolloAuditUtil.java",
"chars": 4522,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/test/java/com/ctrip/framework/apollo/audit/MockBeanFactory.java",
"chars": 3327,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/test/java/com/ctrip/framework/apollo/audit/MockDataInfluenceEntity.java",
"chars": 1751,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/test/java/com/ctrip/framework/apollo/audit/aop/ApolloAuditSpanAspectTest.java",
"chars": 6705,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/test/java/com/ctrip/framework/apollo/audit/component/ApolloAuditHttpInterceptorTest.java",
"chars": 2623,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/test/java/com/ctrip/framework/apollo/audit/component/ApolloAuditLogApiJpaImplTest.java",
"chars": 12020,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/test/java/com/ctrip/framework/apollo/audit/component/ApolloAuditScopeManagerTest.java",
"chars": 1695,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/test/java/com/ctrip/framework/apollo/audit/context/ApolloAuditTraceContextTest.java",
"chars": 4206,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/test/java/com/ctrip/framework/apollo/audit/context/ApolloAuditTracerTest.java",
"chars": 9502,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/test/java/com/ctrip/framework/apollo/audit/controller/ApolloAuditControllerTest.java",
"chars": 6653,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-impl/src/test/java/com/ctrip/framework/apollo/audit/spi/ApolloAuditOperatorSupplierTest.java",
"chars": 2640,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-spring-boot-starter/pom.xml",
"chars": 1492,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n ~ Copyright 2024 Apollo Authors\n ~\n ~ Licensed under the Apache License,"
},
{
"path": "apollo-audit/apollo-audit-spring-boot-starter/src/main/java/com/ctrip/framework/apollo/audit/configuration/ApolloAuditAutoConfiguration.java",
"chars": 5205,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-spring-boot-starter/src/main/java/com/ctrip/framework/apollo/audit/configuration/ApolloAuditNoOpAutoConfiguration.java",
"chars": 3551,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-audit/apollo-audit-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports",
"chars": 156,
"preview": "com.ctrip.framework.apollo.audit.configuration.ApolloAuditAutoConfiguration\ncom.ctrip.framework.apollo.audit.configurati"
},
{
"path": "apollo-audit/apollo-audit-spring-boot-starter/src/main/resources/META-INF/spring.factories",
"chars": 226,
"preview": "org.springframework.boot.autoconfigure.EnableAutoConfiguration=\\\n com.ctrip.framework.apollo.audit.configuration.Apollo"
},
{
"path": "apollo-audit/pom.xml",
"chars": 1437,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n ~ Copyright 2024 Apollo Authors\n ~\n ~ Licensed under the Apache License,"
},
{
"path": "apollo-biz/pom.xml",
"chars": 2172,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n ~ Copyright 2024 Apollo Authors\n ~\n ~ Licensed under the Apache License,"
},
{
"path": "apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/ApolloBizAssemblyConfiguration.java",
"chars": 1284,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/ApolloBizConfig.java",
"chars": 965,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/auth/WebSecurityConfig.java",
"chars": 2544,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/config/BizConfig.java",
"chars": 13012,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/AccessKey.java",
"chars": 2099,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/Audit.java",
"chars": 2190,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/Cluster.java",
"chars": 2432,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/Commit.java",
"chars": 2525,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/GrayReleaseRule.java",
"chars": 2706,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/Instance.java",
"chars": 3386,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/InstanceConfig.java",
"chars": 4338,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/Item.java",
"chars": 2515,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/JpaMapFieldJsonConverter.java",
"chars": 1521,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/Namespace.java",
"chars": 2223,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/NamespaceLock.java",
"chars": 1197,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/Privilege.java",
"chars": 1948,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/Release.java",
"chars": 3345,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/ReleaseHistory.java",
"chars": 3390,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/ReleaseMessage.java",
"chars": 2079,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
},
{
"path": "apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/ServerConfig.java",
"chars": 2159,
"preview": "/*\n * Copyright 2025 Apollo Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
}
]
// ... and 1011 more files (download for full content)
About this extraction
This page contains the full source code of the apolloconfig/apollo GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1211 files (6.3 MB), approximately 1.7M tokens, and a symbol index with 5943 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.