Showing preview only (4,780K chars total). Download the full file or copy to clipboard to get everything.
Repository: codecentric/spring-boot-admin
Branch: master
Commit: 9baececf03a2
Files: 1285
Total size: 4.2 MB
Directory structure:
gitextract_6_xkhu95/
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── CODEOWNERS
│ ├── ISSUE_TEMPLATE/
│ │ ├── spring-boot-admin-bug.md
│ │ └── spring-boot-admin-enhancement.md
│ ├── copilot-instructions.md
│ ├── milestones.sh
│ ├── release.yml
│ └── workflows/
│ ├── build-feature.yml
│ ├── build-main.yml
│ ├── deploy-documentation.yml
│ ├── issue-metrics.yml
│ ├── release-to-maven-central.yml
│ └── vulnerability-scan.yml
├── .gitignore
├── .gnupg.tar.enc
├── .mvn/
│ └── wrapper/
│ └── maven-wrapper.properties
├── CONTRIBUTING.md
├── LICENSE.txt
├── README.md
├── lombok.config
├── mvnw
├── mvnw.cmd
├── pom.xml
├── renovate.json
├── spring-boot-admin-build/
│ └── pom.xml
├── spring-boot-admin-client/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── de/
│ │ │ └── codecentric/
│ │ │ └── boot/
│ │ │ └── admin/
│ │ │ └── client/
│ │ │ ├── config/
│ │ │ │ ├── ClientProperties.java
│ │ │ │ ├── ClientRuntimeHints.java
│ │ │ │ ├── CloudFoundryApplicationProperties.java
│ │ │ │ ├── InstanceProperties.java
│ │ │ │ ├── ServiceHostType.java
│ │ │ │ ├── SpringBootAdminClientAutoConfiguration.java
│ │ │ │ ├── SpringBootAdminClientCloudFoundryAutoConfiguration.java
│ │ │ │ ├── SpringBootAdminClientEnabledCondition.java
│ │ │ │ ├── SpringNativeClientAutoConfiguration.java
│ │ │ │ └── package-info.java
│ │ │ └── registration/
│ │ │ ├── Application.java
│ │ │ ├── ApplicationFactory.java
│ │ │ ├── ApplicationRegistrator.java
│ │ │ ├── CloudFoundryApplicationFactory.java
│ │ │ ├── DefaultApplicationFactory.java
│ │ │ ├── DefaultApplicationRegistrator.java
│ │ │ ├── ReactiveApplicationFactory.java
│ │ │ ├── RegistrationApplicationListener.java
│ │ │ ├── RegistrationClient.java
│ │ │ ├── RestClientRegistrationClient.java
│ │ │ ├── ServletApplicationFactory.java
│ │ │ ├── metadata/
│ │ │ │ ├── CloudFoundryMetadataContributor.java
│ │ │ │ ├── CompositeMetadataContributor.java
│ │ │ │ ├── MetadataContributor.java
│ │ │ │ ├── StartupDateMetadataContributor.java
│ │ │ │ └── package-info.java
│ │ │ └── package-info.java
│ │ └── resources/
│ │ └── META-INF/
│ │ ├── additional-spring-configuration-metadata.json
│ │ └── spring/
│ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ └── test/
│ ├── java/
│ │ └── de/
│ │ └── codecentric/
│ │ └── boot/
│ │ └── admin/
│ │ └── client/
│ │ ├── AbstractClientApplicationTest.java
│ │ ├── ClientReactiveApplicationTest.java
│ │ ├── ClientServletApplicationTest.java
│ │ ├── config/
│ │ │ ├── ClientPropertiesTest.java
│ │ │ ├── CloudFoundryApplicationPropertiesTest.java
│ │ │ ├── SpringBootAdminClientAutoConfigurationTest.java
│ │ │ ├── SpringBootAdminClientCloudFoundryAutoConfigurationTest.java
│ │ │ ├── SpringBootAdminClientEnabledConditionTest.java
│ │ │ └── SpringBootAdminClientRegistrationClientAutoConfigurationTest.java
│ │ └── registration/
│ │ ├── AbstractRegistrationClientTest.java
│ │ ├── ApplicationTest.java
│ │ ├── CloudFoundryApplicationFactoryTest.java
│ │ ├── DefaultApplicationFactoryTest.java
│ │ ├── DefaultApplicationRegistratorTest.java
│ │ ├── ReactiveApplicationFactoryTest.java
│ │ ├── RegistrationApplicationListenerTest.java
│ │ ├── RestClientRegistrationClientTest.java
│ │ ├── ServletApplicationFactoryTest.java
│ │ └── metadata/
│ │ ├── CloudFoundryMetadataContributorTest.java
│ │ ├── CompositeMetadataContributorTest.java
│ │ └── StartupDateMetadataContributorTest.java
│ └── resources/
│ ├── application.yml
│ ├── junit-platform.properties
│ └── logback-test.xml
├── spring-boot-admin-dependencies/
│ └── pom.xml
├── spring-boot-admin-docs/
│ ├── pom.xml
│ └── src/
│ └── site/
│ ├── .gitignore
│ ├── README.md
│ ├── babel.config.js
│ ├── current/
│ │ ├── 404.template.html
│ │ └── index.template.html
│ ├── docs/
│ │ ├── 01-getting-started/
│ │ │ ├── 10-server-setup.md
│ │ │ ├── 20-client-registration.md
│ │ │ ├── 50-snapshots.md
│ │ │ ├── _category_.json
│ │ │ └── index.md
│ │ ├── 02-server/
│ │ │ ├── 01-server.mdx
│ │ │ ├── 02-security.md
│ │ │ ├── 10-Events.mdx
│ │ │ ├── 20-Clustering.mdx
│ │ │ ├── 30-persistence.md
│ │ │ ├── 40-instance-registry.md
│ │ │ ├── 99-server-properties.mdx
│ │ │ ├── _category_.json
│ │ │ ├── index.md
│ │ │ └── notifications/
│ │ │ ├── 90-custom-notifiers.md
│ │ │ ├── _category_.json
│ │ │ ├── index.mdx
│ │ │ ├── notifier-dingtalk.mdx
│ │ │ ├── notifier-discord.mdx
│ │ │ ├── notifier-hipchat.mdx
│ │ │ ├── notifier-lets-chat.mdx
│ │ │ ├── notifier-mail.mdx
│ │ │ ├── notifier-mattermost.mdx
│ │ │ ├── notifier-msteams.mdx
│ │ │ ├── notifier-rocketchat.mdx
│ │ │ ├── notifier-slack.mdx
│ │ │ ├── notifier-telegram.mdx
│ │ │ └── notifier-webex.mdx
│ │ ├── 03-client/
│ │ │ ├── 10-client-features.md
│ │ │ ├── 20-registration.md
│ │ │ ├── 30-metadata.md
│ │ │ ├── 40-service-discovery.md
│ │ │ ├── 80-configuration.md
│ │ │ ├── 99-properties.mdx
│ │ │ ├── _category_.json
│ │ │ └── index.md
│ │ ├── 04-integration/
│ │ │ ├── 10-eureka.md
│ │ │ ├── 20-consul.md
│ │ │ ├── 30-zookeeper.md
│ │ │ ├── 40-hazelcast.md
│ │ │ ├── _category_.json
│ │ │ └── index.md
│ │ ├── 05-security/
│ │ │ ├── 10-server-authentication.md
│ │ │ ├── 20-actuator-security.md
│ │ │ ├── 30-csrf-protection.md
│ │ │ ├── _category_.json
│ │ │ └── index.md
│ │ ├── 06-customization/
│ │ │ ├── _category_.json
│ │ │ ├── index.md
│ │ │ ├── monitoring/
│ │ │ │ ├── 01-instance-filters.md
│ │ │ │ ├── 02-custom-health-status.md
│ │ │ │ └── _category_.json
│ │ │ └── server/
│ │ │ ├── 04-endpoint-detection.md
│ │ │ └── _category_.json
│ │ ├── 08-third-party/
│ │ │ ├── _category_.json
│ │ │ ├── index.md
│ │ │ └── pyctuator.md
│ │ ├── 09-samples/
│ │ │ ├── 10-sample-servlet.md
│ │ │ ├── 20-sample-reactive.md
│ │ │ ├── 30-sample-eureka.md
│ │ │ ├── 40-sample-consul.md
│ │ │ ├── 50-sample-zookeeper.md
│ │ │ ├── 60-sample-hazelcast.md
│ │ │ ├── 70-sample-custom-ui.md
│ │ │ ├── _category_.json
│ │ │ └── index.md
│ │ ├── 10-reference/
│ │ │ ├── 10-event-types.md
│ │ │ ├── 20-rest-api.md
│ │ │ ├── 60-actuator-endpoints.mdx
│ │ │ ├── _category_.json
│ │ │ └── index.md
│ │ ├── 11-upgrading/
│ │ │ ├── 01-spring-boot-admin-4.md
│ │ │ ├── _category_.json
│ │ │ └── index.md
│ │ ├── index.mdx
│ │ └── index.module.css
│ ├── docusaurus.config.ts
│ ├── package.json
│ ├── sidebars.ts
│ ├── src/
│ │ ├── components/
│ │ │ ├── CopyButton.module.css
│ │ │ ├── CopyButton.tsx
│ │ │ ├── HexMesh.module.css
│ │ │ ├── HexMesh.tsx
│ │ │ ├── PropertyTable.module.css
│ │ │ ├── PropertyTable.tsx
│ │ │ ├── Screenshot.module.css
│ │ │ └── Screenshot.tsx
│ │ ├── css/
│ │ │ └── custom.css
│ │ ├── global.d.ts
│ │ ├── pages/
│ │ │ ├── faq.md
│ │ │ ├── impressum.md
│ │ │ ├── index.tsx
│ │ │ ├── markdown-page.md
│ │ │ └── privacy.md
│ │ ├── propertiesUtil.ts
│ │ └── theme/
│ │ ├── DocCard/
│ │ │ ├── index.js
│ │ │ └── styles.module.css
│ │ └── MDXComponents.ts
│ ├── static/
│ │ └── .nojekyll
│ └── tsconfig.json
├── spring-boot-admin-samples/
│ ├── pom.xml
│ ├── spring-boot-admin-sample-consul/
│ │ ├── docker-compose.yml
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── de/
│ │ │ │ └── codecentric/
│ │ │ │ └── boot/
│ │ │ │ └── admin/
│ │ │ │ └── sample/
│ │ │ │ └── SpringBootAdminConsulApplication.java
│ │ │ └── resources/
│ │ │ ├── application-dev.yml
│ │ │ ├── application-insecure.yml
│ │ │ ├── application-secure.yml
│ │ │ └── application.yml
│ │ └── test/
│ │ └── java/
│ │ └── de/
│ │ └── codecentric/
│ │ └── boot/
│ │ └── admin/
│ │ └── sample/
│ │ └── SpringBootAdminConsulApplicationTest.java
│ ├── spring-boot-admin-sample-custom-ui/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── pom.xml
│ │ ├── src/
│ │ │ ├── custom-endpoint.vue
│ │ │ ├── custom-subitem.vue
│ │ │ ├── custom.css
│ │ │ ├── custom.vue
│ │ │ ├── handle.vue
│ │ │ ├── index.js
│ │ │ └── routes.txt
│ │ └── vite.config.js
│ ├── spring-boot-admin-sample-eureka/
│ │ ├── docker-compose.yml
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── docker/
│ │ │ │ └── Dockerfile
│ │ │ ├── java/
│ │ │ │ └── de/
│ │ │ │ └── codecentric/
│ │ │ │ └── boot/
│ │ │ │ └── admin/
│ │ │ │ └── SpringBootAdminEurekaApplication.java
│ │ │ └── resources/
│ │ │ ├── application-dev.yml
│ │ │ ├── application-insecure.yml
│ │ │ ├── application-secure.yml
│ │ │ └── application.yml
│ │ └── test/
│ │ └── java/
│ │ └── de/
│ │ └── codecentric/
│ │ └── boot/
│ │ └── admin/
│ │ └── SpringBootAdminEurekaApplicationTest.java
│ ├── spring-boot-admin-sample-hazelcast/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── de/
│ │ │ │ └── codecentric/
│ │ │ │ └── boot/
│ │ │ │ └── admin/
│ │ │ │ └── sample/
│ │ │ │ └── SpringBootAdminHazelcastApplication.java
│ │ │ └── resources/
│ │ │ ├── application-dev.yml
│ │ │ ├── application-insecure.yml
│ │ │ ├── application-secure.yml
│ │ │ └── application.yml
│ │ └── test/
│ │ └── java/
│ │ └── de/
│ │ └── codecentric/
│ │ └── boot/
│ │ └── admin/
│ │ └── sample/
│ │ └── SpringBootAdminHazelcastApplicationTest.java
│ ├── spring-boot-admin-sample-reactive/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── de/
│ │ │ │ └── codecentric/
│ │ │ │ └── boot/
│ │ │ │ └── admin/
│ │ │ │ └── sample/
│ │ │ │ └── SpringBootAdminReactiveApplication.java
│ │ │ └── resources/
│ │ │ ├── application-dev.yml
│ │ │ ├── application-insecure.yml
│ │ │ ├── application-secure.yml
│ │ │ └── application.yml
│ │ └── test/
│ │ └── java/
│ │ └── de/
│ │ └── codecentric/
│ │ └── boot/
│ │ └── admin/
│ │ └── sample/
│ │ └── SpringBootAdminReactiveApplicationTest.java
│ ├── spring-boot-admin-sample-servlet/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── de/
│ │ │ │ └── codecentric/
│ │ │ │ └── boot/
│ │ │ │ └── admin/
│ │ │ │ └── sample/
│ │ │ │ ├── CustomCsrfFilter.java
│ │ │ │ ├── CustomEndpoint.java
│ │ │ │ ├── CustomNotifier.java
│ │ │ │ ├── NotifierConfig.java
│ │ │ │ ├── SecurityPermitAllConfig.java
│ │ │ │ ├── SecuritySecureConfig.java
│ │ │ │ └── SpringBootAdminServletApplication.java
│ │ │ └── resources/
│ │ │ ├── application-dev.yml
│ │ │ ├── application-insecure.yml
│ │ │ ├── application-secure.yml
│ │ │ ├── application-themed.yml
│ │ │ └── application.yml
│ │ └── test/
│ │ └── java/
│ │ └── de/
│ │ └── codecentric/
│ │ └── boot/
│ │ └── admin/
│ │ └── sample/
│ │ └── SpringBootAdminServletApplicationTest.java
│ ├── spring-boot-admin-sample-servlet-graalvm/
│ │ ├── Readme.md
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── de/
│ │ │ └── codecentric/
│ │ │ └── boot/
│ │ │ └── admin/
│ │ │ └── sample/
│ │ │ └── SpringBootAdminServletApplication.java
│ │ └── resources/
│ │ └── application.yml
│ ├── spring-boot-admin-sample-war/
│ │ ├── .gitignore
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── de/
│ │ │ └── codecentric/
│ │ │ └── boot/
│ │ │ └── admin/
│ │ │ └── sample/
│ │ │ └── SpringBootAdminWarApplication.java
│ │ └── resources/
│ │ ├── application-dev.yml
│ │ ├── application-insecure.yml
│ │ ├── application-secure.yml
│ │ └── application.yml
│ └── spring-boot-admin-sample-zookeeper/
│ ├── docker-compose.yml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── de/
│ │ │ └── codecentric/
│ │ │ └── boot/
│ │ │ └── admin/
│ │ │ └── sample/
│ │ │ └── SpringBootAdminZookeeperApplication.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── de/
│ └── codecentric/
│ └── boot/
│ └── admin/
│ └── sample/
│ └── SpringBootAdminZookeeperApplicationTest.java
├── spring-boot-admin-server/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── de/
│ │ │ └── codecentric/
│ │ │ └── boot/
│ │ │ └── admin/
│ │ │ └── server/
│ │ │ ├── config/
│ │ │ │ ├── AdminServerAutoConfiguration.java
│ │ │ │ ├── AdminServerCloudFoundryAutoConfiguration.java
│ │ │ │ ├── AdminServerHazelcastAutoConfiguration.java
│ │ │ │ ├── AdminServerInstanceWebClientConfiguration.java
│ │ │ │ ├── AdminServerMarkerConfiguration.java
│ │ │ │ ├── AdminServerNotifierAutoConfiguration.java
│ │ │ │ ├── AdminServerProperties.java
│ │ │ │ ├── AdminServerWebConfiguration.java
│ │ │ │ ├── EnableAdminServer.java
│ │ │ │ ├── SpringBootAdminServerEnabledCondition.java
│ │ │ │ └── package-info.java
│ │ │ ├── domain/
│ │ │ │ ├── entities/
│ │ │ │ │ ├── Application.java
│ │ │ │ │ ├── EventsourcingInstanceRepository.java
│ │ │ │ │ ├── Instance.java
│ │ │ │ │ ├── InstanceRepository.java
│ │ │ │ │ ├── SnapshottingInstanceRepository.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── events/
│ │ │ │ │ ├── InstanceDeregisteredEvent.java
│ │ │ │ │ ├── InstanceEndpointsDetectedEvent.java
│ │ │ │ │ ├── InstanceEvent.java
│ │ │ │ │ ├── InstanceInfoChangedEvent.java
│ │ │ │ │ ├── InstanceRegisteredEvent.java
│ │ │ │ │ ├── InstanceRegistrationUpdatedEvent.java
│ │ │ │ │ ├── InstanceStatusChangedEvent.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── values/
│ │ │ │ ├── BuildVersion.java
│ │ │ │ ├── Endpoint.java
│ │ │ │ ├── Endpoints.java
│ │ │ │ ├── Info.java
│ │ │ │ ├── InstanceId.java
│ │ │ │ ├── Registration.java
│ │ │ │ ├── StatusInfo.java
│ │ │ │ ├── Tags.java
│ │ │ │ └── package-info.java
│ │ │ ├── eventstore/
│ │ │ │ ├── ConcurrentMapEventStore.java
│ │ │ │ ├── HazelcastEventStore.java
│ │ │ │ ├── InMemoryEventStore.java
│ │ │ │ ├── InstanceEventPublisher.java
│ │ │ │ ├── InstanceEventStore.java
│ │ │ │ ├── OptimisticLockingException.java
│ │ │ │ └── package-info.java
│ │ │ ├── notify/
│ │ │ │ ├── AbstractEventNotifier.java
│ │ │ │ ├── AbstractStatusChangeNotifier.java
│ │ │ │ ├── CompositeNotifier.java
│ │ │ │ ├── DingTalkNotifier.java
│ │ │ │ ├── DiscordNotifier.java
│ │ │ │ ├── FeiShuNotifier.java
│ │ │ │ ├── HazelcastNotificationTrigger.java
│ │ │ │ ├── HipchatNotifier.java
│ │ │ │ ├── LetsChatNotifier.java
│ │ │ │ ├── LoggingNotifier.java
│ │ │ │ ├── MailNotifier.java
│ │ │ │ ├── MattermostNotifier.java
│ │ │ │ ├── MicrosoftTeamsNotifier.java
│ │ │ │ ├── NotificationTrigger.java
│ │ │ │ ├── Notifier.java
│ │ │ │ ├── NotifierProxyProperties.java
│ │ │ │ ├── OpsGenieNotifier.java
│ │ │ │ ├── PagerdutyNotifier.java
│ │ │ │ ├── RemindingNotifier.java
│ │ │ │ ├── RocketChatNotifier.java
│ │ │ │ ├── SlackNotifier.java
│ │ │ │ ├── TelegramNotifier.java
│ │ │ │ ├── WebexNotifier.java
│ │ │ │ ├── filter/
│ │ │ │ │ ├── AbstractContentNotifier.java
│ │ │ │ │ ├── AbstractNotificationFilter.java
│ │ │ │ │ ├── ApplicationNameNotificationFilter.java
│ │ │ │ │ ├── ExpiringNotificationFilter.java
│ │ │ │ │ ├── FilteringNotifier.java
│ │ │ │ │ ├── InstanceIdNotificationFilter.java
│ │ │ │ │ ├── NotificationFilter.java
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ └── web/
│ │ │ │ │ ├── NotificationFilterController.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── package-info.java
│ │ │ ├── services/
│ │ │ │ ├── AbstractEventHandler.java
│ │ │ │ ├── ApiMediaTypeHandler.java
│ │ │ │ ├── ApplicationRegistry.java
│ │ │ │ ├── CloudFoundryInstanceIdGenerator.java
│ │ │ │ ├── EndpointDetectionTrigger.java
│ │ │ │ ├── EndpointDetector.java
│ │ │ │ ├── HashingInstanceUrlIdGenerator.java
│ │ │ │ ├── InfoUpdateTrigger.java
│ │ │ │ ├── InfoUpdater.java
│ │ │ │ ├── InstanceFilter.java
│ │ │ │ ├── InstanceIdGenerator.java
│ │ │ │ ├── InstanceRegistry.java
│ │ │ │ ├── IntervalCheck.java
│ │ │ │ ├── StatusUpdateTrigger.java
│ │ │ │ ├── StatusUpdater.java
│ │ │ │ ├── endpoints/
│ │ │ │ │ ├── ChainingStrategy.java
│ │ │ │ │ ├── EndpointDetectionStrategy.java
│ │ │ │ │ ├── ProbeEndpointsStrategy.java
│ │ │ │ │ ├── QueryIndexEndpointStrategy.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── package-info.java
│ │ │ ├── utils/
│ │ │ │ └── jackson/
│ │ │ │ ├── AdminServerModule.java
│ │ │ │ ├── BuildVersionMixin.java
│ │ │ │ ├── EndpointMixin.java
│ │ │ │ ├── EndpointsMixin.java
│ │ │ │ ├── InfoMixin.java
│ │ │ │ ├── InstanceDeregisteredEventMixin.java
│ │ │ │ ├── InstanceEndpointsDetectedEventMixin.java
│ │ │ │ ├── InstanceEventMixin.java
│ │ │ │ ├── InstanceIdMixin.java
│ │ │ │ ├── InstanceInfoChangedEventMixin.java
│ │ │ │ ├── InstanceRegisteredEventMixin.java
│ │ │ │ ├── InstanceRegistrationUpdatedEventMixin.java
│ │ │ │ ├── InstanceStatusChangedEventMixin.java
│ │ │ │ ├── RegistrationBeanSerializerModifier.java
│ │ │ │ ├── RegistrationDeserializer.java
│ │ │ │ ├── SanitizingMapSerializer.java
│ │ │ │ ├── StatusInfoMixin.java
│ │ │ │ ├── TagsMixin.java
│ │ │ │ └── package-info.java
│ │ │ └── web/
│ │ │ ├── AdminController.java
│ │ │ ├── ApplicationsController.java
│ │ │ ├── HttpHeaderFilter.java
│ │ │ ├── InstanceWebProxy.java
│ │ │ ├── InstancesController.java
│ │ │ ├── PathUtils.java
│ │ │ ├── client/
│ │ │ │ ├── BasicAuthHttpHeaderProvider.java
│ │ │ │ ├── CloudFoundryHttpHeaderProvider.java
│ │ │ │ ├── CompositeHttpHeadersProvider.java
│ │ │ │ ├── HttpHeadersProvider.java
│ │ │ │ ├── InstanceExchangeFilterFunction.java
│ │ │ │ ├── InstanceExchangeFilterFunctions.java
│ │ │ │ ├── InstanceWebClient.java
│ │ │ │ ├── InstanceWebClientCustomizer.java
│ │ │ │ ├── LegacyEndpointConverter.java
│ │ │ │ ├── LegacyEndpointConverters.java
│ │ │ │ ├── RefreshInstancesEvent.java
│ │ │ │ ├── cookies/
│ │ │ │ │ ├── CookieStoreCleanupTrigger.java
│ │ │ │ │ ├── JdkPerInstanceCookieStore.java
│ │ │ │ │ ├── PerInstanceCookieStore.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── exception/
│ │ │ │ │ ├── InstanceWebClientException.java
│ │ │ │ │ ├── ResolveEndpointException.java
│ │ │ │ │ ├── ResolveInstanceException.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── package-info.java
│ │ │ │ └── reactive/
│ │ │ │ ├── CompositeReactiveHttpHeadersProvider.java
│ │ │ │ └── ReactiveHttpHeadersProvider.java
│ │ │ ├── package-info.java
│ │ │ ├── reactive/
│ │ │ │ ├── AdminControllerHandlerMapping.java
│ │ │ │ ├── InstancesProxyController.java
│ │ │ │ └── package-info.java
│ │ │ └── servlet/
│ │ │ ├── AdminControllerHandlerMapping.java
│ │ │ ├── InstancesProxyController.java
│ │ │ └── package-info.java
│ │ └── resources/
│ │ └── META-INF/
│ │ ├── additional-spring-configuration-metadata.json
│ │ ├── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── spring-boot-admin-server/
│ │ └── mail/
│ │ └── status-changed.html
│ └── test/
│ ├── java/
│ │ └── de/
│ │ └── codecentric/
│ │ └── boot/
│ │ └── admin/
│ │ └── server/
│ │ ├── AbstractAdminApplicationTest.java
│ │ ├── AdminApplicationHazelcastTest.java
│ │ ├── AdminReactiveApplicationTest.java
│ │ ├── AdminServletApplicationTest.java
│ │ ├── config/
│ │ │ ├── AdminServerAutoConfigurationTest.java
│ │ │ ├── AdminServerCloudFoundryAutoConfigurationTest.java
│ │ │ ├── AdminServerInstanceWebClientConfigurationTest.java
│ │ │ ├── AdminServerNotifierAutoConfigurationTest.java
│ │ │ ├── AdminServerPropertiesTest.java
│ │ │ └── SpringBootAdminServerEnabledConditionTest.java
│ │ ├── domain/
│ │ │ ├── entities/
│ │ │ │ ├── AbstractInstanceRepositoryTest.java
│ │ │ │ ├── EventsourcingInstanceRepositoryTest.java
│ │ │ │ ├── InstanceTest.java
│ │ │ │ └── SnapshottingInstanceRepositoryTest.java
│ │ │ └── values/
│ │ │ ├── BuildVersionTest.java
│ │ │ ├── EndpointTest.java
│ │ │ ├── EndpointsTest.java
│ │ │ ├── InfoTest.java
│ │ │ ├── InstanceIdTest.java
│ │ │ ├── RegistrationTest.java
│ │ │ ├── StatusInfoTest.java
│ │ │ └── TagsTest.java
│ │ ├── eventstore/
│ │ │ ├── AbstractEventStoreTest.java
│ │ │ ├── HazelcastEventStoreTest.java
│ │ │ ├── HazelcastEventStoreWithClientConfigTest.java
│ │ │ ├── HazelcastEventStoreWithServerConfigTest.java
│ │ │ └── InMemoryEventStoreTest.java
│ │ ├── notify/
│ │ │ ├── CompositeNotifierTest.java
│ │ │ ├── DingTalkNotifierTest.java
│ │ │ ├── DiscordNotifierTest.java
│ │ │ ├── FeiShuNotifierTest.java
│ │ │ ├── HazelcastNotificationTriggerTest.java
│ │ │ ├── HipchatNotifierTest.java
│ │ │ ├── LetsChatNotifierTest.java
│ │ │ ├── MailNotifierIntegrationTest.java
│ │ │ ├── MailNotifierTest.java
│ │ │ ├── MattermostNotifierTest.java
│ │ │ ├── MicrosoftTeamsNotifierTest.java
│ │ │ ├── NotificationTriggerTest.java
│ │ │ ├── OpsGenieNotifierTest.java
│ │ │ ├── PagerdutyNotifierTest.java
│ │ │ ├── RemindingNotifierTest.java
│ │ │ ├── RocketChatNotifierTest.java
│ │ │ ├── SlackNotifierTest.java
│ │ │ ├── TelegramNotifierTest.java
│ │ │ ├── TestNotifier.java
│ │ │ ├── WebexNotifierTest.java
│ │ │ └── filter/
│ │ │ ├── FilteringNotifierTest.java
│ │ │ ├── InstanceIdNotificationFilterTest.java
│ │ │ ├── InstanceNameNotificationFilterTest.java
│ │ │ └── web/
│ │ │ └── NotificationFilterControllerTest.java
│ │ ├── services/
│ │ │ ├── AbstractEventHandlerTest.java
│ │ │ ├── ApplicationRegistryTest.java
│ │ │ ├── CloudFoundryInstanceIdGeneratorTest.java
│ │ │ ├── EndpointDetectionTriggerTest.java
│ │ │ ├── EndpointDetectorTest.java
│ │ │ ├── InfoUpdateTriggerTest.java
│ │ │ ├── InfoUpdaterTest.java
│ │ │ ├── InstanceRegistryTest.java
│ │ │ ├── IntervalCheckTest.java
│ │ │ ├── StatusUpdateTriggerTest.java
│ │ │ ├── StatusUpdaterTest.java
│ │ │ └── endpoints/
│ │ │ ├── ChainingStrategyTest.java
│ │ │ ├── ProbeEndpointsStrategyTest.java
│ │ │ └── QueryIndexEndpointStrategyTest.java
│ │ ├── utils/
│ │ │ └── jackson/
│ │ │ ├── BuildVersionMixinTest.java
│ │ │ ├── EndpointMixinTest.java
│ │ │ ├── EndpointsMixinTest.java
│ │ │ ├── InfoMixinTest.java
│ │ │ ├── InstanceDeregisteredEventMixinTest.java
│ │ │ ├── InstanceEndpointsDetectedEventMixinTest.java
│ │ │ ├── InstanceEventMixinTest.java
│ │ │ ├── InstanceIdMixinTest.java
│ │ │ ├── InstanceInfoChangedEventMixinTest.java
│ │ │ ├── InstanceRegisteredEventMixinTest.java
│ │ │ ├── InstanceRegistrationUpdatedEventMixinTest.java
│ │ │ ├── InstanceStatusChangedEventMixinTest.java
│ │ │ ├── RegistrationDeserializerTest.java
│ │ │ ├── StatusInfoMixinTest.java
│ │ │ └── TagsMixinTest.java
│ │ └── web/
│ │ ├── AbstractInstancesProxyControllerIntegrationTest.java
│ │ ├── ConnectionCloseExtension.java
│ │ ├── InstancesControllerIntegrationTest.java
│ │ ├── PathUtilsTest.java
│ │ ├── client/
│ │ │ ├── BasicAuthHttpHeaderProviderTest.java
│ │ │ ├── CloudFoundryHttpHeaderProviderTest.java
│ │ │ ├── CompositeHttpHeadersProviderTest.java
│ │ │ ├── InstanceExchangeFilterFunctionsTest.java
│ │ │ ├── InstanceWebClientTest.java
│ │ │ ├── LegacyEndpointConvertersTest.java
│ │ │ ├── cookies/
│ │ │ │ ├── CookieStoreCleanupTriggerTest.java
│ │ │ │ └── JdkPerInstanceCookieStoreTest.java
│ │ │ └── reactive/
│ │ │ └── CompositeReactiveHttpHeadersProviderTest.java
│ │ ├── reactive/
│ │ │ └── InstancesProxyControllerIntegrationTest.java
│ │ └── servlet/
│ │ └── InstancesProxyControllerIntegrationTest.java
│ └── resources/
│ ├── application.yml
│ ├── de/
│ │ └── codecentric/
│ │ └── boot/
│ │ └── admin/
│ │ └── server/
│ │ ├── junit-platform.properties
│ │ ├── notify/
│ │ │ ├── allowed-file.html
│ │ │ ├── custom-mail.html
│ │ │ ├── expected-custom-mail
│ │ │ ├── expected-default-mail
│ │ │ └── vulnerable-file.html
│ │ └── web/
│ │ └── client/
│ │ ├── beans-expected.json
│ │ ├── beans-legacy.json
│ │ ├── configprops-expected.json
│ │ ├── configprops-legacy.json
│ │ ├── env-expected.json
│ │ ├── env-legacy.json
│ │ ├── flyway-expected.json
│ │ ├── flyway-legacy.json
│ │ ├── health-expected.json
│ │ ├── health-legacy.json
│ │ ├── httptrace-expected.json
│ │ ├── httptrace-legacy.json
│ │ ├── liquibase-expected.json
│ │ ├── liquibase-legacy.json
│ │ ├── mappings-expected.json
│ │ ├── mappings-legacy.json
│ │ ├── threaddump-expected.json
│ │ └── threaddump-legacy.json
│ ├── logback-test.xml
│ └── server-config-test.properties
├── spring-boot-admin-server-cloud/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── de/
│ │ │ └── codecentric/
│ │ │ └── boot/
│ │ │ └── admin/
│ │ │ └── server/
│ │ │ └── cloud/
│ │ │ ├── config/
│ │ │ │ ├── AdminServerDiscoveryAutoConfiguration.java
│ │ │ │ └── package-info.java
│ │ │ └── discovery/
│ │ │ ├── DefaultServiceInstanceConverter.java
│ │ │ ├── EurekaServiceInstanceConverter.java
│ │ │ ├── InstanceDiscoveryListener.java
│ │ │ ├── KubernetesServiceInstanceConverter.java
│ │ │ ├── ServiceInstanceConverter.java
│ │ │ └── package-info.java
│ │ └── resources/
│ │ └── META-INF/
│ │ ├── additional-spring-configuration-metadata.json
│ │ └── spring/
│ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ └── test/
│ ├── java/
│ │ └── de/
│ │ └── codecentric/
│ │ └── boot/
│ │ └── admin/
│ │ └── server/
│ │ └── cloud/
│ │ ├── AdminApplicationDiscoveryTest.java
│ │ ├── config/
│ │ │ └── AdminServerDiscoveryAutoConfigurationTest.java
│ │ └── discovery/
│ │ ├── DefaultServiceInstanceConverterTest.java
│ │ ├── EurekaServiceInstanceConverterTest.java
│ │ ├── InstanceDiscoveryListenerTest.java
│ │ └── KubernetesServiceInstanceConverterTest.java
│ └── resources/
│ ├── application.yml
│ └── logback-test.xml
├── spring-boot-admin-server-ui/
│ ├── .gitignore
│ ├── .npmrc
│ ├── .nvmrc
│ ├── .prettierrc.json
│ ├── .storybook/
│ │ ├── main.js
│ │ ├── preview-head.html
│ │ ├── preview.js
│ │ └── storybook.css
│ ├── README.md
│ ├── components.d.ts
│ ├── eslint.config.mjs
│ ├── package.json
│ ├── pom.xml
│ ├── postcss.config.js
│ ├── src/
│ │ ├── main/
│ │ │ ├── frontend/
│ │ │ │ ├── HealthStatus.ts
│ │ │ │ ├── components/
│ │ │ │ │ ├── ActionScope.ts
│ │ │ │ │ ├── __snapshots__/
│ │ │ │ │ │ └── sba-formatted-obj.spec.ts.snap
│ │ │ │ │ ├── font-awesome-icon.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── sba-accordion.spec.ts
│ │ │ │ │ ├── sba-accordion.stories.ts
│ │ │ │ │ ├── sba-accordion.vue
│ │ │ │ │ ├── sba-action-button-scoped.spec.tsx
│ │ │ │ │ ├── sba-action-button-scoped.stories.ts
│ │ │ │ │ ├── sba-action-button-scoped.vue
│ │ │ │ │ ├── sba-alert.stories.ts
│ │ │ │ │ ├── sba-alert.vue
│ │ │ │ │ ├── sba-button-group.stories.ts
│ │ │ │ │ ├── sba-button-group.vue
│ │ │ │ │ ├── sba-button.stories.ts
│ │ │ │ │ ├── sba-button.vue
│ │ │ │ │ ├── sba-checkbox.stories.ts
│ │ │ │ │ ├── sba-checkbox.vue
│ │ │ │ │ ├── sba-confirm-button.spec.ts
│ │ │ │ │ ├── sba-confirm-button.stories.ts
│ │ │ │ │ ├── sba-confirm-button.vue
│ │ │ │ │ ├── sba-dropdown/
│ │ │ │ │ │ ├── sba-dropdown-divider.vue
│ │ │ │ │ │ ├── sba-dropdown-item.vue
│ │ │ │ │ │ ├── sba-dropdown.stories.ts
│ │ │ │ │ │ └── sba-dropdown.vue
│ │ │ │ │ ├── sba-formatted-obj.spec.ts
│ │ │ │ │ ├── sba-formatted-obj.vue
│ │ │ │ │ ├── sba-icon-button.stories.ts
│ │ │ │ │ ├── sba-icon-button.vue
│ │ │ │ │ ├── sba-input.stories.ts
│ │ │ │ │ ├── sba-input.vue
│ │ │ │ │ ├── sba-key-value-table.stories.ts
│ │ │ │ │ ├── sba-key-value-table.vue
│ │ │ │ │ ├── sba-loading-spinner.vue
│ │ │ │ │ ├── sba-modal.spec.ts
│ │ │ │ │ ├── sba-modal.stories.ts
│ │ │ │ │ ├── sba-modal.vue
│ │ │ │ │ ├── sba-nav/
│ │ │ │ │ │ ├── sba-nav-dropdown.stories.ts
│ │ │ │ │ │ ├── sba-nav-dropdown.vue
│ │ │ │ │ │ ├── sba-nav-item.stories.ts
│ │ │ │ │ │ └── sba-nav-item.vue
│ │ │ │ │ ├── sba-navbar/
│ │ │ │ │ │ ├── sba-navbar-brand.vue
│ │ │ │ │ │ ├── sba-navbar-nav.vue
│ │ │ │ │ │ ├── sba-navbar-toggle.stories.ts
│ │ │ │ │ │ ├── sba-navbar-toggle.vue
│ │ │ │ │ │ ├── sba-navbar.stories.ts
│ │ │ │ │ │ └── sba-navbar.vue
│ │ │ │ │ ├── sba-pagination-nav.spec.ts
│ │ │ │ │ ├── sba-pagination-nav.stories.ts
│ │ │ │ │ ├── sba-pagination-nav.vue
│ │ │ │ │ ├── sba-panel.stories.ts
│ │ │ │ │ ├── sba-panel.vue
│ │ │ │ │ ├── sba-select.stories.ts
│ │ │ │ │ ├── sba-select.vue
│ │ │ │ │ ├── sba-status-badge.spec.ts
│ │ │ │ │ ├── sba-status-badge.vue
│ │ │ │ │ ├── sba-status.spec.ts
│ │ │ │ │ ├── sba-status.stories.ts
│ │ │ │ │ ├── sba-status.vue
│ │ │ │ │ ├── sba-sticky-subnav.vue
│ │ │ │ │ ├── sba-tag.stories.ts
│ │ │ │ │ ├── sba-tag.vue
│ │ │ │ │ ├── sba-tags.stories.ts
│ │ │ │ │ ├── sba-tags.vue
│ │ │ │ │ ├── sba-time-ago.spec.ts
│ │ │ │ │ ├── sba-time-ago.vue
│ │ │ │ │ ├── sba-toggle-scope-button.spec.ts
│ │ │ │ │ ├── sba-toggle-scope-button.stories.ts
│ │ │ │ │ ├── sba-toggle-scope-button.vue
│ │ │ │ │ ├── sba-wave.vue
│ │ │ │ │ └── table.stories.ts
│ │ │ │ ├── components.d.ts
│ │ │ │ ├── composables/
│ │ │ │ │ ├── ViewRegistry.ts
│ │ │ │ │ ├── useApplicationStore.ts
│ │ │ │ │ ├── useClassnameShortener.spec.ts
│ │ │ │ │ ├── useClassnameShortener.ts
│ │ │ │ │ └── useDateTimeFormatter.ts
│ │ │ │ ├── directives/
│ │ │ │ │ ├── on-resize.ts
│ │ │ │ │ ├── popper.ts
│ │ │ │ │ └── sticks-below.ts
│ │ │ │ ├── global.d.ts
│ │ │ │ ├── i18n/
│ │ │ │ │ ├── PrimeLocale.ts
│ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ └── index.ts
│ │ │ │ ├── index.css
│ │ │ │ ├── index.html
│ │ │ │ ├── index.stories.jsx
│ │ │ │ ├── index.ts
│ │ │ │ ├── login/
│ │ │ │ │ ├── login.i18n.de.json
│ │ │ │ │ ├── login.i18n.en.json
│ │ │ │ │ ├── login.i18n.es.json
│ │ │ │ │ ├── login.i18n.fr.json
│ │ │ │ │ ├── login.i18n.is.json
│ │ │ │ │ ├── login.i18n.ko.json
│ │ │ │ │ ├── login.i18n.pt-BR.json
│ │ │ │ │ ├── login.i18n.ru.json
│ │ │ │ │ ├── login.i18n.zh-CN.json
│ │ │ │ │ ├── login.i18n.zh-TW.json
│ │ │ │ │ ├── login.stories.ts
│ │ │ │ │ └── login.vue
│ │ │ │ ├── login.css
│ │ │ │ ├── login.html
│ │ │ │ ├── login.ts
│ │ │ │ ├── mixins/
│ │ │ │ │ └── subscribing.ts
│ │ │ │ ├── mocks/
│ │ │ │ │ ├── applications/
│ │ │ │ │ │ ├── data.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── browser.ts
│ │ │ │ │ ├── fixtures/
│ │ │ │ │ │ └── eventStream/
│ │ │ │ │ │ ├── registerWithOneInstance.ts
│ │ │ │ │ │ ├── registerWithTwoInstances.ts
│ │ │ │ │ │ └── removeInstance.ts
│ │ │ │ │ ├── instance/
│ │ │ │ │ │ ├── auditevents/
│ │ │ │ │ │ │ ├── data.ts
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ ├── dependencies/
│ │ │ │ │ │ │ ├── data.ts
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ ├── flyway/
│ │ │ │ │ │ │ ├── data.ts
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ ├── health/
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ ├── httptrace/
│ │ │ │ │ │ │ ├── data.ts
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ ├── info/
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ ├── jolokia/
│ │ │ │ │ │ │ ├── data.read.ts
│ │ │ │ │ │ │ ├── data.ts
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ ├── liquibase/
│ │ │ │ │ │ │ ├── data.ts
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ ├── mappings/
│ │ │ │ │ │ │ ├── data.ts
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ ├── metrics/
│ │ │ │ │ │ │ ├── data.ts
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ ├── scheduledtasks/
│ │ │ │ │ │ │ ├── data.ts
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ └── sessions/
│ │ │ │ │ │ ├── data.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ └── server.ts
│ │ │ │ ├── notificationcenter.d.ts
│ │ │ │ ├── notifications.ts
│ │ │ │ ├── plugins/
│ │ │ │ │ └── modal/
│ │ │ │ │ ├── ConfirmButtons.vue
│ │ │ │ │ ├── Modal.vue
│ │ │ │ │ ├── api.ts
│ │ │ │ │ ├── helpers.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── public/
│ │ │ │ │ └── variables.css
│ │ │ │ ├── sba-config.ts
│ │ │ │ ├── sba-settings.js
│ │ │ │ ├── services/
│ │ │ │ │ ├── application.spec.ts
│ │ │ │ │ ├── application.ts
│ │ │ │ │ ├── bus.ts
│ │ │ │ │ ├── instance.spec.ts
│ │ │ │ │ ├── instance.ts
│ │ │ │ │ ├── notification-filter.ts
│ │ │ │ │ ├── spring-mime-types.ts
│ │ │ │ │ ├── startup-activator-tree.ts
│ │ │ │ │ ├── startup-actuator.fixture.spec.json
│ │ │ │ │ ├── startup-actuator.spec.ts
│ │ │ │ │ └── startup-actuator.ts
│ │ │ │ ├── shell/
│ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ ├── index.vue
│ │ │ │ │ ├── navbar.spec.ts
│ │ │ │ │ ├── navbar.vue
│ │ │ │ │ ├── sba-dropdown-logout-item.vue
│ │ │ │ │ ├── sba-nav-language-selector.spec.ts
│ │ │ │ │ ├── sba-nav-language-selector.vue
│ │ │ │ │ └── sba-nav-usermenu.vue
│ │ │ │ ├── store.spec.ts
│ │ │ │ ├── store.ts
│ │ │ │ ├── test-utils.ts
│ │ │ │ ├── tests/
│ │ │ │ │ └── setup.ts
│ │ │ │ ├── toast-theme.css
│ │ │ │ ├── utils/
│ │ │ │ │ ├── array.ts
│ │ │ │ │ ├── autolink.spec.ts
│ │ │ │ │ ├── autolink.ts
│ │ │ │ │ ├── axios.spec.ts
│ │ │ │ │ ├── axios.ts
│ │ │ │ │ ├── collections.spec.ts
│ │ │ │ │ ├── collections.ts
│ │ │ │ │ ├── d3.ts
│ │ │ │ │ ├── eventsource-polyfill.ts
│ │ │ │ │ ├── formatWithDataTypes.spec.ts
│ │ │ │ │ ├── formatWithDataTypes.ts
│ │ │ │ │ ├── http-status.ts
│ │ │ │ │ ├── iso8601-duration.spec.ts
│ │ │ │ │ ├── iso8601-duration.ts
│ │ │ │ │ ├── logtail.ts
│ │ │ │ │ ├── objToYaml.ts
│ │ │ │ │ ├── prettyTime.ts
│ │ │ │ │ ├── rxjs.spec.ts
│ │ │ │ │ ├── rxjs.ts
│ │ │ │ │ ├── sanitizeHtml.spec.ts
│ │ │ │ │ ├── sanitizeHtml.ts
│ │ │ │ │ ├── shortenClassname.spec.ts
│ │ │ │ │ ├── shortenClassname.ts
│ │ │ │ │ ├── sortObject.spec.ts
│ │ │ │ │ ├── sortObject.ts
│ │ │ │ │ ├── toast.ts
│ │ │ │ │ ├── transformToJSON.spec.ts
│ │ │ │ │ ├── transformToJSON.ts
│ │ │ │ │ ├── uri.spec.ts
│ │ │ │ │ ├── uri.ts
│ │ │ │ │ ├── useRouterState.spec.ts
│ │ │ │ │ ├── useRouterState.ts
│ │ │ │ │ └── useSubscription.ts
│ │ │ │ ├── viewRegistry.spec.ts
│ │ │ │ ├── viewRegistry.ts
│ │ │ │ ├── views/
│ │ │ │ │ ├── ViewGroup.ts
│ │ │ │ │ ├── about/
│ │ │ │ │ │ ├── handle.vue
│ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ ├── applications/
│ │ │ │ │ │ ├── ActionHandler.ts
│ │ │ │ │ │ ├── ApplicationListItemAction.spec.ts
│ │ │ │ │ │ ├── ApplicationListItemAction.vue
│ │ │ │ │ │ ├── ApplicationNotificationCenter.vue
│ │ │ │ │ │ ├── ApplicationStats.vue
│ │ │ │ │ │ ├── ApplicationStatusHero.spec.ts
│ │ │ │ │ │ ├── ApplicationStatusHero.vue
│ │ │ │ │ │ ├── InstancesList.spec.ts
│ │ │ │ │ │ ├── InstancesList.vue
│ │ │ │ │ │ ├── NotificationFilterSettings.vue
│ │ │ │ │ │ ├── applications.spec.ts
│ │ │ │ │ │ ├── handle.vue
│ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ └── listItem/
│ │ │ │ │ │ ├── ItemInformation.vue
│ │ │ │ │ │ └── ItemTags.vue
│ │ │ │ │ ├── external/
│ │ │ │ │ │ ├── index.spec.ts
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── style.css
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── instances/
│ │ │ │ │ │ ├── auditevents/
│ │ │ │ │ │ │ ├── auditevents-list.stories.ts
│ │ │ │ │ │ │ ├── auditevents-list.vue
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.spec.ts
│ │ │ │ │ │ │ └── index.vue
│ │ │ │ │ │ ├── beans/
│ │ │ │ │ │ │ ├── beans-list-details.vue
│ │ │ │ │ │ │ ├── beans-list.vue
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ └── index.vue
│ │ │ │ │ │ ├── caches/
│ │ │ │ │ │ │ ├── caches-list.vue
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ └── index.vue
│ │ │ │ │ │ ├── conditions/
│ │ │ │ │ │ │ ├── conditions-list-details.spec.ts
│ │ │ │ │ │ │ ├── conditions-list-details.vue
│ │ │ │ │ │ │ ├── conditions-list.vue
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ └── index.vue
│ │ │ │ │ │ ├── configprops/
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ └── index.vue
│ │ │ │ │ │ ├── dependencies/
│ │ │ │ │ │ │ ├── SbomList.vue
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.spec.ts
│ │ │ │ │ │ │ └── index.vue
│ │ │ │ │ │ ├── details/
│ │ │ │ │ │ │ ├── LineChart.vue
│ │ │ │ │ │ │ ├── __snapshots__/
│ │ │ │ │ │ │ │ └── health-details.spec.ts.snap
│ │ │ │ │ │ │ ├── cache-chart.vue
│ │ │ │ │ │ │ ├── datasource-chart.vue
│ │ │ │ │ │ │ ├── details-cache.spec.ts
│ │ │ │ │ │ │ ├── details-cache.vue
│ │ │ │ │ │ │ ├── details-caches.vue
│ │ │ │ │ │ │ ├── details-datasource.spec.ts
│ │ │ │ │ │ │ ├── details-datasource.vue
│ │ │ │ │ │ │ ├── details-datasources.vue
│ │ │ │ │ │ │ ├── details-gc.vue
│ │ │ │ │ │ │ ├── details-health.spec.ts
│ │ │ │ │ │ │ ├── details-health.vue
│ │ │ │ │ │ │ ├── details-hero.vue
│ │ │ │ │ │ │ ├── details-info.spec.ts
│ │ │ │ │ │ │ ├── details-info.vue
│ │ │ │ │ │ │ ├── details-memory.spec.ts
│ │ │ │ │ │ │ ├── details-memory.vue
│ │ │ │ │ │ │ ├── details-metadata.spec.ts
│ │ │ │ │ │ │ ├── details-metadata.vue
│ │ │ │ │ │ │ ├── details-nav.vue
│ │ │ │ │ │ │ ├── details-process.vue
│ │ │ │ │ │ │ ├── details-threads.spec.ts
│ │ │ │ │ │ │ ├── details-threads.vue
│ │ │ │ │ │ │ ├── health-details.spec.ts
│ │ │ │ │ │ │ ├── health-details.vue
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.spec.ts
│ │ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ │ ├── instance-switcher.vue
│ │ │ │ │ │ │ ├── mem-chart.vue
│ │ │ │ │ │ │ ├── process-uptime.ts
│ │ │ │ │ │ │ └── threads-chart.vue
│ │ │ │ │ │ ├── env/
│ │ │ │ │ │ │ ├── busrefresh.spec.ts
│ │ │ │ │ │ │ ├── busrefresh.vue
│ │ │ │ │ │ │ ├── env-manager.vue
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ │ ├── refresh.spec.ts
│ │ │ │ │ │ │ └── refresh.vue
│ │ │ │ │ │ ├── flyway/
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ └── index.vue
│ │ │ │ │ │ ├── gateway/
│ │ │ │ │ │ │ ├── add-route.vue
│ │ │ │ │ │ │ ├── global-filters.vue
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ │ ├── refresh-route-cache.vue
│ │ │ │ │ │ │ ├── route-definition.vue
│ │ │ │ │ │ │ ├── route.vue
│ │ │ │ │ │ │ ├── routes-list.vue
│ │ │ │ │ │ │ └── routes.vue
│ │ │ │ │ │ ├── heapdump/
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ └── index.vue
│ │ │ │ │ │ ├── httpexchanges/
│ │ │ │ │ │ │ ├── Exchange.ts
│ │ │ │ │ │ │ ├── content-column.vue
│ │ │ │ │ │ │ ├── exchanges-chart.vue
│ │ │ │ │ │ │ ├── exchanges-list.vue
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.spec.ts
│ │ │ │ │ │ │ └── index.vue
│ │ │ │ │ │ ├── httptrace/
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ │ ├── traces-chart.vue
│ │ │ │ │ │ │ └── traces-list.vue
│ │ │ │ │ │ ├── iframe/
│ │ │ │ │ │ │ ├── IframeView.vue
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ ├── jolokia/
│ │ │ │ │ │ │ ├── MBean.ts
│ │ │ │ │ │ │ ├── MBeanDescriptor.ts
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.spec.ts
│ │ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ │ ├── m-bean-attribute.spec.ts
│ │ │ │ │ │ │ ├── m-bean-attribute.vue
│ │ │ │ │ │ │ ├── m-bean-attributes.vue
│ │ │ │ │ │ │ ├── m-bean-operation-invocation.vue
│ │ │ │ │ │ │ ├── m-bean-operation.spec.ts
│ │ │ │ │ │ │ ├── m-bean-operation.vue
│ │ │ │ │ │ │ ├── m-bean-operations.vue
│ │ │ │ │ │ │ ├── responseHandler.spec.ts
│ │ │ │ │ │ │ ├── responseHandler.ts
│ │ │ │ │ │ │ ├── utils.spec.ts
│ │ │ │ │ │ │ └── utils.ts
│ │ │ │ │ │ ├── liquibase/
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ └── index.vue
│ │ │ │ │ │ ├── logfile/
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ └── index.vue
│ │ │ │ │ │ ├── loggers/
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ │ ├── logger-control.vue
│ │ │ │ │ │ │ ├── loggers-list.spec.ts
│ │ │ │ │ │ │ ├── loggers-list.vue
│ │ │ │ │ │ │ ├── loggers.vue
│ │ │ │ │ │ │ ├── service.spec.ts
│ │ │ │ │ │ │ └── service.ts
│ │ │ │ │ │ ├── mappings/
│ │ │ │ │ │ │ ├── DispatcherMappings.spec.ts
│ │ │ │ │ │ │ ├── DispatcherMappings.vue
│ │ │ │ │ │ │ ├── ServletFilterMappings.vue
│ │ │ │ │ │ │ ├── ServletMappings.vue
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.spec.ts
│ │ │ │ │ │ │ └── index.vue
│ │ │ │ │ │ ├── metrics/
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ │ └── metric.vue
│ │ │ │ │ │ ├── quartz/
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ │ ├── trigger-row.spec.ts
│ │ │ │ │ │ │ └── trigger-row.vue
│ │ │ │ │ │ ├── sbomdependencytrees/
│ │ │ │ │ │ │ ├── dependencyTree.ts
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.spec.ts
│ │ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ │ ├── sbomUtils.spec.ts
│ │ │ │ │ │ │ ├── sbomUtils.ts
│ │ │ │ │ │ │ ├── tree.spec.ts
│ │ │ │ │ │ │ └── tree.vue
│ │ │ │ │ │ ├── scheduledtasks/
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ │ ├── scheduled-task-executions.spec.ts
│ │ │ │ │ │ │ └── scheduled-task-executions.vue
│ │ │ │ │ │ ├── sessions/
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ │ └── sessions-list.vue
│ │ │ │ │ │ ├── shell/
│ │ │ │ │ │ │ ├── InstanceShell.vue
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ │ ├── sba-instance-section.vue
│ │ │ │ │ │ │ ├── sidebar.stories.ts
│ │ │ │ │ │ │ └── sidebar.vue
│ │ │ │ │ │ ├── startup/
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ │ ├── tree-item.vue
│ │ │ │ │ │ │ └── tree-table.vue
│ │ │ │ │ │ └── threaddump/
│ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ ├── thread-list-item.vue
│ │ │ │ │ │ ├── thread-tag.vue
│ │ │ │ │ │ └── threads-list.vue
│ │ │ │ │ ├── journal/
│ │ │ │ │ │ ├── InstanceEvent.ts
│ │ │ │ │ │ ├── JournalTable.spec.ts
│ │ │ │ │ │ ├── JournalTable.vue
│ │ │ │ │ │ ├── deduplicate-events.spec.ts
│ │ │ │ │ │ ├── deduplicate-events.ts
│ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ ├── index.spec.ts
│ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ └── utils.ts
│ │ │ │ │ └── wallboard/
│ │ │ │ │ ├── hex-mesh.vue
│ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ ├── index.vue
│ │ │ │ │ ├── utils.spec.ts
│ │ │ │ │ ├── utils.ts
│ │ │ │ │ ├── wallboard.spec.ts
│ │ │ │ │ └── wallboard.stories.ts
│ │ │ │ └── vite-env.d.ts
│ │ │ ├── java/
│ │ │ │ └── de/
│ │ │ │ └── codecentric/
│ │ │ │ └── boot/
│ │ │ │ └── admin/
│ │ │ │ └── server/
│ │ │ │ └── ui/
│ │ │ │ ├── config/
│ │ │ │ │ ├── AdminServerUiAutoConfiguration.java
│ │ │ │ │ ├── AdminServerUiProperties.java
│ │ │ │ │ ├── CssColorUtils.java
│ │ │ │ │ ├── ServerRuntimeHints.java
│ │ │ │ │ ├── SpringNativeServerAutoConfiguration.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── extensions/
│ │ │ │ │ ├── UiExtension.java
│ │ │ │ │ ├── UiExtensions.java
│ │ │ │ │ ├── UiExtensionsScanner.java
│ │ │ │ │ ├── UiRoutesScanner.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── web/
│ │ │ │ ├── HomepageForwardingFilterConfig.java
│ │ │ │ ├── HomepageForwardingMatcher.java
│ │ │ │ ├── UiController.java
│ │ │ │ ├── package-info.java
│ │ │ │ ├── reactive/
│ │ │ │ │ ├── HomepageForwardingFilter.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── servlet/
│ │ │ │ ├── HomepageForwardingFilter.java
│ │ │ │ └── package-info.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── test/
│ │ ├── java/
│ │ │ └── de/
│ │ │ └── codecentric/
│ │ │ └── boot/
│ │ │ └── admin/
│ │ │ └── server/
│ │ │ └── ui/
│ │ │ ├── AbstractAdminUiApplicationTest.java
│ │ │ ├── AdminUiReactiveApplicationTest.java
│ │ │ ├── AdminUiServletApplicationTest.java
│ │ │ ├── config/
│ │ │ │ ├── AdminServerUiAutoConfigurationTest.java
│ │ │ │ ├── AdminServerUiPropertiesTest.java
│ │ │ │ ├── CssColorUtilsTest.java
│ │ │ │ ├── ReactiveAdminServerUiAutoConfigurationAdminContextPathTest.java
│ │ │ │ ├── ReactiveAdminServerUiAutoConfigurationBothPathsTest.java
│ │ │ │ ├── ReactiveAdminServerUiAutoConfigurationTest.java
│ │ │ │ └── ReactiveAdminServerUiAutoConfigurationWebfluxBasePathTest.java
│ │ │ ├── extensions/
│ │ │ │ ├── UiExtensionsScannerTest.java
│ │ │ │ └── UiRoutesScannerTest.java
│ │ │ └── web/
│ │ │ ├── HomepageForwardingMatcherTest.java
│ │ │ └── UiControllerTest.java
│ │ └── resources/
│ │ ├── META-INF/
│ │ │ └── test-extensions/
│ │ │ └── custom/
│ │ │ ├── custom.abcdef.css
│ │ │ ├── custom.abcdef.js
│ │ │ ├── custom.txt
│ │ │ └── routes.txt
│ │ ├── application.yml
│ │ └── mockito-extensions/
│ │ └── org.mockito.plugins.MockMaker
│ ├── tailwind.config.js
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ └── vite.config.mts
├── spring-boot-admin-starter-client/
│ └── pom.xml
├── spring-boot-admin-starter-server/
│ └── pom.xml
└── src/
└── checkstyle/
├── checkstyle-header.txt
└── checkstyle.xml
================================================
FILE CONTENTS
================================================
================================================
FILE: .editorconfig
================================================
root = true
[*]
insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
trim_trailing_whitespace = false
max_line_length = 120
ij_markdown_wrap_text_if_long = true
ij_markdown_format_tables = true
[*.java]
indent_style = tab
indent_size = 4
ij_java_space_before_for_left_brace = true
ij_java_keep_multiple_expressions_in_one_line = true
ij_java_keep_simple_blocks_in_one_line = true
ij_java_keep_simple_classes_in_one_line = true
ij_java_else_on_new_line = true
ij_java_catch_on_new_line = true
ij_java_finally_on_new_line = true
ij_java_align_multiline_method_parentheses = false
ij_java_keep_blank_lines_before_right_brace = 1
ij_java_blank_lines_after_class_header = 0
ij_java_doc_enable_formatting = false
ij_java_class_count_to_use_import_on_demand = 100
ij_java_names_count_to_use_import_on_demand = 100
ij_java_imports_layout = |, java.**, |, jakarta.**, *, tools.**, |, de.codecentric.boot.admin.**, |, $*
ij_java_layout_static_imports_separately = true
[*.xml]
indent_style = space
indent_size = 4
[*.{js,ts,vue}]
indent_style = space
indent_size = 2
================================================
FILE: .gitattributes
================================================
# All text files should have the "lf" (Unix) line endings
* text eol=lf
# windows cmd shoud have the "crlf" (Win32) line endings
*.cmd eol=crlf
# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.
*.java text
*.js text
*.css text
*.html text
*.properties text
*.xml text
*.yml text
# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary
*.jar binary
*.ttf binary
================================================
FILE: .github/CODEOWNERS
================================================
* @codecentric/spring-boot-admins
================================================
FILE: .github/ISSUE_TEMPLATE/spring-boot-admin-bug.md
================================================
---
name: Bug
about: Spring Boot Admin issue template for reporting bugs
title: ''
labels: bug, waiting-for-triage
assignees: ''
---
## Spring Boot Admin Server information
- **Version**:
<!-- Please specify the version of Spring Boot Admin server here -->
- **Spring Boot version**:
<!-- Please specify the underlying Spring Boot version -->
- **Configured Security**:
<!-- basic auth, LDAP, client-certificate, ... -->
- **Webflux or Servlet application**:
<!-- Please specify whether your Admin server is as webflux or servlet application ... -->
## Client information
- **Spring Boot versions**:
<!-- Please specify the Spring Boot version of the monitored instance(s) -->
- **Used discovery mechanism**:
<!-- self registration, kubernetes, eureka, ... -->
- **Webflux or Servlet application**:
<!-- Please specify whether your client application is as webflux or servlet application ... -->
## Description
<!--
Thanks for raising a Spring Boot Admin issue. Please take the time to review the following
categories as some of them do not apply here.
** Question **
🛑 STOP!! Please ask questions about how to use something, or to understand why something isn't
working as you expect it to, on Stack Overflow using the spring-boot-admin tag.
** Bug report **
🪳 Please provide details of the problem, including the version of Spring Boot Admin and Spring Boot that you are using. If possible, please provide a test case or sample application that reproduces
the problem. This makes it much easier for us to diagnose the problem and to verify that
we have fixed it.
-->
================================================
FILE: .github/ISSUE_TEMPLATE/spring-boot-admin-enhancement.md
================================================
---
name: Enhancement / Feature Request
about: Spring Boot Admin issue template for proposing Enhancements or making feature
requests
title: ''
labels: enhancement, waiting-for-triage
assignees: ''
---
<!--
Thanks for raising a Spring Boot Admin issue. Please take the time to review the following
categories as some of them do not apply here.
** Question **
STOP!! Please ask questions about how to use something, or to understand why something isn't
working as you expect it to, on Stack Overflow using the spring-boot-admin tag.
** Enhancement **
Please start by describing the problem that you are trying to solve. There may already
be a solution, or there may be a way to solve it that you hadn't considered.
-->
================================================
FILE: .github/copilot-instructions.md
================================================
# Spring Boot Admin
Spring Boot Admin is a multi-module Maven project providing an admin interface for Spring Boot applications that expose actuator endpoints. It consists of a Vue.js frontend and Java backend components with 19 Maven modules.
Always reference these instructions first and fallback to search or bash commands only when you encounter unexpected information that does not match the info here.
## Working Effectively
### Prerequisites and Environment Setup
- Install Java 17 (OpenJDK Temurin 17.0.16+ recommended) - project requires exactly Java 17
- Install Node.js 22.18.0 exactly (project specifies this in .nvmrc and package.json)
- Download Node.js 22.18.0: `curl -fsSL https://nodejs.org/dist/v22.18.0/node-v22.18.0-linux-x64.tar.xz -o /tmp/node.tar.xz`
- Extract and configure PATH: `cd /tmp && tar -xf node.tar.xz && export PATH="/tmp/node-v22.18.0-linux-x64/bin:$PATH"`
- Verify versions: `java -version` (should show 17.x) and `node --version` (should show v22.18.0)
### Building the Project
- **NEVER CANCEL builds - they take time but will complete successfully**
- **CRITICAL**: Set timeout to 20+ minutes for builds, 60+ minutes for tests
- Clean compile: `export PATH="/tmp/node-v22.18.0-linux-x64/bin:$PATH" && ./mvnw clean compile -B --no-transfer-progress -DskipTests` -- takes ~10.5 minutes
- Full package: `export PATH="/tmp/node-v22.18.0-linux-x64/bin:$PATH" && ./mvnw package -B --no-transfer-progress -DskipTests` -- takes ~4 minutes
- Install to local repository: `export PATH="/tmp/node-v22.18.0-linux-x64/bin:$PATH" && ./mvnw install -B --no-transfer-progress -DskipTests` -- takes ~1.5 minutes
### Testing
- **NEVER CANCEL test runs - set 60+ minute timeouts**
- Full test suite: `export PATH="/tmp/node-v22.18.0-linux-x64/bin:$PATH" && ./mvnw test -B --no-transfer-progress` -- takes 20-40 minutes
- UI tests only: `cd spring-boot-admin-server-ui && export PATH="/tmp/node-v22.18.0-linux-x64/bin:$PATH" && npm run test` -- takes ~44 seconds
- UI build only: `cd spring-boot-admin-server-ui && export PATH="/tmp/node-v22.18.0-linux-x64/bin:$PATH" && npm run build` -- takes ~16 seconds
### Code Quality and Formatting
- Format Java code: `./mvnw spring-javaformat:apply`
- Check Java formatting: `./mvnw spring-javaformat:validate`
- Lint UI code: `cd spring-boot-admin-server-ui && npm run lint`
- Format UI code: `cd spring-boot-admin-server-ui && npm run format:fix`
- **ALWAYS** run `./mvnw spring-javaformat:apply` and UI formatting before committing
- **ALWAYS** run `./mvnw checkstyle:check` to verify compliance
### Running Sample Applications
- Build and install all modules first: `export PATH="/tmp/node-v22.18.0-linux-x64/bin:$PATH" && ./mvnw install -B --no-transfer-progress -DskipTests`
- Run servlet sample: `cd spring-boot-admin-samples/spring-boot-admin-sample-servlet && export PATH="/tmp/node-v22.18.0-linux-x64/bin:$PATH" && ../../mvnw spring-boot:run -Dspring-boot.run.profiles=dev,insecure`
- Access UI at: `http://localhost:8080` (username: user, password shown in logs or use insecure profile)
- Application starts in ~3 seconds and shows "all up" status with registered instance
### UI Development Mode
- For UI development: `cd spring-boot-admin-server-ui && npm run build:watch` (builds on file changes)
- Configure Spring Boot Admin Server with:
```
spring.boot.admin.ui.cache.no-cache: true
spring.boot.admin.ui.resource-locations: file:../../spring-boot-admin-server-ui/target/dist/
spring.boot.admin.ui.template-location: file:../../spring-boot-admin-server-ui/target/dist/
spring.boot.admin.ui.cache-templates: false
```
## Validation Scenarios
- **MANUAL VALIDATION REQUIRED**: After building and running, always test actual functionality
- Launch sample application and verify Spring Boot Admin UI loads at `http://localhost:8080`
- Verify application registration: Should show "spring-boot-admin-sample-servlet" with UP status
- Test navigation: Click on Applications, Wallboard, and instance details
- Check endpoints: Verify actuator endpoints are detected and accessible
- Test monitoring features: Instance details should show health, metrics, loggers, etc.
## Key Modules and Locations
### Primary Components
- **Root**: `/` - Main Maven reactor project (pom.xml)
- **Server Backend**: `spring-boot-admin-server/` - Core Spring Boot Admin server functionality
- **UI Frontend**: `spring-boot-admin-server-ui/` - Vue.js 3 web interface with Vite build
- **Client**: `spring-boot-admin-client/` - Client library for connecting applications
- **Documentation**: `spring-boot-admin-docs/` - Asciidoc documentation
### Starter Modules
- **Server Starter**: `spring-boot-admin-starter-server/` - Auto-configuration for servers
- **Client Starter**: `spring-boot-admin-starter-client/` - Auto-configuration for clients
### Sample Applications (in spring-boot-admin-samples/)
- **servlet**: Standard servlet-based sample (recommended for testing)
- **reactive**: WebFlux reactive sample
- **eureka**: Eureka discovery integration
- **consul**: Consul discovery integration
- **hazelcast**: Hazelcast session management
- **war**: WAR deployment sample
- **zookeeper**: Zookeeper discovery integration
### Infrastructure
- **Dependencies**: `spring-boot-admin-dependencies/` - Dependency management BOM
- **Build**: `spring-boot-admin-build/` - Build configuration and tooling
- **Server Cloud**: `spring-boot-admin-server-cloud/` - Spring Cloud integrations
## Common Issues and Solutions
### Build Issues
- Node.js version mismatch: Always use exact PATH override with v22.18.0
- Missing dependencies: Run `./mvnw install` to install all modules to local Maven repository
- Checkstyle violations: Run `./mvnw spring-javaformat:apply` to auto-fix formatting
- UI build failures: Verify Node.js version and run `npm install` in spring-boot-admin-server-ui/
- "Command timed out": Increase timeout - builds legitimately take 10+ minutes
### Runtime Issues
- Sample app dependency resolution: Must run `./mvnw install` first to populate local repository
- Config server connection refused: Normal warning, config server is optional in dev mode
- Security warnings: Use `insecure` profile for development to bypass authentication
## Development Workflow
1. **Setup**: Configure Node.js 22.18.0 in PATH: `export PATH="/tmp/node-v22.18.0-linux-x64/bin:$PATH"`
2. **Initial Build**: Run `./mvnw clean compile` to verify everything builds (~10.5 minutes - be patient)
3. **Install Dependencies**: Run `./mvnw install -DskipTests` for sample app dependencies (~1.5 minutes)
4. **Make Changes**: Edit code in appropriate modules
5. **Format Code**: Run `./mvnw spring-javaformat:apply` and UI `npm run format:fix`
6. **Test Build**: Run build commands to verify changes don't break anything
7. **Manual Validation**: Start sample application and test UI functionality
8. **Final Check**: Ensure formatting and linting pass before committing
## Critical Timing Information
- **NEVER CANCEL**: Build commands take significant time but complete successfully
- Clean compile: ~10.5 minutes (normal, expected)
- Package build: ~4 minutes
- Install build: ~1.5 minutes
- Full test suite: 20-40 minutes (set 60+ minute timeout)
- UI tests only: ~44 seconds
- UI build only: ~16 seconds
- Application startup: ~3 seconds
## Technology Stack
- **Backend**: Spring Boot 3.5, Java 17, Maven multi-module
- **Frontend**: Vue.js 3, Vite, TypeScript, Tailwind CSS
- **Testing**: JUnit 5 (Java), Vitest (UI), Playwright integration
- **Build**: Maven 3.9+, Node.js 22.18.0, npm
- **Code Quality**: Spring Java Format, Checkstyle, ESLint, Prettier
## Repository Structure Overview
```
spring-boot-admin/ # Root project (19 modules)
├── .github/ # GitHub configuration
├── spring-boot-admin-build/ # Build configuration
├── spring-boot-admin-client/ # Client library
├── spring-boot-admin-dependencies/ # Dependency management
├── spring-boot-admin-docs/ # Documentation (Asciidoc)
├── spring-boot-admin-samples/ # Sample applications
│ ├── spring-boot-admin-sample-servlet/ # Main sample (recommended)
│ ├── spring-boot-admin-sample-reactive/ # WebFlux sample
│ └── [other samples]/ # Various integration samples
├── spring-boot-admin-server/ # Core server implementation
├── spring-boot-admin-server-cloud/ # Spring Cloud integrations
├── spring-boot-admin-server-ui/ # Vue.js frontend
│ ├── src/main/frontend/ # Vue.js source code
│ ├── package.json # Node.js dependencies
│ └── .nvmrc # Node.js version specification
├── spring-boot-admin-starter-*/ # Spring Boot auto-configuration
├── mvnw # Maven wrapper
└── pom.xml # Root Maven configuration
```
================================================
FILE: .github/milestones.sh
================================================
#!/usr/bin/env bash
set -euo pipefail
show_help() {
cat <<EOF
Usage:
GITHUB_TOKEN=ghp_xxx ./create_milestone_for_tag.sh [--dry-run] owner repo tag [base]
Positional arguments:
owner GitHub owner/org (required)
repo GitHub repository name (required)
tag Tag to create milestone for (required)
base Optional base tag/branch/sha to compute commits from (optional)
Flags:
--dry-run Print what would be done, do not call APIs that modify data.
--help Show this help and exit.
Examples:
GITHUB_TOKEN=ghp_xxx ./create_milestone_for_tag.sh octocat Hello-World v1.2.0
./create_milestone_for_tag.sh --dry-run octocat Hello-World v1.2.0
./create_milestone_for_tag.sh octocat Hello-World v1.2.0 previous-tag --dry-run
EOF
}
# Parse args: flags can be anywhere
DRYRUN=0
POSITIONAL=()
for arg in "$@"; do
case "$arg" in
--dry-run) DRYRUN=1; shift || true ;;
--help) show_help; exit 0 ;;
*) POSITIONAL+=("$arg"); shift || true ;;
esac
done
# After parsing, positional args are in POSITIONAL array
if [[ ${#POSITIONAL[@]} -lt 3 ]]; then
echo "ERROR: owner, repo and tag are required."
show_help
exit 1
fi
OWNER="${POSITIONAL[0]}"
REPO="${POSITIONAL[1]}"
TAG="${POSITIONAL[2]}"
BASE="${POSITIONAL[3]:-}" # optional
if [[ $DRYRUN -eq 1 ]]; then
echo "⚠️ Dry-run mode enabled — no changes will be made."
fi
if [[ -z "${GITHUB_TOKEN:-}" ]]; then
echo "ERROR: GITHUB_TOKEN environment variable must be set (PAT with repo permissions)."
exit 1
fi
API="https://api.github.com"
AUTH="Authorization: token ${GITHUB_TOKEN}"
ACCEPT="Accept: application/vnd.github.groot-preview+json"
if ! command -v jq >/dev/null 2>&1; then
echo "ERROR: jq is required. Install jq and try again."
exit 1
fi
if ! command -v git >/dev/null 2>&1; then
echo "ERROR: git is required. Install git and try again."
exit 1
fi
# If base not provided, attempt to find previous tag ordered by creation date (descending)
if [[ -z "$BASE" ]]; then
if git rev-parse --verify "$TAG" >/dev/null 2>&1; then
mapfile -t TAGS < <(git tag --sort=-creatordate)
PREV_TAG=""
found=0
for i in "${!TAGS[@]}"; do
if [[ "${TAGS[$i]}" == "$TAG" ]]; then
found=1
if [[ $((i+1)) -lt ${#TAGS[@]} ]]; then
PREV_TAG="${TAGS[$((i+1))]}"
fi
break
fi
done
if [[ $found -eq 0 ]]; then
echo "Warning: tag '$TAG' not found locally. You may need to 'git fetch --tags'."
BASE=""
else
if [[ -n "$PREV_TAG" ]]; then
echo "Detected previous tag: $PREV_TAG"
BASE="$PREV_TAG"
else
echo "No previous tag found (this looks like the oldest tag). Continuing with single tag commit."
BASE=""
fi
fi
else
echo "Warning: tag '$TAG' not found locally. Continuing; will attempt API-based fallback if needed."
BASE=""
fi
fi
# Build commit list: if BASE is empty, use the single tag's commit; otherwise range base..tag
COMMITS=()
if [[ -n "$BASE" ]]; then
# verify both reachable locally; if not present, try to fetch tags/branches from remote
if ! git rev-parse --verify "$BASE" >/dev/null 2>&1 || ! git rev-parse --verify "$TAG" >/dev/null 2>&1; then
echo "One of base or tag is not present locally. Attempting to fetch tags/heads from origin..."
git fetch --tags --prune --no-recurse-submodules --quiet || true
fi
# Re-check
git rev-parse --verify "$BASE" >/dev/null 2>&1 || { echo "ERROR: base '$BASE' not found locally after fetch"; exit 1; }
git rev-parse --verify "$TAG" >/dev/null 2>&1 || { echo "ERROR: tag '$TAG' not found locally after fetch"; exit 1; }
# list commits from base (exclusive) to tag (inclusive)
while IFS= read -r sha; do
COMMITS+=("$sha")
done < <(git rev-list --reverse "${BASE}..${TAG}")
else
# try to get tag commit locally; if not present, fall back to GitHub compare API to get commits
if git rev-parse --verify "$TAG" >/dev/null 2>&1; then
TAG_SHA="$(git rev-list -n 1 "$TAG")"
COMMITS+=("$TAG_SHA")
else
echo "Tag not present locally. Falling back to GitHub compare API to get commits for tag ${TAG}..."
# We attempt to compare default branch...tag to get commits — best-effort
default_branch="$(curl -sSL -H "$AUTH" "${API}/repos/${OWNER}/${REPO}" | jq -r '.default_branch')"
if [[ -z "$default_branch" || "$default_branch" == "null" ]]; then
echo "ERROR: could not determine default branch via API."
exit 1
fi
# Use compare endpoint: default_branch...tag
cmp=$(curl -sSL -H "$AUTH" "${API}/repos/${OWNER}/${REPO}/compare/${default_branch}...${TAG}")
if echo "$cmp" | jq -e 'has("commits")' >/dev/null 2>&1; then
mapfile -t commits_from_api < <(echo "$cmp" | jq -r '.commits[]?.sha')
COMMITS+=("${commits_from_api[@]}")
else
echo "API compare did not return commits. Response:"
echo "$cmp" | jq -C .
exit 1
fi
fi
fi
echo "Found ${#COMMITS[@]} commit(s)."
# For each commit, call GitHub API to get associated PRs
declare -A PRS_MAP=()
for sha in "${COMMITS[@]}"; do
echo "Querying PRs for commit $sha..."
resp="$(curl -sSL -H "$AUTH" -H "$ACCEPT" \
"${API}/repos/${OWNER}/${REPO}/commits/${sha}/pulls")"
if echo "$resp" | jq -e 'has("message")' >/dev/null 2>&1; then
msg=$(echo "$resp" | jq -r '.message // empty')
if [[ -n "$msg" ]]; then
echo "GitHub API error for commit $sha: $msg"
echo "Full response:"
echo "$resp" | jq -C .
exit 1
fi
fi
pr_numbers=$(echo "$resp" | jq -r '.[]?.number' || true)
if [[ -n "$pr_numbers" ]]; then
while IFS= read -r pr; do
if [[ -n "$pr" ]]; then
PRS_MAP["$pr"]=1
echo " -> PR #$pr"
fi
done <<<"$pr_numbers"
fi
done
if [[ ${#PRS_MAP[@]} -eq 0 ]]; then
echo "No PRs associated with commits found. Exiting."
exit 0
fi
PR_LIST=()
for k in "${!PRS_MAP[@]}"; do PR_LIST+=("$k"); done
echo "Total unique PRs to update: ${#PR_LIST[@]}"
# Check existing milestones for a matching title
echo "Checking for existing milestone named '$TAG'..."
MILESTONES_RESP="$(curl -sSL -H "$AUTH" "${API}/repos/${OWNER}/${REPO}/milestones?state=all&per_page=100")"
MILESTONE_NUMBER="$(echo "$MILESTONES_RESP" | jq -r --arg TITLE "$TAG" '.[] | select(.title==$TITLE) | .number' | head -n1 || true)"
if [[ -n "$MILESTONE_NUMBER" && "$MILESTONE_NUMBER" != "null" ]]; then
echo "Found existing milestone '$TAG' (number: $MILESTONE_NUMBER)."
else
if [[ $DRYRUN -eq 1 ]]; then
echo "Would create milestone '$TAG' (dry-run)."
MILESTONE_NUMBER="DUMMY_ID"
else
echo "Creating milestone '$TAG'..."
create_resp="$(curl -sSL -H "$AUTH" -H "Content-Type: application/json" \
-d "{\"title\": \"${TAG}\", \"description\": \"Auto-created milestone for tag ${TAG}\"}" \
"${API}/repos/${OWNER}/${REPO}/milestones")"
if echo "$create_resp" | jq -e 'has("message")' >/dev/null 2>&1; then
err=$(echo "$create_resp" | jq -r '.message // empty')
echo "Error creating milestone: $err"
echo "Response: $create_resp" | jq -C .
exit 1
fi
MILESTONE_NUMBER="$(echo "$create_resp" | jq -r '.number')"
if [[ -z "$MILESTONE_NUMBER" || "$MILESTONE_NUMBER" == "null" ]]; then
echo "Failed to create milestone. Response: $create_resp"
exit 1
fi
echo "Created milestone '${TAG}' (number: $MILESTONE_NUMBER)."
fi
fi
# Patch each PR (issues endpoint) to set milestone
for prnum in "${PR_LIST[@]}"; do
if [[ $DRYRUN -eq 1 ]]; then
echo "Would update PR #${prnum} -> milestone ${MILESTONE_NUMBER}"
continue
fi
echo "Updating PR #${prnum} -> milestone ${MILESTONE_NUMBER}..."
patch_resp="$(curl -sSL -X PATCH -H "$AUTH" -H "Content-Type: application/json" \
-d "{\"milestone\": ${MILESTONE_NUMBER}}" \
"${API}/repos/${OWNER}/${REPO}/issues/${prnum}")"
if echo "$patch_resp" | jq -e 'has("message")' >/dev/null 2>&1; then
err=$(echo "$patch_resp" | jq -r '.message // empty')
echo "Warning: failed to update PR #${prnum}: $err"
echo "Response: $patch_resp" | jq -C .
# continue so we attempt remaining PRs
continue
fi
echo "PR #${prnum} updated."
done
echo "Done."
exit 0
================================================
FILE: .github/release.yml
================================================
changelog:
categories:
- title: Features
labels:
- '*'
exclude:
labels:
- fix
- breaking-change
- dependencies
- bot
- title: Bug Fixes
labels:
- fix
- title: Breaking Changes
labels:
- breaking-change
- title: Dependencies
labels:
- dependencies
================================================
FILE: .github/workflows/build-feature.yml
================================================
name: Build Pull Request
on:
push:
branches-ignore:
- master
- 1.*
- 2.*
pull_request:
jobs:
build:
strategy:
matrix:
os: [ubuntu-latest]
runs-on: ${{ matrix.os }}
steps:
- name: free disk space
continue-on-error: true
run: |
df -h
sudo swapoff -a
sudo rm -f /swapfile
sudo apt clean
if [ -n "$(docker image ls -q)" ]; then
docker rmi -f $(docker image ls -aq) || true
fi
df -h
- uses: actions/checkout@v6
- name: Set up JDK
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: '17'
cache: 'maven'
cache-dependency-path: '**/pom.xml'
- name: Set up Node
uses: actions/setup-node@v6
with:
node-version: 'lts/*'
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- name: Build with Maven
run: ./mvnw -B --no-transfer-progress install -P coverage
- name: Upload surefire reports
if: always()
uses: actions/upload-artifact@v7
with:
name: surefire-reports
path: |
**/target/surefire-reports/*.xml
**/target/surefire-reports/*.txt
**/target/surefire-reports/*.dump*
**/target/surefire-reports/*.out
**/target/surefire-reports/*.err
if-no-files-found: warn
retention-days: 14
================================================
FILE: .github/workflows/build-main.yml
================================================
name: Build Main / Version Branch
on:
push:
branches:
- master
- 1.*
- 2.*
- 3.*
jobs:
build:
strategy:
matrix:
os: [ ubuntu-latest ]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v6
- name: Set up JDK
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: '17'
cache: 'maven'
cache-dependency-path: '**/pom.xml'
- name: Set up Node
uses: actions/setup-node@v6
with:
node-version: 'lts/*'
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- name: Build with Maven
run: ./mvnw -B --no-transfer-progress install -P coverage
- name: Upload surefire reports
if: always()
uses: actions/upload-artifact@v7
with:
name: surefire-reports
path: |
**/target/surefire-reports/*.xml
**/target/surefire-reports/*.txt
**/target/surefire-reports/*.dump*
**/target/surefire-reports/*.out
**/target/surefire-reports/*.err
if-no-files-found: warn
retention-days: 14
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
publish-snapshot:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up JDK
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: '17'
cache: 'maven'
cache-dependency-path: '**/pom.xml'
- name: Set up Node
uses: actions/setup-node@v6
with:
node-version: 'lts/*'
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- name: Publish SNAPSHOT version to GitHub Packages (we can skip tests, since we only deploy, if the build workflow succeeded)
run: ./mvnw -B deploy --no-transfer-progress -DskipTests
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Extract Maven project version for Asciidoc GitHub Pages directory naming
run: echo ::set-output name=version::$(./mvnw -q -Dexec.executable=echo -Dexec.args='${project.version}' --non-recursive exec:exec)
id: project
- name: Show extracted Maven project version
run: echo ${{ steps.project.outputs.version }}
- name: Build documentation with Maven
run: ./mvnw -B --no-transfer-progress site
- name: Deploy documentation to GitHub Pages
uses: JamesIves/github-pages-deploy-action@v4.8.0
with:
branch: gh-pages
folder: spring-boot-admin-docs/target/generated-docs/build
target-folder: ${{ steps.project.outputs.version }}
clean: true # Automatically remove deleted files from the deploy branch
================================================
FILE: .github/workflows/deploy-documentation.yml
================================================
name: Deploy Documentation
on:
workflow_dispatch:
inputs:
releaseversion:
description: 'Version to publish the documentation for. This should be a tag that exists in the repository.'
type: string
required: true
copyDocsToCurrent:
description: "Mark docs as 'latest'? This will create a redirect from /current to the version being published. This should only be set for the latest version of the documentation."
required: true
type: boolean
default: false
env:
VERSION: ${{ github.event.inputs.releaseversion }}
jobs:
deploy-documentation:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
ref: refs/tags/${{ github.event.inputs.releaseversion }}
- name: Set up JDK
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: '17'
cache: 'maven'
cache-dependency-path: '**/pom.xml'
- name: Set up Node
uses: actions/setup-node@v6
with:
node-version: 'lts/*'
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- name: Set projects Maven version to GitHub Action GUI set version
run: ./mvnw versions:set "-DnewVersion=${{ github.event.inputs.releaseversion }}" --no-transfer-progress
- name: Build with Maven
run: ./mvnw -B --no-transfer-progress package -DskipTests
- name: Build documentation with Maven
run: ./mvnw -B --no-transfer-progress -pl spring-boot-admin-docs site
- name: Deploy documentation to GitHub Pages
uses: JamesIves/github-pages-deploy-action@v4.8.0
with:
branch: gh-pages
folder: spring-boot-admin-docs/target/generated-docs/build
target-folder: ${{ github.event.inputs.releaseversion }}
clean: true
- name: Deploy redirect for /current to /${{ github.event.inputs.releaseversion }}
uses: JamesIves/github-pages-deploy-action@v4.8.0
if: github.event.inputs.copyDocsToCurrent == 'true'
with:
branch: gh-pages
folder: spring-boot-admin-docs/target/generated-docs/build/current
target-folder: /current
clean: true
- name: Deploy deeplink redirect for /current/* to /${{ github.event.inputs.releaseversion }}/*
uses: JamesIves/github-pages-deploy-action@v4.8.0
if: github.event.inputs.copyDocsToCurrent == 'true'
with:
branch: gh-pages
folder: spring-boot-admin-docs/target/generated-docs/build/current
target-folder: /
clean: false
================================================
FILE: .github/workflows/issue-metrics.yml
================================================
name: Monthly issue metrics
on:
workflow_dispatch:
inputs:
start_date:
description: 'Start date (YYYY-MM-DD)'
required: false
type: string
end_date:
description: 'End date (YYYY-MM-DD)'
required: false
type: string
schedule:
- cron: "3 2 1 * *"
permissions:
contents: read
jobs:
build:
name: issue metrics
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: read
steps:
- name: Get dates for last month
shell: bash
run: |
# Use input dates if provided, otherwise calculate the previous month
if [ -n "${{ inputs.start_date }}" ] && [ -n "${{ inputs.end_date }}" ]; then
first_day="${{ inputs.start_date }}"
last_day="${{ inputs.end_date }}"
else
# Calculate the first day of the previous month
first_day=$(date -d "last month" +%Y-%m-01)
# Calculate the last day of the previous month
last_day=$(date -d "$first_day +1 month -1 day" +%Y-%m-%d)
fi
#Set an environment variable with the date range
echo "$first_day..$last_day"
echo "last_month=$first_day..$last_day" >> "$GITHUB_ENV"
- name: Run issue-metrics tool
uses: github/issue-metrics@v3
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SEARCH_QUERY: 'spring-boot-admin:codecentric/spring-boot-admin is:issue created:${{ env.last_month }} -reason:"not planned"'
================================================
FILE: .github/workflows/release-to-maven-central.yml
================================================
name: Release To Maven Central
on:
workflow_dispatch:
inputs:
releaseversion:
description: "Version to release and publish to maven central."
required: true
copyDocsToCurrent:
description: "Mark docs as 'latest'? This will create a redirect from /current to the version being published. This should only be set for the latest version of the documentation."
required: true
type: boolean
default: false
env:
VERSION: ${{ github.event.inputs.releaseversion }}
jobs:
publish-central-and-pages:
runs-on: ubuntu-latest
steps:
- run: echo "Will start a Maven Central upload with version ${{ github.event.inputs.releaseversion }}"
- name: free disk space
continue-on-error: true
run: |
df -h
sudo swapoff -a
sudo rm -f /swapfile
sudo apt clean
if [ -n "$(docker image ls -q)" ]; then
docker rmi -f $(docker image ls -aq) || true
fi
df -h
- uses: actions/checkout@v6
- name: Set up settings.xml for Maven Central Repository
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: '17'
server-id: central
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
gpg-private-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }}
gpg-passphrase: MAVEN_GPG_PASSPHRASE
cache: 'maven'
env:
MAVEN_USERNAME: ${{ secrets.OSS_SONATYPE_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSS_SONATYPE_PASSWORD }}
MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
- name: Cache node modules
uses: actions/cache@v5
env:
cache-name: cache-node-modules
with:
path: ~/.npm
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
- name: Set projects Maven version to GitHub Action GUI set version
run: ./mvnw versions:set "-DnewVersion=${{ github.event.inputs.releaseversion }}" --no-transfer-progress
- name: Publish package
run: ./mvnw -B deploy --no-transfer-progress -P central-deploy -DskipTests
env:
#TODO: This is a workaround for NEXUS-27902 which uses XStream that fails on JVM >16
JDK_JAVA_OPTIONS: "--add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.text=ALL-UNNAMED --add-opens java.desktop/java.awt.font=ALL-UNNAMED"
MAVEN_USERNAME: ${{ secrets.OSS_SONATYPE_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSS_SONATYPE_PASSWORD }}
MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
- name: Build documentation with Maven
run: ./mvnw -B --no-transfer-progress -pl spring-boot-admin-docs site
- name: Deploy documentation to GitHub Pages for version ${{ github.event.inputs.releaseversion }}
uses: JamesIves/github-pages-deploy-action@v4.8.0
with:
branch: gh-pages
folder: spring-boot-admin-docs/target/generated-docs/build
target-folder: ${{ github.event.inputs.releaseversion }}
clean: true
- name: Deploy redirect for /current to /${{ github.event.inputs.releaseversion }}
uses: JamesIves/github-pages-deploy-action@v4.8.0
if: github.event.inputs.copyDocsToCurrent == 'true'
with:
branch: gh-pages
folder: spring-boot-admin-docs/target/generated-docs/build/current
target-folder: /current
clean: true
- name: Deploy deeplink redirect for /current/* to /${{ github.event.inputs.releaseversion }}/*
uses: JamesIves/github-pages-deploy-action@v4.8.0
if: github.event.inputs.copyDocsToCurrent == 'true'
with:
branch: gh-pages
folder: spring-boot-admin-docs/target/generated-docs/build/current
target-folder: /
clean: false
publish-github-release:
needs: publish-central-and-pages
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: free disk space
continue-on-error: true
run: |
df -h
sudo swapoff -a
sudo rm -f /swapfile
sudo apt clean
if [ -n "$(docker image ls -q)" ]; then
docker rmi -f $(docker image ls -aq) || true
fi
df -h
- name: Generate changelog
id: changelog
uses: metcalfc/changelog-generator@v4.6.2
with:
myToken: ${{ secrets.GITHUB_TOKEN }}
- name: Create GitHub Release
id: create_release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.event.inputs.releaseversion }}
token: ${{ secrets.GITHUB_TOKEN }}
draft: false
prerelease: ${{ contains(github.event.inputs.releaseversion, '-') }}
================================================
FILE: .github/workflows/vulnerability-scan.yml
================================================
name: Vulnerability Scan
on:
workflow_dispatch: {}
jobs:
semgrep:
name: semgrep/ci
runs-on: ubuntu-latest
container:
image: returntocorp/semgrep
if: (github.actor != 'renovate')
steps:
- uses: actions/checkout@v6
- run: semgrep ci
env:
SEMGREP_RULES: p/default
================================================
FILE: .gitignore
================================================
# Maven
target/
# Eclipse
.settings/
.classpath
.project
.factorypath
.apt_generated/
# Intellij
.idea/
*.iml
*.iws
#vscode
.vscode/
# gnupg keyring
/.gnupg
#nodejs
node_modules/
node/
#flattened POMs
.flattened-pom.xml
.DS_Store
mockServiceWorker.js
/.github/agents/
================================================
FILE: .mvn/wrapper/maven-wrapper.properties
================================================
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.14/apache-maven-3.9.14-bin.zip
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to Spring Boot Admin
Contributions are highly welcome. Feel free to submit Pull Requests. Maybe watch out for tickets tagged with `ideal-for-contribution`, these tickets should always be a good starting point for contributing.
You can find some hints for starting development in the [README](spring-boot-admin-server-ui/README.md) of `spring-boot-admin-server-ui`.
## Coding Conventions
### Java / Server
We try to satisfy the [Code Style of Spring Framework](https://github.com/spring-projects/spring-framework/wiki/Code-Style).
The [Spring Java Format Plugin](https://github.com/spring-io/spring-javaformat) is added to the build. Checkstyle will enforce the consistency of the code. Nevertheless, there are some disabled rules, due to backward compatibility. You can find these disabled rules in a comment in `src/checkstyle/checkstyle.xml`.
However, you can always run `./mvnw spring-javaformat:apply` to fix some basic errors, like indentation.
### JavaScript / Client
The Vue frontend implements basic prettier rules as well as Vue3 recommended rules.
To check if there are any violations run `npm run lint` and `npm run format`.
Append `:fix` to let eslint or prettier auto-solve most issues.
## Working with the code
### IntelliJ
The IntelliJ settings are based on the IntelliJ-IDEA-Editor-Settings from spring, but have been adapted slightly, you can find the original settings [here](https://github.com/spring-projects/spring-framework/wiki/IntelliJ-IDEA-Editor-Settings).
The custom settings are stored in `.editorconfig` and are imported automatically by IntelliJ.
If you are using IntelliJ, there is also a [formatter-plugin provided by Spring](https://github.com/spring-io/spring-javaformat#intellij-idea).
(i) Plugin version x did not work in IntelliJ IDEA Ultimate 2020.3.
#### Checkstyle Plugin
This plugin scans Java files with the project's custom CheckStyle rules from within IDEA.
Install and configure the Checkstyle Plugin, and enable the configuration file.
##### Configuration
Before configuration, add the `spring-javaformat-checkstyle` JAR to the Third-Party checks.
1. Preferences > Tools > Checkstyle > Third-Party Checks
2. Add `~/.m2/repository/io/spring/javaformat/spring-javaformat-checkstyle/0.0.26/spring-javaformat-checkstyle-0.0.26.jar`
##### Configuration File
Add the configuration file and enabled it:
1. Preferences > Tools > Checkstyle > Configuration File > +
2. Add a Name, ex. Spring Boot Admin
3. Use a local Checkstyle File, Browse to `src/checkstyle/checkstyle.xml` and click Next
4. Enter the full path to the checkstyle header file: `<git repo>/src/checkstyle/checkstyle-header.txt`, click Finish
5. Select the new configuration file to enable it
#### Prettier Plugin
This plugin is able to run Prettier from within IntelliJ. It can even be configured to run on "Reformat Code" action. It comes bundles with the IDE but needs to be enabled.
##### Configuration
1. Preferences > Languages & Frameworks > JavaScript > Prettier
2. Manual Prettier configuration
1. Prettier package: `<git repo>/spring-boot-admin-server-ui/node_modules/prettier`
2. Enable "Run on 'Reformat Code' action"
================================================
FILE: LICENSE.txt
================================================
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
================================================
# Spring Boot Admin by [codecentric](https://codecentric.de)
[](https://www.apache.org/licenses/LICENSE-2.0.txt)

[](https://codecov.io/gh/codecentric/spring-boot-admin)

This community project provides an admin interface for [Spring Boot <sup>®</sup>](http://projects.spring.io/spring-boot/ "Official Spring-Boot website") web applications that expose actuator endpoints.
Monitoring Python applications is available using [Pyctuator](https://github.com/SolarEdgeTech/pyctuator).
## Compatibility Matrix
In the Spring Boot Admin Server App, the Spring Boot Admin's version matches the major and minor versions of Spring Boot.
| Spring Boot Version | Spring Boot Admin |
|---------------------|-------------------|
| 2.7 | 2.7.Y |
| 3.0 | 3.0.Y |
| 4.0 | 4.0.Y |
Nevertheless, it is possible to monitor any version of a Spring Boot service independently of the underlying Spring Boot version in the service.
Hence, it is possible to run Spring Boot Admin Server version 2.6 and monitor a service that is running on Spring Boot 2.3 using Spring Boot Admin Client version 2.3.
## Getting Started
[A quick guide](https://docs.spring-boot-admin.com/current) to get started can be found in our docs.
There are introductory talks available on YouTube:
<a href="https://youtu.be/Ql1Gnz4L_-c" target="_blank"><img src="https://i.ytimg.com/vi/Ql1Gnz4L_-c/maxresdefault.jpg"
alt="Cloud Native Spring Boot® Admin by Johannes Edmeier @ Spring I/O 2019" width="240" height="135" border="10" /></a><br>
**Cloud Native Spring Boot® Admin by Johannes Edmeier @ Spring I/O 2019**
<a href="https://youtu.be/__zkypwjSMs" target="_blank"><img src="https://i.ytimg.com/vi/__zkypwjSMs/maxresdefault.jpg"
alt="Monitoring Spring Boot® Applications with Spring Boot Admin @ Spring I/O 2018" width="240" height="135" border="10" /></a><br>
**Monitoring Spring Boot® Applications with Spring Boot Admin @ Spring I/O 2018**
<a href="https://goo.gl/2tRiUi" target="_blank"><img src="https://i.ytimg.com/vi/PWd9Q8_4OFo/maxresdefault.jpg"
alt="Spring Boot® Admin - Monitoring and Configuring Spring Boot Applications at Runtime" width="240" height="135" border="10" /></a><br>
**Spring Boot® Admin - Monitoring and Configuring Spring Boot Applications at Runtime**
## Getting Help
Having trouble with codecentric's Spring Boot Admin? We’d like to help!
* Check the [reference documentation](http://codecentric.github.io/spring-boot-admin/current/).
* Ask a question on [stackoverflow.com](http://stackoverflow.com/questions/tagged/spring-boot-admin) - we monitor questions tagged with `spring-boot-admin`.
* Ask for help in our [spring-boot-admin Gitter chat](https://gitter.im/codecentric/spring-boot-admin)
* Report bugs at http://github.com/codecentric/spring-boot-admin/issues.
## Reference Guide
### Translated versions
The following reference guides have been translated by users of Spring Boot Admin and are not part of the official bundle.
The maintainers of Spring Boot Admin will not update and maintain the guides mentioned below.
[Version 2.6.6 (Chinese translated by @qq253498229)](https://consolelog.gitee.io/docs-spring-boot-admin-docs-chinese/)
## Trademarks and licenses
The source code of codecentric's Spring Boot Admin is licensed under [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0)
Spring, Spring Boot and Spring Cloud are trademarks of [Pivotal Software, Inc.](https://pivotal.io/) in the U.S. and other countries.
## Snapshot builds
You can access snapshot builds from the github snapshot repository by adding the following to your `repositories`:
```xml
<repository>
<id>sba-snapshot</id>
<name>Spring Boot Admin Snapshots</name>
<url>https://maven.pkg.github.com/codecentric/spring-boot-admin</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>false</enabled>
</releases>
</repository>
```
## Contributing
See [CONTRIBUTING.md](CONTRIBUTING.md) file.
================================================
FILE: lombok.config
================================================
lombok.noArgsConstructor.extraPrivate = false
================================================
FILE: mvnw
================================================
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Apache Maven Wrapper startup batch script, version 3.3.4
#
# Optional ENV vars
# -----------------
# JAVA_HOME - location of a JDK home dir, required when download maven via java source
# MVNW_REPOURL - repo url base for downloading maven distribution
# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output
# ----------------------------------------------------------------------------
set -euf
[ "${MVNW_VERBOSE-}" != debug ] || set -x
# OS specific support.
native_path() { printf %s\\n "$1"; }
case "$(uname)" in
CYGWIN* | MINGW*)
[ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")"
native_path() { cygpath --path --windows "$1"; }
;;
esac
# set JAVACMD and JAVACCMD
set_java_home() {
# For Cygwin and MinGW, ensure paths are in Unix format before anything is touched
if [ -n "${JAVA_HOME-}" ]; then
if [ -x "$JAVA_HOME/jre/sh/java" ]; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
JAVACCMD="$JAVA_HOME/jre/sh/javac"
else
JAVACMD="$JAVA_HOME/bin/java"
JAVACCMD="$JAVA_HOME/bin/javac"
if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then
echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2
echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2
return 1
fi
fi
else
JAVACMD="$(
'set' +e
'unset' -f command 2>/dev/null
'command' -v java
)" || :
JAVACCMD="$(
'set' +e
'unset' -f command 2>/dev/null
'command' -v javac
)" || :
if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then
echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2
return 1
fi
fi
}
# hash string like Java String::hashCode
hash_string() {
str="${1:-}" h=0
while [ -n "$str" ]; do
char="${str%"${str#?}"}"
h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296))
str="${str#?}"
done
printf %x\\n $h
}
verbose() { :; }
[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; }
die() {
printf %s\\n "$1" >&2
exit 1
}
trim() {
# MWRAPPER-139:
# Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds.
# Needed for removing poorly interpreted newline sequences when running in more
# exotic environments such as mingw bash on Windows.
printf "%s" "${1}" | tr -d '[:space:]'
}
scriptDir="$(dirname "$0")"
scriptName="$(basename "$0")"
# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties
while IFS="=" read -r key value; do
case "${key-}" in
distributionUrl) distributionUrl=$(trim "${value-}") ;;
distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;;
esac
done <"$scriptDir/.mvn/wrapper/maven-wrapper.properties"
[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties"
case "${distributionUrl##*/}" in
maven-mvnd-*bin.*)
MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/
case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in
*AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;;
:Darwin*x86_64) distributionPlatform=darwin-amd64 ;;
:Darwin*arm64) distributionPlatform=darwin-aarch64 ;;
:Linux*x86_64*) distributionPlatform=linux-amd64 ;;
*)
echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2
distributionPlatform=linux-amd64
;;
esac
distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip"
;;
maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;;
*) MVN_CMD="mvn${scriptName#mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;;
esac
# apply MVNW_REPOURL and calculate MAVEN_HOME
# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}"
distributionUrlName="${distributionUrl##*/}"
distributionUrlNameMain="${distributionUrlName%.*}"
distributionUrlNameMain="${distributionUrlNameMain%-bin}"
MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}"
MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")"
exec_maven() {
unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || :
exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD"
}
if [ -d "$MAVEN_HOME" ]; then
verbose "found existing MAVEN_HOME at $MAVEN_HOME"
exec_maven "$@"
fi
case "${distributionUrl-}" in
*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;;
*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;;
esac
# prepare tmp dir
if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then
clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; }
trap clean HUP INT TERM EXIT
else
die "cannot create temp dir"
fi
mkdir -p -- "${MAVEN_HOME%/*}"
# Download and Install Apache Maven
verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
verbose "Downloading from: $distributionUrl"
verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
# select .zip or .tar.gz
if ! command -v unzip >/dev/null; then
distributionUrl="${distributionUrl%.zip}.tar.gz"
distributionUrlName="${distributionUrl##*/}"
fi
# verbose opt
__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR=''
[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v
# normalize http auth
case "${MVNW_PASSWORD:+has-password}" in
'') MVNW_USERNAME='' MVNW_PASSWORD='' ;;
has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;;
esac
if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then
verbose "Found wget ... using wget"
wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl"
elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then
verbose "Found curl ... using curl"
curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl"
elif set_java_home; then
verbose "Falling back to use Java to download"
javaSource="$TMP_DOWNLOAD_DIR/Downloader.java"
targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName"
cat >"$javaSource" <<-END
public class Downloader extends java.net.Authenticator
{
protected java.net.PasswordAuthentication getPasswordAuthentication()
{
return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() );
}
public static void main( String[] args ) throws Exception
{
setDefault( new Downloader() );
java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() );
}
}
END
# For Cygwin/MinGW, switch paths to Windows format before running javac and java
verbose " - Compiling Downloader.java ..."
"$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java"
verbose " - Running Downloader.java ..."
"$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")"
fi
# If specified, validate the SHA-256 sum of the Maven distribution zip file
if [ -n "${distributionSha256Sum-}" ]; then
distributionSha256Result=false
if [ "$MVN_CMD" = mvnd.sh ]; then
echo "Checksum validation is not supported for maven-mvnd." >&2
echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
exit 1
elif command -v sha256sum >/dev/null; then
if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c - >/dev/null 2>&1; then
distributionSha256Result=true
fi
elif command -v shasum >/dev/null; then
if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then
distributionSha256Result=true
fi
else
echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2
echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
exit 1
fi
if [ $distributionSha256Result = false ]; then
echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2
echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2
exit 1
fi
fi
# unzip and move
if command -v unzip >/dev/null; then
unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip"
else
tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar"
fi
# Find the actual extracted directory name (handles snapshots where filename != directory name)
actualDistributionDir=""
# First try the expected directory name (for regular distributions)
if [ -d "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" ]; then
if [ -f "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/bin/$MVN_CMD" ]; then
actualDistributionDir="$distributionUrlNameMain"
fi
fi
# If not found, search for any directory with the Maven executable (for snapshots)
if [ -z "$actualDistributionDir" ]; then
# enable globbing to iterate over items
set +f
for dir in "$TMP_DOWNLOAD_DIR"/*; do
if [ -d "$dir" ]; then
if [ -f "$dir/bin/$MVN_CMD" ]; then
actualDistributionDir="$(basename "$dir")"
break
fi
fi
done
set -f
fi
if [ -z "$actualDistributionDir" ]; then
verbose "Contents of $TMP_DOWNLOAD_DIR:"
verbose "$(ls -la "$TMP_DOWNLOAD_DIR")"
die "Could not find Maven distribution directory in extracted archive"
fi
verbose "Found extracted Maven distribution directory: $actualDistributionDir"
printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$actualDistributionDir/mvnw.url"
mv -- "$TMP_DOWNLOAD_DIR/$actualDistributionDir" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME"
clean || :
exec_maven "$@"
================================================
FILE: mvnw.cmd
================================================
<# : batch portion
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements. See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership. The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License. You may obtain a copy of the License at
@REM
@REM http://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied. See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Apache Maven Wrapper startup batch script, version 3.3.4
@REM
@REM Optional ENV vars
@REM MVNW_REPOURL - repo url base for downloading maven distribution
@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output
@REM ----------------------------------------------------------------------------
@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0)
@SET __MVNW_CMD__=
@SET __MVNW_ERROR__=
@SET __MVNW_PSMODULEP_SAVE=%PSModulePath%
@SET PSModulePath=
@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @(
IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B)
)
@SET PSModulePath=%__MVNW_PSMODULEP_SAVE%
@SET __MVNW_PSMODULEP_SAVE=
@SET __MVNW_ARG0_NAME__=
@SET MVNW_USERNAME=
@SET MVNW_PASSWORD=
@IF NOT "%__MVNW_CMD__%"=="" ("%__MVNW_CMD__%" %*)
@echo Cannot start maven from wrapper >&2 && exit /b 1
@GOTO :EOF
: end batch / begin powershell #>
$ErrorActionPreference = "Stop"
if ($env:MVNW_VERBOSE -eq "true") {
$VerbosePreference = "Continue"
}
# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties
$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl
if (!$distributionUrl) {
Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties"
}
switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) {
"maven-mvnd-*" {
$USE_MVND = $true
$distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip"
$MVN_CMD = "mvnd.cmd"
break
}
default {
$USE_MVND = $false
$MVN_CMD = $script -replace '^mvnw','mvn'
break
}
}
# apply MVNW_REPOURL and calculate MAVEN_HOME
# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
if ($env:MVNW_REPOURL) {
$MVNW_REPO_PATTERN = if ($USE_MVND -eq $False) { "/org/apache/maven/" } else { "/maven/mvnd/" }
$distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace "^.*$MVNW_REPO_PATTERN",'')"
}
$distributionUrlName = $distributionUrl -replace '^.*/',''
$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$',''
$MAVEN_M2_PATH = "$HOME/.m2"
if ($env:MAVEN_USER_HOME) {
$MAVEN_M2_PATH = "$env:MAVEN_USER_HOME"
}
if (-not (Test-Path -Path $MAVEN_M2_PATH)) {
New-Item -Path $MAVEN_M2_PATH -ItemType Directory | Out-Null
}
$MAVEN_WRAPPER_DISTS = $null
if ((Get-Item $MAVEN_M2_PATH).Target[0] -eq $null) {
$MAVEN_WRAPPER_DISTS = "$MAVEN_M2_PATH/wrapper/dists"
} else {
$MAVEN_WRAPPER_DISTS = (Get-Item $MAVEN_M2_PATH).Target[0] + "/wrapper/dists"
}
$MAVEN_HOME_PARENT = "$MAVEN_WRAPPER_DISTS/$distributionUrlNameMain"
$MAVEN_HOME_NAME = ([System.Security.Cryptography.SHA256]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join ''
$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME"
if (Test-Path -Path "$MAVEN_HOME" -PathType Container) {
Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME"
Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
exit $?
}
if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) {
Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl"
}
# prepare tmp dir
$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile
$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir"
$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null
trap {
if ($TMP_DOWNLOAD_DIR.Exists) {
try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
}
}
New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null
# Download and Install Apache Maven
Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
Write-Verbose "Downloading from: $distributionUrl"
Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
$webclient = New-Object System.Net.WebClient
if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) {
$webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD)
}
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null
# If specified, validate the SHA-256 sum of the Maven distribution zip file
$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum
if ($distributionSha256Sum) {
if ($USE_MVND) {
Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties."
}
Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash
if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) {
Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property."
}
}
# unzip and move
Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null
# Find the actual extracted directory name (handles snapshots where filename != directory name)
$actualDistributionDir = ""
# First try the expected directory name (for regular distributions)
$expectedPath = Join-Path "$TMP_DOWNLOAD_DIR" "$distributionUrlNameMain"
$expectedMvnPath = Join-Path "$expectedPath" "bin/$MVN_CMD"
if ((Test-Path -Path $expectedPath -PathType Container) -and (Test-Path -Path $expectedMvnPath -PathType Leaf)) {
$actualDistributionDir = $distributionUrlNameMain
}
# If not found, search for any directory with the Maven executable (for snapshots)
if (!$actualDistributionDir) {
Get-ChildItem -Path "$TMP_DOWNLOAD_DIR" -Directory | ForEach-Object {
$testPath = Join-Path $_.FullName "bin/$MVN_CMD"
if (Test-Path -Path $testPath -PathType Leaf) {
$actualDistributionDir = $_.Name
}
}
}
if (!$actualDistributionDir) {
Write-Error "Could not find Maven distribution directory in extracted archive"
}
Write-Verbose "Found extracted Maven distribution directory: $actualDistributionDir"
Rename-Item -Path "$TMP_DOWNLOAD_DIR/$actualDistributionDir" -NewName $MAVEN_HOME_NAME | Out-Null
try {
Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null
} catch {
if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) {
Write-Error "fail to move MAVEN_HOME"
}
} finally {
try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
}
Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
================================================
FILE: pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright 2014-2020 the original author or 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:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin</artifactId>
<version>${revision}</version>
<packaging>pom</packaging>
<name>Spring Boot Admin</name>
<description>Spring Boot Admin</description>
<url>https://github.com/codecentric/spring-boot-admin/</url>
<properties>
<revision>4.1.0-SNAPSHOT</revision>
<java.version>17</java.version>
<node.version>v22.12.0</node.version>
<require.maven.version>3.9</require.maven.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<resource.delimiter>@</resource.delimiter>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- disable default maven site generation, but allow docusarus to hook into site lifecycle -->
<maven.site.skip>true</maven.site.skip>
<!-- used dependencies versions -->
<spring-boot.version>4.0.3</spring-boot.version>
<spring-cloud.version>2025.1.1</spring-cloud.version>
<jolokia-support-springboot.version>2.5.1</jolokia-support-springboot.version>
<checkstyle.version>12.3.1</checkstyle.version>
<findbugs-jsr305.version>3.0.2</findbugs-jsr305.version>
<wiremock.version>3.13.2</wiremock.version>
<hazelcast.version>5.6.0</hazelcast.version>
<awaitility.version>4.3.0</awaitility.version>
<jetty.version>12.1.7</jetty.version>
<!-- plugin versions -->
<build-helper-maven-plugin.version>3.6.1</build-helper-maven-plugin.version>
<maven-compiler-plugin.version>3.15.0</maven-compiler-plugin.version>
<!-- because of https://github.com/mojohaus/versions/issues/855 -->
<versions-maven-plugin.version>2.21.0</versions-maven-plugin.version>
<maven-clean-plugin.version>3.5.0</maven-clean-plugin.version>
<maven-dependency-plugin.version>3.10.0</maven-dependency-plugin.version>
<maven-deploy-plugin.version>3.1.4</maven-deploy-plugin.version>
<maven-enforcer-plugin.version>3.6.2</maven-enforcer-plugin.version>
<maven-surefire-plugin.version>3.5.5</maven-surefire-plugin.version>
<maven-failsafe-plugin.version>3.5.5</maven-failsafe-plugin.version>
<maven-install-plugin.version>3.1.4</maven-install-plugin.version>
<maven-jar-plugin.version>3.5.0</maven-jar-plugin.version>
<maven-javadoc-plugin.version>3.12.0</maven-javadoc-plugin.version>
<maven-resources-plugin.version>3.5.0</maven-resources-plugin.version>
<maven-source-plugin.version>3.4.0</maven-source-plugin.version>
<maven-war-plugin.version>3.5.1</maven-war-plugin.version>
<maven-gpg-plugin.version>3.2.8</maven-gpg-plugin.version>
<frontend-maven-plugin.version>2.0.0</frontend-maven-plugin.version>
<jacoco-maven-plugin.version>0.8.14</jacoco-maven-plugin.version>
<git-commit-id-maven-plugin.version>4.9.10</git-commit-id-maven-plugin.version>
<flatten-maven-plugin.version>1.7.3</flatten-maven-plugin.version>
<cyclonedx-maven-plugin.version>2.9.1</cyclonedx-maven-plugin.version>
<maven-checkstyle-plugin.version>3.6.0</maven-checkstyle-plugin.version>
<spring-javaformat-maven-plugin.version>0.0.47</spring-javaformat-maven-plugin.version>
<central-publishing-maven-plugin.version>0.10.0</central-publishing-maven-plugin.version>
<spring-conf-prop-documenter-maven-plugin.version>0.7.2</spring-conf-prop-documenter-maven-plugin.version>
</properties>
<modules>
<module>spring-boot-admin-dependencies</module>
<module>spring-boot-admin-build</module>
<module>spring-boot-admin-server</module>
<module>spring-boot-admin-server-ui</module>
<module>spring-boot-admin-client</module>
<module>spring-boot-admin-docs</module>
<module>spring-boot-admin-starter-server</module>
<module>spring-boot-admin-starter-client</module>
<module>spring-boot-admin-samples</module>
</modules>
<organization>
<name>codecentric AG</name>
<url>https://www.codecentric.de</url>
</organization>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>https://www.apache.org/licenses/LICENSE-2.0</url>
</license>
</licenses>
<scm>
<connection>scm:git:git://github.com/codecentric/spring-boot-admin.git</connection>
<developerConnection>scm:git:ssh://git@github.com/codecentric/spring-boot-admin.git</developerConnection>
<url>https://github.com/codecentric/spring-boot-admin</url>
</scm>
<developers>
<developer>
<name>codecentric AG</name>
<email>spring-boot-admin@codecentric.de</email>
<url>https://www.codecentric.de/</url>
</developer>
</developers>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<encoding>${project.build.sourceEncoding}</encoding>
<docencoding>${project.reporting.outputEncoding}</docencoding>
<charset>${project.reporting.outputEncoding}</charset>
<quiet>true</quiet>
</configuration>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
<inherited>true</inherited>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<configuration>
<configLocation>src/checkstyle/checkstyle.xml</configLocation>
<headerLocation>src/checkstyle/checkstyle-header.txt</headerLocation>
<consoleOutput>true</consoleOutput>
<failOnViolation>true</failOnViolation>
<includeTestSourceDirectory>true</includeTestSourceDirectory>
</configuration>
<executions>
<execution>
<id>checkstyle-validation</id>
<phase>validate</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<!-- this fix is needed for the eclipse-plugin to get the right java-version -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<parameters>true</parameters>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</path>
<path>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<configuration>
<updatePomFile>true</updatePomFile>
<flattenMode>oss</flattenMode>
<embedBuildProfileDependencies>true</embedBuildProfileDependencies>
<pomElements>
<distributionManagement>remove</distributionManagement>
<repositories>remove</repositories>
</pomElements>
</configuration>
<executions>
<execution>
<id>flatten</id>
<phase>process-resources</phase>
<goals>
<goal>flatten</goal>
</goals>
</execution>
<execution>
<id>flatten-clean</id>
<phase>clean</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<executions>
<execution>
<id>enforce-maven</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireMavenVersion>
<version>${require.maven.version}</version>
</requireMavenVersion>
</rules>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>io.spring.javaformat</groupId>
<artifactId>spring-javaformat-maven-plugin</artifactId>
<version>${spring-javaformat-maven-plugin.version}</version>
<executions>
<execution>
<phase>validate</phase>
<inherited>true</inherited>
<goals>
<goal>validate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>${versions-maven-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<version>${maven-clean-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>${maven-source-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>${maven-jar-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>${maven-javadoc-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>${maven-deploy-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>${maven-dependency-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>${maven-enforcer-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>${maven-install-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>${maven-war-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>${build-helper-maven-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>${flatten-maven-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.cyclonedx</groupId>
<artifactId>cyclonedx-maven-plugin</artifactId>
<version>${cyclonedx-maven-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<parallel>classesAndMethods</parallel>
<useUnlimitedThreads>false</useUnlimitedThreads>
<redirectTestOutputToFile>true</redirectTestOutputToFile>
<rerunFailingTestsCount>2</rerunFailingTestsCount>
<includes>
<include>**/*Tests.java</include>
<include>**/*Test.java</include>
</includes>
<excludes>
<exclude>**/Abstract*.java</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>${maven-resources-plugin.version}</version>
<configuration>
<delimiters>
<delimiter>${resource.delimiter}</delimiter>
</delimiters>
<useDefaultDelimiters>false</useDefaultDelimiters>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>${maven-gpg-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>${maven-checkstyle-plugin.version}</version>
<dependencies>
<dependency>
<groupId>com.puppycrawl.tools</groupId>
<artifactId>checkstyle</artifactId>
<version>${checkstyle.version}</version>
</dependency>
<dependency>
<groupId>io.spring.javaformat</groupId>
<artifactId>spring-javaformat-checkstyle</artifactId>
<version>${spring-javaformat-maven-plugin.version}</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<version>${frontend-maven-plugin.version}</version>
</plugin>
<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<version>${git-commit-id-maven-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco-maven-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.sonatype.central</groupId>
<artifactId>central-publishing-maven-plugin</artifactId>
<version>${central-publishing-maven-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.rodnansol</groupId>
<artifactId>spring-configuration-property-documenter-maven-plugin</artifactId>
<version>${spring-conf-prop-documenter-maven-plugin.version}</version>
</plugin>
</plugins>
</pluginManagement>
</build>
<profiles>
<profile>
<id>include-cloud</id>
<activation>
<property>
<name>!excludeSpringCloud</name>
</property>
</activation>
<modules>
<module>spring-boot-admin-server-cloud</module>
</modules>
</profile>
<profile>
<id>coverage</id>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<executions>
<!-- Prepares the property pointing to the JaCoCo runtime agent which is passed as
VM argument when Maven the Surefire plugin is executed. -->
<execution>
<id>pre-unit-test</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<!-- Ensures that the code coverage report for unit tests is created after unit tests have
been run. -->
<execution>
<id>post-unit-test</id>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>central-deploy</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
<configuration>
<!-- This is necessary for gpg to not try to use the pinentry programs -->
<gpgArguments>
<arg>--pinentry-mode</arg>
<arg>loopback</arg>
</gpgArguments>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.sonatype.central</groupId>
<artifactId>central-publishing-maven-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<publishingServerId>central</publishingServerId>
<autoPublish>true</autoPublish>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>spring-repo</id>
<activation>
<property>
<name>!disableSpringSnapshots</name>
</property>
</activation>
<repositories>
<repository>
<id>spring-milestone</id>
<snapshots>
<enabled>false</enabled>
</snapshots>
<url>https://repo.spring.io/milestone</url>
</repository>
<repository>
<id>spring-snapshot</id>
<snapshots>
<enabled>true</enabled>
</snapshots>
<url>https://repo.spring.io/snapshot</url>
</repository>
<!-- Required for Eureka RC -->
<repository>
<id>netflix-candidates</id>
<name>Netflix Candidates</name>
<url>https://artifactory-oss.prod.netflix.net/artifactory/maven-oss-candidates</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-milestone</id>
<snapshots>
<enabled>false</enabled>
</snapshots>
<url>https://repo.spring.io/milestone</url>
</pluginRepository>
<pluginRepository>
<id>spring-snapshot</id>
<snapshots>
<enabled>true</enabled>
</snapshots>
<url>https://repo.spring.io/snapshot</url>
</pluginRepository>
</pluginRepositories>
</profile>
<!--
Profile: noNpm
Set this profile to skip any frontend related build step in this project.
Skipping frontend tests can be achieved by using default flag -D skipTests.
-->
<profile>
<id>noNpm</id>
<build>
<plugins>
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<distributionManagement>
<snapshotRepository>
<id>github</id>
<name>GitHub Packages</name>
<url>https://maven.pkg.github.com/codecentric/spring-boot-admin</url>
</snapshotRepository>
</distributionManagement>
</project>
================================================
FILE: renovate.json
================================================
{
"extends": [
"config:recommended"
],
"labels": [
"bot",
"dependencies"
],
"minimumReleaseAge": "5 days",
"internalChecksFilter": "strict",
"packageRules": [
{
"description": "Automatically merge minor and patch-level updates when checks pass, creates a PR otherwise",
"matchUpdateTypes": [
"minor",
"patch",
"digest"
],
"automerge": true,
"automergeType": "pr",
"platformAutomerge": true
},
{
"matchPackageNames": [
"org.apache.maven.plugins:maven-site-plugin",
"spring-boot-admin"
],
"enabled": false
},
{
"description": "Checkstyle 13+ requires Java 21, stay on 12.x",
"matchPackageNames": [
"com.puppycrawl.tools:checkstyle"
],
"allowedVersions": "<13"
}
]
}
================================================
FILE: spring-boot-admin-build/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright 2014-2019 the original author or 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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>spring-boot-admin-build</artifactId>
<packaging>pom</packaging>
<name>Spring Boot Admin Build</name>
<description>Spring Boot Admin Build</description>
<parent>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-dependencies</artifactId>
<version>${revision}</version>
<relativePath>../spring-boot-admin-dependencies</relativePath>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.jolokia</groupId>
<artifactId>jolokia-support-springboot</artifactId>
<version>${jolokia-support-springboot.version}</version>
</dependency>
<dependency>
<groupId>org.wiremock</groupId>
<artifactId>wiremock-standalone</artifactId>
<version>${wiremock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.hazelcast</groupId>
<artifactId>hazelcast</artifactId>
<version>${hazelcast.version}</version>
<classifier>tests</classifier>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
<version>${findbugs-jsr305.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-alpn-server</artifactId>
<version>${jetty.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.awaitility</groupId>
<artifactId>awaitility</artifactId>
<version>${awaitility.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<inherited>true</inherited>
<executions>
<execution>
<!-- Tidy up all POMs before they are published -->
<id>flatten</id>
<phase>process-resources</phase>
<goals>
<goal>flatten</goal>
</goals>
<configuration>
<updatePomFile>true</updatePomFile>
<flattenMode>oss</flattenMode>
<embedBuildProfileDependencies>true</embedBuildProfileDependencies>
<pomElements>
<parent>expand</parent>
<distributionManagement>remove</distributionManagement>
<repositories>remove</repositories>
</pomElements>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<id>generate-automatic-module-name</id>
<goals>
<goal>regex-property</goal>
</goals>
<configuration>
<name>automatic-module-name</name>
<value>${project.groupId}.${project.artifactId}</value>
<regex>[^a-zA-Z0-9]+</regex>
<replacement>.</replacement>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
<manifestEntries>
<Automatic-Module-Name>${automatic-module-name}</Automatic-Module-Name>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: spring-boot-admin-client/pom.xml
================================================
<?xml version="1.0"?>
<!--
~ Copyright 2014-2019 the original author or 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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>spring-boot-admin-client</artifactId>
<name>Spring Boot Admin Client</name>
<description>Spring Boot Admin Client</description>
<parent>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-build</artifactId>
<version>${revision}</version>
<relativePath>../spring-boot-admin-build</relativePath>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-restclient</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webmvc</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.wiremock</groupId>
<artifactId>wiremock-standalone</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.awaitility</groupId>
<artifactId>awaitility</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
================================================
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/config/ClientProperties.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.client.config;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import org.jspecify.annotations.Nullable;
import org.springframework.boot.cloud.CloudPlatform;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.convert.DurationUnit;
import org.springframework.core.env.Environment;
@lombok.Data
@ConfigurationProperties(prefix = "spring.boot.admin.client")
public class ClientProperties {
/**
* The admin server urls to register at
*/
private String[] url = new String[] {};
/**
* The admin rest-apis path.
*/
private String apiPath = "instances";
/**
* Time interval the registration is repeated
*/
@DurationUnit(ChronoUnit.MILLIS)
private Duration period = Duration.ofMillis(10_000L);
/**
* Connect timeout for the registration.
*/
@DurationUnit(ChronoUnit.MILLIS)
private Duration connectTimeout = Duration.ofMillis(5_000L);
/**
* Read timeout (in ms) for the registration.
*/
@DurationUnit(ChronoUnit.MILLIS)
private Duration readTimeout = Duration.ofMillis(5_000L);
/**
* Username for basic authentication on admin server
*/
@Nullable private String username;
/**
* Password for basic authentication on admin server
*/
@Nullable private String password;
/**
* Enable automatic deregistration on shutdown If not set it defaults to true if an
* active {@link CloudPlatform} is present;
*/
@Nullable private Boolean autoDeregistration = null;
/**
* Enable automatic registration when the application is ready.
*/
private boolean autoRegistration = true;
/**
* Enable registration against one or all admin servers
*/
private boolean registerOnce = true;
/**
* Enable Spring Boot Admin Client.
*/
private boolean enabled = true;
public String[] getAdminUrl() {
String[] adminUrls = this.url.clone();
for (int i = 0; i < adminUrls.length; i++) {
adminUrls[i] += "/" + this.apiPath;
}
return adminUrls;
}
public boolean isAutoDeregistration(Environment environment) {
return (this.autoDeregistration != null) ? this.autoDeregistration
: (CloudPlatform.getActive(environment) != null);
}
}
================================================
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/config/ClientRuntimeHints.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.client.config;
import lombok.SneakyThrows;
import org.springframework.aot.hint.ExecutableMode;
import org.springframework.aot.hint.MemberCategory;
import org.springframework.aot.hint.RuntimeHints;
import org.springframework.aot.hint.RuntimeHintsRegistrar;
import org.springframework.boot.web.server.context.WebServerInitializedEvent;
import org.springframework.context.annotation.Configuration;
import de.codecentric.boot.admin.client.registration.Application;
import de.codecentric.boot.admin.client.registration.DefaultApplicationFactory;
@Configuration
public class ClientRuntimeHints implements RuntimeHintsRegistrar {
@Override
public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
registerReflectionHints(hints);
}
@SneakyThrows
private static void registerReflectionHints(RuntimeHints hints) {
hints.reflection()
.registerType(Application.Builder.class, MemberCategory.INVOKE_PUBLIC_METHODS,
MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS)
.registerType(Application.class, MemberCategory.INVOKE_PUBLIC_METHODS,
MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS)
.registerConstructor(Application.Builder.class.getDeclaredConstructor(), ExecutableMode.INVOKE)
.registerMethod(Application.Builder.class.getMethod("build"), ExecutableMode.INVOKE)
.registerMethod(Application.class.getMethod("builder"), ExecutableMode.INVOKE)
.registerMethod(DefaultApplicationFactory.class.getMethod("onWebServerInitialized",
WebServerInitializedEvent.class), ExecutableMode.INVOKE);
}
}
================================================
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/config/CloudFoundryApplicationProperties.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.client.config;
import java.util.ArrayList;
import java.util.List;
import org.jspecify.annotations.Nullable;
import org.springframework.boot.context.properties.ConfigurationProperties;
@lombok.Data
@ConfigurationProperties("vcap.application")
public class CloudFoundryApplicationProperties {
@Nullable private String applicationId;
@Nullable private String instanceIndex;
private List<String> uris = new ArrayList<>();
}
================================================
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/config/InstanceProperties.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.client.config;
import java.util.LinkedHashMap;
import java.util.Map;
import org.jspecify.annotations.Nullable;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
@lombok.Data
@ConfigurationProperties(prefix = "spring.boot.admin.client.instance")
public class InstanceProperties {
/**
* Management-url to register with. Inferred at runtime, can be overridden in case the
* reachable URL is different (e.g. Docker).
*/
@Nullable private String managementUrl;
/**
* Base url for computing the management-url to register with. The path is inferred at
* runtime, and appended to the base url.
*/
@Nullable private String managementBaseUrl;
/**
* Client-service-URL register with. Inferred at runtime, can be overridden in case
* the reachable URL is different (e.g. Docker).
*/
@Nullable private String serviceUrl;
/**
* Base url for computing the service-url to register with. The path is inferred at
* runtime, and appended to the base url.
*/
@Nullable private String serviceBaseUrl;
/**
* Path for computing the service-url to register with. If not specified, defaults to
* "/"
*/
@Nullable private String servicePath;
/**
* Client-health-URL to register with. Inferred at runtime, can be overridden in case
* the reachable URL is different (e.g. Docker). Must be unique all services registry.
*/
@Nullable private String healthUrl;
/**
* Name to register with. Defaults to ${spring.application.name}
*/
@Value("${spring.application.name:spring-boot-application}")
private String name = "spring-boot-application";
/**
* Should the registered urls be built with server.address or with hostname.
* @deprecated Use serviceHostType instead.
*/
@Deprecated
private boolean preferIp = false;
/**
* Should the registered urls be built with server.address or with hostname.
*/
private ServiceHostType serviceHostType = ServiceHostType.CANONICAL_HOST_NAME;
/**
* Metadata that should be associated with this application
*/
private Map<String, String> metadata = new LinkedHashMap<>();
}
================================================
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/config/ServiceHostType.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.client.config;
public enum ServiceHostType {
IP, HOST_NAME, CANONICAL_HOST_NAME,
}
================================================
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/config/SpringBootAdminClientAutoConfiguration.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.client.config;
import java.util.Collections;
import java.util.List;
import jakarta.servlet.ServletContext;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
import org.springframework.boot.actuate.autoconfigure.web.server.ManagementServerProperties;
import org.springframework.boot.actuate.endpoint.web.PathMappedEndpoints;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.http.client.ClientHttpRequestFactoryBuilder;
import org.springframework.boot.http.client.HttpClientSettings;
import org.springframework.boot.restclient.autoconfigure.RestClientAutoConfiguration;
import org.springframework.boot.web.server.autoconfigure.ServerProperties;
import org.springframework.boot.webflux.autoconfigure.WebFluxProperties;
import org.springframework.boot.webmvc.autoconfigure.DispatcherServletAutoConfiguration;
import org.springframework.boot.webmvc.autoconfigure.DispatcherServletPath;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import org.springframework.core.env.Environment;
import org.springframework.http.client.support.BasicAuthenticationInterceptor;
import org.springframework.http.converter.json.JacksonJsonHttpMessageConverter;
import org.springframework.web.client.RestClient;
import tools.jackson.databind.json.JsonMapper;
import de.codecentric.boot.admin.client.registration.ApplicationFactory;
import de.codecentric.boot.admin.client.registration.ApplicationRegistrator;
import de.codecentric.boot.admin.client.registration.DefaultApplicationRegistrator;
import de.codecentric.boot.admin.client.registration.ReactiveApplicationFactory;
import de.codecentric.boot.admin.client.registration.RegistrationApplicationListener;
import de.codecentric.boot.admin.client.registration.RegistrationClient;
import de.codecentric.boot.admin.client.registration.RestClientRegistrationClient;
import de.codecentric.boot.admin.client.registration.ServletApplicationFactory;
import de.codecentric.boot.admin.client.registration.metadata.CompositeMetadataContributor;
import de.codecentric.boot.admin.client.registration.metadata.MetadataContributor;
import de.codecentric.boot.admin.client.registration.metadata.StartupDateMetadataContributor;
@Configuration(proxyBeanMethods = false)
@ConditionalOnWebApplication
@Conditional(SpringBootAdminClientEnabledCondition.class)
@AutoConfigureAfter({ WebEndpointAutoConfiguration.class, RestClientAutoConfiguration.class })
@EnableConfigurationProperties({ ClientProperties.class, InstanceProperties.class, ServerProperties.class,
ManagementServerProperties.class })
public class SpringBootAdminClientAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public ApplicationRegistrator registrator(RegistrationClient registrationClient, ClientProperties client,
ApplicationFactory applicationFactory) {
return new DefaultApplicationRegistrator(applicationFactory, registrationClient, client.getAdminUrl(),
client.isRegisterOnce());
}
@Bean
@ConditionalOnMissingBean
public RegistrationApplicationListener registrationListener(ClientProperties client,
ApplicationRegistrator registrator, Environment environment) {
RegistrationApplicationListener listener = new RegistrationApplicationListener(registrator);
listener.setAutoRegister(client.isAutoRegistration());
listener.setAutoDeregister(client.isAutoDeregistration(environment));
listener.setRegisterPeriod(client.getPeriod());
return listener;
}
@Bean
@ConditionalOnMissingBean
public StartupDateMetadataContributor startupDateMetadataContributor() {
return new StartupDateMetadataContributor();
}
@Configuration(proxyBeanMethods = false)
@ConditionalOnWebApplication(type = Type.SERVLET)
@AutoConfigureAfter(DispatcherServletAutoConfiguration.class)
public static class ServletConfiguration {
@Bean
@Lazy(false)
@ConditionalOnMissingBean
public ApplicationFactory applicationFactory(InstanceProperties instance, ManagementServerProperties management,
ServerProperties server, ServletContext servletContext, PathMappedEndpoints pathMappedEndpoints,
WebEndpointProperties webEndpoint, ObjectProvider<List<MetadataContributor>> metadataContributors,
DispatcherServletPath dispatcherServletPath) {
return new ServletApplicationFactory(instance, management, server, servletContext, pathMappedEndpoints,
webEndpoint,
new CompositeMetadataContributor(metadataContributors.getIfAvailable(Collections::emptyList)),
dispatcherServletPath);
}
}
@Configuration(proxyBeanMethods = false)
@ConditionalOnWebApplication(type = Type.REACTIVE)
public static class ReactiveConfiguration {
@Bean
@Lazy(false)
@ConditionalOnMissingBean
public ApplicationFactory applicationFactory(InstanceProperties instance, ManagementServerProperties management,
ServerProperties server, PathMappedEndpoints pathMappedEndpoints, WebEndpointProperties webEndpoint,
ObjectProvider<List<MetadataContributor>> metadataContributors, WebFluxProperties webFluxProperties) {
return new ReactiveApplicationFactory(instance, management, server, pathMappedEndpoints, webEndpoint,
new CompositeMetadataContributor(metadataContributors.getIfAvailable(Collections::emptyList)),
webFluxProperties);
}
}
@Configuration(proxyBeanMethods = false)
@ConditionalOnBean(RestClient.Builder.class)
public static class RestClientRegistrationClientConfig {
@Bean
@ConditionalOnMissingBean
public RegistrationClient registrationClient(ClientProperties client, RestClient.Builder restClientBuilder,
ObjectProvider<JsonMapper> objectMapper) {
var factorySettings = HttpClientSettings.defaults()
.withConnectTimeout(client.getConnectTimeout())
.withReadTimeout(client.getReadTimeout());
var clientHttpRequestFactory = ClientHttpRequestFactoryBuilder.detect().build(factorySettings);
restClientBuilder.requestFactory(clientHttpRequestFactory);
objectMapper.ifAvailable((mapper) -> restClientBuilder.messageConverters((configurer) -> {
configurer.removeIf(JacksonJsonHttpMessageConverter.class::isInstance);
configurer.add(new JacksonJsonHttpMessageConverter(mapper));
}));
if (client.getUsername() != null && client.getPassword() != null) {
restClientBuilder
.requestInterceptor(new BasicAuthenticationInterceptor(client.getUsername(), client.getPassword()));
}
var restClient = restClientBuilder.build();
return new RestClientRegistrationClient(restClient);
}
}
}
================================================
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/config/SpringBootAdminClientCloudFoundryAutoConfiguration.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.client.config;
import java.util.Collections;
import java.util.List;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
import org.springframework.boot.actuate.autoconfigure.web.server.ManagementServerProperties;
import org.springframework.boot.actuate.endpoint.web.PathMappedEndpoints;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnCloudPlatform;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.cloud.CloudPlatform;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.server.autoconfigure.ServerProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import de.codecentric.boot.admin.client.registration.CloudFoundryApplicationFactory;
import de.codecentric.boot.admin.client.registration.metadata.CloudFoundryMetadataContributor;
import de.codecentric.boot.admin.client.registration.metadata.CompositeMetadataContributor;
import de.codecentric.boot.admin.client.registration.metadata.MetadataContributor;
@Configuration(proxyBeanMethods = false)
@ConditionalOnWebApplication
@ConditionalOnCloudPlatform(CloudPlatform.CLOUD_FOUNDRY)
@Conditional(SpringBootAdminClientEnabledCondition.class)
@EnableConfigurationProperties(CloudFoundryApplicationProperties.class)
@AutoConfigureBefore({ SpringBootAdminClientAutoConfiguration.class })
public class SpringBootAdminClientCloudFoundryAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public CloudFoundryMetadataContributor cloudFoundryMetadataContributor(
CloudFoundryApplicationProperties cloudFoundryApplicationProperties) {
return new CloudFoundryMetadataContributor(cloudFoundryApplicationProperties);
}
@Bean
@Lazy(false)
@ConditionalOnMissingBean
public CloudFoundryApplicationFactory applicationFactory(InstanceProperties instance,
ManagementServerProperties management, ServerProperties server, PathMappedEndpoints pathMappedEndpoints,
WebEndpointProperties webEndpoint, ObjectProvider<List<MetadataContributor>> metadataContributors,
CloudFoundryApplicationProperties cfApplicationProperties) {
return new CloudFoundryApplicationFactory(instance, management, server, pathMappedEndpoints, webEndpoint,
new CompositeMetadataContributor(metadataContributors.getIfAvailable(Collections::emptyList)),
cfApplicationProperties);
}
}
================================================
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/config/SpringBootAdminClientEnabledCondition.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.client.config;
import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
import org.springframework.boot.context.properties.bind.Bindable;
import org.springframework.boot.context.properties.bind.Binder;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
/**
* This condition checks if the client should be enabled. Two properties are checked:
* spring.boot.admin.client.enabled and spring.boot.admin.client.url. The following table
* shows under which conditions the client is active. <pre>
* | enabled: false | enabled: true (default) |
* --------- | -------------- | ----------------------- |
* url empty | inactive | inactive |
* (default) | | |
* --------- | -------------- | ----------------------- |
* url set | inactive | active |
* </pre>
*/
public class SpringBootAdminClientEnabledCondition extends SpringBootCondition {
@Override
public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata annotatedTypeMetadata) {
ClientProperties clientProperties = getClientProperties(context);
if (!clientProperties.isEnabled()) {
return ConditionOutcome
.noMatch("Spring Boot Client is disabled, because 'spring.boot.admin.client.enabled' is false.");
}
if (clientProperties.getUrl().length == 0) {
return ConditionOutcome
.noMatch("Spring Boot Client is disabled, because 'spring.boot.admin.client.url' is empty.");
}
return ConditionOutcome.match();
}
private ClientProperties getClientProperties(ConditionContext context) {
ClientProperties clientProperties = new ClientProperties();
Binder.get(context.getEnvironment()).bind("spring.boot.admin.client", Bindable.ofInstance(clientProperties));
return clientProperties;
}
}
================================================
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/config/SpringNativeClientAutoConfiguration.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.client.config;
import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.restclient.autoconfigure.RestClientAutoConfiguration;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportRuntimeHints;
@Configuration(proxyBeanMethods = false)
@ConditionalOnWebApplication
@Conditional(SpringBootAdminClientEnabledCondition.class)
@AutoConfigureAfter({ WebEndpointAutoConfiguration.class, RestClientAutoConfiguration.class })
@ImportRuntimeHints({ ClientRuntimeHints.class })
public class SpringNativeClientAutoConfiguration {
}
================================================
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/config/package-info.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@NullMarked
package de.codecentric.boot.admin.client.config;
import org.jspecify.annotations.NullMarked;
================================================
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/Application.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.client.registration;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.springframework.util.Assert;
/**
* Contains all information which is used when this application is registered.
*
* @author Johannes Edmeier
*/
@lombok.Data
@lombok.ToString(exclude = "metadata")
public class Application {
private final String name;
private final String managementUrl;
private final String healthUrl;
private final String serviceUrl;
private final Map<String, String> metadata;
@lombok.Builder(builderClassName = "Builder")
protected Application(String name, String managementUrl, String healthUrl, String serviceUrl,
@lombok.Singular("metadata") Map<String, String> metadata) {
Assert.hasText(name, "name must not be empty!");
Assert.hasText(healthUrl, "healthUrl must not be empty!");
this.name = name;
this.managementUrl = managementUrl;
this.healthUrl = healthUrl;
this.serviceUrl = serviceUrl;
this.metadata = new HashMap<>(metadata);
}
public static Builder create(String name) {
return Application.builder().name(name);
}
public Map<String, String> getMetadata() {
return Collections.unmodifiableMap(metadata);
}
public static class Builder {
// Will be generated by lombok
}
}
================================================
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/ApplicationFactory.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.client.registration;
/**
* Classes implementing this interface are responsible for creating an {@link Application}
* class which is used to register at the admin server.
*
* @author Johannes Edmeier
*/
public interface ApplicationFactory {
/**
* @return {@link Application} instance;
*/
Application createApplication();
}
================================================
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/ApplicationRegistrator.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.client.registration;
/**
* Interface for client application registration at spring-boot-admin-server
*/
public interface ApplicationRegistrator {
/**
* Registers the client application at spring-boot-admin-server.
* @return true if successful registration on at least one admin server
*/
boolean register();
/**
* Tries to deregister currently registered application
*/
void deregister();
/**
* @return the id of this client as given by the admin server. Returns null if the
* client has not registered against the admin server yet.
*/
String getRegisteredId();
}
================================================
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/CloudFoundryApplicationFactory.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.client.registration;
import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
import org.springframework.boot.actuate.autoconfigure.web.server.ManagementServerProperties;
import org.springframework.boot.actuate.endpoint.web.PathMappedEndpoints;
import org.springframework.boot.web.server.autoconfigure.ServerProperties;
import org.springframework.util.StringUtils;
import de.codecentric.boot.admin.client.config.CloudFoundryApplicationProperties;
import de.codecentric.boot.admin.client.config.InstanceProperties;
import de.codecentric.boot.admin.client.registration.metadata.MetadataContributor;
public class CloudFoundryApplicationFactory extends DefaultApplicationFactory {
private final CloudFoundryApplicationProperties cfApplicationProperties;
private final InstanceProperties instance;
public CloudFoundryApplicationFactory(InstanceProperties instance, ManagementServerProperties management,
ServerProperties server, PathMappedEndpoints pathMappedEndpoints, WebEndpointProperties webEndpoint,
MetadataContributor metadataContributor, CloudFoundryApplicationProperties cfApplicationProperties) {
super(instance, management, server, pathMappedEndpoints, webEndpoint, metadataContributor);
this.cfApplicationProperties = cfApplicationProperties;
this.instance = instance;
}
@Override
protected String getServiceBaseUrl() {
String baseUrl = this.instance.getServiceBaseUrl();
if (StringUtils.hasText(baseUrl)) {
return baseUrl;
}
if (this.cfApplicationProperties.getUris().isEmpty()) {
return super.getServiceBaseUrl();
}
return "http://" + this.cfApplicationProperties.getUris().get(0);
}
}
================================================
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/DefaultApplicationFactory.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.client.registration;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.LinkedHashMap;
import java.util.Map;
import org.jspecify.annotations.Nullable;
import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
import org.springframework.boot.actuate.autoconfigure.web.server.ManagementServerProperties;
import org.springframework.boot.actuate.endpoint.EndpointId;
import org.springframework.boot.actuate.endpoint.web.PathMappedEndpoints;
import org.springframework.boot.web.server.Ssl;
import org.springframework.boot.web.server.autoconfigure.ServerProperties;
import org.springframework.boot.web.server.context.WebServerInitializedEvent;
import org.springframework.context.event.EventListener;
import org.springframework.util.StringUtils;
import org.springframework.web.util.UriComponentsBuilder;
import de.codecentric.boot.admin.client.config.InstanceProperties;
import de.codecentric.boot.admin.client.registration.metadata.MetadataContributor;
/**
* Default implementation for creating the {@link Application} instance which gets
* registered at the admin server.
*
* @author Johannes Edmeier
* @author Rene Felgenträger
*/
public class DefaultApplicationFactory implements ApplicationFactory {
private final InstanceProperties instance;
private final ServerProperties server;
private final ManagementServerProperties management;
private final PathMappedEndpoints pathMappedEndpoints;
private final WebEndpointProperties webEndpoint;
private final MetadataContributor metadataContributor;
@Nullable private Integer localServerPort;
@Nullable private Integer localManagementPort;
public DefaultApplicationFactory(InstanceProperties instance, ManagementServerProperties management,
ServerProperties server, PathMappedEndpoints pathMappedEndpoints, WebEndpointProperties webEndpoint,
MetadataContributor metadataContributor) {
this.instance = instance;
this.management = management;
this.server = server;
this.pathMappedEndpoints = pathMappedEndpoints;
this.webEndpoint = webEndpoint;
this.metadataContributor = metadataContributor;
}
@Override
public Application createApplication() {
return Application.create(getName())
.healthUrl(getHealthUrl())
.managementUrl(getManagementUrl())
.serviceUrl(getServiceUrl())
.metadata(getMetadata())
.build();
}
protected String getName() {
return this.instance.getName();
}
protected String getServiceUrl() {
if (this.instance.getServiceUrl() != null) {
return this.instance.getServiceUrl();
}
return UriComponentsBuilder.fromUriString(getServiceBaseUrl()).path(getServicePath()).toUriString();
}
protected String getServiceBaseUrl() {
String baseUrl = this.instance.getServiceBaseUrl();
if (StringUtils.hasText(baseUrl)) {
return baseUrl;
}
return UriComponentsBuilder.newInstance()
.scheme(getScheme(this.server.getSsl()))
.host(getServiceHost())
.port(getLocalServerPort())
.toUriString();
}
protected String getServicePath() {
String path = this.instance.getServicePath();
if (StringUtils.hasText(path)) {
return path;
}
return "/";
}
protected String getManagementUrl() {
if (this.instance.getManagementUrl() != null) {
return this.instance.getManagementUrl();
}
return UriComponentsBuilder.fromUriString(getManagementBaseUrl())
.path("/")
.path(getEndpointsWebPath())
.toUriString();
}
protected String getManagementBaseUrl() {
String baseUrl = this.instance.getManagementBaseUrl();
if (StringUtils.hasText(baseUrl)) {
return baseUrl;
}
if (isManagementPortEqual()) {
return this.getServiceUrl();
}
Ssl ssl = (this.management.getSsl() != null) ? this.management.getSsl() : this.server.getSsl();
return UriComponentsBuilder.newInstance()
.scheme(getScheme(ssl))
.host(getManagementHost())
.port(getLocalManagementPort())
.toUriString();
}
protected boolean isManagementPortEqual() {
return this.localManagementPort == null || this.localManagementPort.equals(this.localServerPort);
}
protected String getEndpointsWebPath() {
return this.webEndpoint.getBasePath();
}
protected String getHealthUrl() {
if (this.instance.getHealthUrl() != null) {
return this.instance.getHealthUrl();
}
return UriComponentsBuilder.fromUriString(getManagementBaseUrl())
.path("/")
.path(getHealthEndpointPath())
.toUriString();
}
protected Map<String, String> getMetadata() {
Map<String, String> metadata = new LinkedHashMap<>();
metadata.putAll(this.metadataContributor.getMetadata());
metadata.putAll(this.instance.getMetadata());
return metadata;
}
protected String getServiceHost() {
InetAddress address = this.server.getAddress();
if (address == null) {
address = getLocalHost();
}
return getHost(address);
}
protected String getManagementHost() {
InetAddress address = this.management.getAddress();
if (address != null) {
return getHost(address);
}
return getServiceHost();
}
protected InetAddress getLocalHost() {
try {
return InetAddress.getLocalHost();
}
catch (UnknownHostException ex) {
throw new IllegalArgumentException(ex.getMessage(), ex);
}
}
protected Integer getLocalServerPort() {
if (this.localServerPort == null) {
throw new IllegalStateException(
"couldn't determine local port. Please set spring.boot.admin.client.instance.service-base-url.");
}
return this.localServerPort;
}
protected Integer getLocalManagementPort() {
if (this.localManagementPort == null) {
return this.getLocalServerPort();
}
return this.localManagementPort;
}
protected String getHealthEndpointPath() {
String health = this.pathMappedEndpoints.getPath(EndpointId.of("health"));
if (StringUtils.hasText(health)) {
return health;
}
String status = this.pathMappedEndpoints.getPath(EndpointId.of("status"));
if (StringUtils.hasText(status)) {
return status;
}
throw new IllegalStateException("Either health or status endpoint must be enabled!");
}
protected String getScheme(@Nullable Ssl ssl) {
return ((ssl != null) && ssl.isEnabled()) ? "https" : "http";
}
protected String getHost(InetAddress address) {
if (this.instance.isPreferIp()) {
return address.getHostAddress();
}
return switch (this.instance.getServiceHostType()) {
case IP -> address.getHostAddress();
case HOST_NAME -> address.getHostName();
default -> address.getCanonicalHostName();
};
}
@EventListener
public void onWebServerInitialized(WebServerInitializedEvent event) {
String name = event.getApplicationContext().getServerNamespace();
if ("server".equals(name) || !StringUtils.hasText(name)) {
this.localServerPort = event.getWebServer().getPort();
}
else if ("management".equals(name)) {
this.localManagementPort = event.getWebServer().getPort();
}
}
}
================================================
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/DefaultApplicationRegistrator.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.client.registration;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.atomic.LongAdder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class DefaultApplicationRegistrator implements ApplicationRegistrator {
private static final Logger LOGGER = LoggerFactory.getLogger(DefaultApplicationRegistrator.class);
private final ConcurrentHashMap<String, LongAdder> attempts = new ConcurrentHashMap<>();
private final AtomicReference<String> registeredId = new AtomicReference<>();
private final ApplicationFactory applicationFactory;
private final String[] adminUrls;
private final boolean registerOnce;
private final RegistrationClient registrationClient;
public DefaultApplicationRegistrator(ApplicationFactory applicationFactory, RegistrationClient registrationClient,
String[] adminUrls, boolean registerOnce) {
this.applicationFactory = applicationFactory;
this.adminUrls = adminUrls;
this.registerOnce = registerOnce;
this.registrationClient = registrationClient;
}
/**
* Registers the client application at spring-boot-admin-server.
* @return true if successful registration on at least one admin server
*/
@Override
public boolean register() {
Application application = this.applicationFactory.createApplication();
boolean isRegistrationSuccessful = false;
for (String adminUrl : this.adminUrls) {
LongAdder attempt = this.attempts.computeIfAbsent(adminUrl, (k) -> new LongAdder());
boolean successful = register(application, adminUrl, attempt.intValue() == 0);
if (!successful) {
attempt.increment();
}
else {
attempt.reset();
isRegistrationSuccessful = true;
if (this.registerOnce) {
break;
}
}
}
return isRegistrationSuccessful;
}
protected boolean register(Application application, String adminUrl, boolean firstAttempt) {
try {
String id = this.registrationClient.register(adminUrl, application);
if (this.registeredId.compareAndSet(null, id)) {
LOGGER.info("Application registered itself as {}", id);
}
else {
LOGGER.debug("Application refreshed itself as {}", id);
}
return true;
}
catch (Exception ex) {
if (firstAttempt) {
LOGGER.warn(
"Failed to register application as {} at spring-boot-admin ({}): {}. Further attempts are logged on DEBUG level",
application, this.adminUrls, ex.getMessage(), ex);
}
else {
LOGGER.debug("Failed to register application as {} at spring-boot-admin ({}): {}", application,
this.adminUrls, ex.getMessage(), ex);
}
return false;
}
}
@Override
public void deregister() {
String id = this.registeredId.get();
if (id == null) {
return;
}
for (String adminUrl : this.adminUrls) {
try {
this.registrationClient.deregister(adminUrl, id);
this.registeredId.compareAndSet(id, null);
if (this.registerOnce) {
break;
}
}
catch (Exception ex) {
LOGGER.warn("Failed to deregister application (id={}) at spring-boot-admin ({}): {}", id, adminUrl,
ex.getMessage());
}
}
}
@Override
public String getRegisteredId() {
return this.registeredId.get();
}
}
================================================
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/ReactiveApplicationFactory.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.client.registration;
import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
import org.springframework.boot.actuate.autoconfigure.web.server.ManagementServerProperties;
import org.springframework.boot.actuate.endpoint.web.PathMappedEndpoints;
import org.springframework.boot.web.server.Ssl;
import org.springframework.boot.web.server.autoconfigure.ServerProperties;
import org.springframework.boot.webflux.autoconfigure.WebFluxProperties;
import org.springframework.util.StringUtils;
import org.springframework.web.util.UriComponentsBuilder;
import de.codecentric.boot.admin.client.config.InstanceProperties;
import de.codecentric.boot.admin.client.registration.metadata.MetadataContributor;
public class ReactiveApplicationFactory extends DefaultApplicationFactory {
private final ManagementServerProperties management;
private final ServerProperties server;
private final WebFluxProperties webflux;
private final InstanceProperties instance;
public ReactiveApplicationFactory(InstanceProperties instance, ManagementServerProperties management,
ServerProperties server, PathMappedEndpoints pathMappedEndpoints, WebEndpointProperties webEndpoint,
MetadataContributor metadataContributor, WebFluxProperties webFluxProperties) {
super(instance, management, server, pathMappedEndpoints, webEndpoint, metadataContributor);
this.management = management;
this.server = server;
this.webflux = webFluxProperties;
this.instance = instance;
}
@Override
protected String getServiceUrl() {
if (instance.getServiceUrl() != null) {
return instance.getServiceUrl();
}
return UriComponentsBuilder.fromUriString(getServiceBaseUrl())
.path(getServicePath())
.path(getWebfluxBasePath())
.toUriString();
}
@Override
protected String getManagementBaseUrl() {
String baseUrl = this.instance.getManagementBaseUrl();
if (StringUtils.hasText(baseUrl)) {
return baseUrl;
}
if (isManagementPortEqual()) {
return this.getServiceUrl();
}
Ssl ssl = (this.management.getSsl() != null) ? this.management.getSsl() : this.server.getSsl();
return UriComponentsBuilder.newInstance()
.scheme(getScheme(ssl))
.host(getManagementHost())
.port(getLocalManagementPort())
.path(getManagementContextPath())
.toUriString();
}
protected String getManagementContextPath() {
return management.getBasePath();
}
protected String getWebfluxBasePath() {
return webflux.getBasePath();
}
}
================================================
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/RegistrationApplicationListener.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.client.registration;
import java.time.Duration;
import java.util.concurrent.ScheduledFuture;
import org.jspecify.annotations.Nullable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.ContextClosedEvent;
import org.springframework.context.event.EventListener;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
/**
* Listener responsible for starting and stopping the registration task when the
* application is ready.
*
* @author Johannes Edmeier
*/
public class RegistrationApplicationListener implements InitializingBean, DisposableBean {
private static final Logger LOGGER = LoggerFactory.getLogger(RegistrationApplicationListener.class);
private final ApplicationRegistrator registrator;
private final ThreadPoolTaskScheduler taskScheduler;
private boolean autoDeregister = false;
private boolean autoRegister = true;
private Duration registerPeriod = Duration.ofSeconds(10);
@Nullable private volatile ScheduledFuture<?> scheduledTask;
public RegistrationApplicationListener(ApplicationRegistrator registrator) {
this(registrator, registrationTaskScheduler());
}
RegistrationApplicationListener(ApplicationRegistrator registrator, ThreadPoolTaskScheduler taskScheduler) {
this.registrator = registrator;
this.taskScheduler = taskScheduler;
}
private static ThreadPoolTaskScheduler registrationTaskScheduler() {
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
taskScheduler.setPoolSize(1);
taskScheduler.setRemoveOnCancelPolicy(true);
taskScheduler.setThreadNamePrefix("registrationTask");
return taskScheduler;
}
@EventListener
@Order(Ordered.LOWEST_PRECEDENCE)
public void onApplicationReady(ApplicationReadyEvent event) {
if (autoRegister) {
startRegisterTask();
}
}
@EventListener
@Order(Ordered.LOWEST_PRECEDENCE)
public void onClosedContext(ContextClosedEvent event) {
if (event.getApplicationContext().getParent() == null
|| "bootstrap".equals(event.getApplicationContext().getParent().getId())) {
stopRegisterTask();
if (autoDeregister) {
registrator.deregister();
}
}
}
public void startRegisterTask() {
if (scheduledTask != null && !scheduledTask.isDone()) {
return;
}
scheduledTask = taskScheduler.scheduleAtFixedRate(registrator::register, registerPeriod);
LOGGER.debug("Scheduled registration task for every {}ms", registerPeriod.toMillis());
}
public void stopRegisterTask() {
if (scheduledTask != null && !scheduledTask.isDone()) {
scheduledTask.cancel(true);
LOGGER.debug("Canceled registration task");
}
}
public void setAutoDeregister(boolean autoDeregister) {
this.autoDeregister = autoDeregister;
}
public void setAutoRegister(boolean autoRegister) {
this.autoRegister = autoRegister;
}
public void setRegisterPeriod(Duration registerPeriod) {
this.registerPeriod = registerPeriod;
}
@Override
public void afterPropertiesSet() {
taskScheduler.afterPropertiesSet();
}
@Override
public void destroy() {
taskScheduler.destroy();
}
}
================================================
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/RegistrationClient.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.client.registration;
public interface RegistrationClient {
String register(String adminUrl, Application self);
void deregister(String adminUrl, String id);
}
================================================
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/RestClientRegistrationClient.java
================================================
/*
* Copyright 2014-2024 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.client.registration;
import java.util.Collections;
import java.util.Map;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.client.RestClient;
public class RestClientRegistrationClient implements RegistrationClient {
private static final ParameterizedTypeReference<Map<String, Object>> RESPONSE_TYPE = new ParameterizedTypeReference<>() {
};
private final RestClient restClient;
public RestClientRegistrationClient(RestClient restClient) {
this.restClient = restClient;
}
@Override
public String register(String adminUrl, Application application) {
Map<String, Object> response = this.restClient.post()
.uri(adminUrl)
.headers(this::setRequestHeaders)
.body(application)
.retrieve()
.body(RESPONSE_TYPE);
return response.get("id").toString();
}
@Override
public void deregister(String adminUrl, String id) {
this.restClient.delete().uri(adminUrl + '/' + id).retrieve().toBodilessEntity();
}
protected void setRequestHeaders(HttpHeaders headers) {
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
}
}
================================================
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/ServletApplicationFactory.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.client.registration;
import jakarta.servlet.ServletContext;
import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
import org.springframework.boot.actuate.autoconfigure.web.server.ManagementServerProperties;
import org.springframework.boot.actuate.endpoint.web.PathMappedEndpoints;
import org.springframework.boot.web.server.Ssl;
import org.springframework.boot.web.server.autoconfigure.ServerProperties;
import org.springframework.boot.webmvc.autoconfigure.DispatcherServletPath;
import org.springframework.util.StringUtils;
import org.springframework.web.util.UriComponentsBuilder;
import de.codecentric.boot.admin.client.config.InstanceProperties;
import de.codecentric.boot.admin.client.registration.metadata.MetadataContributor;
public class ServletApplicationFactory extends DefaultApplicationFactory {
private final ServletContext servletContext;
private final ServerProperties server;
private final ManagementServerProperties management;
private final InstanceProperties instance;
private final DispatcherServletPath dispatcherServletPath;
public ServletApplicationFactory(InstanceProperties instance, ManagementServerProperties management,
ServerProperties server, ServletContext servletContext, PathMappedEndpoints pathMappedEndpoints,
WebEndpointProperties webEndpoint, MetadataContributor metadataContributor,
DispatcherServletPath dispatcherServletPath) {
super(instance, management, server, pathMappedEndpoints, webEndpoint, metadataContributor);
this.servletContext = servletContext;
this.server = server;
this.management = management;
this.instance = instance;
this.dispatcherServletPath = dispatcherServletPath;
}
@Override
protected String getServiceUrl() {
if (instance.getServiceUrl() != null) {
return instance.getServiceUrl();
}
return UriComponentsBuilder.fromUriString(getServiceBaseUrl())
.path(getServicePath())
.path(getServerContextPath())
.toUriString();
}
@Override
protected String getManagementBaseUrl() {
String baseUrl = instance.getManagementBaseUrl();
if (StringUtils.hasText(baseUrl)) {
return baseUrl;
}
if (isManagementPortEqual()) {
return UriComponentsBuilder.fromUriString(getServiceUrl())
.path("/")
.path(getDispatcherServletPrefix())
.path(getManagementContextPath())
.toUriString();
}
Ssl ssl = (management.getSsl() != null) ? management.getSsl() : server.getSsl();
return UriComponentsBuilder.newInstance()
.scheme(getScheme(ssl))
.host(getManagementHost())
.port(getLocalManagementPort())
.path(getManagementContextPath())
.toUriString();
}
protected String getManagementContextPath() {
return management.getBasePath();
}
protected String getServerContextPath() {
return servletContext.getContextPath();
}
protected String getDispatcherServletPrefix() {
return this.dispatcherServletPath.getPrefix();
}
}
================================================
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/metadata/CloudFoundryMetadataContributor.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.client.registration.metadata;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.springframework.util.StringUtils;
import de.codecentric.boot.admin.client.config.CloudFoundryApplicationProperties;
public class CloudFoundryMetadataContributor implements MetadataContributor {
private final CloudFoundryApplicationProperties cfApplicationProperties;
public CloudFoundryMetadataContributor(CloudFoundryApplicationProperties cfApplicationProperties) {
this.cfApplicationProperties = cfApplicationProperties;
}
@Override
public Map<String, String> getMetadata() {
if (StringUtils.hasText(this.cfApplicationProperties.getApplicationId())
&& StringUtils.hasText(this.cfApplicationProperties.getInstanceIndex())) {
Map<String, String> map = new HashMap<>();
map.put("applicationId", this.cfApplicationProperties.getApplicationId());
map.put("instanceId", this.cfApplicationProperties.getInstanceIndex());
return map;
}
return Collections.emptyMap();
}
}
================================================
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/metadata/CompositeMetadataContributor.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.client.registration.metadata;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class CompositeMetadataContributor implements MetadataContributor {
private final List<MetadataContributor> delegates;
public CompositeMetadataContributor(List<MetadataContributor> delegates) {
this.delegates = delegates;
}
@Override
public Map<String, String> getMetadata() {
Map<String, String> metadata = new LinkedHashMap<>();
delegates.forEach((delegate) -> metadata.putAll(delegate.getMetadata()));
return metadata;
}
}
================================================
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/metadata/MetadataContributor.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.client.registration.metadata;
import java.util.Map;
@FunctionalInterface
public interface MetadataContributor {
Map<String, String> getMetadata();
}
================================================
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/metadata/StartupDateMetadataContributor.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.client.registration.metadata;
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Map;
import static java.util.Collections.singletonMap;
public class StartupDateMetadataContributor implements MetadataContributor {
private final OffsetDateTime timestamp = OffsetDateTime.now();
@Override
public Map<String, String> getMetadata() {
return singletonMap("startup", this.timestamp.format(DateTimeFormatter.ISO_DATE_TIME));
}
}
================================================
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/metadata/package-info.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@NullMarked
package de.codecentric.boot.admin.client.registration.metadata;
import org.jspecify.annotations.NullMarked;
================================================
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/package-info.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@NullMarked
package de.codecentric.boot.admin.client.registration;
import org.jspecify.annotations.NullMarked;
================================================
FILE: spring-boot-admin-client/src/main/resources/META-INF/additional-spring-configuration-metadata.json
================================================
{"groups": [
],"properties": [
{
"name": "spring.boot.admin.client.enabled",
"type": "java.lang.Boolean",
"description": "Enable Spring Admin Client.",
"defaultValue": "true"
}
]}
================================================
FILE: spring-boot-admin-client/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
================================================
de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration
de.codecentric.boot.admin.client.config.SpringBootAdminClientCloudFoundryAutoConfiguration
de.codecentric.boot.admin.client.config.SpringNativeClientAutoConfiguration
================================================
FILE: spring-boot-admin-client/src/test/java/de/codecentric/boot/admin/client/AbstractClientApplicationTest.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.client;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Arrays;
import java.util.concurrent.CountDownLatch;
import java.util.stream.Stream;
import com.github.tomakehurst.wiremock.WireMockServer;
import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder;
import com.github.tomakehurst.wiremock.common.ConsoleNotifier;
import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.event.EventListener;
import de.codecentric.boot.admin.client.registration.ApplicationRegistrator;
import static com.github.tomakehurst.wiremock.client.WireMock.created;
import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;
import static com.github.tomakehurst.wiremock.client.WireMock.matching;
import static com.github.tomakehurst.wiremock.client.WireMock.matchingJsonPath;
import static com.github.tomakehurst.wiremock.client.WireMock.post;
import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor;
import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;
import static org.awaitility.Awaitility.await;
public abstract class AbstractClientApplicationTest {
private final WireMockServer wireMock = new WireMockServer(
options().dynamicPort().notifier(new ConsoleNotifier(true)));
private SpringApplication application;
private ConfigurableApplicationContext instance;
private static final CountDownLatch cdl = new CountDownLatch(1);
protected void setUp(WebApplicationType type) {
setUpWiremock();
setUpApplication(type);
}
private void setUpWiremock() {
wireMock.start();
ResponseDefinitionBuilder response = created().withHeader("Content-Type", "application/json")
.withHeader("Connection", "close")
.withHeader("Location", wireMock.url("/instances/abcdef"))
.withBody("{ \"id\" : \"abcdef\" }");
wireMock.stubFor(post(urlEqualTo("/instances")).willReturn(response));
}
private void setUpApplication(WebApplicationType type) {
application = new SpringApplication(TestClientApplication.class);
application.setWebApplicationType(type);
}
private void setUpApplicationContext(String... additionalArgs) {
Stream<String> defaultArgs = Stream.of("--spring.application.name=Test-Client", "--server.port=0",
"--management.endpoints.web.base-path=/mgmt", "--endpoints.health.enabled=true",
"--spring.boot.admin.client.url=" + wireMock.url("/"));
String[] args = Stream.concat(defaultArgs, Arrays.stream(additionalArgs)).toArray(String[]::new);
this.instance = application.run(args);
}
@AfterEach
void tearDown() {
wireMock.stop();
if (instance != null) {
instance.close();
}
}
@Test
public void test_context() throws InterruptedException, UnknownHostException {
setUpApplicationContext();
String hostName = InetAddress.getLocalHost().getCanonicalHostName();
String serviceHost = "http://" + hostName + ":" + getServerPort();
String managementHost = "http://" + hostName + ":" + getManagementPort();
RequestPatternBuilder request = postRequestedFor(urlEqualTo("/instances"));
request.withHeader("Content-Type", equalTo("application/json"))
.withRequestBody(matchingJsonPath("$.name", equalTo("Test-Client")))
.withRequestBody(matchingJsonPath("$.healthUrl", equalTo(managementHost + "/mgmt/health")))
.withRequestBody(matchingJsonPath("$.managementUrl", equalTo(managementHost + "/mgmt")))
.withRequestBody(matchingJsonPath("$.serviceUrl", equalTo(serviceHost + "/")))
.withRequestBody(matchingJsonPath("$.metadata.startup", matching(".+")));
cdl.await();
await().untilAsserted(() -> wireMock.verify(request));
}
@Test
public void test_context_with_snake_case() throws InterruptedException, UnknownHostException {
setUpApplicationContext("--spring.jackson.property-naming-strategy=SNAKE_CASE");
String hostName = InetAddress.getLocalHost().getCanonicalHostName();
String serviceHost = "http://" + hostName + ":" + getServerPort();
String managementHost = "http://" + hostName + ":" + getManagementPort();
RequestPatternBuilder request = postRequestedFor(urlEqualTo("/instances"));
request.withHeader("Content-Type", equalTo("application/json"))
.withRequestBody(matchingJsonPath("$.name", equalTo("Test-Client")))
.withRequestBody(matchingJsonPath("$.health_url", equalTo(managementHost + "/mgmt/health")))
.withRequestBody(matchingJsonPath("$.management_url", equalTo(managementHost + "/mgmt")))
.withRequestBody(matchingJsonPath("$.service_url", equalTo(serviceHost + "/")))
.withRequestBody(matchingJsonPath("$.metadata.startup", matching(".+")));
cdl.await();
await().untilAsserted(() -> wireMock.verify(request));
}
private int getServerPort() {
return instance.getEnvironment().getProperty("local.server.port", Integer.class, 0);
}
private int getManagementPort() {
return instance.getEnvironment().getProperty("local.management.port", Integer.class, 0);
}
@SpringBootConfiguration
@EnableAutoConfiguration
public static class TestClientApplication {
@Autowired
private ApplicationRegistrator registrator;
@EventListener
public void ping(ApplicationReadyEvent ev) {
new Thread(() -> {
await().until(() -> registrator.getRegisteredId() != null);
cdl.countDown();
}).start();
}
}
}
================================================
FILE: spring-boot-admin-client/src/test/java/de/codecentric/boot/admin/client/ClientReactiveApplicationTest.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.client;
import org.junit.jupiter.api.BeforeEach;
import org.springframework.boot.WebApplicationType;
class ClientReactiveApplicationTest extends AbstractClientApplicationTest {
@BeforeEach
void setUp() {
super.setUp(WebApplicationType.REACTIVE);
}
}
================================================
FILE: spring-boot-admin-client/src/test/java/de/codecentric/boot/admin/client/ClientServletApplicationTest.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.client;
import org.junit.jupiter.api.BeforeEach;
import org.springframework.boot.WebApplicationType;
class ClientServletApplicationTest extends AbstractClientApplicationTest {
@BeforeEach
void setUp() {
super.setUp(WebApplicationType.SERVLET);
}
}
================================================
FILE: spring-boot-admin-client/src/test/java/de/codecentric/boot/admin/client/config/ClientPropertiesTest.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.client.config;
import org.junit.jupiter.api.Test;
import org.springframework.mock.env.MockEnvironment;
import static org.assertj.core.api.Assertions.assertThat;
class ClientPropertiesTest {
@Test
void should_default_autoDeregister_to_false() {
MockEnvironment env = new MockEnvironment();
ClientProperties clientProperties = new ClientProperties();
assertThat(clientProperties.isAutoDeregistration(env)).isFalse();
clientProperties.setAutoDeregistration(false);
assertThat(clientProperties.isAutoDeregistration(env)).isFalse();
clientProperties.setAutoDeregistration(true);
assertThat(clientProperties.isAutoDeregistration(env)).isTrue();
}
@Test
void should_default_autoDeregister_to_true() {
MockEnvironment env = new MockEnvironment();
env.setProperty("VCAP_APPLICATION", "");
ClientProperties clientProperties = new ClientProperties();
assertThat(clientProperties.isAutoDeregistration(env)).isTrue();
clientProperties.setAutoDeregistration(false);
assertThat(clientProperties.isAutoDeregistration(env)).isFalse();
clientProperties.setAutoDeregistration(true);
assertThat(clientProperties.isAutoDeregistration(env)).isTrue();
}
@Test
void should_return_all_adminUrls() {
ClientProperties clientProperties = new ClientProperties();
clientProperties.setApiPath("register");
clientProperties.setUrl(new String[] { "http://first", "http://second" });
assertThat(clientProperties.getAdminUrl()).containsExactly("http://first/register", "http://second/register");
}
}
================================================
FILE: spring-boot-admin-client/src/test/java/de/codecentric/boot/admin/client/config/CloudFoundryApplicationPropertiesTest.java
================================================
/*
* Copyright 2014-2023 the original author or 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.client.config;
import org.junit.jupiter.api.Test;
import org.springframework.boot.cloud.CloudFoundryVcapEnvironmentPostProcessor;
import org.springframework.boot.context.properties.bind.Bindable;
import org.springframework.boot.context.properties.bind.Binder;
import org.springframework.boot.logging.DeferredLogs;
import org.springframework.mock.env.MockEnvironment;
import static org.assertj.core.api.Assertions.assertThat;
class CloudFoundryApplicationPropertiesTest {
@Test
void bind() {
String vcap = "{\"application_users\":[]," + "\"application_id\":\"9958288f-9842-4ddc-93dd-1ea3c90634cd\","
+ "\"instance_id\":\"bb7935245adf3e650dfb7c58a06e9ece\","
+ "\"instance_index\":0,\"version\":\"3464e092-1c13-462e-a47c-807c30318a50\","
+ "\"name\":\"foo\",\"uris\":[\"foo.cfapps.io\"]," + "\"started_at\":\"2013-05-29 02:37:59 +0000\","
+ "\"started_at_timestamp\":1369795079," + "\"host\":\"0.0.0.0\",\"port\":61034,"
+ "\"limits\":{\"mem\":128,\"disk\":1024,\"fds\":16384},"
+ "\"version\":\"3464e092-1c13-462e-a47c-807c30318a50\","
+ "\"name\":\"dsyerenv\",\"uris\":[\"dsyerenv.cfapps.io\"],"
+ "\"users\":[],\"start\":\"2013-05-29 02:37:59 +0000\"," + "\"state_timestamp\":1369795079}";
MockEnvironment env = new MockEnvironment();
env.setProperty("VCAP_APPLICATION", vcap);
new CloudFoundryVcapEnvironmentPostProcessor(new DeferredLogs()).postProcessEnvironment(env, null);
CloudFoundryApplicationProperties cfProperties = Binder.get(env)
.bind("vcap.application", Bindable.of(CloudFoundryApplicationProperties.class))
.get();
assertThat(cfProperties.getApplicationId()).isEqualTo("9958288
gitextract_6_xkhu95/
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── CODEOWNERS
│ ├── ISSUE_TEMPLATE/
│ │ ├── spring-boot-admin-bug.md
│ │ └── spring-boot-admin-enhancement.md
│ ├── copilot-instructions.md
│ ├── milestones.sh
│ ├── release.yml
│ └── workflows/
│ ├── build-feature.yml
│ ├── build-main.yml
│ ├── deploy-documentation.yml
│ ├── issue-metrics.yml
│ ├── release-to-maven-central.yml
│ └── vulnerability-scan.yml
├── .gitignore
├── .gnupg.tar.enc
├── .mvn/
│ └── wrapper/
│ └── maven-wrapper.properties
├── CONTRIBUTING.md
├── LICENSE.txt
├── README.md
├── lombok.config
├── mvnw
├── mvnw.cmd
├── pom.xml
├── renovate.json
├── spring-boot-admin-build/
│ └── pom.xml
├── spring-boot-admin-client/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── de/
│ │ │ └── codecentric/
│ │ │ └── boot/
│ │ │ └── admin/
│ │ │ └── client/
│ │ │ ├── config/
│ │ │ │ ├── ClientProperties.java
│ │ │ │ ├── ClientRuntimeHints.java
│ │ │ │ ├── CloudFoundryApplicationProperties.java
│ │ │ │ ├── InstanceProperties.java
│ │ │ │ ├── ServiceHostType.java
│ │ │ │ ├── SpringBootAdminClientAutoConfiguration.java
│ │ │ │ ├── SpringBootAdminClientCloudFoundryAutoConfiguration.java
│ │ │ │ ├── SpringBootAdminClientEnabledCondition.java
│ │ │ │ ├── SpringNativeClientAutoConfiguration.java
│ │ │ │ └── package-info.java
│ │ │ └── registration/
│ │ │ ├── Application.java
│ │ │ ├── ApplicationFactory.java
│ │ │ ├── ApplicationRegistrator.java
│ │ │ ├── CloudFoundryApplicationFactory.java
│ │ │ ├── DefaultApplicationFactory.java
│ │ │ ├── DefaultApplicationRegistrator.java
│ │ │ ├── ReactiveApplicationFactory.java
│ │ │ ├── RegistrationApplicationListener.java
│ │ │ ├── RegistrationClient.java
│ │ │ ├── RestClientRegistrationClient.java
│ │ │ ├── ServletApplicationFactory.java
│ │ │ ├── metadata/
│ │ │ │ ├── CloudFoundryMetadataContributor.java
│ │ │ │ ├── CompositeMetadataContributor.java
│ │ │ │ ├── MetadataContributor.java
│ │ │ │ ├── StartupDateMetadataContributor.java
│ │ │ │ └── package-info.java
│ │ │ └── package-info.java
│ │ └── resources/
│ │ └── META-INF/
│ │ ├── additional-spring-configuration-metadata.json
│ │ └── spring/
│ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ └── test/
│ ├── java/
│ │ └── de/
│ │ └── codecentric/
│ │ └── boot/
│ │ └── admin/
│ │ └── client/
│ │ ├── AbstractClientApplicationTest.java
│ │ ├── ClientReactiveApplicationTest.java
│ │ ├── ClientServletApplicationTest.java
│ │ ├── config/
│ │ │ ├── ClientPropertiesTest.java
│ │ │ ├── CloudFoundryApplicationPropertiesTest.java
│ │ │ ├── SpringBootAdminClientAutoConfigurationTest.java
│ │ │ ├── SpringBootAdminClientCloudFoundryAutoConfigurationTest.java
│ │ │ ├── SpringBootAdminClientEnabledConditionTest.java
│ │ │ └── SpringBootAdminClientRegistrationClientAutoConfigurationTest.java
│ │ └── registration/
│ │ ├── AbstractRegistrationClientTest.java
│ │ ├── ApplicationTest.java
│ │ ├── CloudFoundryApplicationFactoryTest.java
│ │ ├── DefaultApplicationFactoryTest.java
│ │ ├── DefaultApplicationRegistratorTest.java
│ │ ├── ReactiveApplicationFactoryTest.java
│ │ ├── RegistrationApplicationListenerTest.java
│ │ ├── RestClientRegistrationClientTest.java
│ │ ├── ServletApplicationFactoryTest.java
│ │ └── metadata/
│ │ ├── CloudFoundryMetadataContributorTest.java
│ │ ├── CompositeMetadataContributorTest.java
│ │ └── StartupDateMetadataContributorTest.java
│ └── resources/
│ ├── application.yml
│ ├── junit-platform.properties
│ └── logback-test.xml
├── spring-boot-admin-dependencies/
│ └── pom.xml
├── spring-boot-admin-docs/
│ ├── pom.xml
│ └── src/
│ └── site/
│ ├── .gitignore
│ ├── README.md
│ ├── babel.config.js
│ ├── current/
│ │ ├── 404.template.html
│ │ └── index.template.html
│ ├── docs/
│ │ ├── 01-getting-started/
│ │ │ ├── 10-server-setup.md
│ │ │ ├── 20-client-registration.md
│ │ │ ├── 50-snapshots.md
│ │ │ ├── _category_.json
│ │ │ └── index.md
│ │ ├── 02-server/
│ │ │ ├── 01-server.mdx
│ │ │ ├── 02-security.md
│ │ │ ├── 10-Events.mdx
│ │ │ ├── 20-Clustering.mdx
│ │ │ ├── 30-persistence.md
│ │ │ ├── 40-instance-registry.md
│ │ │ ├── 99-server-properties.mdx
│ │ │ ├── _category_.json
│ │ │ ├── index.md
│ │ │ └── notifications/
│ │ │ ├── 90-custom-notifiers.md
│ │ │ ├── _category_.json
│ │ │ ├── index.mdx
│ │ │ ├── notifier-dingtalk.mdx
│ │ │ ├── notifier-discord.mdx
│ │ │ ├── notifier-hipchat.mdx
│ │ │ ├── notifier-lets-chat.mdx
│ │ │ ├── notifier-mail.mdx
│ │ │ ├── notifier-mattermost.mdx
│ │ │ ├── notifier-msteams.mdx
│ │ │ ├── notifier-rocketchat.mdx
│ │ │ ├── notifier-slack.mdx
│ │ │ ├── notifier-telegram.mdx
│ │ │ └── notifier-webex.mdx
│ │ ├── 03-client/
│ │ │ ├── 10-client-features.md
│ │ │ ├── 20-registration.md
│ │ │ ├── 30-metadata.md
│ │ │ ├── 40-service-discovery.md
│ │ │ ├── 80-configuration.md
│ │ │ ├── 99-properties.mdx
│ │ │ ├── _category_.json
│ │ │ └── index.md
│ │ ├── 04-integration/
│ │ │ ├── 10-eureka.md
│ │ │ ├── 20-consul.md
│ │ │ ├── 30-zookeeper.md
│ │ │ ├── 40-hazelcast.md
│ │ │ ├── _category_.json
│ │ │ └── index.md
│ │ ├── 05-security/
│ │ │ ├── 10-server-authentication.md
│ │ │ ├── 20-actuator-security.md
│ │ │ ├── 30-csrf-protection.md
│ │ │ ├── _category_.json
│ │ │ └── index.md
│ │ ├── 06-customization/
│ │ │ ├── _category_.json
│ │ │ ├── index.md
│ │ │ ├── monitoring/
│ │ │ │ ├── 01-instance-filters.md
│ │ │ │ ├── 02-custom-health-status.md
│ │ │ │ └── _category_.json
│ │ │ └── server/
│ │ │ ├── 04-endpoint-detection.md
│ │ │ └── _category_.json
│ │ ├── 08-third-party/
│ │ │ ├── _category_.json
│ │ │ ├── index.md
│ │ │ └── pyctuator.md
│ │ ├── 09-samples/
│ │ │ ├── 10-sample-servlet.md
│ │ │ ├── 20-sample-reactive.md
│ │ │ ├── 30-sample-eureka.md
│ │ │ ├── 40-sample-consul.md
│ │ │ ├── 50-sample-zookeeper.md
│ │ │ ├── 60-sample-hazelcast.md
│ │ │ ├── 70-sample-custom-ui.md
│ │ │ ├── _category_.json
│ │ │ └── index.md
│ │ ├── 10-reference/
│ │ │ ├── 10-event-types.md
│ │ │ ├── 20-rest-api.md
│ │ │ ├── 60-actuator-endpoints.mdx
│ │ │ ├── _category_.json
│ │ │ └── index.md
│ │ ├── 11-upgrading/
│ │ │ ├── 01-spring-boot-admin-4.md
│ │ │ ├── _category_.json
│ │ │ └── index.md
│ │ ├── index.mdx
│ │ └── index.module.css
│ ├── docusaurus.config.ts
│ ├── package.json
│ ├── sidebars.ts
│ ├── src/
│ │ ├── components/
│ │ │ ├── CopyButton.module.css
│ │ │ ├── CopyButton.tsx
│ │ │ ├── HexMesh.module.css
│ │ │ ├── HexMesh.tsx
│ │ │ ├── PropertyTable.module.css
│ │ │ ├── PropertyTable.tsx
│ │ │ ├── Screenshot.module.css
│ │ │ └── Screenshot.tsx
│ │ ├── css/
│ │ │ └── custom.css
│ │ ├── global.d.ts
│ │ ├── pages/
│ │ │ ├── faq.md
│ │ │ ├── impressum.md
│ │ │ ├── index.tsx
│ │ │ ├── markdown-page.md
│ │ │ └── privacy.md
│ │ ├── propertiesUtil.ts
│ │ └── theme/
│ │ ├── DocCard/
│ │ │ ├── index.js
│ │ │ └── styles.module.css
│ │ └── MDXComponents.ts
│ ├── static/
│ │ └── .nojekyll
│ └── tsconfig.json
├── spring-boot-admin-samples/
│ ├── pom.xml
│ ├── spring-boot-admin-sample-consul/
│ │ ├── docker-compose.yml
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── de/
│ │ │ │ └── codecentric/
│ │ │ │ └── boot/
│ │ │ │ └── admin/
│ │ │ │ └── sample/
│ │ │ │ └── SpringBootAdminConsulApplication.java
│ │ │ └── resources/
│ │ │ ├── application-dev.yml
│ │ │ ├── application-insecure.yml
│ │ │ ├── application-secure.yml
│ │ │ └── application.yml
│ │ └── test/
│ │ └── java/
│ │ └── de/
│ │ └── codecentric/
│ │ └── boot/
│ │ └── admin/
│ │ └── sample/
│ │ └── SpringBootAdminConsulApplicationTest.java
│ ├── spring-boot-admin-sample-custom-ui/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── pom.xml
│ │ ├── src/
│ │ │ ├── custom-endpoint.vue
│ │ │ ├── custom-subitem.vue
│ │ │ ├── custom.css
│ │ │ ├── custom.vue
│ │ │ ├── handle.vue
│ │ │ ├── index.js
│ │ │ └── routes.txt
│ │ └── vite.config.js
│ ├── spring-boot-admin-sample-eureka/
│ │ ├── docker-compose.yml
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── docker/
│ │ │ │ └── Dockerfile
│ │ │ ├── java/
│ │ │ │ └── de/
│ │ │ │ └── codecentric/
│ │ │ │ └── boot/
│ │ │ │ └── admin/
│ │ │ │ └── SpringBootAdminEurekaApplication.java
│ │ │ └── resources/
│ │ │ ├── application-dev.yml
│ │ │ ├── application-insecure.yml
│ │ │ ├── application-secure.yml
│ │ │ └── application.yml
│ │ └── test/
│ │ └── java/
│ │ └── de/
│ │ └── codecentric/
│ │ └── boot/
│ │ └── admin/
│ │ └── SpringBootAdminEurekaApplicationTest.java
│ ├── spring-boot-admin-sample-hazelcast/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── de/
│ │ │ │ └── codecentric/
│ │ │ │ └── boot/
│ │ │ │ └── admin/
│ │ │ │ └── sample/
│ │ │ │ └── SpringBootAdminHazelcastApplication.java
│ │ │ └── resources/
│ │ │ ├── application-dev.yml
│ │ │ ├── application-insecure.yml
│ │ │ ├── application-secure.yml
│ │ │ └── application.yml
│ │ └── test/
│ │ └── java/
│ │ └── de/
│ │ └── codecentric/
│ │ └── boot/
│ │ └── admin/
│ │ └── sample/
│ │ └── SpringBootAdminHazelcastApplicationTest.java
│ ├── spring-boot-admin-sample-reactive/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── de/
│ │ │ │ └── codecentric/
│ │ │ │ └── boot/
│ │ │ │ └── admin/
│ │ │ │ └── sample/
│ │ │ │ └── SpringBootAdminReactiveApplication.java
│ │ │ └── resources/
│ │ │ ├── application-dev.yml
│ │ │ ├── application-insecure.yml
│ │ │ ├── application-secure.yml
│ │ │ └── application.yml
│ │ └── test/
│ │ └── java/
│ │ └── de/
│ │ └── codecentric/
│ │ └── boot/
│ │ └── admin/
│ │ └── sample/
│ │ └── SpringBootAdminReactiveApplicationTest.java
│ ├── spring-boot-admin-sample-servlet/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── de/
│ │ │ │ └── codecentric/
│ │ │ │ └── boot/
│ │ │ │ └── admin/
│ │ │ │ └── sample/
│ │ │ │ ├── CustomCsrfFilter.java
│ │ │ │ ├── CustomEndpoint.java
│ │ │ │ ├── CustomNotifier.java
│ │ │ │ ├── NotifierConfig.java
│ │ │ │ ├── SecurityPermitAllConfig.java
│ │ │ │ ├── SecuritySecureConfig.java
│ │ │ │ └── SpringBootAdminServletApplication.java
│ │ │ └── resources/
│ │ │ ├── application-dev.yml
│ │ │ ├── application-insecure.yml
│ │ │ ├── application-secure.yml
│ │ │ ├── application-themed.yml
│ │ │ └── application.yml
│ │ └── test/
│ │ └── java/
│ │ └── de/
│ │ └── codecentric/
│ │ └── boot/
│ │ └── admin/
│ │ └── sample/
│ │ └── SpringBootAdminServletApplicationTest.java
│ ├── spring-boot-admin-sample-servlet-graalvm/
│ │ ├── Readme.md
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── de/
│ │ │ └── codecentric/
│ │ │ └── boot/
│ │ │ └── admin/
│ │ │ └── sample/
│ │ │ └── SpringBootAdminServletApplication.java
│ │ └── resources/
│ │ └── application.yml
│ ├── spring-boot-admin-sample-war/
│ │ ├── .gitignore
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── de/
│ │ │ └── codecentric/
│ │ │ └── boot/
│ │ │ └── admin/
│ │ │ └── sample/
│ │ │ └── SpringBootAdminWarApplication.java
│ │ └── resources/
│ │ ├── application-dev.yml
│ │ ├── application-insecure.yml
│ │ ├── application-secure.yml
│ │ └── application.yml
│ └── spring-boot-admin-sample-zookeeper/
│ ├── docker-compose.yml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── de/
│ │ │ └── codecentric/
│ │ │ └── boot/
│ │ │ └── admin/
│ │ │ └── sample/
│ │ │ └── SpringBootAdminZookeeperApplication.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── de/
│ └── codecentric/
│ └── boot/
│ └── admin/
│ └── sample/
│ └── SpringBootAdminZookeeperApplicationTest.java
├── spring-boot-admin-server/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── de/
│ │ │ └── codecentric/
│ │ │ └── boot/
│ │ │ └── admin/
│ │ │ └── server/
│ │ │ ├── config/
│ │ │ │ ├── AdminServerAutoConfiguration.java
│ │ │ │ ├── AdminServerCloudFoundryAutoConfiguration.java
│ │ │ │ ├── AdminServerHazelcastAutoConfiguration.java
│ │ │ │ ├── AdminServerInstanceWebClientConfiguration.java
│ │ │ │ ├── AdminServerMarkerConfiguration.java
│ │ │ │ ├── AdminServerNotifierAutoConfiguration.java
│ │ │ │ ├── AdminServerProperties.java
│ │ │ │ ├── AdminServerWebConfiguration.java
│ │ │ │ ├── EnableAdminServer.java
│ │ │ │ ├── SpringBootAdminServerEnabledCondition.java
│ │ │ │ └── package-info.java
│ │ │ ├── domain/
│ │ │ │ ├── entities/
│ │ │ │ │ ├── Application.java
│ │ │ │ │ ├── EventsourcingInstanceRepository.java
│ │ │ │ │ ├── Instance.java
│ │ │ │ │ ├── InstanceRepository.java
│ │ │ │ │ ├── SnapshottingInstanceRepository.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── events/
│ │ │ │ │ ├── InstanceDeregisteredEvent.java
│ │ │ │ │ ├── InstanceEndpointsDetectedEvent.java
│ │ │ │ │ ├── InstanceEvent.java
│ │ │ │ │ ├── InstanceInfoChangedEvent.java
│ │ │ │ │ ├── InstanceRegisteredEvent.java
│ │ │ │ │ ├── InstanceRegistrationUpdatedEvent.java
│ │ │ │ │ ├── InstanceStatusChangedEvent.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── values/
│ │ │ │ ├── BuildVersion.java
│ │ │ │ ├── Endpoint.java
│ │ │ │ ├── Endpoints.java
│ │ │ │ ├── Info.java
│ │ │ │ ├── InstanceId.java
│ │ │ │ ├── Registration.java
│ │ │ │ ├── StatusInfo.java
│ │ │ │ ├── Tags.java
│ │ │ │ └── package-info.java
│ │ │ ├── eventstore/
│ │ │ │ ├── ConcurrentMapEventStore.java
│ │ │ │ ├── HazelcastEventStore.java
│ │ │ │ ├── InMemoryEventStore.java
│ │ │ │ ├── InstanceEventPublisher.java
│ │ │ │ ├── InstanceEventStore.java
│ │ │ │ ├── OptimisticLockingException.java
│ │ │ │ └── package-info.java
│ │ │ ├── notify/
│ │ │ │ ├── AbstractEventNotifier.java
│ │ │ │ ├── AbstractStatusChangeNotifier.java
│ │ │ │ ├── CompositeNotifier.java
│ │ │ │ ├── DingTalkNotifier.java
│ │ │ │ ├── DiscordNotifier.java
│ │ │ │ ├── FeiShuNotifier.java
│ │ │ │ ├── HazelcastNotificationTrigger.java
│ │ │ │ ├── HipchatNotifier.java
│ │ │ │ ├── LetsChatNotifier.java
│ │ │ │ ├── LoggingNotifier.java
│ │ │ │ ├── MailNotifier.java
│ │ │ │ ├── MattermostNotifier.java
│ │ │ │ ├── MicrosoftTeamsNotifier.java
│ │ │ │ ├── NotificationTrigger.java
│ │ │ │ ├── Notifier.java
│ │ │ │ ├── NotifierProxyProperties.java
│ │ │ │ ├── OpsGenieNotifier.java
│ │ │ │ ├── PagerdutyNotifier.java
│ │ │ │ ├── RemindingNotifier.java
│ │ │ │ ├── RocketChatNotifier.java
│ │ │ │ ├── SlackNotifier.java
│ │ │ │ ├── TelegramNotifier.java
│ │ │ │ ├── WebexNotifier.java
│ │ │ │ ├── filter/
│ │ │ │ │ ├── AbstractContentNotifier.java
│ │ │ │ │ ├── AbstractNotificationFilter.java
│ │ │ │ │ ├── ApplicationNameNotificationFilter.java
│ │ │ │ │ ├── ExpiringNotificationFilter.java
│ │ │ │ │ ├── FilteringNotifier.java
│ │ │ │ │ ├── InstanceIdNotificationFilter.java
│ │ │ │ │ ├── NotificationFilter.java
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ └── web/
│ │ │ │ │ ├── NotificationFilterController.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── package-info.java
│ │ │ ├── services/
│ │ │ │ ├── AbstractEventHandler.java
│ │ │ │ ├── ApiMediaTypeHandler.java
│ │ │ │ ├── ApplicationRegistry.java
│ │ │ │ ├── CloudFoundryInstanceIdGenerator.java
│ │ │ │ ├── EndpointDetectionTrigger.java
│ │ │ │ ├── EndpointDetector.java
│ │ │ │ ├── HashingInstanceUrlIdGenerator.java
│ │ │ │ ├── InfoUpdateTrigger.java
│ │ │ │ ├── InfoUpdater.java
│ │ │ │ ├── InstanceFilter.java
│ │ │ │ ├── InstanceIdGenerator.java
│ │ │ │ ├── InstanceRegistry.java
│ │ │ │ ├── IntervalCheck.java
│ │ │ │ ├── StatusUpdateTrigger.java
│ │ │ │ ├── StatusUpdater.java
│ │ │ │ ├── endpoints/
│ │ │ │ │ ├── ChainingStrategy.java
│ │ │ │ │ ├── EndpointDetectionStrategy.java
│ │ │ │ │ ├── ProbeEndpointsStrategy.java
│ │ │ │ │ ├── QueryIndexEndpointStrategy.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── package-info.java
│ │ │ ├── utils/
│ │ │ │ └── jackson/
│ │ │ │ ├── AdminServerModule.java
│ │ │ │ ├── BuildVersionMixin.java
│ │ │ │ ├── EndpointMixin.java
│ │ │ │ ├── EndpointsMixin.java
│ │ │ │ ├── InfoMixin.java
│ │ │ │ ├── InstanceDeregisteredEventMixin.java
│ │ │ │ ├── InstanceEndpointsDetectedEventMixin.java
│ │ │ │ ├── InstanceEventMixin.java
│ │ │ │ ├── InstanceIdMixin.java
│ │ │ │ ├── InstanceInfoChangedEventMixin.java
│ │ │ │ ├── InstanceRegisteredEventMixin.java
│ │ │ │ ├── InstanceRegistrationUpdatedEventMixin.java
│ │ │ │ ├── InstanceStatusChangedEventMixin.java
│ │ │ │ ├── RegistrationBeanSerializerModifier.java
│ │ │ │ ├── RegistrationDeserializer.java
│ │ │ │ ├── SanitizingMapSerializer.java
│ │ │ │ ├── StatusInfoMixin.java
│ │ │ │ ├── TagsMixin.java
│ │ │ │ └── package-info.java
│ │ │ └── web/
│ │ │ ├── AdminController.java
│ │ │ ├── ApplicationsController.java
│ │ │ ├── HttpHeaderFilter.java
│ │ │ ├── InstanceWebProxy.java
│ │ │ ├── InstancesController.java
│ │ │ ├── PathUtils.java
│ │ │ ├── client/
│ │ │ │ ├── BasicAuthHttpHeaderProvider.java
│ │ │ │ ├── CloudFoundryHttpHeaderProvider.java
│ │ │ │ ├── CompositeHttpHeadersProvider.java
│ │ │ │ ├── HttpHeadersProvider.java
│ │ │ │ ├── InstanceExchangeFilterFunction.java
│ │ │ │ ├── InstanceExchangeFilterFunctions.java
│ │ │ │ ├── InstanceWebClient.java
│ │ │ │ ├── InstanceWebClientCustomizer.java
│ │ │ │ ├── LegacyEndpointConverter.java
│ │ │ │ ├── LegacyEndpointConverters.java
│ │ │ │ ├── RefreshInstancesEvent.java
│ │ │ │ ├── cookies/
│ │ │ │ │ ├── CookieStoreCleanupTrigger.java
│ │ │ │ │ ├── JdkPerInstanceCookieStore.java
│ │ │ │ │ ├── PerInstanceCookieStore.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── exception/
│ │ │ │ │ ├── InstanceWebClientException.java
│ │ │ │ │ ├── ResolveEndpointException.java
│ │ │ │ │ ├── ResolveInstanceException.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── package-info.java
│ │ │ │ └── reactive/
│ │ │ │ ├── CompositeReactiveHttpHeadersProvider.java
│ │ │ │ └── ReactiveHttpHeadersProvider.java
│ │ │ ├── package-info.java
│ │ │ ├── reactive/
│ │ │ │ ├── AdminControllerHandlerMapping.java
│ │ │ │ ├── InstancesProxyController.java
│ │ │ │ └── package-info.java
│ │ │ └── servlet/
│ │ │ ├── AdminControllerHandlerMapping.java
│ │ │ ├── InstancesProxyController.java
│ │ │ └── package-info.java
│ │ └── resources/
│ │ └── META-INF/
│ │ ├── additional-spring-configuration-metadata.json
│ │ ├── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── spring-boot-admin-server/
│ │ └── mail/
│ │ └── status-changed.html
│ └── test/
│ ├── java/
│ │ └── de/
│ │ └── codecentric/
│ │ └── boot/
│ │ └── admin/
│ │ └── server/
│ │ ├── AbstractAdminApplicationTest.java
│ │ ├── AdminApplicationHazelcastTest.java
│ │ ├── AdminReactiveApplicationTest.java
│ │ ├── AdminServletApplicationTest.java
│ │ ├── config/
│ │ │ ├── AdminServerAutoConfigurationTest.java
│ │ │ ├── AdminServerCloudFoundryAutoConfigurationTest.java
│ │ │ ├── AdminServerInstanceWebClientConfigurationTest.java
│ │ │ ├── AdminServerNotifierAutoConfigurationTest.java
│ │ │ ├── AdminServerPropertiesTest.java
│ │ │ └── SpringBootAdminServerEnabledConditionTest.java
│ │ ├── domain/
│ │ │ ├── entities/
│ │ │ │ ├── AbstractInstanceRepositoryTest.java
│ │ │ │ ├── EventsourcingInstanceRepositoryTest.java
│ │ │ │ ├── InstanceTest.java
│ │ │ │ └── SnapshottingInstanceRepositoryTest.java
│ │ │ └── values/
│ │ │ ├── BuildVersionTest.java
│ │ │ ├── EndpointTest.java
│ │ │ ├── EndpointsTest.java
│ │ │ ├── InfoTest.java
│ │ │ ├── InstanceIdTest.java
│ │ │ ├── RegistrationTest.java
│ │ │ ├── StatusInfoTest.java
│ │ │ └── TagsTest.java
│ │ ├── eventstore/
│ │ │ ├── AbstractEventStoreTest.java
│ │ │ ├── HazelcastEventStoreTest.java
│ │ │ ├── HazelcastEventStoreWithClientConfigTest.java
│ │ │ ├── HazelcastEventStoreWithServerConfigTest.java
│ │ │ └── InMemoryEventStoreTest.java
│ │ ├── notify/
│ │ │ ├── CompositeNotifierTest.java
│ │ │ ├── DingTalkNotifierTest.java
│ │ │ ├── DiscordNotifierTest.java
│ │ │ ├── FeiShuNotifierTest.java
│ │ │ ├── HazelcastNotificationTriggerTest.java
│ │ │ ├── HipchatNotifierTest.java
│ │ │ ├── LetsChatNotifierTest.java
│ │ │ ├── MailNotifierIntegrationTest.java
│ │ │ ├── MailNotifierTest.java
│ │ │ ├── MattermostNotifierTest.java
│ │ │ ├── MicrosoftTeamsNotifierTest.java
│ │ │ ├── NotificationTriggerTest.java
│ │ │ ├── OpsGenieNotifierTest.java
│ │ │ ├── PagerdutyNotifierTest.java
│ │ │ ├── RemindingNotifierTest.java
│ │ │ ├── RocketChatNotifierTest.java
│ │ │ ├── SlackNotifierTest.java
│ │ │ ├── TelegramNotifierTest.java
│ │ │ ├── TestNotifier.java
│ │ │ ├── WebexNotifierTest.java
│ │ │ └── filter/
│ │ │ ├── FilteringNotifierTest.java
│ │ │ ├── InstanceIdNotificationFilterTest.java
│ │ │ ├── InstanceNameNotificationFilterTest.java
│ │ │ └── web/
│ │ │ └── NotificationFilterControllerTest.java
│ │ ├── services/
│ │ │ ├── AbstractEventHandlerTest.java
│ │ │ ├── ApplicationRegistryTest.java
│ │ │ ├── CloudFoundryInstanceIdGeneratorTest.java
│ │ │ ├── EndpointDetectionTriggerTest.java
│ │ │ ├── EndpointDetectorTest.java
│ │ │ ├── InfoUpdateTriggerTest.java
│ │ │ ├── InfoUpdaterTest.java
│ │ │ ├── InstanceRegistryTest.java
│ │ │ ├── IntervalCheckTest.java
│ │ │ ├── StatusUpdateTriggerTest.java
│ │ │ ├── StatusUpdaterTest.java
│ │ │ └── endpoints/
│ │ │ ├── ChainingStrategyTest.java
│ │ │ ├── ProbeEndpointsStrategyTest.java
│ │ │ └── QueryIndexEndpointStrategyTest.java
│ │ ├── utils/
│ │ │ └── jackson/
│ │ │ ├── BuildVersionMixinTest.java
│ │ │ ├── EndpointMixinTest.java
│ │ │ ├── EndpointsMixinTest.java
│ │ │ ├── InfoMixinTest.java
│ │ │ ├── InstanceDeregisteredEventMixinTest.java
│ │ │ ├── InstanceEndpointsDetectedEventMixinTest.java
│ │ │ ├── InstanceEventMixinTest.java
│ │ │ ├── InstanceIdMixinTest.java
│ │ │ ├── InstanceInfoChangedEventMixinTest.java
│ │ │ ├── InstanceRegisteredEventMixinTest.java
│ │ │ ├── InstanceRegistrationUpdatedEventMixinTest.java
│ │ │ ├── InstanceStatusChangedEventMixinTest.java
│ │ │ ├── RegistrationDeserializerTest.java
│ │ │ ├── StatusInfoMixinTest.java
│ │ │ └── TagsMixinTest.java
│ │ └── web/
│ │ ├── AbstractInstancesProxyControllerIntegrationTest.java
│ │ ├── ConnectionCloseExtension.java
│ │ ├── InstancesControllerIntegrationTest.java
│ │ ├── PathUtilsTest.java
│ │ ├── client/
│ │ │ ├── BasicAuthHttpHeaderProviderTest.java
│ │ │ ├── CloudFoundryHttpHeaderProviderTest.java
│ │ │ ├── CompositeHttpHeadersProviderTest.java
│ │ │ ├── InstanceExchangeFilterFunctionsTest.java
│ │ │ ├── InstanceWebClientTest.java
│ │ │ ├── LegacyEndpointConvertersTest.java
│ │ │ ├── cookies/
│ │ │ │ ├── CookieStoreCleanupTriggerTest.java
│ │ │ │ └── JdkPerInstanceCookieStoreTest.java
│ │ │ └── reactive/
│ │ │ └── CompositeReactiveHttpHeadersProviderTest.java
│ │ ├── reactive/
│ │ │ └── InstancesProxyControllerIntegrationTest.java
│ │ └── servlet/
│ │ └── InstancesProxyControllerIntegrationTest.java
│ └── resources/
│ ├── application.yml
│ ├── de/
│ │ └── codecentric/
│ │ └── boot/
│ │ └── admin/
│ │ └── server/
│ │ ├── junit-platform.properties
│ │ ├── notify/
│ │ │ ├── allowed-file.html
│ │ │ ├── custom-mail.html
│ │ │ ├── expected-custom-mail
│ │ │ ├── expected-default-mail
│ │ │ └── vulnerable-file.html
│ │ └── web/
│ │ └── client/
│ │ ├── beans-expected.json
│ │ ├── beans-legacy.json
│ │ ├── configprops-expected.json
│ │ ├── configprops-legacy.json
│ │ ├── env-expected.json
│ │ ├── env-legacy.json
│ │ ├── flyway-expected.json
│ │ ├── flyway-legacy.json
│ │ ├── health-expected.json
│ │ ├── health-legacy.json
│ │ ├── httptrace-expected.json
│ │ ├── httptrace-legacy.json
│ │ ├── liquibase-expected.json
│ │ ├── liquibase-legacy.json
│ │ ├── mappings-expected.json
│ │ ├── mappings-legacy.json
│ │ ├── threaddump-expected.json
│ │ └── threaddump-legacy.json
│ ├── logback-test.xml
│ └── server-config-test.properties
├── spring-boot-admin-server-cloud/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── de/
│ │ │ └── codecentric/
│ │ │ └── boot/
│ │ │ └── admin/
│ │ │ └── server/
│ │ │ └── cloud/
│ │ │ ├── config/
│ │ │ │ ├── AdminServerDiscoveryAutoConfiguration.java
│ │ │ │ └── package-info.java
│ │ │ └── discovery/
│ │ │ ├── DefaultServiceInstanceConverter.java
│ │ │ ├── EurekaServiceInstanceConverter.java
│ │ │ ├── InstanceDiscoveryListener.java
│ │ │ ├── KubernetesServiceInstanceConverter.java
│ │ │ ├── ServiceInstanceConverter.java
│ │ │ └── package-info.java
│ │ └── resources/
│ │ └── META-INF/
│ │ ├── additional-spring-configuration-metadata.json
│ │ └── spring/
│ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ └── test/
│ ├── java/
│ │ └── de/
│ │ └── codecentric/
│ │ └── boot/
│ │ └── admin/
│ │ └── server/
│ │ └── cloud/
│ │ ├── AdminApplicationDiscoveryTest.java
│ │ ├── config/
│ │ │ └── AdminServerDiscoveryAutoConfigurationTest.java
│ │ └── discovery/
│ │ ├── DefaultServiceInstanceConverterTest.java
│ │ ├── EurekaServiceInstanceConverterTest.java
│ │ ├── InstanceDiscoveryListenerTest.java
│ │ └── KubernetesServiceInstanceConverterTest.java
│ └── resources/
│ ├── application.yml
│ └── logback-test.xml
├── spring-boot-admin-server-ui/
│ ├── .gitignore
│ ├── .npmrc
│ ├── .nvmrc
│ ├── .prettierrc.json
│ ├── .storybook/
│ │ ├── main.js
│ │ ├── preview-head.html
│ │ ├── preview.js
│ │ └── storybook.css
│ ├── README.md
│ ├── components.d.ts
│ ├── eslint.config.mjs
│ ├── package.json
│ ├── pom.xml
│ ├── postcss.config.js
│ ├── src/
│ │ ├── main/
│ │ │ ├── frontend/
│ │ │ │ ├── HealthStatus.ts
│ │ │ │ ├── components/
│ │ │ │ │ ├── ActionScope.ts
│ │ │ │ │ ├── __snapshots__/
│ │ │ │ │ │ └── sba-formatted-obj.spec.ts.snap
│ │ │ │ │ ├── font-awesome-icon.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── sba-accordion.spec.ts
│ │ │ │ │ ├── sba-accordion.stories.ts
│ │ │ │ │ ├── sba-accordion.vue
│ │ │ │ │ ├── sba-action-button-scoped.spec.tsx
│ │ │ │ │ ├── sba-action-button-scoped.stories.ts
│ │ │ │ │ ├── sba-action-button-scoped.vue
│ │ │ │ │ ├── sba-alert.stories.ts
│ │ │ │ │ ├── sba-alert.vue
│ │ │ │ │ ├── sba-button-group.stories.ts
│ │ │ │ │ ├── sba-button-group.vue
│ │ │ │ │ ├── sba-button.stories.ts
│ │ │ │ │ ├── sba-button.vue
│ │ │ │ │ ├── sba-checkbox.stories.ts
│ │ │ │ │ ├── sba-checkbox.vue
│ │ │ │ │ ├── sba-confirm-button.spec.ts
│ │ │ │ │ ├── sba-confirm-button.stories.ts
│ │ │ │ │ ├── sba-confirm-button.vue
│ │ │ │ │ ├── sba-dropdown/
│ │ │ │ │ │ ├── sba-dropdown-divider.vue
│ │ │ │ │ │ ├── sba-dropdown-item.vue
│ │ │ │ │ │ ├── sba-dropdown.stories.ts
│ │ │ │ │ │ └── sba-dropdown.vue
│ │ │ │ │ ├── sba-formatted-obj.spec.ts
│ │ │ │ │ ├── sba-formatted-obj.vue
│ │ │ │ │ ├── sba-icon-button.stories.ts
│ │ │ │ │ ├── sba-icon-button.vue
│ │ │ │ │ ├── sba-input.stories.ts
│ │ │ │ │ ├── sba-input.vue
│ │ │ │ │ ├── sba-key-value-table.stories.ts
│ │ │ │ │ ├── sba-key-value-table.vue
│ │ │ │ │ ├── sba-loading-spinner.vue
│ │ │ │ │ ├── sba-modal.spec.ts
│ │ │ │ │ ├── sba-modal.stories.ts
│ │ │ │ │ ├── sba-modal.vue
│ │ │ │ │ ├── sba-nav/
│ │ │ │ │ │ ├── sba-nav-dropdown.stories.ts
│ │ │ │ │ │ ├── sba-nav-dropdown.vue
│ │ │ │ │ │ ├── sba-nav-item.stories.ts
│ │ │ │ │ │ └── sba-nav-item.vue
│ │ │ │ │ ├── sba-navbar/
│ │ │ │ │ │ ├── sba-navbar-brand.vue
│ │ │ │ │ │ ├── sba-navbar-nav.vue
│ │ │ │ │ │ ├── sba-navbar-toggle.stories.ts
│ │ │ │ │ │ ├── sba-navbar-toggle.vue
│ │ │ │ │ │ ├── sba-navbar.stories.ts
│ │ │ │ │ │ └── sba-navbar.vue
│ │ │ │ │ ├── sba-pagination-nav.spec.ts
│ │ │ │ │ ├── sba-pagination-nav.stories.ts
│ │ │ │ │ ├── sba-pagination-nav.vue
│ │ │ │ │ ├── sba-panel.stories.ts
│ │ │ │ │ ├── sba-panel.vue
│ │ │ │ │ ├── sba-select.stories.ts
│ │ │ │ │ ├── sba-select.vue
│ │ │ │ │ ├── sba-status-badge.spec.ts
│ │ │ │ │ ├── sba-status-badge.vue
│ │ │ │ │ ├── sba-status.spec.ts
│ │ │ │ │ ├── sba-status.stories.ts
│ │ │ │ │ ├── sba-status.vue
│ │ │ │ │ ├── sba-sticky-subnav.vue
│ │ │ │ │ ├── sba-tag.stories.ts
│ │ │ │ │ ├── sba-tag.vue
│ │ │ │ │ ├── sba-tags.stories.ts
│ │ │ │ │ ├── sba-tags.vue
│ │ │ │ │ ├── sba-time-ago.spec.ts
│ │ │ │ │ ├── sba-time-ago.vue
│ │ │ │ │ ├── sba-toggle-scope-button.spec.ts
│ │ │ │ │ ├── sba-toggle-scope-button.stories.ts
│ │ │ │ │ ├── sba-toggle-scope-button.vue
│ │ │ │ │ ├── sba-wave.vue
│ │ │ │ │ └── table.stories.ts
│ │ │ │ ├── components.d.ts
│ │ │ │ ├── composables/
│ │ │ │ │ ├── ViewRegistry.ts
│ │ │ │ │ ├── useApplicationStore.ts
│ │ │ │ │ ├── useClassnameShortener.spec.ts
│ │ │ │ │ ├── useClassnameShortener.ts
│ │ │ │ │ └── useDateTimeFormatter.ts
│ │ │ │ ├── directives/
│ │ │ │ │ ├── on-resize.ts
│ │ │ │ │ ├── popper.ts
│ │ │ │ │ └── sticks-below.ts
│ │ │ │ ├── global.d.ts
│ │ │ │ ├── i18n/
│ │ │ │ │ ├── PrimeLocale.ts
│ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ └── index.ts
│ │ │ │ ├── index.css
│ │ │ │ ├── index.html
│ │ │ │ ├── index.stories.jsx
│ │ │ │ ├── index.ts
│ │ │ │ ├── login/
│ │ │ │ │ ├── login.i18n.de.json
│ │ │ │ │ ├── login.i18n.en.json
│ │ │ │ │ ├── login.i18n.es.json
│ │ │ │ │ ├── login.i18n.fr.json
│ │ │ │ │ ├── login.i18n.is.json
│ │ │ │ │ ├── login.i18n.ko.json
│ │ │ │ │ ├── login.i18n.pt-BR.json
│ │ │ │ │ ├── login.i18n.ru.json
│ │ │ │ │ ├── login.i18n.zh-CN.json
│ │ │ │ │ ├── login.i18n.zh-TW.json
│ │ │ │ │ ├── login.stories.ts
│ │ │ │ │ └── login.vue
│ │ │ │ ├── login.css
│ │ │ │ ├── login.html
│ │ │ │ ├── login.ts
│ │ │ │ ├── mixins/
│ │ │ │ │ └── subscribing.ts
│ │ │ │ ├── mocks/
│ │ │ │ │ ├── applications/
│ │ │ │ │ │ ├── data.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── browser.ts
│ │ │ │ │ ├── fixtures/
│ │ │ │ │ │ └── eventStream/
│ │ │ │ │ │ ├── registerWithOneInstance.ts
│ │ │ │ │ │ ├── registerWithTwoInstances.ts
│ │ │ │ │ │ └── removeInstance.ts
│ │ │ │ │ ├── instance/
│ │ │ │ │ │ ├── auditevents/
│ │ │ │ │ │ │ ├── data.ts
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ ├── dependencies/
│ │ │ │ │ │ │ ├── data.ts
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ ├── flyway/
│ │ │ │ │ │ │ ├── data.ts
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ ├── health/
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ ├── httptrace/
│ │ │ │ │ │ │ ├── data.ts
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ ├── info/
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ ├── jolokia/
│ │ │ │ │ │ │ ├── data.read.ts
│ │ │ │ │ │ │ ├── data.ts
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ ├── liquibase/
│ │ │ │ │ │ │ ├── data.ts
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ ├── mappings/
│ │ │ │ │ │ │ ├── data.ts
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ ├── metrics/
│ │ │ │ │ │ │ ├── data.ts
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ ├── scheduledtasks/
│ │ │ │ │ │ │ ├── data.ts
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ └── sessions/
│ │ │ │ │ │ ├── data.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ └── server.ts
│ │ │ │ ├── notificationcenter.d.ts
│ │ │ │ ├── notifications.ts
│ │ │ │ ├── plugins/
│ │ │ │ │ └── modal/
│ │ │ │ │ ├── ConfirmButtons.vue
│ │ │ │ │ ├── Modal.vue
│ │ │ │ │ ├── api.ts
│ │ │ │ │ ├── helpers.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── public/
│ │ │ │ │ └── variables.css
│ │ │ │ ├── sba-config.ts
│ │ │ │ ├── sba-settings.js
│ │ │ │ ├── services/
│ │ │ │ │ ├── application.spec.ts
│ │ │ │ │ ├── application.ts
│ │ │ │ │ ├── bus.ts
│ │ │ │ │ ├── instance.spec.ts
│ │ │ │ │ ├── instance.ts
│ │ │ │ │ ├── notification-filter.ts
│ │ │ │ │ ├── spring-mime-types.ts
│ │ │ │ │ ├── startup-activator-tree.ts
│ │ │ │ │ ├── startup-actuator.fixture.spec.json
│ │ │ │ │ ├── startup-actuator.spec.ts
│ │ │ │ │ └── startup-actuator.ts
│ │ │ │ ├── shell/
│ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ ├── index.vue
│ │ │ │ │ ├── navbar.spec.ts
│ │ │ │ │ ├── navbar.vue
│ │ │ │ │ ├── sba-dropdown-logout-item.vue
│ │ │ │ │ ├── sba-nav-language-selector.spec.ts
│ │ │ │ │ ├── sba-nav-language-selector.vue
│ │ │ │ │ └── sba-nav-usermenu.vue
│ │ │ │ ├── store.spec.ts
│ │ │ │ ├── store.ts
│ │ │ │ ├── test-utils.ts
│ │ │ │ ├── tests/
│ │ │ │ │ └── setup.ts
│ │ │ │ ├── toast-theme.css
│ │ │ │ ├── utils/
│ │ │ │ │ ├── array.ts
│ │ │ │ │ ├── autolink.spec.ts
│ │ │ │ │ ├── autolink.ts
│ │ │ │ │ ├── axios.spec.ts
│ │ │ │ │ ├── axios.ts
│ │ │ │ │ ├── collections.spec.ts
│ │ │ │ │ ├── collections.ts
│ │ │ │ │ ├── d3.ts
│ │ │ │ │ ├── eventsource-polyfill.ts
│ │ │ │ │ ├── formatWithDataTypes.spec.ts
│ │ │ │ │ ├── formatWithDataTypes.ts
│ │ │ │ │ ├── http-status.ts
│ │ │ │ │ ├── iso8601-duration.spec.ts
│ │ │ │ │ ├── iso8601-duration.ts
│ │ │ │ │ ├── logtail.ts
│ │ │ │ │ ├── objToYaml.ts
│ │ │ │ │ ├── prettyTime.ts
│ │ │ │ │ ├── rxjs.spec.ts
│ │ │ │ │ ├── rxjs.ts
│ │ │ │ │ ├── sanitizeHtml.spec.ts
│ │ │ │ │ ├── sanitizeHtml.ts
│ │ │ │ │ ├── shortenClassname.spec.ts
│ │ │ │ │ ├── shortenClassname.ts
│ │ │ │ │ ├── sortObject.spec.ts
│ │ │ │ │ ├── sortObject.ts
│ │ │ │ │ ├── toast.ts
│ │ │ │ │ ├── transformToJSON.spec.ts
│ │ │ │ │ ├── transformToJSON.ts
│ │ │ │ │ ├── uri.spec.ts
│ │ │ │ │ ├── uri.ts
│ │ │ │ │ ├── useRouterState.spec.ts
│ │ │ │ │ ├── useRouterState.ts
│ │ │ │ │ └── useSubscription.ts
│ │ │ │ ├── viewRegistry.spec.ts
│ │ │ │ ├── viewRegistry.ts
│ │ │ │ ├── views/
│ │ │ │ │ ├── ViewGroup.ts
│ │ │ │ │ ├── about/
│ │ │ │ │ │ ├── handle.vue
│ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ ├── applications/
│ │ │ │ │ │ ├── ActionHandler.ts
│ │ │ │ │ │ ├── ApplicationListItemAction.spec.ts
│ │ │ │ │ │ ├── ApplicationListItemAction.vue
│ │ │ │ │ │ ├── ApplicationNotificationCenter.vue
│ │ │ │ │ │ ├── ApplicationStats.vue
│ │ │ │ │ │ ├── ApplicationStatusHero.spec.ts
│ │ │ │ │ │ ├── ApplicationStatusHero.vue
│ │ │ │ │ │ ├── InstancesList.spec.ts
│ │ │ │ │ │ ├── InstancesList.vue
│ │ │ │ │ │ ├── NotificationFilterSettings.vue
│ │ │ │ │ │ ├── applications.spec.ts
│ │ │ │ │ │ ├── handle.vue
│ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ └── listItem/
│ │ │ │ │ │ ├── ItemInformation.vue
│ │ │ │ │ │ └── ItemTags.vue
│ │ │ │ │ ├── external/
│ │ │ │ │ │ ├── index.spec.ts
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── style.css
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── instances/
│ │ │ │ │ │ ├── auditevents/
│ │ │ │ │ │ │ ├── auditevents-list.stories.ts
│ │ │ │ │ │ │ ├── auditevents-list.vue
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.spec.ts
│ │ │ │ │ │ │ └── index.vue
│ │ │ │ │ │ ├── beans/
│ │ │ │ │ │ │ ├── beans-list-details.vue
│ │ │ │ │ │ │ ├── beans-list.vue
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ └── index.vue
│ │ │ │ │ │ ├── caches/
│ │ │ │ │ │ │ ├── caches-list.vue
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ └── index.vue
│ │ │ │ │ │ ├── conditions/
│ │ │ │ │ │ │ ├── conditions-list-details.spec.ts
│ │ │ │ │ │ │ ├── conditions-list-details.vue
│ │ │ │ │ │ │ ├── conditions-list.vue
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ └── index.vue
│ │ │ │ │ │ ├── configprops/
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ └── index.vue
│ │ │ │ │ │ ├── dependencies/
│ │ │ │ │ │ │ ├── SbomList.vue
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.spec.ts
│ │ │ │ │ │ │ └── index.vue
│ │ │ │ │ │ ├── details/
│ │ │ │ │ │ │ ├── LineChart.vue
│ │ │ │ │ │ │ ├── __snapshots__/
│ │ │ │ │ │ │ │ └── health-details.spec.ts.snap
│ │ │ │ │ │ │ ├── cache-chart.vue
│ │ │ │ │ │ │ ├── datasource-chart.vue
│ │ │ │ │ │ │ ├── details-cache.spec.ts
│ │ │ │ │ │ │ ├── details-cache.vue
│ │ │ │ │ │ │ ├── details-caches.vue
│ │ │ │ │ │ │ ├── details-datasource.spec.ts
│ │ │ │ │ │ │ ├── details-datasource.vue
│ │ │ │ │ │ │ ├── details-datasources.vue
│ │ │ │ │ │ │ ├── details-gc.vue
│ │ │ │ │ │ │ ├── details-health.spec.ts
│ │ │ │ │ │ │ ├── details-health.vue
│ │ │ │ │ │ │ ├── details-hero.vue
│ │ │ │ │ │ │ ├── details-info.spec.ts
│ │ │ │ │ │ │ ├── details-info.vue
│ │ │ │ │ │ │ ├── details-memory.spec.ts
│ │ │ │ │ │ │ ├── details-memory.vue
│ │ │ │ │ │ │ ├── details-metadata.spec.ts
│ │ │ │ │ │ │ ├── details-metadata.vue
│ │ │ │ │ │ │ ├── details-nav.vue
│ │ │ │ │ │ │ ├── details-process.vue
│ │ │ │ │ │ │ ├── details-threads.spec.ts
│ │ │ │ │ │ │ ├── details-threads.vue
│ │ │ │ │ │ │ ├── health-details.spec.ts
│ │ │ │ │ │ │ ├── health-details.vue
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.spec.ts
│ │ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ │ ├── instance-switcher.vue
│ │ │ │ │ │ │ ├── mem-chart.vue
│ │ │ │ │ │ │ ├── process-uptime.ts
│ │ │ │ │ │ │ └── threads-chart.vue
│ │ │ │ │ │ ├── env/
│ │ │ │ │ │ │ ├── busrefresh.spec.ts
│ │ │ │ │ │ │ ├── busrefresh.vue
│ │ │ │ │ │ │ ├── env-manager.vue
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ │ ├── refresh.spec.ts
│ │ │ │ │ │ │ └── refresh.vue
│ │ │ │ │ │ ├── flyway/
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ └── index.vue
│ │ │ │ │ │ ├── gateway/
│ │ │ │ │ │ │ ├── add-route.vue
│ │ │ │ │ │ │ ├── global-filters.vue
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ │ ├── refresh-route-cache.vue
│ │ │ │ │ │ │ ├── route-definition.vue
│ │ │ │ │ │ │ ├── route.vue
│ │ │ │ │ │ │ ├── routes-list.vue
│ │ │ │ │ │ │ └── routes.vue
│ │ │ │ │ │ ├── heapdump/
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ └── index.vue
│ │ │ │ │ │ ├── httpexchanges/
│ │ │ │ │ │ │ ├── Exchange.ts
│ │ │ │ │ │ │ ├── content-column.vue
│ │ │ │ │ │ │ ├── exchanges-chart.vue
│ │ │ │ │ │ │ ├── exchanges-list.vue
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.spec.ts
│ │ │ │ │ │ │ └── index.vue
│ │ │ │ │ │ ├── httptrace/
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ │ ├── traces-chart.vue
│ │ │ │ │ │ │ └── traces-list.vue
│ │ │ │ │ │ ├── iframe/
│ │ │ │ │ │ │ ├── IframeView.vue
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ ├── jolokia/
│ │ │ │ │ │ │ ├── MBean.ts
│ │ │ │ │ │ │ ├── MBeanDescriptor.ts
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.spec.ts
│ │ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ │ ├── m-bean-attribute.spec.ts
│ │ │ │ │ │ │ ├── m-bean-attribute.vue
│ │ │ │ │ │ │ ├── m-bean-attributes.vue
│ │ │ │ │ │ │ ├── m-bean-operation-invocation.vue
│ │ │ │ │ │ │ ├── m-bean-operation.spec.ts
│ │ │ │ │ │ │ ├── m-bean-operation.vue
│ │ │ │ │ │ │ ├── m-bean-operations.vue
│ │ │ │ │ │ │ ├── responseHandler.spec.ts
│ │ │ │ │ │ │ ├── responseHandler.ts
│ │ │ │ │ │ │ ├── utils.spec.ts
│ │ │ │ │ │ │ └── utils.ts
│ │ │ │ │ │ ├── liquibase/
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ └── index.vue
│ │ │ │ │ │ ├── logfile/
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ └── index.vue
│ │ │ │ │ │ ├── loggers/
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ │ ├── logger-control.vue
│ │ │ │ │ │ │ ├── loggers-list.spec.ts
│ │ │ │ │ │ │ ├── loggers-list.vue
│ │ │ │ │ │ │ ├── loggers.vue
│ │ │ │ │ │ │ ├── service.spec.ts
│ │ │ │ │ │ │ └── service.ts
│ │ │ │ │ │ ├── mappings/
│ │ │ │ │ │ │ ├── DispatcherMappings.spec.ts
│ │ │ │ │ │ │ ├── DispatcherMappings.vue
│ │ │ │ │ │ │ ├── ServletFilterMappings.vue
│ │ │ │ │ │ │ ├── ServletMappings.vue
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.spec.ts
│ │ │ │ │ │ │ └── index.vue
│ │ │ │ │ │ ├── metrics/
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ │ └── metric.vue
│ │ │ │ │ │ ├── quartz/
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ │ ├── trigger-row.spec.ts
│ │ │ │ │ │ │ └── trigger-row.vue
│ │ │ │ │ │ ├── sbomdependencytrees/
│ │ │ │ │ │ │ ├── dependencyTree.ts
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.spec.ts
│ │ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ │ ├── sbomUtils.spec.ts
│ │ │ │ │ │ │ ├── sbomUtils.ts
│ │ │ │ │ │ │ ├── tree.spec.ts
│ │ │ │ │ │ │ └── tree.vue
│ │ │ │ │ │ ├── scheduledtasks/
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ │ ├── scheduled-task-executions.spec.ts
│ │ │ │ │ │ │ └── scheduled-task-executions.vue
│ │ │ │ │ │ ├── sessions/
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ │ └── sessions-list.vue
│ │ │ │ │ │ ├── shell/
│ │ │ │ │ │ │ ├── InstanceShell.vue
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ │ ├── sba-instance-section.vue
│ │ │ │ │ │ │ ├── sidebar.stories.ts
│ │ │ │ │ │ │ └── sidebar.vue
│ │ │ │ │ │ ├── startup/
│ │ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ │ ├── tree-item.vue
│ │ │ │ │ │ │ └── tree-table.vue
│ │ │ │ │ │ └── threaddump/
│ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ ├── thread-list-item.vue
│ │ │ │ │ │ ├── thread-tag.vue
│ │ │ │ │ │ └── threads-list.vue
│ │ │ │ │ ├── journal/
│ │ │ │ │ │ ├── InstanceEvent.ts
│ │ │ │ │ │ ├── JournalTable.spec.ts
│ │ │ │ │ │ ├── JournalTable.vue
│ │ │ │ │ │ ├── deduplicate-events.spec.ts
│ │ │ │ │ │ ├── deduplicate-events.ts
│ │ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ │ ├── index.spec.ts
│ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ └── utils.ts
│ │ │ │ │ └── wallboard/
│ │ │ │ │ ├── hex-mesh.vue
│ │ │ │ │ ├── i18n.de.json
│ │ │ │ │ ├── i18n.en.json
│ │ │ │ │ ├── i18n.es.json
│ │ │ │ │ ├── i18n.fr.json
│ │ │ │ │ ├── i18n.is.json
│ │ │ │ │ ├── i18n.ko.json
│ │ │ │ │ ├── i18n.pt-BR.json
│ │ │ │ │ ├── i18n.ru.json
│ │ │ │ │ ├── i18n.zh-CN.json
│ │ │ │ │ ├── i18n.zh-TW.json
│ │ │ │ │ ├── index.vue
│ │ │ │ │ ├── utils.spec.ts
│ │ │ │ │ ├── utils.ts
│ │ │ │ │ ├── wallboard.spec.ts
│ │ │ │ │ └── wallboard.stories.ts
│ │ │ │ └── vite-env.d.ts
│ │ │ ├── java/
│ │ │ │ └── de/
│ │ │ │ └── codecentric/
│ │ │ │ └── boot/
│ │ │ │ └── admin/
│ │ │ │ └── server/
│ │ │ │ └── ui/
│ │ │ │ ├── config/
│ │ │ │ │ ├── AdminServerUiAutoConfiguration.java
│ │ │ │ │ ├── AdminServerUiProperties.java
│ │ │ │ │ ├── CssColorUtils.java
│ │ │ │ │ ├── ServerRuntimeHints.java
│ │ │ │ │ ├── SpringNativeServerAutoConfiguration.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── extensions/
│ │ │ │ │ ├── UiExtension.java
│ │ │ │ │ ├── UiExtensions.java
│ │ │ │ │ ├── UiExtensionsScanner.java
│ │ │ │ │ ├── UiRoutesScanner.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── web/
│ │ │ │ ├── HomepageForwardingFilterConfig.java
│ │ │ │ ├── HomepageForwardingMatcher.java
│ │ │ │ ├── UiController.java
│ │ │ │ ├── package-info.java
│ │ │ │ ├── reactive/
│ │ │ │ │ ├── HomepageForwardingFilter.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── servlet/
│ │ │ │ ├── HomepageForwardingFilter.java
│ │ │ │ └── package-info.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── test/
│ │ ├── java/
│ │ │ └── de/
│ │ │ └── codecentric/
│ │ │ └── boot/
│ │ │ └── admin/
│ │ │ └── server/
│ │ │ └── ui/
│ │ │ ├── AbstractAdminUiApplicationTest.java
│ │ │ ├── AdminUiReactiveApplicationTest.java
│ │ │ ├── AdminUiServletApplicationTest.java
│ │ │ ├── config/
│ │ │ │ ├── AdminServerUiAutoConfigurationTest.java
│ │ │ │ ├── AdminServerUiPropertiesTest.java
│ │ │ │ ├── CssColorUtilsTest.java
│ │ │ │ ├── ReactiveAdminServerUiAutoConfigurationAdminContextPathTest.java
│ │ │ │ ├── ReactiveAdminServerUiAutoConfigurationBothPathsTest.java
│ │ │ │ ├── ReactiveAdminServerUiAutoConfigurationTest.java
│ │ │ │ └── ReactiveAdminServerUiAutoConfigurationWebfluxBasePathTest.java
│ │ │ ├── extensions/
│ │ │ │ ├── UiExtensionsScannerTest.java
│ │ │ │ └── UiRoutesScannerTest.java
│ │ │ └── web/
│ │ │ ├── HomepageForwardingMatcherTest.java
│ │ │ └── UiControllerTest.java
│ │ └── resources/
│ │ ├── META-INF/
│ │ │ └── test-extensions/
│ │ │ └── custom/
│ │ │ ├── custom.abcdef.css
│ │ │ ├── custom.abcdef.js
│ │ │ ├── custom.txt
│ │ │ └── routes.txt
│ │ ├── application.yml
│ │ └── mockito-extensions/
│ │ └── org.mockito.plugins.MockMaker
│ ├── tailwind.config.js
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ └── vite.config.mts
├── spring-boot-admin-starter-client/
│ └── pom.xml
├── spring-boot-admin-starter-server/
│ └── pom.xml
└── src/
└── checkstyle/
├── checkstyle-header.txt
└── checkstyle.xml
Showing preview only (242K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (2587 symbols across 433 files)
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/config/ClientProperties.java
class ClientProperties (line 28) | @lombok.Data
method getAdminUrl (line 91) | public String[] getAdminUrl() {
method isAutoDeregistration (line 99) | public boolean isAutoDeregistration(Environment environment) {
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/config/ClientRuntimeHints.java
class ClientRuntimeHints (line 30) | @Configuration
method registerHints (line 33) | @Override
method registerReflectionHints (line 38) | @SneakyThrows
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/config/CloudFoundryApplicationProperties.java
class CloudFoundryApplicationProperties (line 25) | @lombok.Data
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/config/InstanceProperties.java
class InstanceProperties (line 26) | @lombok.Data
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/config/ServiceHostType.java
type ServiceHostType (line 19) | public enum ServiceHostType {
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/config/SpringBootAdminClientAutoConfiguration.java
class SpringBootAdminClientAutoConfiguration (line 63) | @Configuration(proxyBeanMethods = false)
method registrator (line 71) | @Bean
method registrationListener (line 79) | @Bean
method startupDateMetadataContributor (line 90) | @Bean
class ServletConfiguration (line 96) | @Configuration(proxyBeanMethods = false)
method applicationFactory (line 101) | @Bean
class ReactiveConfiguration (line 116) | @Configuration(proxyBeanMethods = false)
method applicationFactory (line 120) | @Bean
class RestClientRegistrationClientConfig (line 133) | @Configuration(proxyBeanMethods = false)
method registrationClient (line 137) | @Bean
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/config/SpringBootAdminClientCloudFoundryAutoConfiguration.java
class SpringBootAdminClientCloudFoundryAutoConfiguration (line 43) | @Configuration(proxyBeanMethods = false)
method cloudFoundryMetadataContributor (line 51) | @Bean
method applicationFactory (line 58) | @Bean
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/config/SpringBootAdminClientEnabledCondition.java
class SpringBootAdminClientEnabledCondition (line 38) | public class SpringBootAdminClientEnabledCondition extends SpringBootCon...
method getMatchOutcome (line 40) | @Override
method getClientProperties (line 57) | private ClientProperties getClientProperties(ConditionContext context) {
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/config/SpringNativeClientAutoConfiguration.java
class SpringNativeClientAutoConfiguration (line 27) | @Configuration(proxyBeanMethods = false)
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/Application.java
class Application (line 30) | @lombok.Data
method Application (line 44) | @lombok.Builder(builderClassName = "Builder")
method create (line 56) | public static Builder create(String name) {
method getMetadata (line 60) | public Map<String, String> getMetadata() {
class Builder (line 64) | public static class Builder {
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/ApplicationFactory.java
type ApplicationFactory (line 25) | public interface ApplicationFactory {
method createApplication (line 30) | Application createApplication();
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/ApplicationRegistrator.java
type ApplicationRegistrator (line 22) | public interface ApplicationRegistrator {
method register (line 28) | boolean register();
method deregister (line 33) | void deregister();
method getRegisteredId (line 39) | String getRegisteredId();
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/CloudFoundryApplicationFactory.java
class CloudFoundryApplicationFactory (line 29) | public class CloudFoundryApplicationFactory extends DefaultApplicationFa...
method CloudFoundryApplicationFactory (line 35) | public CloudFoundryApplicationFactory(InstanceProperties instance, Man...
method getServiceBaseUrl (line 43) | @Override
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/DefaultApplicationFactory.java
class DefaultApplicationFactory (line 46) | public class DefaultApplicationFactory implements ApplicationFactory {
method DefaultApplicationFactory (line 64) | public DefaultApplicationFactory(InstanceProperties instance, Manageme...
method createApplication (line 75) | @Override
method getName (line 85) | protected String getName() {
method getServiceUrl (line 89) | protected String getServiceUrl() {
method getServiceBaseUrl (line 97) | protected String getServiceBaseUrl() {
method getServicePath (line 111) | protected String getServicePath() {
method getManagementUrl (line 121) | protected String getManagementUrl() {
method getManagementBaseUrl (line 132) | protected String getManagementBaseUrl() {
method isManagementPortEqual (line 151) | protected boolean isManagementPortEqual() {
method getEndpointsWebPath (line 155) | protected String getEndpointsWebPath() {
method getHealthUrl (line 159) | protected String getHealthUrl() {
method getMetadata (line 169) | protected Map<String, String> getMetadata() {
method getServiceHost (line 176) | protected String getServiceHost() {
method getManagementHost (line 184) | protected String getManagementHost() {
method getLocalHost (line 192) | protected InetAddress getLocalHost() {
method getLocalServerPort (line 201) | protected Integer getLocalServerPort() {
method getLocalManagementPort (line 209) | protected Integer getLocalManagementPort() {
method getHealthEndpointPath (line 216) | protected String getHealthEndpointPath() {
method getScheme (line 228) | protected String getScheme(@Nullable Ssl ssl) {
method getHost (line 232) | protected String getHost(InetAddress address) {
method onWebServerInitialized (line 244) | @EventListener
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/DefaultApplicationRegistrator.java
class DefaultApplicationRegistrator (line 26) | public class DefaultApplicationRegistrator implements ApplicationRegistr...
method DefaultApplicationRegistrator (line 42) | public DefaultApplicationRegistrator(ApplicationFactory applicationFac...
method register (line 54) | @Override
method register (line 78) | protected boolean register(Application application, String adminUrl, b...
method deregister (line 103) | @Override
method getRegisteredId (line 125) | @Override
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/ReactiveApplicationFactory.java
class ReactiveApplicationFactory (line 31) | public class ReactiveApplicationFactory extends DefaultApplicationFactory {
method ReactiveApplicationFactory (line 41) | public ReactiveApplicationFactory(InstanceProperties instance, Managem...
method getServiceUrl (line 51) | @Override
method getManagementBaseUrl (line 63) | @Override
method getManagementContextPath (line 84) | protected String getManagementContextPath() {
method getWebfluxBasePath (line 88) | protected String getWebfluxBasePath() {
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/RegistrationApplicationListener.java
class RegistrationApplicationListener (line 40) | public class RegistrationApplicationListener implements InitializingBean...
method RegistrationApplicationListener (line 56) | public RegistrationApplicationListener(ApplicationRegistrator registra...
method RegistrationApplicationListener (line 60) | RegistrationApplicationListener(ApplicationRegistrator registrator, Th...
method registrationTaskScheduler (line 65) | private static ThreadPoolTaskScheduler registrationTaskScheduler() {
method onApplicationReady (line 73) | @EventListener
method onClosedContext (line 81) | @EventListener
method startRegisterTask (line 94) | public void startRegisterTask() {
method stopRegisterTask (line 103) | public void stopRegisterTask() {
method setAutoDeregister (line 110) | public void setAutoDeregister(boolean autoDeregister) {
method setAutoRegister (line 114) | public void setAutoRegister(boolean autoRegister) {
method setRegisterPeriod (line 118) | public void setRegisterPeriod(Duration registerPeriod) {
method afterPropertiesSet (line 122) | @Override
method destroy (line 127) | @Override
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/RegistrationClient.java
type RegistrationClient (line 19) | public interface RegistrationClient {
method register (line 21) | String register(String adminUrl, Application self);
method deregister (line 23) | void deregister(String adminUrl, String id);
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/RestClientRegistrationClient.java
class RestClientRegistrationClient (line 27) | public class RestClientRegistrationClient implements RegistrationClient {
method RestClientRegistrationClient (line 34) | public RestClientRegistrationClient(RestClient restClient) {
method register (line 38) | @Override
method deregister (line 49) | @Override
method setRequestHeaders (line 54) | protected void setRequestHeaders(HttpHeaders headers) {
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/ServletApplicationFactory.java
class ServletApplicationFactory (line 32) | public class ServletApplicationFactory extends DefaultApplicationFactory {
method ServletApplicationFactory (line 44) | public ServletApplicationFactory(InstanceProperties instance, Manageme...
method getServiceUrl (line 56) | @Override
method getManagementBaseUrl (line 68) | @Override
method getManagementContextPath (line 93) | protected String getManagementContextPath() {
method getServerContextPath (line 97) | protected String getServerContextPath() {
method getDispatcherServletPrefix (line 101) | protected String getDispatcherServletPrefix() {
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/metadata/CloudFoundryMetadataContributor.java
class CloudFoundryMetadataContributor (line 27) | public class CloudFoundryMetadataContributor implements MetadataContribu...
method CloudFoundryMetadataContributor (line 31) | public CloudFoundryMetadataContributor(CloudFoundryApplicationProperti...
method getMetadata (line 35) | @Override
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/metadata/CompositeMetadataContributor.java
class CompositeMetadataContributor (line 23) | public class CompositeMetadataContributor implements MetadataContributor {
method CompositeMetadataContributor (line 27) | public CompositeMetadataContributor(List<MetadataContributor> delegate...
method getMetadata (line 31) | @Override
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/metadata/MetadataContributor.java
type MetadataContributor (line 21) | @FunctionalInterface
method getMetadata (line 24) | Map<String, String> getMetadata();
FILE: spring-boot-admin-client/src/main/java/de/codecentric/boot/admin/client/registration/metadata/StartupDateMetadataContributor.java
class StartupDateMetadataContributor (line 25) | public class StartupDateMetadataContributor implements MetadataContribut...
method getMetadata (line 29) | @Override
FILE: spring-boot-admin-client/src/test/java/de/codecentric/boot/admin/client/AbstractClientApplicationTest.java
class AbstractClientApplicationTest (line 52) | public abstract class AbstractClientApplicationTest {
method setUp (line 63) | protected void setUp(WebApplicationType type) {
method setUpWiremock (line 68) | private void setUpWiremock() {
method setUpApplication (line 77) | private void setUpApplication(WebApplicationType type) {
method setUpApplicationContext (line 82) | private void setUpApplicationContext(String... additionalArgs) {
method tearDown (line 92) | @AfterEach
method test_context (line 100) | @Test
method test_context_with_snake_case (line 119) | @Test
method getServerPort (line 138) | private int getServerPort() {
method getManagementPort (line 142) | private int getManagementPort() {
class TestClientApplication (line 146) | @SpringBootConfiguration
method ping (line 153) | @EventListener
FILE: spring-boot-admin-client/src/test/java/de/codecentric/boot/admin/client/ClientReactiveApplicationTest.java
class ClientReactiveApplicationTest (line 22) | class ClientReactiveApplicationTest extends AbstractClientApplicationTest {
method setUp (line 24) | @BeforeEach
FILE: spring-boot-admin-client/src/test/java/de/codecentric/boot/admin/client/ClientServletApplicationTest.java
class ClientServletApplicationTest (line 22) | class ClientServletApplicationTest extends AbstractClientApplicationTest {
method setUp (line 24) | @BeforeEach
FILE: spring-boot-admin-client/src/test/java/de/codecentric/boot/admin/client/config/ClientPropertiesTest.java
class ClientPropertiesTest (line 24) | class ClientPropertiesTest {
method should_default_autoDeregister_to_false (line 26) | @Test
method should_default_autoDeregister_to_true (line 40) | @Test
method should_return_all_adminUrls (line 55) | @Test
FILE: spring-boot-admin-client/src/test/java/de/codecentric/boot/admin/client/config/CloudFoundryApplicationPropertiesTest.java
class CloudFoundryApplicationPropertiesTest (line 28) | class CloudFoundryApplicationPropertiesTest {
method bind (line 30) | @Test
FILE: spring-boot-admin-client/src/test/java/de/codecentric/boot/admin/client/config/SpringBootAdminClientAutoConfigurationTest.java
class SpringBootAdminClientAutoConfigurationTest (line 42) | class SpringBootAdminClientAutoConfigurationTest {
method not_active (line 49) | @Test
method active (line 54) | @Test
method disabled (line 60) | @Test
method nonWebEnvironment (line 68) | @Test
method reactiveEnvironment (line 77) | @Test
method restClientRegistrationClientInBlockingEnvironment (line 88) | @Test
FILE: spring-boot-admin-client/src/test/java/de/codecentric/boot/admin/client/config/SpringBootAdminClientCloudFoundryAutoConfigurationTest.java
class SpringBootAdminClientCloudFoundryAutoConfigurationTest (line 36) | class SpringBootAdminClientCloudFoundryAutoConfigurationTest {
method non_cloud_platform (line 45) | @Test
method cloudfoundry (line 53) | @Test
method cloudfoundry_sba_disabled (line 64) | @Test
FILE: spring-boot-admin-client/src/test/java/de/codecentric/boot/admin/client/config/SpringBootAdminClientEnabledConditionTest.java
class SpringBootAdminClientEnabledConditionTest (line 29) | class SpringBootAdminClientEnabledConditionTest {
method setUp (line 37) | @BeforeEach
method test_emptyUrl_enabled (line 44) | @Test
method test_emptyUrl_disabled (line 51) | @Test
method test_nonEmptyUrl_disabled (line 59) | @Test
method test_nonEmptyUrl_enabled (line 68) | @Test
FILE: spring-boot-admin-client/src/test/java/de/codecentric/boot/admin/client/config/SpringBootAdminClientRegistrationClientAutoConfigurationTest.java
class SpringBootAdminClientRegistrationClientAutoConfigurationTest (line 39) | public class SpringBootAdminClientRegistrationClientAutoConfigurationTest {
method autoConfiguresRegistrationClient (line 41) | @ParameterizedTest(name = "{0}")
method contextRunnerCustomizations (line 61) | public static Stream<Arguments> contextRunnerCustomizations() {
method customizer (line 79) | private static ContextRunnerCustomizerBuilder customizer() {
class ContextRunnerCustomizerBuilder (line 83) | private static final class ContextRunnerCustomizerBuilder {
method withRestClientBuilder (line 87) | ContextRunnerCustomizerBuilder withRestClientBuilder() {
method withClientHttpRequestFactoryBuilder (line 92) | ContextRunnerCustomizerBuilder withClientHttpRequestFactoryBuilder() {
method build (line 98) | Function<WebApplicationContextRunner, WebApplicationContextRunner> b...
FILE: spring-boot-admin-client/src/test/java/de/codecentric/boot/admin/client/registration/AbstractRegistrationClientTest.java
class AbstractRegistrationClientTest (line 40) | public abstract class AbstractRegistrationClientTest {
method setUp (line 53) | public void setUp(RegistrationClient registrationClient) {
method setUpWiremock (line 57) | @BeforeEach
method tearDown (line 62) | @AfterEach
method register_should_return_id_when_successful (line 67) | @Test
method register_should_throw (line 83) | @Test
method deregister (line 91) | @Test
method deregister_should_trow (line 98) | @Test
FILE: spring-boot-admin-client/src/test/java/de/codecentric/boot/admin/client/registration/ApplicationTest.java
class ApplicationTest (line 26) | class ApplicationTest {
method test_json_format (line 28) | @Test
method test_equals_hashCode (line 46) | @Test
method should_not_return_sensitive_data_in_toString (line 71) | @Test
FILE: spring-boot-admin-client/src/test/java/de/codecentric/boot/admin/client/registration/CloudFoundryApplicationFactoryTest.java
class CloudFoundryApplicationFactoryTest (line 36) | class CloudFoundryApplicationFactoryTest {
method setup (line 54) | @BeforeEach
method should_use_application_uri (line 59) | @Test
method should_use_service_base_uri (line 73) | @Test
FILE: spring-boot-admin-client/src/test/java/de/codecentric/boot/admin/client/registration/DefaultApplicationFactoryTest.java
class DefaultApplicationFactoryTest (line 43) | class DefaultApplicationFactoryTest {
method setup (line 58) | @BeforeEach
method test_mgmtPortPath (line 63) | @Test
method test_default (line 75) | @Test
method test_ssl (line 89) | @Test
method test_ssl_management (line 102) | @Test
method test_preferIpAddress_server_address_missing (line 115) | @Test
method test_preferIpAddress_management_address_missing (line 125) | @Test
method test_preferIpAddress (line 135) | @Test
method test_all_custom (line 149) | @Test
method test_all_baseUrls (line 161) | @Test
method test_service_baseUrl (line 174) | @Test
method test_missing_ports (line 186) | @Test
method test_service_path (line 192) | @Test
method test_service_path_default (line 205) | @Test
method getHostname (line 210) | private String getHostname() {
method publishApplicationReadyEvent (line 219) | private void publishApplicationReadyEvent(DefaultApplicationFactory fa...
class TestWebServerInitializedEvent (line 226) | private static final class TestWebServerInitializedEvent extends WebSe...
method TestWebServerInitializedEvent (line 232) | private TestWebServerInitializedEvent(String name, int port) {
method getApplicationContext (line 238) | @Override
method getWebServer (line 243) | @Override
FILE: spring-boot-admin-client/src/test/java/de/codecentric/boot/admin/client/registration/DefaultApplicationRegistratorTest.java
class DefaultApplicationRegistratorTest (line 31) | class DefaultApplicationRegistratorTest {
method register_should_return_true_when_successful (line 41) | @Test
method register_should_return_false_when_failed (line 52) | @Test
method register_should_try_next_on_error (line 65) | @Test
method deregister_should_deregister_at_server (line 79) | @Test
method deregister_should_not_deregister_when_not_registered (line 94) | @Test
method deregister_should_try_next_on_error (line 105) | @Test
method register_should_register_on_multiple_servers (line 123) | @Test
method deregister_should_deregister_on_multiple_servers (line 138) | @Test
FILE: spring-boot-admin-client/src/test/java/de/codecentric/boot/admin/client/registration/ReactiveApplicationFactoryTest.java
class ReactiveApplicationFactoryTest (line 41) | class ReactiveApplicationFactoryTest {
method setup (line 58) | @BeforeEach
method test_contextPath_mgmtPath (line 63) | @Test
method test_contextPath_mgmtPortPath (line 76) | @Test
method test_basePath (line 89) | @Test
method test_noBasePath (line 101) | @Test
method test_mgmtBasePath_mgmtPortPath (line 112) | @Test
method getHostname (line 125) | private String getHostname() {
method publishApplicationReadyEvent (line 134) | private void publishApplicationReadyEvent(DefaultApplicationFactory fa...
class TestWebServerInitializedEvent (line 141) | private static final class TestWebServerInitializedEvent extends WebSe...
method TestWebServerInitializedEvent (line 147) | private TestWebServerInitializedEvent(String name, int port) {
method getApplicationContext (line 153) | @Override
method getWebServer (line 158) | @Override
FILE: spring-boot-admin-client/src/test/java/de/codecentric/boot/admin/client/registration/RegistrationApplicationListenerTest.java
class RegistrationApplicationListenerTest (line 40) | class RegistrationApplicationListenerTest {
method should_schedule_register_task (line 42) | @Test
method should_no_schedule_register_task_when_not_autoRegister (line 54) | @Test
method should_cancel_register_task_on_context_close (line 67) | @Test
method should_start_and_cancel_task_on_request (line 84) | @Test
method should_not_deregister_when_not_autoDeregister (line 100) | @Test
method should_deregister_when_autoDeregister (line 111) | @Test
method should_deregister_when_autoDeregister_and_parent_is_bootstrap_context (line 123) | @Test
method should_not_deregister_when_autoDeregister_and_not_root (line 139) | @Test
method should_init_and_shutdown_taskScheduler (line 153) | @Test
FILE: spring-boot-admin-client/src/test/java/de/codecentric/boot/admin/client/registration/RestClientRegistrationClientTest.java
class RestClientRegistrationClientTest (line 22) | class RestClientRegistrationClientTest extends AbstractRegistrationClien...
method setUp (line 24) | @BeforeEach
FILE: spring-boot-admin-client/src/test/java/de/codecentric/boot/admin/client/registration/ServletApplicationFactoryTest.java
class ServletApplicationFactoryTest (line 42) | class ServletApplicationFactoryTest {
method setup (line 61) | @BeforeEach
method test_contextPath_mgmtPath (line 67) | @Test
method test_contextPath_mgmtPortPath (line 80) | @Test
method test_contextPath (line 93) | @Test
method test_servletPath (line 105) | @Test
method test_servicePath (line 118) | @Test
method getHostname (line 131) | private String getHostname() {
method publishApplicationReadyEvent (line 140) | private void publishApplicationReadyEvent(DefaultApplicationFactory fa...
class TestWebServerInitializedEvent (line 147) | private static final class TestWebServerInitializedEvent extends WebSe...
method TestWebServerInitializedEvent (line 153) | private TestWebServerInitializedEvent(String name, int port) {
method getApplicationContext (line 159) | @Override
method getWebServer (line 164) | @Override
FILE: spring-boot-admin-client/src/test/java/de/codecentric/boot/admin/client/registration/metadata/CloudFoundryMetadataContributorTest.java
class CloudFoundryMetadataContributorTest (line 25) | class CloudFoundryMetadataContributorTest {
method should_return_empty_metadata (line 27) | @Test
method should_return_metadata (line 34) | @Test
FILE: spring-boot-admin-client/src/test/java/de/codecentric/boot/admin/client/registration/metadata/CompositeMetadataContributorTest.java
class CompositeMetadataContributorTest (line 29) | class CompositeMetadataContributorTest {
method should_merge_metadata (line 31) | @Test
method should_return_empty_metadata (line 42) | @Test
FILE: spring-boot-admin-client/src/test/java/de/codecentric/boot/admin/client/registration/metadata/StartupDateMetadataContributorTest.java
class StartupDateMetadataContributorTest (line 25) | class StartupDateMetadataContributorTest {
method should_return_startupdate (line 27) | @Test
FILE: spring-boot-admin-docs/src/site/docusaurus.config.ts
method configureWebpack (line 52) | configureWebpack() {
FILE: spring-boot-admin-docs/src/site/src/components/CopyButton.tsx
function CopyButton (line 4) | function CopyButton({ text }) {
FILE: spring-boot-admin-docs/src/site/src/components/HexMesh.tsx
type HexMeshProps (line 20) | interface HexMeshProps<T> {
type Layout (line 27) | interface Layout {
function HexMesh (line 67) | function HexMesh<T>({ items, classForItem, renderItem, onClick }: HexMes...
FILE: spring-boot-admin-docs/src/site/src/components/PropertyTable.tsx
type Props (line 5) | type Props = {
function getFilteredProperties (line 13) | function getFilteredProperties(properties: Array<SpringPropertyDefinitio...
function PropertyTable (line 27) | function PropertyTable({
FILE: spring-boot-admin-docs/src/site/src/components/Screenshot.tsx
function Screenshot (line 5) | function Screenshot({ images }: { images: {src: string, description: str...
FILE: spring-boot-admin-docs/src/site/src/global.d.ts
type SpringPropertyDefinition (line 4) | type SpringPropertyDefinition = {
FILE: spring-boot-admin-docs/src/site/src/pages/index.tsx
function Home (line 3) | function Home() {
FILE: spring-boot-admin-docs/src/site/src/propertiesUtil.ts
function containsKeywordIgnoreCase (line 21) | function containsKeywordIgnoreCase(str: string, keywords: string[]): boo...
FILE: spring-boot-admin-docs/src/site/src/theme/DocCard/index.js
constant ICON_MAP (line 12) | const ICON_MAP = {
function useCategoryItemsPlural (line 38) | function useCategoryItemsPlural() {
function CardContainer (line 55) | function CardContainer({ href, children }) {
function CardLayout (line 66) | function CardLayout({ href, icon, title, description }) {
function DocCard (line 88) | function DocCard({ item }) {
function CardCategory (line 99) | function CardCategory({ item }) {
function CardLink (line 116) | function CardLink({ item }) {
FILE: spring-boot-admin-samples/spring-boot-admin-sample-consul/src/main/java/de/codecentric/boot/admin/sample/SpringBootAdminConsulApplication.java
class SpringBootAdminConsulApplication (line 38) | @SpringBootApplication
method main (line 43) | public static void main(String[] args) {
class SecurityPermitAllConfig (line 47) | @Profile("insecure")
method SecurityPermitAllConfig (line 53) | public SecurityPermitAllConfig(AdminServerProperties adminServerProp...
method filterChain (line 57) | @Bean
class SecuritySecureConfig (line 72) | @Profile("secure")
method SecuritySecureConfig (line 78) | public SecuritySecureConfig(AdminServerProperties adminServerPropert...
method filterChain (line 82) | @Bean
FILE: spring-boot-admin-samples/spring-boot-admin-sample-consul/src/test/java/de/codecentric/boot/admin/sample/SpringBootAdminConsulApplicationTest.java
class SpringBootAdminConsulApplicationTest (line 24) | @ExtendWith(SpringExtension.class)
method contextLoads (line 29) | @Test
FILE: spring-boot-admin-samples/spring-boot-admin-sample-custom-ui/src/index.js
method install (line 25) | install({ viewRegistry, i18n }) {
FILE: spring-boot-admin-samples/spring-boot-admin-sample-eureka/src/main/java/de/codecentric/boot/admin/SpringBootAdminEurekaApplication.java
class SpringBootAdminEurekaApplication (line 38) | @Configuration(proxyBeanMethods = false)
method SpringBootAdminEurekaApplication (line 46) | public SpringBootAdminEurekaApplication(AdminServerProperties adminSer...
method main (line 50) | public static void main(String[] args) {
method securityWebFilterChainPermitAll (line 54) | @Bean
method securityWebFilterChainSecure (line 62) | @Bean
method logoutSuccessHandler (line 86) | private ServerLogoutSuccessHandler logoutSuccessHandler(String uri) {
method loginSuccessHandler (line 92) | private ServerAuthenticationSuccessHandler loginSuccessHandler(String ...
FILE: spring-boot-admin-samples/spring-boot-admin-sample-eureka/src/test/java/de/codecentric/boot/admin/SpringBootAdminEurekaApplicationTest.java
class SpringBootAdminEurekaApplicationTest (line 24) | @ExtendWith(SpringExtension.class)
method contextLoads (line 28) | @Test
FILE: spring-boot-admin-samples/spring-boot-admin-sample-hazelcast/src/main/java/de/codecentric/boot/admin/sample/SpringBootAdminHazelcastApplication.java
class SpringBootAdminHazelcastApplication (line 53) | @SpringBootApplication
method main (line 59) | public static void main(String[] args) {
method hazelcastConfig (line 64) | @Bean
method loggingNotifier (line 98) | @Bean
class SecurityPermitAllConfig (line 103) | @Profile("insecure")
method SecurityPermitAllConfig (line 109) | public SecurityPermitAllConfig(AdminServerProperties adminServer) {
method filterChain (line 113) | @Bean
class SecuritySecureConfig (line 129) | @Profile("secure")
method SecuritySecureConfig (line 135) | public SecuritySecureConfig(AdminServerProperties adminServer) {
method filterChain (line 139) | @Bean
FILE: spring-boot-admin-samples/spring-boot-admin-sample-hazelcast/src/test/java/de/codecentric/boot/admin/sample/SpringBootAdminHazelcastApplicationTest.java
class SpringBootAdminHazelcastApplicationTest (line 24) | @ExtendWith(SpringExtension.class)
method contextLoads (line 28) | @Test
FILE: spring-boot-admin-samples/spring-boot-admin-sample-reactive/src/main/java/de/codecentric/boot/admin/sample/SpringBootAdminReactiveApplication.java
class SpringBootAdminReactiveApplication (line 38) | @SpringBootApplication
method SpringBootAdminReactiveApplication (line 44) | public SpringBootAdminReactiveApplication(AdminServerProperties adminS...
method main (line 48) | public static void main(String[] args) {
method securityWebFilterChainPermitAll (line 52) | @Bean
method securityWebFilterChainSecure (line 60) | @Bean
method logoutSuccessHandler (line 84) | private ServerLogoutSuccessHandler logoutSuccessHandler(String uri) {
method loginSuccessHandler (line 90) | private ServerAuthenticationSuccessHandler loginSuccessHandler(String ...
method notifier (line 96) | @Bean
FILE: spring-boot-admin-samples/spring-boot-admin-sample-reactive/src/test/java/de/codecentric/boot/admin/sample/SpringBootAdminReactiveApplicationTest.java
class SpringBootAdminReactiveApplicationTest (line 24) | @ExtendWith(SpringExtension.class)
method contextLoads (line 28) | @Test
FILE: spring-boot-admin-samples/spring-boot-admin-sample-servlet-graalvm/src/main/java/de/codecentric/boot/admin/sample/SpringBootAdminServletApplication.java
class SpringBootAdminServletApplication (line 24) | @SpringBootApplication
method main (line 28) | public static void main(String[] args) {
FILE: spring-boot-admin-samples/spring-boot-admin-sample-servlet/src/main/java/de/codecentric/boot/admin/sample/CustomCsrfFilter.java
class CustomCsrfFilter (line 30) | public class CustomCsrfFilter extends OncePerRequestFilter {
method doFilterInternal (line 34) | @Override
FILE: spring-boot-admin-samples/spring-boot-admin-sample-servlet/src/main/java/de/codecentric/boot/admin/sample/CustomEndpoint.java
class CustomEndpoint (line 22) | @Endpoint(id = "custom")
method invoke (line 25) | @ReadOperation
FILE: spring-boot-admin-samples/spring-boot-admin-sample-servlet/src/main/java/de/codecentric/boot/admin/sample/CustomNotifier.java
class CustomNotifier (line 30) | public class CustomNotifier extends AbstractEventNotifier {
method CustomNotifier (line 34) | public CustomNotifier(InstanceRepository repository) {
method doNotify (line 38) | @Override
FILE: spring-boot-admin-samples/spring-boot-admin-sample-servlet/src/main/java/de/codecentric/boot/admin/sample/NotifierConfig.java
class NotifierConfig (line 35) | @Configuration(proxyBeanMethods = false)
method NotifierConfig (line 42) | public NotifierConfig(InstanceRepository repository, ObjectProvider<Li...
method filteringNotifier (line 47) | @Bean
method remindingNotifier (line 53) | @Primary
FILE: spring-boot-admin-samples/spring-boot-admin-sample-servlet/src/main/java/de/codecentric/boot/admin/sample/SecurityPermitAllConfig.java
class SecurityPermitAllConfig (line 34) | @Profile("insecure")
method SecurityPermitAllConfig (line 40) | public SecurityPermitAllConfig(AdminServerProperties adminServer) {
method filterChain (line 44) | @Bean
FILE: spring-boot-admin-samples/spring-boot-admin-sample-servlet/src/main/java/de/codecentric/boot/admin/sample/SecuritySecureConfig.java
class SecuritySecureConfig (line 45) | @Profile("secure")
method SecuritySecureConfig (line 54) | public SecuritySecureConfig(AdminServerProperties adminServer, Securit...
method filterChain (line 59) | @Bean
method userDetailsService (line 100) | @Bean
method passwordEncoder (line 106) | @Bean
FILE: spring-boot-admin-samples/spring-boot-admin-sample-servlet/src/main/java/de/codecentric/boot/admin/sample/SpringBootAdminServletApplication.java
class SpringBootAdminServletApplication (line 44) | @SpringBootApplication
method main (line 52) | public static void main(String[] args) {
method cacheManager (line 58) | @Bean
method auditLog (line 64) | @Bean
method customNotifier (line 74) | @Bean
method customEndpoint (line 79) | @Bean
method customHttpHeadersProvider (line 85) | @Bean
method httpTraceRepository (line 95) | @Bean
method auditEventRepository (line 100) | @Bean
method dataSource (line 105) | @Bean
FILE: spring-boot-admin-samples/spring-boot-admin-sample-servlet/src/test/java/de/codecentric/boot/admin/sample/SpringBootAdminServletApplicationTest.java
class SpringBootAdminServletApplicationTest (line 24) | @ExtendWith(SpringExtension.class)
method contextLoads (line 28) | @Test
FILE: spring-boot-admin-samples/spring-boot-admin-sample-war/src/main/java/de/codecentric/boot/admin/sample/SpringBootAdminWarApplication.java
class SpringBootAdminWarApplication (line 39) | @SpringBootApplication
method main (line 43) | public static void main(String[] args) {
method configure (line 47) | @Override
class SecurityPermitAllConfig (line 52) | @Profile("insecure")
method SecurityPermitAllConfig (line 58) | public SecurityPermitAllConfig(AdminServerProperties adminServer) {
method filterChain (line 62) | @Bean
class SecuritySecureConfig (line 76) | @Profile("secure")
method SecuritySecureConfig (line 82) | public SecuritySecureConfig(AdminServerProperties adminServer) {
method filterChain (line 86) | @Bean
FILE: spring-boot-admin-samples/spring-boot-admin-sample-zookeeper/src/main/java/de/codecentric/boot/admin/sample/SpringBootAdminZookeeperApplication.java
class SpringBootAdminZookeeperApplication (line 38) | @SpringBootApplication
method main (line 43) | public static void main(String[] args) {
class SecurityPermitAllConfig (line 47) | @Profile("insecure")
method SecurityPermitAllConfig (line 53) | public SecurityPermitAllConfig(AdminServerProperties adminServer) {
method filterChain (line 57) | @Bean
class SecuritySecureConfig (line 72) | @Profile("secure")
method SecuritySecureConfig (line 78) | public SecuritySecureConfig(AdminServerProperties adminServer) {
method filterChain (line 82) | @Bean
FILE: spring-boot-admin-samples/spring-boot-admin-sample-zookeeper/src/test/java/de/codecentric/boot/admin/sample/SpringBootAdminZookeeperApplicationTest.java
class SpringBootAdminZookeeperApplicationTest (line 24) | @ExtendWith(SpringExtension.class)
method contextLoads (line 29) | @Test
FILE: spring-boot-admin-server-cloud/src/main/java/de/codecentric/boot/admin/server/cloud/config/AdminServerDiscoveryAutoConfiguration.java
class AdminServerDiscoveryAutoConfiguration (line 43) | @Configuration(proxyBeanMethods = false)
method instanceDiscoveryListener (line 52) | @Bean
method serviceInstanceConverter (line 62) | @Bean
class EurekaConverterConfiguration (line 69) | @Configuration(proxyBeanMethods = false)
method serviceInstanceConverter (line 74) | @Bean
class KubernetesConverterConfiguration (line 82) | @Configuration(proxyBeanMethods = false)
method serviceInstanceConverter (line 88) | @Bean
FILE: spring-boot-admin-server-cloud/src/main/java/de/codecentric/boot/admin/server/cloud/discovery/DefaultServiceInstanceConverter.java
class DefaultServiceInstanceConverter (line 45) | public class DefaultServiceInstanceConverter implements ServiceInstanceC...
method getMetadataValue (line 71) | protected static @Nullable String getMetadataValue(ServiceInstance ins...
method convert (line 82) | @Override
method getHealthUrl (line 98) | protected URI getHealthUrl(ServiceInstance instance) {
method getHealthPath (line 106) | protected String getHealthPath(ServiceInstance instance) {
method getManagementUrl (line 114) | protected URI getManagementUrl(ServiceInstance instance) {
method getManagementScheme (line 135) | private String getManagementScheme(ServiceInstance instance) {
method getManagementHost (line 143) | protected String getManagementHost(ServiceInstance instance) {
method getManagementPort (line 151) | protected int getManagementPort(ServiceInstance instance) {
method getManagementPath (line 159) | protected String getManagementPath(ServiceInstance instance) {
method getServiceUrl (line 167) | protected URI getServiceUrl(ServiceInstance instance) {
method getMetadata (line 171) | protected Map<String, String> getMetadata(ServiceInstance instance) {
method getManagementContextPath (line 179) | public String getManagementContextPath() {
method setManagementContextPath (line 183) | public void setManagementContextPath(String managementContextPath) {
method getHealthEndpointPath (line 187) | public String getHealthEndpointPath() {
method setHealthEndpointPath (line 191) | public void setHealthEndpointPath(String healthEndpointPath) {
FILE: spring-boot-admin-server-cloud/src/main/java/de/codecentric/boot/admin/server/cloud/discovery/EurekaServiceInstanceConverter.java
class EurekaServiceInstanceConverter (line 33) | public class EurekaServiceInstanceConverter extends DefaultServiceInstan...
method getHealthUrl (line 35) | @Override
FILE: spring-boot-admin-server-cloud/src/main/java/de/codecentric/boot/admin/server/cloud/discovery/InstanceDiscoveryListener.java
class InstanceDiscoveryListener (line 52) | public class InstanceDiscoveryListener {
method InstanceDiscoveryListener (line 92) | public InstanceDiscoveryListener(DiscoveryClient discoveryClient, Inst...
method onApplicationReady (line 99) | @EventListener
method onInstanceRegistered (line 104) | @EventListener
method onRefreshInstances (line 109) | @EventListener
method onParentHeartbeat (line 114) | @EventListener
method onApplicationEvent (line 119) | @EventListener
method discoverIfNeeded (line 124) | private void discoverIfNeeded(Object value) {
method discover (line 130) | protected void discover() {
method removeStaleInstances (line 143) | protected Mono<Void> removeStaleInstances(Set<InstanceId> registeredIn...
method shouldRegisterService (line 154) | protected boolean shouldRegisterService(final String serviceId) {
method matchesPattern (line 162) | protected boolean matchesPattern(String serviceId, Set<String> pattern...
method shouldRegisterInstanceBasedOnMetadata (line 167) | protected boolean shouldRegisterInstanceBasedOnMetadata(ServiceInstanc...
method registerInstance (line 177) | protected Mono<InstanceId> registerInstance(ServiceInstance instance) {
method toString (line 189) | protected String toString(ServiceInstance instance) {
method setConverter (line 196) | public void setConverter(ServiceInstanceConverter converter) {
method setIgnoredServices (line 200) | public void setIgnoredServices(Set<String> ignoredServices) {
method getIgnoredServices (line 204) | public Set<String> getIgnoredServices() {
method getServices (line 208) | public Set<String> getServices() {
method setServices (line 212) | public void setServices(Set<String> services) {
method getInstancesMetadata (line 216) | public Map<String, String> getInstancesMetadata() {
method setInstancesMetadata (line 220) | public void setInstancesMetadata(Map<String, String> instancesMetadata) {
method getIgnoredInstancesMetadata (line 224) | public Map<String, String> getIgnoredInstancesMetadata() {
method setIgnoredInstancesMetadata (line 228) | public void setIgnoredInstancesMetadata(Map<String, String> ignoredIns...
method isInstanceAllowedBasedOnMetadata (line 232) | private boolean isInstanceAllowedBasedOnMetadata(ServiceInstance insta...
method isInstanceIgnoredBasedOnMetadata (line 246) | private boolean isInstanceIgnoredBasedOnMetadata(ServiceInstance insta...
method isMapContainsEntry (line 260) | private boolean isMapContainsEntry(Map<String, String> map, Map.Entry<...
FILE: spring-boot-admin-server-cloud/src/main/java/de/codecentric/boot/admin/server/cloud/discovery/KubernetesServiceInstanceConverter.java
class KubernetesServiceInstanceConverter (line 24) | public class KubernetesServiceInstanceConverter extends DefaultServiceIn...
method KubernetesServiceInstanceConverter (line 30) | public KubernetesServiceInstanceConverter(KubernetesDiscoveryPropertie...
method getManagementPort (line 39) | @Override
FILE: spring-boot-admin-server-cloud/src/main/java/de/codecentric/boot/admin/server/cloud/discovery/ServiceInstanceConverter.java
type ServiceInstanceConverter (line 29) | public interface ServiceInstanceConverter {
method convert (line 36) | Registration convert(ServiceInstance instance);
FILE: spring-boot-admin-server-cloud/src/test/java/de/codecentric/boot/admin/server/cloud/AdminApplicationDiscoveryTest.java
class AdminApplicationDiscoveryTest (line 55) | class AdminApplicationDiscoveryTest {
method setUp (line 65) | @BeforeEach
method lifecycle (line 80) | @Test
method registerInstance (line 103) | private Mono<URI> registerInstance() {
method deregisterInstance (line 132) | private void deregisterInstance() {
method getEventStream (line 137) | private Flux<JSONObject> getEventStream() {
method getInstance (line 147) | private Mono<Boolean> getInstance(URI uri) {
method listInstances (line 161) | private Mono<Boolean> listInstances() {
method listEmptyInstances (line 175) | private Mono<Boolean> listEmptyInstances() {
method createWebClient (line 189) | private WebTestClient createWebClient(int port) {
method shutdown (line 200) | @AfterEach
class TestAdminApplication (line 205) | @EnableAdminServer
method securityWebFilterChain (line 211) | @Bean
FILE: spring-boot-admin-server-cloud/src/test/java/de/codecentric/boot/admin/server/cloud/config/AdminServerDiscoveryAutoConfigurationTest.java
class AdminServerDiscoveryAutoConfigurationTest (line 42) | class AdminServerDiscoveryAutoConfigurationTest {
method defaultServiceInstanceConverter (line 50) | @Test
method eurekaServiceInstanceConverter (line 57) | @Test
method kubernetesServiceInstanceConverter (line 65) | @Test
method customServiceInstanceConverter (line 74) | @Test
class CustomServiceInstanceConverter (line 82) | public static class CustomServiceInstanceConverter implements ServiceI...
method convert (line 84) | @Override
FILE: spring-boot-admin-server-cloud/src/test/java/de/codecentric/boot/admin/server/cloud/discovery/DefaultServiceInstanceConverterTest.java
class DefaultServiceInstanceConverterTest (line 32) | class DefaultServiceInstanceConverterTest {
method should_convert_with_defaults (line 34) | @Test
method should_convert_with_custom_defaults (line 45) | @Test
method should_convert_with_metadata (line 60) | @Test
method should_convert_with_metadata_without_dots (line 81) | @Test
method should_convert_with_metadata_having_null_value (line 101) | @Test
method should_convert_service_with_uri (line 118) | @Test
method should_convert_service_with_uri_and_custom_defaults (line 131) | @Test
method should_convert_service_with_uri_and_metadata_different_port (line 147) | @Test
method should_convert_service_with_uri_and_metadata (line 164) | @Test
method getServiceId (line 182) | @Override
method getHost (line 187) | @Override
method getPort (line 192) | @Override
method isSecure (line 200) | @Override
method getUri (line 205) | @Override
method getMetadata (line 210) | @Override
FILE: spring-boot-admin-server-cloud/src/test/java/de/codecentric/boot/admin/server/cloud/discovery/EurekaServiceInstanceConverterTest.java
class EurekaServiceInstanceConverterTest (line 32) | class EurekaServiceInstanceConverterTest {
method convert_secure (line 34) | @Test
method convert_missing_mgmt_path (line 53) | @Test
method convert_secure_healthUrl (line 67) | @Test
FILE: spring-boot-admin-server-cloud/src/test/java/de/codecentric/boot/admin/server/cloud/discovery/InstanceDiscoveryListenerTest.java
class InstanceDiscoveryListenerTest (line 53) | class InstanceDiscoveryListenerTest {
method setup (line 61) | @BeforeEach
method should_discover_instances_when_application_is_ready (line 69) | @Test
method should_not_register_instance_when_serviceId_is_ignored (line 82) | @Test
method should_not_register_instance_when_serviceId_is_ignored_caseInsensitive (line 94) | @Test
method should_not_register_instance_when_instanceMetadata_is_ignored (line 106) | @Test
method should_register_instance_when_serviceId_is_not_ignored (line 118) | @Test
method should_register_instance_when_instanceMetadata_is_not_ignored (line 130) | @Test
method should_not_register_instance_when_serviceId_matches_ignored_pattern (line 142) | @Test
method should_not_register_instance_when_instanceMetadata_matches_ignored_metadata (line 156) | @Test
method should_register_instances_when_serviceId_matches_wanted_pattern (line 176) | @Test
method should_register_instances_when_instanceMetadata_matches_wanted_metadata (line 190) | @Test
method should_register_instances_when_serviceId_matches_wanted_pattern_and_ignored_pattern (line 210) | @Test
method should_not_register_instances_when_instanceMetadata_matches_wanted_metadata_and_ignored_metadata (line 227) | @Test
method should_register_instance_when_new_service_instance_is_discovered (line 254) | @Test
method should_only_discover_new_instances_when_new_heartbeat_is_emitted (line 271) | @Test
method should_remove_instances_when_they_are_no_longer_available_in_discovery (line 289) | @Test
method should_not_throw_error_when_conversion_fails_and_proceed_with_next_instance (line 346) | @Test
FILE: spring-boot-admin-server-cloud/src/test/java/de/codecentric/boot/admin/server/cloud/discovery/KubernetesServiceInstanceConverterTest.java
class KubernetesServiceInstanceConverterTest (line 32) | class KubernetesServiceInstanceConverterTest {
method convert_using_port_mgmt (line 34) | @Test
method fallback_for_port_mgmt (line 46) | @Test
method mockServiceInstanceWithManagementPort (line 57) | private static ServiceInstance mockServiceInstanceWithManagementPort(S...
FILE: spring-boot-admin-server-ui/.storybook/main.js
method viteFinal (line 13) | async viteFinal(config) {
FILE: spring-boot-admin-server-ui/components.d.ts
type GlobalComponents (line 10) | interface GlobalComponents {
FILE: spring-boot-admin-server-ui/src/main/frontend/HealthStatus.ts
class HealthStatusEnum (line 1) | class HealthStatusEnum {
FILE: spring-boot-admin-server-ui/src/main/frontend/components.d.ts
type GlobalComponents (line 10) | interface GlobalComponents {
FILE: spring-boot-admin-server-ui/src/main/frontend/components/ActionScope.ts
class ActionScopeEnum (line 1) | class ActionScopeEnum {
FILE: spring-boot-admin-server-ui/src/main/frontend/components/index.ts
method install (line 69) | install(app) {
FILE: spring-boot-admin-server-ui/src/main/frontend/components/sba-accordion.stories.ts
method setup (line 28) | setup() {
method setup (line 124) | setup() {
method setup (line 167) | setup() {
FILE: spring-boot-admin-server-ui/src/main/frontend/components/sba-action-button-scoped.stories.ts
method setup (line 27) | setup() {
method actionFn (line 40) | actionFn() {
method actionFn (line 63) | actionFn() {
method setup (line 75) | setup() {
method actionFn (line 95) | actionFn() {
method actionFn (line 110) | actionFn() {
FILE: spring-boot-admin-server-ui/src/main/frontend/components/sba-alert.stories.ts
method setup (line 25) | setup() {
FILE: spring-boot-admin-server-ui/src/main/frontend/components/sba-button-group.stories.ts
method setup (line 27) | setup() {
FILE: spring-boot-admin-server-ui/src/main/frontend/components/sba-button.stories.ts
method setup (line 26) | setup() {
FILE: spring-boot-admin-server-ui/src/main/frontend/components/sba-checkbox.stories.ts
method setup (line 26) | setup() {
FILE: spring-boot-admin-server-ui/src/main/frontend/components/sba-confirm-button.stories.ts
method setup (line 26) | setup() {
FILE: spring-boot-admin-server-ui/src/main/frontend/components/sba-dropdown/sba-dropdown.stories.ts
method setup (line 17) | setup() {
FILE: spring-boot-admin-server-ui/src/main/frontend/components/sba-icon-button.stories.ts
method setup (line 26) | setup() {
FILE: spring-boot-admin-server-ui/src/main/frontend/components/sba-input.stories.ts
method setup (line 26) | setup() {
FILE: spring-boot-admin-server-ui/src/main/frontend/components/sba-key-value-table.stories.ts
method setup (line 26) | setup() {
FILE: spring-boot-admin-server-ui/src/main/frontend/components/sba-modal.stories.ts
method setup (line 27) | setup() {
FILE: spring-boot-admin-server-ui/src/main/frontend/components/sba-nav/sba-nav-dropdown.stories.ts
method setup (line 19) | setup() {
FILE: spring-boot-admin-server-ui/src/main/frontend/components/sba-nav/sba-nav-item.stories.ts
method setup (line 13) | setup() {
FILE: spring-boot-admin-server-ui/src/main/frontend/components/sba-navbar/sba-navbar-toggle.stories.ts
method setup (line 15) | setup() {
FILE: spring-boot-admin-server-ui/src/main/frontend/components/sba-navbar/sba-navbar.stories.ts
method setup (line 26) | setup() {
FILE: spring-boot-admin-server-ui/src/main/frontend/components/sba-pagination-nav.stories.ts
method setup (line 28) | setup() {
method change (line 32) | change($event) {
method data (line 36) | data() {
FILE: spring-boot-admin-server-ui/src/main/frontend/components/sba-panel.stories.ts
method setup (line 11) | setup() {
method onClose (line 15) | onClose(event) {
FILE: spring-boot-admin-server-ui/src/main/frontend/components/sba-select.stories.ts
method setup (line 26) | setup() {
FILE: spring-boot-admin-server-ui/src/main/frontend/components/sba-status.spec.ts
function testSnapshotForStatus (line 27) | function testSnapshotForStatus(status: string, date?: number) {
FILE: spring-boot-admin-server-ui/src/main/frontend/components/sba-status.stories.ts
method setup (line 10) | setup() {
FILE: spring-boot-admin-server-ui/src/main/frontend/components/sba-tag.stories.ts
method setup (line 26) | setup() {
FILE: spring-boot-admin-server-ui/src/main/frontend/components/sba-tags.stories.ts
method setup (line 10) | setup() {
FILE: spring-boot-admin-server-ui/src/main/frontend/components/sba-toggle-scope-button.stories.ts
method setup (line 13) | setup() {
FILE: spring-boot-admin-server-ui/src/main/frontend/composables/ViewRegistry.ts
constant CUSTOM_ROUTES_ADDED_EVENT (line 7) | const CUSTOM_ROUTES_ADDED_EVENT = 'custom-routes-added';
function createViewRegistry (line 11) | function createViewRegistry() {
function useViewRegistry (line 22) | function useViewRegistry() {
FILE: spring-boot-admin-server-ui/src/main/frontend/composables/useApplicationStore.ts
function createApplicationStore (line 13) | function createApplicationStore() {
type ApplicationStoreValue (line 20) | type ApplicationStoreValue = {
function useApplicationStore (line 28) | function useApplicationStore(): ApplicationStoreValue {
FILE: spring-boot-admin-server-ui/src/main/frontend/composables/useClassnameShortener.ts
type Options (line 1) | type Options = {
function abbreviateLoggerName (line 26) | function abbreviateLoggerName(fqcn: string, maxLen = 40): string {
FILE: spring-boot-admin-server-ui/src/main/frontend/composables/useDateTimeFormatter.ts
type DateFormatterOptions (line 1) | type DateFormatterOptions = {
FILE: spring-boot-admin-server-ui/src/main/frontend/directives/on-resize.ts
method update (line 37) | update(el, binding) {
FILE: spring-boot-admin-server-ui/src/main/frontend/directives/popper.ts
method update (line 40) | update(el, binding) {
FILE: spring-boot-admin-server-ui/src/main/frontend/directives/sticks-below.ts
method update (line 34) | update(el, binding) {
FILE: spring-boot-admin-server-ui/src/main/frontend/global.d.ts
type ApplicationStream (line 8) | type ApplicationStream = {
type Window (line 12) | interface Window {
type Extension (line 16) | type Extension = {
type UITheme (line 21) | type UITheme = {
type PollTimer (line 38) | type PollTimer = {
type ViewSettings (line 48) | type ViewSettings = {
type ExternalView (line 53) | type ExternalView = {
type UISettings (line 61) | type UISettings = {
type SBASettings (line 80) | type SBASettings = {
type ViewInstallFunctionParams (line 97) | type ViewInstallFunctionParams = {
type SbaView (line 101) | type SbaView = {
type View (line 116) | type View = ComponentView | LinkView;
type ComponentView (line 118) | interface ComponentView {
type LinkView (line 129) | interface LinkView {
type HealthStatus (line 136) | type HealthStatus =
FILE: spring-boot-admin-server-ui/src/main/frontend/i18n/PrimeLocale.ts
method setLocale (line 5) | setLocale(primevue: PrimeVueConfiguration, locale: string) {
FILE: spring-boot-admin-server-ui/src/main/frontend/i18n/index.ts
function getAvailableLocales (line 21) | function getAvailableLocales() {
FILE: spring-boot-admin-server-ui/src/main/frontend/index.ts
method setup (line 98) | setup() {
FILE: spring-boot-admin-server-ui/src/main/frontend/login/login.stories.ts
method setup (line 10) | setup() {
FILE: spring-boot-admin-server-ui/src/main/frontend/mixins/subscribing.ts
method created (line 18) | created() {
method beforeUnmount (line 21) | beforeUnmount() {
method subscribe (line 25) | async subscribe() {
method unsubscribe (line 30) | unsubscribe() {
FILE: spring-boot-admin-server-ui/src/main/frontend/plugins/modal/api.ts
method open (line 17) | open(options, slots = {}) {
method confirm (line 28) | async confirm(title, body) {
FILE: spring-boot-admin-server-ui/src/main/frontend/plugins/modal/helpers.ts
function removeElement (line 3) | function removeElement(el) {
function createComponent (line 11) | function createComponent(component, props, parentContainer, slots = {}) {
FILE: spring-boot-admin-server-ui/src/main/frontend/sba-config.ts
constant DEFAULT_CONFIG (line 21) | const DEFAULT_CONFIG: SBASettings = {
FILE: spring-boot-admin-server-ui/src/main/frontend/services/application.ts
class Application (line 77) | class Application {
method constructor (line 86) | constructor({
method isUnregisterable (line 115) | get isUnregisterable() {
method hasShutdownEndpoint (line 119) | get hasShutdownEndpoint() {
method hasRestartEndpoint (line 123) | get hasRestartEndpoint() {
method list (line 127) | static async list() {
method getStream (line 134) | static getStream(): Observable<ApplicationStream | unknown> {
method _transformResponse (line 151) | static _transformResponse(data: string) {
method filterInstances (line 163) | filterInstances(predicate: (instance: Instance) => boolean) {
method hasEndpoint (line 170) | hasEndpoint(endpointId: string): boolean {
method findInstance (line 174) | findInstance(instanceId: string): Instance | undefined {
method unregister (line 178) | async unregister() {
method fetchLoggers (line 184) | async fetchLoggers() {
method configureLogger (line 195) | async configureLogger(name: string, level: string | null) {
method setEnv (line 206) | async setEnv(name: string, value: string) {
method resetEnv (line 216) | async resetEnv() {
method refreshContext (line 220) | async refreshContext() {
method clearCaches (line 224) | async clearCaches() {
method clearCache (line 228) | async clearCache(name: string, cacheManager?: string) {
method shutdown (line 234) | shutdown() {
method restart (line 238) | restart() {
method writeMBeanAttribute (line 242) | async writeMBeanAttribute(
method invokeMBeanOperation (line 262) | async invokeMBeanOperation(
FILE: spring-boot-admin-server-ui/src/main/frontend/services/instance.ts
class Instance (line 35) | class Instance {
method constructor (line 46) | constructor({ id, ...instance }: InstanceData) {
method metadata (line 64) | get metadata() {
method metadataParsed (line 68) | get metadataParsed() {
method isUnregisterable (line 73) | get isUnregisterable() {
method fetchEvents (line 77) | static async fetchEvents() {
method getEventStream (line 83) | static getEventStream() {
method get (line 101) | static async get(id: string) {
method _toMBeans (line 114) | private static _toMBeans(data: string) {
method showUrl (line 130) | showUrl() {
method isUrlDisabled (line 140) | isUrlDisabled() {
method hasEndpoint (line 150) | hasEndpoint(endpointId: string): boolean {
method unregister (line 154) | async unregister() {
method fetchInfo (line 160) | async fetchInfo() {
method fetchMetrics (line 164) | async fetchMetrics() {
method fetchMetric (line 170) | async fetchMetric(metric: string, tags: Record<string, any>) {
method fetchHealth (line 209) | async fetchHealth() {
method fetchHealthGroup (line 215) | async fetchHealthGroup(groupName: string) {
method fetchEnv (line 221) | async fetchEnv(name?: string) {
method fetchConfigprops (line 225) | async fetchConfigprops() {
method hasEnvManagerSupport (line 229) | async hasEnvManagerSupport() {
method resetEnv (line 236) | async resetEnv() {
method setEnv (line 240) | async setEnv(name: string, value: string) {
method refreshContext (line 250) | async refreshContext() {
method busRefreshContext (line 254) | async busRefreshContext() {
method fetchLiquibase (line 258) | async fetchLiquibase() {
method fetchScheduledTasks (line 262) | async fetchScheduledTasks() {
method fetchGatewayGlobalFilters (line 266) | async fetchGatewayGlobalFilters() {
method addGatewayRoute (line 270) | async addGatewayRoute(route: { id: string; [key: string]: any }) {
method fetchGatewayRoutes (line 276) | async fetchGatewayRoutes() {
method deleteGatewayRoute (line 280) | async deleteGatewayRoute(routeId: string) {
method refreshGatewayRoutesCache (line 284) | async refreshGatewayRoutesCache() {
method fetchCaches (line 288) | async fetchCaches() {
method clearCaches (line 292) | async clearCaches() {
method clearCache (line 296) | async clearCache(name: string, cacheManager?: string) {
method fetchFlyway (line 302) | async fetchFlyway() {
method fetchLoggers (line 306) | async fetchLoggers() {
method configureLogger (line 310) | async configureLogger(name: string, level: string | null) {
method fetchHttptrace (line 320) | async fetchHttptrace() {
method fetchHttpExchanges (line 324) | async fetchHttpExchanges() {
method fetchBeans (line 328) | async fetchBeans() {
method fetchConditions (line 332) | async fetchConditions() {
method fetchThreaddump (line 336) | async fetchThreaddump() {
method downloadThreaddump (line 340) | async downloadThreaddump() {
method fetchAuditevents (line 348) | async fetchAuditevents({
method fetchSessionsByUsername (line 366) | async fetchSessionsByUsername(username?: string) {
method fetchSession (line 374) | async fetchSession(sessionId: string) {
method deleteSession (line 378) | async deleteSession(sessionId: string) {
method fetchStartup (line 382) | async fetchStartup() {
method streamLogfile (line 394) | streamLogfile(interval: number) {
method listMBeans (line 401) | async listMBeans() {
method readMBeanAttributes (line 409) | async readMBeanAttributes(domain: string, mBean: string) {
method writeMBeanAttribute (line 423) | async writeMBeanAttribute(
method invokeMBeanOperation (line 443) | async invokeMBeanOperation(
method fetchMappings (line 463) | async fetchMappings() {
method fetchQuartzJobs (line 467) | async fetchQuartzJobs() {
method fetchQuartzJob (line 473) | async fetchQuartzJob(group, name) {
method fetchQuartzTriggers (line 479) | async fetchQuartzTriggers() {
method fetchQuartzTrigger (line 485) | async fetchQuartzTrigger(group, name) {
method fetchSbomIds (line 491) | async fetchSbomIds() {
method fetchSbom (line 497) | async fetchSbom(id: string) {
method shutdown (line 503) | shutdown() {
method restart (line 507) | restart() {
type Registration (line 514) | type Registration = {
type StatusInfo (line 523) | type StatusInfo = {
type InstanceData (line 535) | type InstanceData = {
type Endpoint (line 546) | type Endpoint = {
constant DOWN_STATES (line 551) | const DOWN_STATES = ['OUT_OF_SERVICE', 'DOWN', 'OFFLINE', 'RESTRICTED'];
constant UP_STATES (line 552) | const UP_STATES = ['UP'];
constant UNKNOWN_STATES (line 553) | const UNKNOWN_STATES = ['UNKNOWN'];
FILE: spring-boot-admin-server-ui/src/main/frontend/services/notification-filter.ts
class NotificationFilter (line 22) | class NotificationFilter {
method constructor (line 28) | constructor({ expiry, ...filter }) {
method affects (line 33) | affects(obj) {
method isApplicationFilter (line 49) | get isApplicationFilter() {
method isInstanceFilter (line 53) | get isInstanceFilter() {
method delete (line 57) | async delete() {
method isSupported (line 61) | static isSupported() {
method getFilters (line 65) | static async getFilters() {
method addFilter (line 71) | static async addFilter(object, ttl) {
method _transformResponse (line 84) | static _transformResponse(data) {
method _toNotificationFilters (line 97) | static _toNotificationFilters(notificationFilter) {
FILE: spring-boot-admin-server-ui/src/main/frontend/services/startup-activator-tree.ts
class StartupActuatorEventTree (line 17) | class StartupActuatorEventTree {
method constructor (line 18) | constructor(events) {
method getEvents (line 22) | getEvents() {
method getRoots (line 26) | getRoots() {
method getByDepth (line 30) | getByDepth(depth) {
method getById (line 36) | getById(id) {
method getByParentId (line 40) | getByParentId(parentId) {
method getStartTime (line 46) | getStartTime() {
method getEndTime (line 52) | getEndTime() {
method getPath (line 58) | getPath(id) {
method getPeriod (line 74) | getPeriod(event) {
FILE: spring-boot-admin-server-ui/src/main/frontend/services/startup-actuator.ts
function mapDuration (line 21) | function mapDuration(duration) {
method parseAsTree (line 32) | parseAsTree(data) {
method getById (line 65) | getById(events, id) {
method getByParentId (line 68) | getByParentId(events, id) {
method parseTag (line 71) | parseTag(param) {
FILE: spring-boot-admin-server-ui/src/main/frontend/store.ts
type NoopListener (line 53) | type NoopListener = () => void;
type ApplicationAddedListener (line 54) | type ApplicationAddedListener = (newApplications: Application[]) => void;
type ApplicationStoreListener (line 55) | type ApplicationStoreListener = NoopListener | ApplicationAddedListener;
class ApplicationStore (line 57) | class ApplicationStore {
method addEventListener (line 63) | addEventListener(type: string, listener: ApplicationStoreListener) {
method removeEventListener (line 71) | removeEventListener(type: string, listener: ApplicationStoreListener) {
method _dispatchEvent (line 82) | _dispatchEvent(type: string, ...args: any[]) {
method start (line 89) | start() {
method updateApplications (line 117) | updateApplications(applications: Application[]) {
method updateApplication (line 123) | updateApplication(application: Application) {
method stop (line 137) | stop() {
method findApplicationByInstanceId (line 147) | findApplicationByInstanceId(instanceId: string) {
FILE: spring-boot-admin-server-ui/src/main/frontend/tests/setup.ts
method constructor (line 28) | constructor() {}
method close (line 29) | close() {}
FILE: spring-boot-admin-server-ui/src/main/frontend/utils/autolink.ts
function createAutolink (line 46) | function createAutolink(cfg) {
FILE: spring-boot-admin-server-ui/src/main/frontend/utils/formatWithDataTypes.ts
type DataTypeConfig (line 24) | type DataTypeConfig = {
function formatWithDataTypes (line 53) | function formatWithDataTypes<T>(input: T, config?: DataTypeConfig): T {
FILE: spring-boot-admin-server-ui/src/main/frontend/utils/http-status.ts
constant HTTP_STATUS_TEXTS (line 17) | const HTTP_STATUS_TEXTS: Record<number, string> = {
FILE: spring-boot-admin-server-ui/src/main/frontend/utils/objToYaml.ts
function objToYaml (line 30) | function objToYaml(
FILE: spring-boot-admin-server-ui/src/main/frontend/utils/prettyTime.ts
type PrettyTimeUnit (line 4) | const enum PrettyTimeUnit {
FILE: spring-boot-admin-server-ui/src/main/frontend/utils/sanitizeHtml.ts
function sanitizeHtml (line 3) | function sanitizeHtml(dirty: string): string {
FILE: spring-boot-admin-server-ui/src/main/frontend/utils/sortObject.ts
function sortObject (line 1) | function sortObject(input: any): any {
FILE: spring-boot-admin-server-ui/src/main/frontend/utils/transformToJSON.ts
function transformToJSON (line 71) | function transformToJSON(
FILE: spring-boot-admin-server-ui/src/main/frontend/utils/useRouterState.spec.ts
method query (line 17) | get query() {
FILE: spring-boot-admin-server-ui/src/main/frontend/utils/useRouterState.ts
function useRouterState (line 12) | function useRouterState<T extends object>(
function parseQueryParams (line 48) | function parseQueryParams(queryParams: string) {
function correctTypesInRouterQuery (line 64) | function correctTypesInRouterQuery(query: LocationQuery) {
FILE: spring-boot-admin-server-ui/src/main/frontend/viewRegistry.ts
method render (line 27) | render(): VNode {
type ViewFilterFunction (line 32) | type ViewFilterFunction = (view: SbaView) => boolean;
type ViewConfig (line 33) | type ViewConfig = {
class ViewRegistry (line 38) | class ViewRegistry {
method views (line 43) | get views(): SbaView[] {
method routes (line 47) | get routes() {
method router (line 52) | get router(): Router {
method setGroupIcon (line 56) | setGroupIcon(name, icon) {
method createRouter (line 60) | createRouter() {
method getViewByName (line 84) | getViewByName(name) {
method addView (line 88) | addView(...views: View[]): SbaView[] {
method addRedirect (line 92) | addRedirect(path: string, redirect: string | object) {
method _addView (line 100) | _addView(viewConfig: ViewConfig): SbaView {
method _removeExistingView (line 142) | _removeExistingView(view) {
method _toRoutes (line 148) | _toRoutes(filter: ViewFilterFunction) {
FILE: spring-boot-admin-server-ui/src/main/frontend/views/ViewGroup.ts
constant VIEW_GROUP (line 1) | const VIEW_GROUP = {
constant VIEW_GROUP_ICON (line 12) | const VIEW_GROUP_ICON = {
FILE: spring-boot-admin-server-ui/src/main/frontend/views/applications/ActionHandler.ts
type ActionHandler (line 4) | interface ActionHandler {
class InstanceActionHandler (line 12) | class InstanceActionHandler implements ActionHandler {
method constructor (line 13) | constructor(
method unregister (line 19) | async unregister(item: Instance) {
method shutdown (line 43) | async shutdown(item: Instance) {
method restart (line 67) | async restart(item: Instance) {
class ApplicationActionHandler (line 92) | class ApplicationActionHandler implements ActionHandler {
method constructor (line 93) | constructor(
method restart (line 99) | async restart(application: Application) {
method shutdown (line 123) | async shutdown(application: Application) {
method unregister (line 147) | async unregister(application: Application) {
FILE: spring-boot-admin-server-ui/src/main/frontend/views/applications/ApplicationListItemAction.spec.ts
function clickConfirmModal (line 30) | async function clickConfirmModal() {
FILE: spring-boot-admin-server-ui/src/main/frontend/views/applications/InstancesList.spec.ts
function createInstance (line 111) | function createInstance(options: InstanceType<typeof Instance> = {}): In...
FILE: spring-boot-admin-server-ui/src/main/frontend/views/external/index.ts
function addExternalView (line 23) | function addExternalView(
function getViewOpts (line 35) | function getViewOpts(view: ExternalView, parent?: string) {
method render (line 57) | render() {
method install (line 90) | install({ viewRegistry }) {
FILE: spring-boot-admin-server-ui/src/main/frontend/views/instances/auditevents/index.spec.ts
function createInstance (line 70) | function createInstance(fetchAuditevents) {
FILE: spring-boot-admin-server-ui/src/main/frontend/views/instances/details/details-datasource.spec.ts
function renderComponent (line 82) | async function renderComponent(stubs = {}) {
FILE: spring-boot-admin-server-ui/src/main/frontend/views/instances/details/process-uptime.ts
method render (line 30) | render() {
method clock (line 34) | clock() {
method createSubscription (line 48) | createSubscription() {
FILE: spring-boot-admin-server-ui/src/main/frontend/views/instances/env/busrefresh.spec.ts
function createInstance (line 15) | function createInstance() {
FILE: spring-boot-admin-server-ui/src/main/frontend/views/instances/env/refresh.spec.ts
function createInstance (line 35) | function createInstance() {
function createApplication (line 41) | function createApplication() {
FILE: spring-boot-admin-server-ui/src/main/frontend/views/instances/httpexchanges/Exchange.ts
class Exchange (line 6) | class Exchange {
method constructor (line 20) | constructor({ timestamp, request, response, ...exchange }) {
method key (line 29) | get key() {
method contentLengthResponse (line 35) | get contentLengthResponse() {
method contentLengthRequest (line 39) | get contentLengthRequest() {
method contentTypeResponse (line 43) | get contentTypeResponse() {
method contentTypeRequest (line 47) | get contentTypeRequest() {
method extractContentLength (line 51) | extractContentLength(origin) {
method extractContentType (line 62) | extractContentType(origin) {
method compareTo (line 74) | compareTo(other: Exchange) {
method isPending (line 78) | isPending() {
method isSuccess (line 82) | isSuccess() {
method isClientError (line 86) | isClientError() {
method isServerError (line 94) | isServerError() {
FILE: spring-boot-admin-server-ui/src/main/frontend/views/instances/iframe/index.ts
method install (line 4) | install({ viewRegistry }) {
FILE: spring-boot-admin-server-ui/src/main/frontend/views/instances/jolokia/MBean.ts
class MBean (line 5) | class MBean {
method constructor (line 6) | constructor({ descriptor, op, ...mBean }) {
FILE: spring-boot-admin-server-ui/src/main/frontend/views/instances/jolokia/MBeanDescriptor.ts
class MBeanDescriptor (line 1) | class MBeanDescriptor {
method constructor (line 2) | constructor(raw) {
method parse (line 7) | static parse(raw) {
FILE: spring-boot-admin-server-ui/src/main/frontend/views/instances/jolokia/responseHandler.ts
constant STATE_PREPARED (line 1) | const STATE_PREPARED = 'prepared';
constant STATE_INPUT_ARGS (line 2) | const STATE_INPUT_ARGS = 'input-args';
constant STATE_EXECUTING (line 3) | const STATE_EXECUTING = 'executing';
constant STATE_FAILED (line 4) | const STATE_FAILED = 'failed';
constant STATE_COMPLETED (line 5) | const STATE_COMPLETED = 'completed';
function resultContainsErrorStatus (line 7) | function resultContainsErrorStatus(result) {
function parseValue (line 20) | function parseValue(data) {
function responseHandler (line 34) | function responseHandler(result) {
FILE: spring-boot-admin-server-ui/src/main/frontend/views/instances/jolokia/utils.ts
function truncateJavaType (line 17) | function truncateJavaType(javaType) {
function truncatePackageName (line 30) | function truncatePackageName(javaType, length) {
FILE: spring-boot-admin-server-ui/src/main/frontend/views/instances/loggers/loggers-list.spec.ts
function createLoggers (line 34) | function createLoggers(number: number): Array<any> {
function createLogger (line 40) | function createLogger(i: number): any {
FILE: spring-boot-admin-server-ui/src/main/frontend/views/instances/loggers/service.ts
class InstanceLoggers (line 27) | class InstanceLoggers {
method constructor (line 30) | constructor(instance: Instance) {
method fetchLoggers (line 34) | async fetchLoggers() {
method configureLogger (line 44) | async configureLogger(name, level) {
class ApplicationLoggers (line 49) | class ApplicationLoggers {
method constructor (line 50) | constructor(application) {
method fetchLoggers (line 54) | async fetchLoggers() {
method configureLogger (line 98) | async configureLogger(name, level) {
FILE: spring-boot-admin-server-ui/src/main/frontend/views/instances/mappings/index.spec.ts
function renderWithInstance (line 115) | function renderWithInstance(data) {
function createInstanceWithMappingsData (line 123) | function createInstanceWithMappingsData(data) {
FILE: spring-boot-admin-server-ui/src/main/frontend/views/instances/sbomdependencytrees/dependencyTree.ts
constant MARGIN (line 19) | const MARGIN = { top: 20, bottom: 20, left: 10 };
constant MAX_ITEMS_IN_FRAME (line 20) | const MAX_ITEMS_IN_FRAME = 4;
type DependencyTreeData (line 28) | type DependencyTreeData = {
type HierarchyNodeData (line 33) | type HierarchyNodeData = HierarchyNode<DependencyTreeData>;
type MyHierarchyNode (line 35) | type MyHierarchyNode = Omit<
type MyHierarchyPointNode (line 52) | type MyHierarchyPointNode = HierarchyPointNode<DependencyTreeData> & {
type MyHierarchyLink (line 56) | type MyHierarchyLink = {
type MyHierarchyPointLink (line 61) | type MyHierarchyPointLink = {
type D3DependencyTree (line 66) | type D3DependencyTree = {
FILE: spring-boot-admin-server-ui/src/main/frontend/views/instances/sbomdependencytrees/index.spec.ts
type Deferred (line 8) | type Deferred<T> = {
FILE: spring-boot-admin-server-ui/src/main/frontend/views/instances/sbomdependencytrees/sbomUtils.ts
type SbomDependency (line 3) | type SbomDependency = {
function getChildren (line 12) | function getChildren(sbomDependencies: SbomDependency[], item: string) {
FILE: spring-boot-admin-server-ui/src/main/frontend/views/instances/shell/index.ts
method install (line 4) | install({ viewRegistry }: { viewRegistry: ViewRegistry }) {
FILE: spring-boot-admin-server-ui/src/main/frontend/views/instances/shell/sidebar.stories.ts
method setup (line 16) | setup() {
FILE: spring-boot-admin-server-ui/src/main/frontend/views/journal/InstanceEvent.ts
type IInstanceEvent (line 17) | interface IInstanceEvent {
class InstanceEvent (line 25) | class InstanceEvent implements IInstanceEvent {
method constructor (line 31) | constructor({ instance, version, type, timestamp, ...rest }: IInstance...
method key (line 40) | get key() {
type InstanceEventType (line 45) | enum InstanceEventType {
FILE: spring-boot-admin-server-ui/src/main/frontend/views/journal/deduplicate-events.ts
function deduplicateInstanceEvents (line 21) | function deduplicateInstanceEvents(events: InstanceEvent[]) {
FILE: spring-boot-admin-server-ui/src/main/frontend/views/wallboard/wallboard.stories.ts
method setup (line 17) | setup() {
FILE: spring-boot-admin-server-ui/src/main/java/de/codecentric/boot/admin/server/ui/config/AdminServerUiAutoConfiguration.java
class AdminServerUiAutoConfiguration (line 59) | @Configuration(proxyBeanMethods = false)
method AdminServerUiAutoConfiguration (line 86) | public AdminServerUiAutoConfiguration(AdminServerUiProperties adminUi,...
method cssColorUtils (line 93) | @Bean
method homeUiController (line 98) | @Bean
method uiExtensions (line 130) | @Bean
method adminTemplateResolver (line 138) | @Bean
method normalizeHomepageUrl (line 152) | static String normalizeHomepageUrl(String homepage) {
class ReactiveUiConfiguration (line 159) | @Configuration(proxyBeanMethods = false)
class AdminUiWebfluxConfig (line 163) | @Configuration(proxyBeanMethods = false)
method AdminUiWebfluxConfig (line 174) | public AdminUiWebfluxConfig(AdminServerUiProperties adminUi, Admin...
method homepageForwardingFilterConfig (line 182) | @Bean
method addResourceHandlers (line 204) | @Override
method homepageForwardFilter (line 217) | @Bean
class ServletUiConfiguration (line 229) | @Configuration(proxyBeanMethods = false)
class AdminUiWebMvcConfig (line 233) | @Configuration(proxyBeanMethods = false)
method AdminUiWebMvcConfig (line 242) | public AdminUiWebMvcConfig(AdminServerUiProperties adminUi, AdminS...
method homepageForwardingFilterConfig (line 249) | @Bean
method addResourceHandlers (line 268) | @Override
method homepageForwardFilter (line 279) | @Bean
FILE: spring-boot-admin-server-ui/src/main/java/de/codecentric/boot/admin/server/ui/config/AdminServerUiProperties.java
class AdminServerUiProperties (line 34) | @lombok.Data
class PollTimer (line 148) | @lombok.Data
class Cache (line 188) | @lombok.Data
method toCacheControl (line 208) | public CacheControl toCacheControl() {
class UiTheme (line 223) | @Data
class Palette (line 241) | @Getter
method set50 (line 264) | public void set50(String shade50) {
method set100 (line 268) | public void set100(String shade100) {
method set200 (line 272) | public void set200(String shade200) {
method set300 (line 276) | public void set300(String shade300) {
method set400 (line 280) | public void set400(String shade400) {
method set500 (line 284) | public void set500(String shade500) {
method set600 (line 288) | public void set600(String shade600) {
method set700 (line 292) | public void set700(String shade700) {
method set800 (line 296) | public void set800(String shade800) {
method set900 (line 300) | public void set900(String shade900) {
FILE: spring-boot-admin-server-ui/src/main/java/de/codecentric/boot/admin/server/ui/config/CssColorUtils.java
class CssColorUtils (line 21) | public class CssColorUtils {
method hexToRgb (line 25) | public String hexToRgb(String color) {
FILE: spring-boot-admin-server-ui/src/main/java/de/codecentric/boot/admin/server/ui/config/ServerRuntimeHints.java
class ServerRuntimeHints (line 67) | @Configuration
method registerHints (line 70) | @Override
method registerSerializationHints (line 79) | private static void registerSerializationHints(RuntimeHints hints) {
method registerResourcesHints (line 94) | private static void registerResourcesHints(org.springframework.aot.hin...
method registerReflectionHints (line 101) | @SneakyThrows
FILE: spring-boot-admin-server-ui/src/main/java/de/codecentric/boot/admin/server/ui/config/SpringNativeServerAutoConfiguration.java
class SpringNativeServerAutoConfiguration (line 29) | @Configuration(proxyBeanMethods = false)
FILE: spring-boot-admin-server-ui/src/main/java/de/codecentric/boot/admin/server/ui/extensions/UiExtension.java
class UiExtension (line 19) | @lombok.Data
FILE: spring-boot-admin-server-ui/src/main/java/de/codecentric/boot/admin/server/ui/extensions/UiExtensions.java
class UiExtensions (line 23) | @lombok.Data
method UiExtensions (line 30) | public UiExtensions(List<UiExtension> extensions) {
method iterator (line 34) | @Override
method getCssExtensions (line 39) | public List<UiExtension> getCssExtensions() {
method getJsExtensions (line 43) | public List<UiExtension> getJsExtensions() {
FILE: spring-boot-admin-server-ui/src/main/java/de/codecentric/boot/admin/server/ui/extensions/UiExtensionsScanner.java
class UiExtensionsScanner (line 33) | public class UiExtensionsScanner {
method UiExtensionsScanner (line 39) | public UiExtensionsScanner(ResourcePatternResolver resolver) {
method scan (line 43) | public UiExtensions scan(String... locations) throws IOException {
method resolveAssets (line 58) | private List<Resource> resolveAssets(String location) throws IOExcepti...
method toPattern (line 66) | private String toPattern(String location) {
method getResourcePath (line 71) | @Nullable private String getResourcePath(String location, Resource res...
FILE: spring-boot-admin-server-ui/src/main/java/de/codecentric/boot/admin/server/ui/extensions/UiRoutesScanner.java
class UiRoutesScanner (line 34) | public class UiRoutesScanner {
method UiRoutesScanner (line 40) | public UiRoutesScanner(ResourcePatternResolver resolver) {
method scan (line 44) | public List<String> scan(String... locations) throws IOException {
method readLines (line 56) | private List<String> readLines(InputStream input) {
method toPattern (line 66) | private String toPattern(String location) {
FILE: spring-boot-admin-server-ui/src/main/java/de/codecentric/boot/admin/server/ui/web/HomepageForwardingFilterConfig.java
class HomepageForwardingFilterConfig (line 23) | @Value
FILE: spring-boot-admin-server-ui/src/main/java/de/codecentric/boot/admin/server/ui/web/HomepageForwardingMatcher.java
class HomepageForwardingMatcher (line 27) | public class HomepageForwardingMatcher<T> implements Predicate<T> {
method HomepageForwardingMatcher (line 39) | public HomepageForwardingMatcher(List<String> includeRoutes, List<Stri...
method test (line 49) | public boolean test(T request) {
method toPatterns (line 64) | private List<Pattern> toPatterns(List<String> routes) {
FILE: spring-boot-admin-server-ui/src/main/java/de/codecentric/boot/admin/server/ui/web/UiController.java
class UiController (line 44) | @AdminController
method UiController (line 53) | public UiController(String publicUrl, UiExtensions uiExtensions, Setti...
method getBaseUrl (line 59) | @ModelAttribute(value = "baseUrl", binding = false)
method getUiSettings (line 77) | @ModelAttribute(value = "uiSettings", binding = false)
method getCssExtensions (line 82) | @ModelAttribute(value = "cssExtensions", binding = false)
method getJsExtensions (line 87) | @ModelAttribute(value = "jsExtensions", binding = false)
method getUser (line 92) | @ModelAttribute(value = "user", binding = false)
method index (line 100) | @GetMapping(path = "/", produces = MediaType.TEXT_HTML_VALUE)
method sbaSettings (line 106) | @GetMapping(path = "/sba-settings.js", produces = "application/javascr...
method variablesCss (line 111) | @GetMapping(path = "/variables.css", produces = "text/css")
method login (line 116) | @GetMapping(path = "/login", produces = MediaType.TEXT_HTML_VALUE)
class Settings (line 121) | @lombok.Data
class ExternalView (line 159) | @lombok.Data
method ExternalView (line 188) | public ExternalView(String label, String url, Integer order, boolean...
class ViewSettings (line 202) | @lombok.Data
method ViewSettings (line 216) | public ViewSettings(String name, boolean enabled) {
FILE: spring-boot-admin-server-ui/src/main/java/de/codecentric/boot/admin/server/ui/web/reactive/HomepageForwardingFilter.java
class HomepageForwardingFilter (line 32) | public class HomepageForwardingFilter implements WebFilter {
method HomepageForwardingFilter (line 40) | public HomepageForwardingFilter(String homepage, List<String> routeInc...
method HomepageForwardingFilter (line 48) | public HomepageForwardingFilter(HomepageForwardingFilterConfig filterC...
method filter (line 52) | @Override
FILE: spring-boot-admin-server-ui/src/main/java/de/codecentric/boot/admin/server/ui/web/servlet/HomepageForwardingFilter.java
class HomepageForwardingFilter (line 45) | public class HomepageForwardingFilter implements Filter {
method HomepageForwardingFilter (line 53) | public HomepageForwardingFilter(String homepage, List<String> routes, ...
method HomepageForwardingFilter (line 61) | public HomepageForwardingFilter(HomepageForwardingFilterConfig filterC...
method doFilter (line 65) | @Override
method init (line 77) | @Override
method destroy (line 81) | @Override
FILE: spring-boot-admin-server-ui/src/test/java/de/codecentric/boot/admin/server/ui/AbstractAdminUiApplicationTest.java
class AbstractAdminUiApplicationTest (line 26) | public abstract class AbstractAdminUiApplicationTest {
method setUp (line 30) | protected void setUp(int port) {
method should_return_index (line 34) | @Test
method should_not_return_index_for_logfile (line 48) | @Test
method should_return_api (line 59) | @Test
method should_return_index_for_ui_path (line 73) | @Test
method should_return_404_for_unknown_path (line 87) | @Test
method should_return_correct_content_type_for_js_extensions (line 98) | @Test
method getExpectedMediaTypeForJavaScript (line 110) | abstract MediaType getExpectedMediaTypeForJavaScript();
method should_return_correct_content_type_for_css_extensions (line 112) | @Test
method should_contain_only_one_language (line 124) | @Test
method should_return_defaults_for_pollTimers (line 138) | @Test
method createWebClient (line 153) | protected WebTestClient createWebClient(int port) {
FILE: spring-boot-admin-server-ui/src/test/java/de/codecentric/boot/admin/server/ui/AdminUiReactiveApplicationTest.java
class AdminUiReactiveApplicationTest (line 34) | class AdminUiReactiveApplicationTest extends AbstractAdminUiApplicationT...
method setUp (line 40) | @BeforeAll
method shutdown (line 51) | @AfterAll
method setupEach (line 56) | @BeforeEach
method getExpectedMediaTypeForJavaScript (line 61) | @Override
class TestAdminApplication (line 66) | @EnableAdminServer
method securityWebFilterChain (line 71) | @Bean
FILE: spring-boot-admin-server-ui/src/test/java/de/codecentric/boot/admin/server/ui/AdminUiServletApplicationTest.java
class AdminUiServletApplicationTest (line 35) | class AdminUiServletApplicationTest extends AbstractAdminUiApplicationTe...
method setUp (line 39) | @BeforeEach
method shutdown (line 50) | @AfterEach
method getExpectedMediaTypeForJavaScript (line 55) | @Override
class TestAdminApplication (line 60) | @EnableAdminServer
class SecurityConfiguration (line 65) | @Configuration(proxyBeanMethods = false)
method filterChain (line 68) | @Bean
FILE: spring-boot-admin-server-ui/src/test/java/de/codecentric/boot/admin/server/ui/config/AdminServerUiAutoConfigurationTest.java
class AdminServerUiAutoConfigurationTest (line 54) | @ExtendWith(MockitoExtension.class)
method testNormalizeHomepageUrl (line 57) | @Test
class ReactiveUiConfigurationTest (line 62) | @Nested
method contextPathIsRespectedInExcludedRoutes (line 74) | @ParameterizedTest
method contextPathIsRespectedInIncludedRoutes (line 95) | @ParameterizedTest
class ServletUiConfiguration (line 118) | @Nested
method contextPathIsRespectedInExcludedRoutes (line 126) | @ParameterizedTest
method contextPathIsRespectedInIncludedRoutes (line 145) | @ParameterizedTest
FILE: spring-boot-admin-server-ui/src/test/java/de/codecentric/boot/admin/server/ui/config/AdminServerUiPropertiesTest.java
class AdminServerUiPropertiesTest (line 31) | @SpringBootTest(classes = AdminServerUiProperties.class)
class CacheTest (line 46) | @Nested
method maxAge (line 49) | @Test
method noCache (line 54) | @Test
method noStore (line 59) | @Test
class ThemeTest (line 66) | @Nested
method color (line 69) | @Test
class PaletteTest (line 74) | @Nested
method shades (line 77) | @Test
FILE: spring-boot-admin-server-ui/src/test/java/de/codecentric/boot/admin/server/ui/config/CssColorUtilsTest.java
class CssColorUtilsTest (line 22) | class CssColorUtilsTest implements WithAssertions {
method hexToRgb (line 24) | @Test
method hexToRgb_throws_exception_on_invalid_format (line 32) | @Test
FILE: spring-boot-admin-server-ui/src/test/java/de/codecentric/boot/admin/server/ui/config/ReactiveAdminServerUiAutoConfigurationAdminContextPathTest.java
class ReactiveAdminServerUiAutoConfigurationAdminContextPathTest (line 25) | public class ReactiveAdminServerUiAutoConfigurationAdminContextPathTest
method getContextRunner (line 28) | @Override
FILE: spring-boot-admin-server-ui/src/test/java/de/codecentric/boot/admin/server/ui/config/ReactiveAdminServerUiAutoConfigurationBothPathsTest.java
class ReactiveAdminServerUiAutoConfigurationBothPathsTest (line 25) | public class ReactiveAdminServerUiAutoConfigurationBothPathsTest extends...
method getContextRunner (line 27) | @Override
FILE: spring-boot-admin-server-ui/src/test/java/de/codecentric/boot/admin/server/ui/config/ReactiveAdminServerUiAutoConfigurationTest.java
class ReactiveAdminServerUiAutoConfigurationTest (line 40) | @ExtendWith(MockitoExtension.class)
method getContextRunner (line 43) | protected abstract ReactiveWebApplicationContextRunner getContextRunne...
method contextPathIsRespectedInExcludedRoutes (line 48) | @ParameterizedTest
method contextPathIsRespectedInIncludedRoutes (line 69) | @ParameterizedTest
FILE: spring-boot-admin-server-ui/src/test/java/de/codecentric/boot/admin/server/ui/config/ReactiveAdminServerUiAutoConfigurationWebfluxBasePathTest.java
class ReactiveAdminServerUiAutoConfigurationWebfluxBasePathTest (line 25) | public class ReactiveAdminServerUiAutoConfigurationWebfluxBasePathTest
method getContextRunner (line 28) | @Override
FILE: spring-boot-admin-server-ui/src/test/java/de/codecentric/boot/admin/server/ui/extensions/UiExtensionsScannerTest.java
class UiExtensionsScannerTest (line 26) | class UiExtensionsScannerTest {
method should_find_extensions (line 30) | @Test
method should_not_find_extensions (line 40) | @Test
FILE: spring-boot-admin-server-ui/src/test/java/de/codecentric/boot/admin/server/ui/extensions/UiRoutesScannerTest.java
class UiRoutesScannerTest (line 27) | class UiRoutesScannerTest {
method should_find_route (line 31) | @Test
FILE: spring-boot-admin-server-ui/src/test/java/de/codecentric/boot/admin/server/ui/web/HomepageForwardingMatcherTest.java
class HomepageForwardingMatcherTest (line 27) | class HomepageForwardingMatcherTest {
method should_return_false_when_method_is_not_get (line 33) | @Test
method should_return_false_when_path_does_not_match (line 39) | @Test
method should_return_false_when_accepts_does_not_match (line 44) | @Test
method should_return_false_when_path_is_excluded (line 50) | @Test
method should_return_true (line 56) | @Test
FILE: spring-boot-admin-server-ui/src/test/java/de/codecentric/boot/admin/server/ui/web/UiControllerTest.java
class UiControllerTest (line 37) | class UiControllerTest {
method should_use_default_url (line 39) | @Test
method should_use_path_from_public_url (line 49) | @Test
method should_use_host_and_path_from_public_url (line 59) | @Test
method should_use_scheme_host_and_path_from_public_url (line 69) | @Test
method should_validate_external_views (line 79) | @ParameterizedTest
method setupController (line 101) | private MockMvc setupController(String publicUrl, List<UiController.Ex...
FILE: spring-boot-admin-server-ui/tailwind.config.js
function withOpacity (line 67) | function withOpacity(variableName) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/config/AdminServerAutoConfiguration.java
class AdminServerAutoConfiguration (line 57) | @Configuration(proxyBeanMethods = false)
method AdminServerAutoConfiguration (line 69) | public AdminServerAutoConfiguration(AdminServerProperties adminServerP...
method instanceFilter (line 73) | @Bean
method instanceRegistry (line 79) | @Bean
method applicationRegistry (line 86) | @Bean
method instanceIdGenerator (line 93) | @Bean
method statusUpdater (line 99) | @Bean
method statusUpdateTrigger (line 106) | @Bean(initMethod = "start", destroyMethod = "stop")
method endpointDetector (line 124) | @Bean
method endpointDetectionTrigger (line 135) | @Bean(initMethod = "start", destroyMethod = "stop")
method infoUpdater (line 142) | @Bean
method infoUpdateTrigger (line 149) | @Bean(initMethod = "start", destroyMethod = "stop")
method eventStore (line 157) | @Bean
method instanceRepository (line 163) | @Bean(initMethod = "start", destroyMethod = "stop")
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/config/AdminServerCloudFoundryAutoConfiguration.java
class AdminServerCloudFoundryAutoConfiguration (line 32) | @Configuration(proxyBeanMethods = false)
method instanceIdGenerator (line 38) | @Bean
method cloudFoundryHttpHeaderProvider (line 44) | @Bean
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/config/AdminServerHazelcastAutoConfiguration.java
class AdminServerHazelcastAutoConfiguration (line 44) | @Configuration(proxyBeanMethods = false)
method eventStore (line 60) | @Bean
class NotifierTriggerConfiguration (line 67) | @Configuration(proxyBeanMethods = false)
method notificationTrigger (line 74) | @Bean(initMethod = "start", destroyMethod = "stop")
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/config/AdminServerInstanceWebClientConfiguration.java
class AdminServerInstanceWebClientConfiguration (line 49) | @Configuration(proxyBeanMethods = false)
method AdminServerInstanceWebClientConfiguration (line 55) | public AdminServerInstanceWebClientConfiguration(ObjectProvider<Instan...
method instanceWebClientBuilder (line 61) | @Bean
class InstanceExchangeFiltersConfiguration (line 68) | @Configuration(proxyBeanMethods = false)
method filterInstanceWebClientCustomizer (line 71) | @Bean
class DefaultInstanceExchangeFiltersConfiguration (line 79) | @Configuration(proxyBeanMethods = false)
method addHeadersInstanceExchangeFilter (line 82) | @Bean
method addReactiveHeadersInstanceExchangeFilter (line 91) | @Bean
method rewriteEndpointUrlInstanceExchangeFilter (line 101) | @Bean
method setDefaultAcceptHeaderInstanceExchangeFilter (line 108) | @Bean
method legacyEndpointConverterInstanceExchangeFilter (line 115) | @Bean
method logfileAcceptWorkaround (line 124) | @Bean
method cookieHandlingInstanceExchangeFilter (line 131) | @Bean
method retryInstanceExchangeFilter (line 139) | @Bean
method timeoutInstanceExchangeFilter (line 148) | @Bean
class HttpHeadersProviderConfiguration (line 161) | @Configuration(proxyBeanMethods = false)
method basicAuthHttpHeadersProvider (line 164) | @Bean
class LegacyEndpointConvertersConfiguration (line 180) | @Configuration(proxyBeanMethods = false)
method healthLegacyEndpointConverter (line 183) | @Bean
method infoLegacyEndpointConverter (line 189) | @Bean
method envLegacyEndpointConverter (line 195) | @Bean
method httptraceLegacyEndpointConverter (line 201) | @Bean
method threaddumpLegacyEndpointConverter (line 207) | @Bean
method liquibaseLegacyEndpointConverter (line 213) | @Bean
method flywayLegacyEndpointConverter (line 219) | @Bean
method beansLegacyEndpointConverter (line 225) | @Bean
method configpropsLegacyEndpointConverter (line 231) | @Bean
method mappingsLegacyEndpointConverter (line 237) | @Bean
method startupLegacyEndpointConverter (line 243) | @Bean
class CookieStoreConfiguration (line 251) | @Configuration(proxyBeanMethods = false)
method cookieStore (line 258) | @Bean
method cookieStoreCleanupTrigger (line 272) | @Bean(initMethod = "start", destroyMethod = "stop")
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/config/AdminServerMarkerConfiguration.java
class AdminServerMarkerConfiguration (line 22) | @Configuration(proxyBeanMethods = false)
method adminServerMarker (line 25) | @Bean
class Marker (line 30) | public static class Marker {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/config/AdminServerNotifierAutoConfiguration.java
class AdminServerNotifierAutoConfiguration (line 76) | @Configuration(proxyBeanMethods = false)
method createNotifierRestTemplate (line 82) | private static RestTemplate createNotifierRestTemplate(NotifierProxyPr...
class NotifierTriggerConfiguration (line 103) | @Configuration(proxyBeanMethods = false)
method notificationTrigger (line 108) | @Bean(initMethod = "start", destroyMethod = "stop")
class CompositeNotifierConfiguration (line 116) | @Configuration(proxyBeanMethods = false)
method compositeNotifier (line 122) | @Bean
class NoSingleNotifierCandidateCondition (line 129) | static class NoSingleNotifierCandidateCondition extends NoneNestedCo...
method NoSingleNotifierCandidateCondition (line 131) | NoSingleNotifierCandidateCondition() {
class HasSingleNotifierInstance (line 135) | @ConditionalOnSingleCandidate(Notifier.class)
class FilteringNotifierWebConfiguration (line 144) | @Configuration(proxyBeanMethods = false)
method FilteringNotifierWebConfiguration (line 151) | public FilteringNotifierWebConfiguration(FilteringNotifier filtering...
method notificationFilterController (line 155) | @Bean
class MailNotifierConfiguration (line 162) | @Configuration(proxyBeanMethods = false)
method MailNotifierConfiguration (line 170) | public MailNotifierConfiguration(ApplicationContext applicationConte...
method mailNotifier (line 174) | @Bean
method mailNotifierTemplateEngine (line 182) | @Bean
class HipchatNotifierConfiguration (line 195) | @Configuration(proxyBeanMethods = false)
method hipchatNotifier (line 201) | @Bean
class SlackNotifierConfiguration (line 210) | @Configuration(proxyBeanMethods = false)
method slackNotifier (line 216) | @Bean
class MattermostNotifierConfiguration (line 225) | @Configuration(proxyBeanMethods = false)
method mattermostNotifier (line 231) | @Bean
class LetsChatNotifierConfiguration (line 241) | @Configuration(proxyBeanMethods = false)
method letsChatNotifier (line 247) | @Bean
class PagerdutyNotifierConfiguration (line 257) | @Configuration(proxyBeanMethods = false)
method pagerdutyNotifier (line 263) | @Bean
class OpsGenieNotifierConfiguration (line 273) | @Configuration(proxyBeanMethods = false)
method opsgenieNotifier (line 279) | @Bean
class MicrosoftTeamsNotifierConfiguration (line 289) | @Configuration(proxyBeanMethods = false)
method microsoftTeamsNotifier (line 295) | @Bean
class TelegramNotifierConfiguration (line 305) | @Configuration(proxyBeanMethods = false)
method telegramNotifier (line 311) | @Bean
class DiscordNotifierConfiguration (line 321) | @Configuration(proxyBeanMethods = false)
method discordNotifier (line 327) | @Bean
class DingTalkNotifierConfiguration (line 336) | @Configuration(proxyBeanMethods = false)
method dingTalkNotifier (line 342) | @Bean
class RocketChatNotifierConfiguration (line 352) | @Configuration(proxyBeanMethods = false)
method rocketChatNotifier (line 358) | @Bean
class FeiShuNotifierConfiguration (line 368) | @Configuration(proxyBeanMethods = false)
method feiShuNotifier (line 374) | @Bean
class WebexNotifierConfiguration (line 383) | @Configuration(proxyBeanMethods = false)
method webexNotifier (line 389) | @Bean
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/config/AdminServerProperties.java
class AdminServerProperties (line 34) | @lombok.Data
method setContextPath (line 68) | public void setContextPath(String contextPath) {
method path (line 76) | public String path(String path) {
class ServerProperties (line 80) | @lombok.Data
class MonitorProperties (line 90) | @lombok.Data
class InstanceAuthProperties (line 159) | @lombok.Data
class InstanceProxyProperties (line 192) | @lombok.Data
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/config/AdminServerWebConfiguration.java
class AdminServerWebConfiguration (line 38) | @Configuration(proxyBeanMethods = false)
method AdminServerWebConfiguration (line 43) | public AdminServerWebConfiguration(AdminServerProperties adminServerPr...
method adminJacksonModule (line 47) | @Bean
method instancesController (line 52) | @Bean
method applicationsController (line 58) | @Bean
class ReactiveRestApiConfiguration (line 65) | @Configuration(proxyBeanMethods = false)
method ReactiveRestApiConfiguration (line 71) | public ReactiveRestApiConfiguration(AdminServerProperties adminServe...
method instancesProxyController (line 75) | @Bean
method adminHandlerMapping (line 85) | @Bean
class ServletRestApiConfiguration (line 97) | @Configuration(proxyBeanMethods = false)
method ServletRestApiConfiguration (line 104) | public ServletRestApiConfiguration(AdminServerProperties adminServer...
method instancesProxyController (line 108) | @Bean
method adminHandlerMapping (line 118) | @Bean
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/config/SpringBootAdminServerEnabledCondition.java
class SpringBootAdminServerEnabledCondition (line 30) | public class SpringBootAdminServerEnabledCondition extends SpringBootCon...
method getMatchOutcome (line 32) | @Override
method getClientProperties (line 44) | private AdminServerProperties getClientProperties(ConditionContext con...
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/domain/entities/Application.java
class Application (line 30) | @lombok.Data
method Application (line 43) | @lombok.Builder(builderClassName = "Builder", toBuilder = true)
method create (line 60) | public static Application.Builder create(String name) {
class Builder (line 64) | public static class Builder {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/domain/entities/EventsourcingInstanceRepository.java
class EventsourcingInstanceRepository (line 37) | public class EventsourcingInstanceRepository implements InstanceReposito...
method EventsourcingInstanceRepository (line 47) | public EventsourcingInstanceRepository(InstanceEventStore eventStore) {
method save (line 51) | @Override
method findAll (line 56) | @Override
method find (line 63) | @Override
method findByName (line 71) | @Override
method compute (line 76) | @Override
method computeIfPresent (line 85) | @Override
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/domain/entities/Instance.java
class Instance (line 56) | @lombok.Data
method Instance (line 83) | private Instance(InstanceId id) {
method Instance (line 88) | private Instance(InstanceId id, long version, @Nullable Registration r...
method create (line 109) | public static Instance create(InstanceId id) {
method register (line 114) | public Instance register(Registration registration) {
method deregister (line 127) | public Instance deregister() {
method withInfo (line 134) | public Instance withInfo(Info info) {
method withStatusInfo (line 142) | public Instance withStatusInfo(StatusInfo statusInfo) {
method withEndpoints (line 150) | public Instance withEndpoints(Endpoints endpoints) {
method isRegistered (line 160) | public boolean isRegistered() {
method getRegistration (line 164) | public Registration getRegistration() {
method getUnsavedEvents (line 171) | List<InstanceEvent> getUnsavedEvents() {
method clearUnsavedEvents (line 175) | Instance clearUnsavedEvents() {
method apply (line 180) | Instance apply(Collection<InstanceEvent> events) {
method apply (line 189) | Instance apply(InstanceEvent event) {
method apply (line 193) | private Instance apply(InstanceEvent event, boolean isNewEvent) {
method nextVersion (line 245) | private long nextVersion() {
method appendToEvents (line 249) | private List<InstanceEvent> appendToEvents(InstanceEvent event, boolea...
method updateBuildVersion (line 259) | @Nullable
method updateTags (line 265) | @SafeVarargs
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/domain/entities/InstanceRepository.java
type InstanceRepository (line 31) | public interface InstanceRepository {
method save (line 38) | Mono<Instance> save(Instance app);
method findAll (line 43) | Flux<Instance> findAll();
method find (line 49) | Mono<Instance> find(InstanceId id);
method findByName (line 55) | Flux<Instance> findByName(String name);
method compute (line 64) | Mono<Instance> compute(InstanceId id, BiFunction<InstanceId, Instance,...
method computeIfPresent (line 73) | Mono<Instance> computeIfPresent(InstanceId id, BiFunction<InstanceId, ...
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/domain/entities/SnapshottingInstanceRepository.java
class SnapshottingInstanceRepository (line 41) | public class SnapshottingInstanceRepository extends EventsourcingInstanc...
method SnapshottingInstanceRepository (line 53) | public SnapshottingInstanceRepository(InstanceEventStore eventStore) {
method findAll (line 58) | @Override
method find (line 63) | @Override
method save (line 75) | @Override
method start (line 81) | public void start() {
method stop (line 85) | public void stop() {
method rehydrateSnapshot (line 92) | protected Mono<Instance> rehydrateSnapshot(InstanceId id) {
method updateSnapshot (line 104) | protected void updateSnapshot(InstanceEvent event) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/domain/events/InstanceDeregisteredEvent.java
class InstanceDeregisteredEvent (line 29) | @lombok.Value
method InstanceDeregisteredEvent (line 39) | public InstanceDeregisteredEvent(InstanceId instance, long version) {
method InstanceDeregisteredEvent (line 43) | public InstanceDeregisteredEvent(InstanceId instance, long version, In...
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/domain/events/InstanceEndpointsDetectedEvent.java
class InstanceEndpointsDetectedEvent (line 30) | @lombok.Value
method InstanceEndpointsDetectedEvent (line 42) | public InstanceEndpointsDetectedEvent(InstanceId instance, long versio...
method InstanceEndpointsDetectedEvent (line 46) | public InstanceEndpointsDetectedEvent(InstanceId instance, long versio...
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/domain/events/InstanceEvent.java
class InstanceEvent (line 32) | @lombok.Data
method InstanceEvent (line 46) | protected InstanceEvent(InstanceId instance, long version, String type...
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/domain/events/InstanceInfoChangedEvent.java
class InstanceInfoChangedEvent (line 30) | @lombok.Value
method InstanceInfoChangedEvent (line 42) | public InstanceInfoChangedEvent(InstanceId instance, long version, Inf...
method InstanceInfoChangedEvent (line 46) | public InstanceInfoChangedEvent(InstanceId instance, long version, Ins...
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/domain/events/InstanceRegisteredEvent.java
class InstanceRegisteredEvent (line 30) | @lombok.Value
method InstanceRegisteredEvent (line 42) | public InstanceRegisteredEvent(InstanceId instance, long version, Regi...
method InstanceRegisteredEvent (line 46) | public InstanceRegisteredEvent(InstanceId instance, long version, Inst...
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/domain/events/InstanceRegistrationUpdatedEvent.java
class InstanceRegistrationUpdatedEvent (line 30) | @lombok.Value
method InstanceRegistrationUpdatedEvent (line 42) | public InstanceRegistrationUpdatedEvent(InstanceId instance, long vers...
method InstanceRegistrationUpdatedEvent (line 46) | public InstanceRegistrationUpdatedEvent(InstanceId instance, long vers...
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/domain/events/InstanceStatusChangedEvent.java
class InstanceStatusChangedEvent (line 30) | @lombok.Value
method InstanceStatusChangedEvent (line 42) | public InstanceStatusChangedEvent(InstanceId instance, long version, S...
method InstanceStatusChangedEvent (line 46) | public InstanceStatusChangedEvent(InstanceId instance, long version, I...
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/domain/values/BuildVersion.java
class BuildVersion (line 26) | @lombok.Data
method BuildVersion (line 33) | private BuildVersion(String value) {
method valueOf (line 42) | public static BuildVersion valueOf(String s) {
method from (line 46) | @Nullable public static BuildVersion from(Map<String, ?> map) {
method toString (line 71) | @Override
method compareTo (line 76) | @Override
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/domain/values/Endpoint.java
class Endpoint (line 23) | @lombok.Data
method Endpoint (line 58) | private Endpoint(String id, String url) {
method of (line 65) | public static Endpoint of(String id, String url) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/domain/values/Endpoints.java
class Endpoints (line 33) | @lombok.EqualsAndHashCode
method Endpoints (line 41) | private Endpoints(Collection<Endpoint> endpoints) {
method empty (line 50) | public static Endpoints empty() {
method single (line 54) | public static Endpoints single(String id, String url) {
method of (line 58) | public static Endpoints of(@Nullable Collection<Endpoint> endpoints) {
method get (line 65) | public Optional<Endpoint> get(String id) {
method isPresent (line 69) | public boolean isPresent(String id) {
method iterator (line 73) | @Override
method withEndpoint (line 78) | public Endpoints withEndpoint(String id, String url) {
method stream (line 85) | public Stream<Endpoint> stream() {
method hasNext (line 91) | @Override
method next (line 96) | @Override
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/domain/values/Info.java
class Info (line 34) | @lombok.Data
method Info (line 41) | public Info() {
method Info (line 44) | private Info(Map<String, Object> values) {
method from (line 50) | public static Info from(@Nullable Map<String, Object> values) {
method empty (line 57) | public static Info empty() {
method put (line 61) | @JsonAnySetter
method getValues (line 66) | @JsonAnyGetter
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/domain/values/InstanceId.java
class InstanceId (line 26) | @lombok.Data
method InstanceId (line 31) | private InstanceId(String value) {
method of (line 36) | public static InstanceId of(String value) {
method toString (line 40) | @Override
method compareTo (line 45) | @Override
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/domain/values/Registration.java
class Registration (line 38) | @lombok.Data
method Registration (line 71) | @lombok.Builder(builderClassName = "Builder", toBuilder = true)
method create (line 95) | public static Registration.Builder create(String name, String healthUr...
method copyOf (line 99) | public static Registration.Builder copyOf(Registration registration) {
method getServiceUrl (line 110) | @Nullable private String getServiceUrl(@Nullable String serviceUrl, Ma...
method getMetadata (line 127) | public Map<String, String> getMetadata() {
method checkUrl (line 136) | private boolean checkUrl(String url) {
class Builder (line 146) | public static class Builder {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/domain/values/StatusInfo.java
class StatusInfo (line 36) | @lombok.Data
method StatusInfo (line 58) | private StatusInfo(String status, @Nullable Map<String, ?> details) {
method valueOf (line 64) | public static StatusInfo valueOf(String statusCode, @Nullable Map<Stri...
method valueOf (line 68) | public static StatusInfo valueOf(String statusCode) {
method ofUnknown (line 72) | public static StatusInfo ofUnknown() {
method ofUp (line 76) | public static StatusInfo ofUp() {
method ofDown (line 80) | public static StatusInfo ofDown() {
method ofOffline (line 84) | public static StatusInfo ofOffline() {
method ofOutOfService (line 88) | public static StatusInfo ofOutOfService() {
method ofRestricted (line 92) | public static StatusInfo ofRestricted() {
method ofUp (line 96) | public static StatusInfo ofUp(@Nullable Map<String, Object> details) {
method ofDown (line 100) | public static StatusInfo ofDown(@Nullable Map<String, Object> details) {
method ofOffline (line 104) | public static StatusInfo ofOffline(@Nullable Map<String, Object> detai...
method ofOutOfService (line 108) | public static StatusInfo ofOutOfService(@Nullable Map<String, Object> ...
method ofRestricted (line 112) | public static StatusInfo ofRestricted(@Nullable Map<String, Object> de...
method getDetails (line 116) | public Map<String, Object> getDetails() {
method isUp (line 120) | public boolean isUp() {
method isOffline (line 124) | public boolean isOffline() {
method isDown (line 128) | public boolean isDown() {
method isUnknown (line 132) | public boolean isUnknown() {
method isOutOfService (line 136) | public boolean isOutOfService() {
method isRestricted (line 140) | public boolean isRestricted() {
method severity (line 144) | public static Comparator<String> severity() {
method from (line 148) | @SuppressWarnings("unchecked")
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/domain/values/Tags.java
class Tags (line 33) | @Getter
method Tags (line 42) | private Tags(Map<String, String> tags) {
method empty (line 51) | public static Tags empty() {
method from (line 55) | public static Tags from(Map<String, ?> map) {
method from (line 59) | @SuppressWarnings("unchecked")
method toLinkedHashMap (line 85) | private static <T, K, U> Collector<T, ?, LinkedHashMap<K, U>> toLinked...
method append (line 92) | public Tags append(Tags other) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/eventstore/ConcurrentMapEventStore.java
class ConcurrentMapEventStore (line 42) | public abstract class ConcurrentMapEventStore extends InstanceEventPubli...
method ConcurrentMapEventStore (line 54) | protected ConcurrentMapEventStore(int maxLogSizePerAggregate,
method findAll (line 60) | @Override
method find (line 67) | @Override
method append (line 72) | @Override
method doAppend (line 83) | protected boolean doAppend(List<InstanceEvent> events) {
method compact (line 118) | private void compact(List<InstanceEvent> events) {
method createOptimisticLockException (line 125) | private OptimisticLockingException createOptimisticLockException(Insta...
method getLastVersion (line 130) | protected static long getLastVersion(List<InstanceEvent> events) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/eventstore/HazelcastEventStore.java
class HazelcastEventStore (line 35) | public class HazelcastEventStore extends ConcurrentMapEventStore {
method HazelcastEventStore (line 39) | public HazelcastEventStore(IMap<InstanceId, List<InstanceEvent>> event...
method HazelcastEventStore (line 43) | public HazelcastEventStore(int maxLogSizePerAggregate, IMap<InstanceId...
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/eventstore/InMemoryEventStore.java
class InMemoryEventStore (line 31) | public class InMemoryEventStore extends ConcurrentMapEventStore {
method InMemoryEventStore (line 33) | public InMemoryEventStore() {
method InMemoryEventStore (line 37) | public InMemoryEventStore(int maxLogSizePerAggregate) {
method append (line 41) | @Override
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/eventstore/InstanceEventPublisher.java
class InstanceEventPublisher (line 30) | public class InstanceEventPublisher implements Publisher<InstanceEvent> {
method InstanceEventPublisher (line 41) | protected InstanceEventPublisher() {
method publish (line 46) | protected void publish(List<InstanceEvent> events) {
method subscribe (line 53) | @Override
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/eventstore/InstanceEventStore.java
type InstanceEventStore (line 33) | public interface InstanceEventStore extends Publisher<InstanceEvent> {
method findAll (line 35) | Flux<InstanceEvent> findAll();
method find (line 37) | Flux<InstanceEvent> find(InstanceId id);
method append (line 39) | Mono<Void> append(List<InstanceEvent> events);
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/eventstore/OptimisticLockingException.java
class OptimisticLockingException (line 19) | public class OptimisticLockingException extends RuntimeException {
method OptimisticLockingException (line 21) | public OptimisticLockingException(String message) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/AbstractEventNotifier.java
class AbstractEventNotifier (line 32) | public abstract class AbstractEventNotifier implements Notifier {
method AbstractEventNotifier (line 41) | protected AbstractEventNotifier(InstanceRepository repository) {
method notify (line 45) | @Override
method shouldNotify (line 58) | protected boolean shouldNotify(InstanceEvent event, Instance instance) {
method doNotify (line 62) | protected abstract Mono<Void> doNotify(InstanceEvent event, Instance i...
method getLogger (line 64) | private Logger getLogger() {
method setEnabled (line 68) | public void setEnabled(boolean enabled) {
method isEnabled (line 72) | public boolean isEnabled() {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/AbstractStatusChangeNotifier.java
class AbstractStatusChangeNotifier (line 37) | public abstract class AbstractStatusChangeNotifier extends AbstractEvent...
method AbstractStatusChangeNotifier (line 47) | public AbstractStatusChangeNotifier(InstanceRepository repository) {
method notify (line 51) | @Override
method shouldNotify (line 56) | @Override
method getLastStatus (line 68) | protected final String getLastStatus(InstanceId instanceId) {
method updateLastStatus (line 72) | protected void updateLastStatus(InstanceEvent event) {
method setIgnoreChanges (line 81) | public void setIgnoreChanges(String[] ignoreChanges) {
method getIgnoreChanges (line 87) | public String[] getIgnoreChanges() {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/CompositeNotifier.java
class CompositeNotifier (line 32) | public class CompositeNotifier implements Notifier {
method CompositeNotifier (line 38) | public CompositeNotifier(Iterable<Notifier> delegates) {
method notify (line 43) | @Override
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/DingTalkNotifier.java
class DingTalkNotifier (line 46) | @Slf4j
method DingTalkNotifier (line 63) | public DingTalkNotifier(InstanceRepository repository, RestTemplate re...
method doNotify (line 68) | @Override
method buildUrl (line 74) | private String buildUrl() {
method createMessage (line 79) | protected Object createMessage(InstanceEvent event, Instance instance) {
method getDefaultMessage (line 92) | @Override
method getSign (line 97) | private String getSign(Long timestamp) {
method setRestTemplate (line 111) | public void setRestTemplate(RestTemplate restTemplate) {
method getWebhookUrl (line 115) | public String getWebhookUrl() {
method setWebhookUrl (line 119) | public void setWebhookUrl(String webhookUrl) {
method getSecret (line 123) | @Nullable public String getSecret() {
method setSecret (line 127) | public void setSecret(@Nullable String secret) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/DiscordNotifier.java
class DiscordNotifier (line 42) | public class DiscordNotifier extends AbstractContentNotifier {
method DiscordNotifier (line 69) | public DiscordNotifier(InstanceRepository repository, RestTemplate res...
method doNotify (line 74) | @Override
method createDiscordNotification (line 83) | protected Object createDiscordNotification(InstanceEvent event, Instan...
method getDefaultMessage (line 101) | @Override
method getWebhookUrl (line 106) | @Nullable public URI getWebhookUrl() {
method setWebhookUrl (line 110) | public void setWebhookUrl(@Nullable URI webhookUrl) {
method isTts (line 114) | public boolean isTts() {
method setTts (line 118) | public void setTts(boolean tts) {
method getUsername (line 122) | @Nullable public String getUsername() {
method setUsername (line 126) | public void setUsername(@Nullable String username) {
method getAvatarUrl (line 130) | @Nullable public String getAvatarUrl() {
method setAvatarUrl (line 134) | public void setAvatarUrl(@Nullable String avatarUrl) {
method setRestTemplate (line 138) | public void setRestTemplate(RestTemplate restTemplate) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/FeiShuNotifier.java
class FeiShuNotifier (line 55) | @Slf4j
method FeiShuNotifier (line 86) | public FeiShuNotifier(InstanceRepository repository, RestTemplate rest...
method doNotify (line 91) | @Override
method generateSign (line 104) | private String generateSign(String secret, long timestamp) {
method createNotification (line 118) | protected HttpEntity<Map<String, Object>> createNotification(InstanceE...
method buildContentModel (line 141) | @Override
method getDefaultMessage (line 150) | @Override
method createTextContent (line 155) | private String createTextContent(InstanceEvent event, Instance instanc...
method createCardContent (line 165) | private String createCardContent(InstanceEvent event, Instance instanc...
method toJsonString (line 200) | private String toJsonString(Object o) {
method getWebhookUrl (line 211) | public URI getWebhookUrl() {
method setWebhookUrl (line 215) | public void setWebhookUrl(URI webhookUrl) {
method setRestTemplate (line 219) | public void setRestTemplate(RestTemplate restTemplate) {
method isAtAll (line 223) | public boolean isAtAll() {
method setAtAll (line 227) | public void setAtAll(boolean atAll) {
method getSecret (line 231) | public String getSecret() {
method setSecret (line 235) | public void setSecret(String secret) {
method getMessageType (line 239) | public MessageType getMessageType() {
method setMessageType (line 243) | public void setMessageType(MessageType messageType) {
method getCard (line 247) | public Card getCard() {
method setCard (line 251) | public void setCard(Card card) {
type MessageType (line 255) | public enum MessageType {
class Card (line 261) | public static class Card {
method getTitle (line 270) | public String getTitle() {
method setTitle (line 274) | public void setTitle(String title) {
method getThemeColor (line 278) | public String getThemeColor() {
method setThemeColor (line 282) | public void setThemeColor(String themeColor) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/HazelcastNotificationTrigger.java
class HazelcastNotificationTrigger (line 29) | public class HazelcastNotificationTrigger extends NotificationTrigger {
method HazelcastNotificationTrigger (line 35) | public HazelcastNotificationTrigger(Notifier notifier, Publisher<Insta...
method sendNotifications (line 41) | @Override
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/HipchatNotifier.java
class HipchatNotifier (line 42) | public class HipchatNotifier extends AbstractContentNotifier {
method HipchatNotifier (line 68) | public HipchatNotifier(InstanceRepository repository, RestTemplate res...
method doNotify (line 73) | @Override
method buildUrl (line 79) | protected String buildUrl() {
method createHipChatNotification (line 86) | protected HttpEntity<Map<String, Object>> createHipChatNotification(In...
method getNotify (line 98) | protected boolean getNotify() {
method getDefaultMessage (line 102) | @Override
method getColor (line 107) | protected String getColor(InstanceEvent event) {
method getUrl (line 116) | @Nullable public URI getUrl() {
method setUrl (line 120) | public void setUrl(@Nullable URI url) {
method getAuthToken (line 124) | @Nullable public String getAuthToken() {
method setAuthToken (line 128) | public void setAuthToken(@Nullable String authToken) {
method getRoomId (line 132) | @Nullable public String getRoomId() {
method setRoomId (line 136) | public void setRoomId(@Nullable String roomId) {
method isNotify (line 140) | public boolean isNotify() {
method setNotify (line 144) | public void setNotify(boolean notify) {
method setRestTemplate (line 148) | public void setRestTemplate(RestTemplate restTemplate) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/LetsChatNotifier.java
class LetsChatNotifier (line 43) | public class LetsChatNotifier extends AbstractContentNotifier {
method LetsChatNotifier (line 69) | public LetsChatNotifier(InstanceRepository repository, RestTemplate re...
method doNotify (line 74) | @Override
method createUrl (line 87) | private URI createUrl() {
method createMessage (line 94) | protected Object createMessage(InstanceEvent event, Instance instance) {
method getDefaultMessage (line 100) | @Override
method setRestTemplate (line 105) | public void setRestTemplate(RestTemplate restTemplate) {
method getUrl (line 109) | @Nullable public URI getUrl() {
method setUrl (line 113) | public void setUrl(@Nullable URI url) {
method getUsername (line 117) | public String getUsername() {
method setUsername (line 121) | public void setUsername(String username) {
method getRoom (line 125) | @Nullable public String getRoom() {
method setRoom (line 129) | public void setRoom(@Nullable String room) {
method getToken (line 133) | @Nullable public String getToken() {
method setToken (line 137) | public void setToken(@Nullable String token) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/LoggingNotifier.java
class LoggingNotifier (line 33) | public class LoggingNotifier extends AbstractStatusChangeNotifier {
method LoggingNotifier (line 37) | public LoggingNotifier(InstanceRepository repository) {
method doNotify (line 41) | @Override
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/MailNotifier.java
class MailNotifier (line 44) | public class MailNotifier extends AbstractStatusChangeNotifier {
method MailNotifier (line 80) | public MailNotifier(JavaMailSender mailSender, InstanceRepository repo...
method doNotify (line 86) | @Override
method getBody (line 112) | protected String getBody(Context ctx) {
method getSubject (line 116) | protected String getSubject(Context ctx) {
method getTo (line 120) | public String[] getTo() {
method setTo (line 124) | public void setTo(String[] to) {
method getCc (line 128) | public String[] getCc() {
method setCc (line 132) | public void setCc(String[] cc) {
method getFrom (line 136) | public String getFrom() {
method setFrom (line 140) | public void setFrom(String from) {
method getTemplate (line 144) | public String getTemplate() {
method setTemplate (line 148) | public void setTemplate(String template) {
method getBaseUrl (line 152) | @Nullable public String getBaseUrl() {
method setBaseUrl (line 156) | public void setBaseUrl(@Nullable String baseUrl) {
method getAdditionalProperties (line 160) | public Map<String, Object> getAdditionalProperties() {
method setAdditionalProperties (line 164) | public void setAdditionalProperties(Map<String, Object> additionalProp...
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/MattermostNotifier.java
class MattermostNotifier (line 43) | public class MattermostNotifier extends AbstractContentNotifier {
method MattermostNotifier (line 64) | public MattermostNotifier(InstanceRepository repository, RestTemplate ...
method doNotify (line 69) | @Override
method setRestTemplate (line 77) | public void setRestTemplate(RestTemplate restTemplate) {
method createMessage (line 81) | protected Object createMessage(InstanceEvent event, Instance instance) {
method getDefaultMessage (line 103) | @Override
method getColor (line 108) | protected String getColor(InstanceEvent event) {
method getApiUrl (line 117) | @Nullable public URI getApiUrl() {
method setApiUrl (line 121) | public void setApiUrl(@Nullable URI apiUrl) {
method getChannelId (line 125) | @Nullable public String getChannelId() {
method setChannelId (line 129) | public void setChannelId(@Nullable String channelId) {
method getBotAccessToken (line 133) | @Nullable public String getBotAccessToken() {
method setBotAccessToken (line 137) | public void setBotAccessToken(@Nullable String botAccessToken) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/MicrosoftTeamsNotifier.java
class MicrosoftTeamsNotifier (line 53) | public class MicrosoftTeamsNotifier extends AbstractStatusChangeNotifier {
method MicrosoftTeamsNotifier (line 136) | public MicrosoftTeamsNotifier(InstanceRepository repository, RestTempl...
method doNotify (line 148) | @Override
method shouldNotify (line 176) | @Override
method getDeregisteredMessage (line 182) | protected Message getDeregisteredMessage(Instance instance, Evaluation...
method getRegisteredMessage (line 187) | protected Message getRegisteredMessage(Instance instance, EvaluationCo...
method getStatusChangedMessage (line 192) | protected Message getStatusChangedMessage(Instance instance, Evaluatio...
method createMessage (line 197) | protected Message createMessage(Instance instance, String registeredTi...
method evaluateExpression (line 220) | protected String evaluateExpression(EvaluationContext context, Express...
method createEvaluationContext (line 224) | protected EvaluationContext createEvaluationContext(InstanceEvent even...
method getWebhookUrl (line 235) | @Nullable public URI getWebhookUrl() {
method setWebhookUrl (line 239) | public void setWebhookUrl(@Nullable URI webhookUrl) {
method getThemeColor (line 243) | public String getThemeColor() {
method setThemeColor (line 247) | public void setThemeColor(String themeColor) {
method getDeregisterActivitySubtitle (line 251) | public String getDeregisterActivitySubtitle() {
method setDeregisterActivitySubtitle (line 255) | public void setDeregisterActivitySubtitle(String deregisterActivitySub...
method getRegisterActivitySubtitle (line 260) | public String getRegisterActivitySubtitle() {
method setRegisterActivitySubtitle (line 264) | public void setRegisterActivitySubtitle(String registerActivitySubtitl...
method getStatusActivitySubtitle (line 269) | public String getStatusActivitySubtitle() {
method setStatusActivitySubtitle (line 273) | public void setStatusActivitySubtitle(String statusActivitySubtitle) {
class Message (line 277) | @Data
class Section (line 292) | @Data
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/NotificationTrigger.java
class NotificationTrigger (line 28) | public class NotificationTrigger extends AbstractEventHandler<InstanceEv...
method NotificationTrigger (line 34) | public NotificationTrigger(Notifier notifier, Publisher<InstanceEvent>...
method handle (line 39) | @Override
method sendNotifications (line 44) | protected Mono<Void> sendNotifications(InstanceEvent event) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/Notifier.java
type Notifier (line 28) | public interface Notifier {
method notify (line 30) | Mono<Void> notify(InstanceEvent event);
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/NotifierProxyProperties.java
class NotifierProxyProperties (line 21) | @lombok.Data
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/OpsGenieNotifier.java
class OpsGenieNotifier (line 48) | public class OpsGenieNotifier extends AbstractStatusChangeNotifier {
method OpsGenieNotifier (line 100) | public OpsGenieNotifier(InstanceRepository repository, RestTemplate re...
method doNotify (line 106) | @Override
method buildUrl (line 112) | protected String buildUrl(InstanceEvent event, Instance instance) {
method createRequest (line 120) | protected HttpEntity<?> createRequest(InstanceEvent event, Instance in...
method generateAlias (line 159) | protected String generateAlias(Instance instance) {
method getMessage (line 163) | @Nullable protected String getMessage(InstanceEvent event, Instance in...
method getDescription (line 175) | protected String getDescription(InstanceEvent event, Instance instance) {
method getApiKey (line 181) | @Nullable public String getApiKey() {
method setApiKey (line 185) | public void setApiKey(@Nullable String apiKey) {
method setDescription (line 189) | public void setDescription(String description) {
method getMessage (line 193) | public String getMessage() {
method setRestTemplate (line 197) | public void setRestTemplate(RestTemplate restTemplate) {
method getActions (line 201) | @Nullable public String getActions() {
method setActions (line 205) | public void setActions(@Nullable String actions) {
method getSource (line 209) | @Nullable public String getSource() {
method setSource (line 213) | public void setSource(@Nullable String source) {
method getTags (line 217) | @Nullable public String getTags() {
method setTags (line 221) | public void setTags(@Nullable String tags) {
method getEntity (line 225) | @Nullable public String getEntity() {
method setEntity (line 229) | public void setEntity(@Nullable String entity) {
method getUser (line 233) | @Nullable public String getUser() {
method setUser (line 237) | public void setUser(@Nullable String user) {
method getUrl (line 241) | public URI getUrl() {
method setUrl (line 245) | public void setUrl(URI url) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/PagerdutyNotifier.java
class PagerdutyNotifier (line 45) | public class PagerdutyNotifier extends AbstractStatusChangeNotifier {
method PagerdutyNotifier (line 84) | public PagerdutyNotifier(InstanceRepository repository, RestTemplate r...
method doNotify (line 90) | @Override
method createPagerdutyEvent (line 96) | protected Map<String, Object> createPagerdutyEvent(InstanceEvent event...
method getDescription (line 129) | @Nullable
method getDetails (line 142) | protected Map<String, Object> getDetails(InstanceEvent event) {
method getUrl (line 151) | public URI getUrl() {
method setUrl (line 155) | public void setUrl(URI url) {
method getClient (line 159) | @Nullable
method setClient (line 164) | public void setClient(@Nullable String client) {
method getClientUrl (line 168) | @Nullable
method setClientUrl (line 173) | public void setClientUrl(@Nullable URI clientUrl) {
method getServiceKey (line 177) | @Nullable
method setServiceKey (line 182) | public void setServiceKey(@Nullable String serviceKey) {
method getDescription (line 186) | public String getDescription() {
method setDescription (line 190) | public void setDescription(String description) {
method setRestTemplate (line 194) | public void setRestTemplate(RestTemplate restTemplate) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/RemindingNotifier.java
class RemindingNotifier (line 48) | public class RemindingNotifier extends AbstractEventNotifier {
method RemindingNotifier (line 66) | public RemindingNotifier(Notifier delegate, InstanceRepository reposit...
method doNotify (line 72) | @Override
method start (line 84) | public void start() {
method stop (line 95) | public void stop() {
method sendReminders (line 107) | protected Mono<Void> sendReminders() {
method shouldStartReminder (line 117) | protected boolean shouldStartReminder(InstanceEvent event) {
method shouldEndReminder (line 124) | protected boolean shouldEndReminder(InstanceEvent event) {
method setReminderPeriod (line 134) | public void setReminderPeriod(Duration reminderPeriod) {
method setReminderStatuses (line 138) | public void setReminderStatuses(String[] reminderStatuses) {
method setCheckReminderInverval (line 144) | public void setCheckReminderInverval(Duration checkReminderInverval) {
class Reminder (line 148) | protected static final class Reminder {
method Reminder (line 154) | private Reminder(InstanceEvent event) {
method getLastNotification (line 159) | public Instant getLastNotification() {
method setLastNotification (line 163) | public void setLastNotification(Instant lastNotification) {
method getEvent (line 167) | public InstanceEvent getEvent() {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/RocketChatNotifier.java
class RocketChatNotifier (line 41) | public class RocketChatNotifier extends AbstractContentNotifier {
method RocketChatNotifier (line 67) | public RocketChatNotifier(InstanceRepository repository, RestTemplate ...
method doNotify (line 72) | @Override
method getUri (line 82) | private URI getUri() {
method createMessage (line 89) | protected Object createMessage(InstanceEvent event, Instance instance) {
method buildContentModel (line 98) | @Override
method getDefaultMessage (line 105) | @Override
method setRestTemplate (line 110) | public void setRestTemplate(RestTemplate restTemplate) {
method getUrl (line 114) | @Nullable public String getUrl() {
method setUrl (line 118) | public void setUrl(String url) {
method getRoomId (line 122) | @Nullable public String getRoomId() {
method setRoomId (line 126) | public void setRoomId(String roomId) {
method getToken (line 130) | @Nullable public String getToken() {
method setToken (line 134) | public void setToken(String token) {
method getUserId (line 138) | @Nullable public String getUserId() {
method setUserId (line 142) | public void setUserId(String userId) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/SlackNotifier.java
class SlackNotifier (line 43) | public class SlackNotifier extends AbstractContentNotifier {
method SlackNotifier (line 69) | public SlackNotifier(InstanceRepository repository, RestTemplate restT...
method doNotify (line 74) | @Override
method setRestTemplate (line 83) | public void setRestTemplate(RestTemplate restTemplate) {
method createMessage (line 87) | protected Object createMessage(InstanceEvent event, Instance instance) {
method getColor (line 108) | protected String getColor(InstanceEvent event) {
method getWebhookUrl (line 117) | @Nullable public URI getWebhookUrl() {
method setWebhookUrl (line 121) | public void setWebhookUrl(@Nullable URI webhookUrl) {
method getChannel (line 125) | @Nullable public String getChannel() {
method setChannel (line 129) | public void setChannel(@Nullable String channel) {
method getIcon (line 133) | @Nullable public String getIcon() {
method setIcon (line 137) | public void setIcon(@Nullable String icon) {
method getUsername (line 141) | @Nullable public String getUsername() {
method setUsername (line 145) | public void setUsername(@Nullable String username) {
method getDefaultMessage (line 149) | @Override
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/TelegramNotifier.java
class TelegramNotifier (line 34) | public class TelegramNotifier extends AbstractContentNotifier {
method TelegramNotifier (line 67) | public TelegramNotifier(InstanceRepository repository, RestTemplate re...
method doNotify (line 72) | @Override
method buildUrl (line 78) | protected String buildUrl() {
method createMessage (line 83) | private Map<String, Object> createMessage(InstanceEvent event, Instanc...
method getDefaultMessage (line 92) | @Override
method setRestTemplate (line 97) | public void setRestTemplate(RestTemplate restTemplate) {
method getApiUrl (line 101) | public String getApiUrl() {
method setApiUrl (line 105) | public void setApiUrl(String apiUrl) {
method getChatId (line 109) | @Nullable public String getChatId() {
method setChatId (line 113) | public void setChatId(@Nullable String chatId) {
method getAuthToken (line 117) | @Nullable public String getAuthToken() {
method setAuthToken (line 121) | public void setAuthToken(@Nullable String authToken) {
method isDisableNotify (line 125) | public boolean isDisableNotify() {
method setDisableNotify (line 129) | public void setDisableNotify(boolean disableNotify) {
method getParseMode (line 133) | public String getParseMode() {
method setParseMode (line 137) | public void setParseMode(String parseMode) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/WebexNotifier.java
class WebexNotifier (line 45) | public class WebexNotifier extends AbstractContentNotifier {
method WebexNotifier (line 75) | public WebexNotifier(InstanceRepository repository, RestTemplate restT...
method doNotify (line 87) | @Override
method createMessage (line 111) | protected Object createMessage(InstanceEvent event, Instance instance) {
method getDefaultMessage (line 118) | @Override
method setRestTemplate (line 123) | public void setRestTemplate(RestTemplate restTemplate) {
method getUrl (line 127) | public URI getUrl() {
method setUrl (line 131) | public void setUrl(URI url) {
method getAuthToken (line 135) | @Nullable public String getAuthToken() {
method setAuthToken (line 139) | public void setAuthToken(@Nullable String authToken) {
method getRoomId (line 143) | @Nullable public String getRoomId() {
method setRoomId (line 147) | public void setRoomId(@Nullable String roomId) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/filter/AbstractContentNotifier.java
class AbstractContentNotifier (line 72) | public abstract class AbstractContentNotifier extends AbstractStatusChan...
method AbstractContentNotifier (line 78) | public AbstractContentNotifier(InstanceRepository repository) {
method getMessage (line 84) | public String getMessage() {
method setMessage (line 88) | public void setMessage(String message) {
method createContent (line 103) | protected String createContent(InstanceEvent event, Instance instance) {
method buildContentModel (line 122) | protected Map<String, Object> buildContentModel(InstanceEvent event, I...
method getDefaultMessage (line 141) | protected abstract String getDefaultMessage();
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/filter/AbstractNotificationFilter.java
class AbstractNotificationFilter (line 21) | public abstract class AbstractNotificationFilter implements Notification...
method AbstractNotificationFilter (line 27) | public AbstractNotificationFilter() {
method getId (line 31) | @Override
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/filter/ApplicationNameNotificationFilter.java
class ApplicationNameNotificationFilter (line 26) | public class ApplicationNameNotificationFilter extends ExpiringNotificat...
method ApplicationNameNotificationFilter (line 30) | public ApplicationNameNotificationFilter(String applicationName, @Null...
method doFilter (line 35) | @Override
method getApplicationName (line 40) | public String getApplicationName() {
method toString (line 44) | @Override
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/filter/ExpiringNotificationFilter.java
class ExpiringNotificationFilter (line 26) | public abstract class ExpiringNotificationFilter extends AbstractNotific...
method ExpiringNotificationFilter (line 30) | public ExpiringNotificationFilter(@Nullable Instant expiry) {
method isExpired (line 34) | public boolean isExpired() {
method filter (line 38) | @Override
method doFilter (line 43) | protected abstract boolean doFilter(InstanceEvent event, Instance inst...
method getExpiry (line 45) | @Nullable public Instant getExpiry() {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/filter/FilteringNotifier.java
class FilteringNotifier (line 45) | public class FilteringNotifier extends AbstractEventNotifier {
method FilteringNotifier (line 57) | public FilteringNotifier(Notifier delegate, InstanceRepository reposit...
method shouldNotify (line 63) | @Override
method doNotify (line 68) | @Override
method filter (line 73) | private boolean filter(InstanceEvent event, Instance instance) {
method cleanUp (line 84) | private void cleanUp() {
method addFilter (line 98) | public void addFilter(NotificationFilter filter) {
method removeFilter (line 103) | @Nullable public NotificationFilter removeFilter(String id) {
method getNotificationFilters (line 108) | public Map<String, NotificationFilter> getNotificationFilters() {
method setCleanupInterval (line 112) | public void setCleanupInterval(Duration cleanupInterval) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/filter/InstanceIdNotificationFilter.java
class InstanceIdNotificationFilter (line 27) | public class InstanceIdNotificationFilter extends ExpiringNotificationFi...
method InstanceIdNotificationFilter (line 31) | public InstanceIdNotificationFilter(InstanceId instanceId, @Nullable I...
method doFilter (line 36) | @Override
method getInstanceId (line 41) | public InstanceId getInstanceId() {
method toString (line 45) | @Override
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/filter/NotificationFilter.java
type NotificationFilter (line 22) | public interface NotificationFilter {
method getId (line 24) | String getId();
method filter (line 26) | boolean filter(InstanceEvent event, Instance instance);
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/filter/web/NotificationFilterController.java
class NotificationFilterController (line 46) | @AdminController
method NotificationFilterController (line 52) | public NotificationFilterController(FilteringNotifier filteringNotifie...
method getFilters (line 56) | @GetMapping(path = "/notifications/filters", produces = MimeTypeUtils....
method addFilter (line 61) | @PostMapping(path = "/notifications/filters", produces = MimeTypeUtils...
method deleteFilter (line 75) | @DeleteMapping(path = "/notifications/filters/{id}")
method createFilter (line 86) | private NotificationFilter createFilter(@Nullable InstanceId id, Strin...
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/AbstractEventHandler.java
class AbstractEventHandler (line 32) | public abstract class AbstractEventHandler<T extends InstanceEvent> {
method AbstractEventHandler (line 44) | protected AbstractEventHandler(Publisher<InstanceEvent> publisher, Cla...
method start (line 49) | public void start() {
method handle (line 62) | protected abstract Publisher<Void> handle(Flux<T> publisher);
method createScheduler (line 64) | protected Scheduler createScheduler() {
method stop (line 68) | public void stop() {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/ApiMediaTypeHandler.java
class ApiMediaTypeHandler (line 24) | public class ApiMediaTypeHandler {
method isApiMediaType (line 26) | public boolean isApiMediaType(MediaType mediaType) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/ApplicationRegistry.java
class ApplicationRegistry (line 48) | public class ApplicationRegistry {
method ApplicationRegistry (line 54) | public ApplicationRegistry(InstanceRegistry instanceRegistry, Instance...
method getApplications (line 63) | public Flux<Application> getApplications() {
method getApplication (line 75) | public Mono<Application> getApplication(String name) {
method getApplicationStream (line 80) | public Flux<Application> getApplicationStream() {
method deregister (line 87) | public Flux<InstanceId> deregister(String name) {
method getApplicationForInstance (line 92) | protected Tuple2<String, Flux<Instance>> getApplicationForInstance(Ins...
method toApplication (line 97) | protected Mono<Application> toApplication(String name, Flux<Instance> ...
method getBuildVersion (line 109) | @Nullable protected BuildVersion getBuildVersion(List<Instance> instan...
method getStatus (line 127) | protected Tuple2<String, Instant> getStatus(List<Instance> instances) {
method getMax (line 155) | protected Instant getMax(Instant t1, Instant t2) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/CloudFoundryInstanceIdGenerator.java
class CloudFoundryInstanceIdGenerator (line 30) | public class CloudFoundryInstanceIdGenerator implements InstanceIdGenera...
method CloudFoundryInstanceIdGenerator (line 34) | public CloudFoundryInstanceIdGenerator(InstanceIdGenerator fallbackIdG...
method generateId (line 38) | @Override
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/EndpointDetectionTrigger.java
class EndpointDetectionTrigger (line 29) | public class EndpointDetectionTrigger extends AbstractEventHandler<Insta...
method EndpointDetectionTrigger (line 35) | public EndpointDetectionTrigger(EndpointDetector endpointDetector, Pub...
method handle (line 40) | @Override
method detectEndpoints (line 48) | protected Mono<Void> detectEndpoints(InstanceEvent event) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/EndpointDetector.java
class EndpointDetector (line 32) | public class EndpointDetector {
method EndpointDetector (line 40) | public EndpointDetector(InstanceRepository repository, EndpointDetecti...
method detectEndpoints (line 45) | public Mono<Void> detectEndpoints(InstanceId id) {
method doDetectEndpoints (line 49) | private Mono<Instance> doDetectEndpoints(Instance instance) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/HashingInstanceUrlIdGenerator.java
class HashingInstanceUrlIdGenerator (line 29) | public class HashingInstanceUrlIdGenerator implements InstanceIdGenerator {
method generateId (line 34) | @Override
method encodeHex (line 46) | private char[] encodeHex(byte[] bytes, int offset, int length) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/InfoUpdateTrigger.java
class InfoUpdateTrigger (line 33) | public class InfoUpdateTrigger extends AbstractEventHandler<InstanceEven...
method InfoUpdateTrigger (line 41) | public InfoUpdateTrigger(InfoUpdater infoUpdater, Publisher<InstanceEv...
method handle (line 48) | @Override
method updateInfo (line 56) | protected Mono<Void> updateInfo(InstanceId instanceId) {
method start (line 63) | @Override
method stop (line 69) | @Override
method setInterval (line 75) | public void setInterval(Duration updateInterval) {
method setLifetime (line 79) | public void setLifetime(Duration infoLifetime) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/InfoUpdater.java
class InfoUpdater (line 42) | public class InfoUpdater {
method InfoUpdater (line 55) | public InfoUpdater(InstanceRepository repository, InstanceWebClient in...
method updateInfo (line 62) | public Mono<Void> updateInfo(InstanceId id) {
method doUpdateInfo (line 66) | protected Mono<Instance> doUpdateInfo(Instance instance) {
method convertInfo (line 84) | protected Mono<Info> convertInfo(Instance instance, ClientResponse res...
method convertInfo (line 96) | protected Info convertInfo(Instance instance, Throwable ex) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/InstanceFilter.java
type InstanceFilter (line 28) | @FunctionalInterface
method filter (line 31) | boolean filter(Instance instance);
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/InstanceIdGenerator.java
type InstanceIdGenerator (line 22) | public interface InstanceIdGenerator {
method generateId (line 29) | InstanceId generateId(Registration registration);
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/InstanceRegistry.java
class InstanceRegistry (line 33) | public class InstanceRegistry {
method InstanceRegistry (line 41) | public InstanceRegistry(InstanceRepository repository, InstanceIdGener...
method register (line 52) | public Mono<InstanceId> register(Registration registration) {
method getInstances (line 68) | public Flux<Instance> getInstances() {
method getInstances (line 77) | public Flux<Instance> getInstances(String name) {
method getInstance (line 86) | public Mono<Instance> getInstance(InstanceId id) {
method deregister (line 95) | public Mono<InstanceId> deregister(InstanceId id) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/IntervalCheck.java
class IntervalCheck (line 49) | @Slf4j
method IntervalCheck (line 76) | public IntervalCheck(String name, Function<InstanceId, Mono<Void>> che...
method start (line 86) | public void start() {
method createRetrySpec (line 101) | private Retry createRetrySpec() {
method markAsChecked (line 107) | public void markAsChecked(InstanceId instanceId) {
method checkAllInstances (line 111) | protected Publisher<Void> checkAllInstances() {
method stop (line 121) | public void stop() {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/StatusUpdateTrigger.java
class StatusUpdateTrigger (line 32) | public class StatusUpdateTrigger extends AbstractEventHandler<InstanceEv...
method StatusUpdateTrigger (line 40) | public StatusUpdateTrigger(StatusUpdater statusUpdater, Publisher<Inst...
method handle (line 48) | @Override
method updateStatus (line 56) | protected Mono<Void> updateStatus(InstanceId instanceId) {
method start (line 66) | @Override
method stop (line 72) | @Override
method setInterval (line 78) | public void setInterval(Duration updateInterval) {
method setLifetime (line 82) | public void setLifetime(Duration statusLifetime) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/StatusUpdater.java
class StatusUpdater (line 50) | @Slf4j
method timeout (line 65) | public StatusUpdater timeout(Duration timeout) {
method updateStatus (line 70) | public Mono<Void> updateStatus(InstanceId id) {
method doUpdateStatus (line 74) | protected Mono<Instance> doUpdateStatus(Instance instance) {
method getTimeoutWithMargin (line 95) | private Duration getTimeoutWithMargin() {
method convertStatusInfo (line 99) | protected Mono<StatusInfo> convertStatusInfo(ClientResponse response) {
method getStatusInfoFromStatus (line 118) | @SuppressWarnings("unchecked")
method handleError (line 135) | protected Mono<StatusInfo> handleError(Throwable ex) {
method logError (line 142) | protected void logError(Instance instance, Throwable ex) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/endpoints/ChainingStrategy.java
class ChainingStrategy (line 25) | public class ChainingStrategy implements EndpointDetectionStrategy {
method ChainingStrategy (line 29) | public ChainingStrategy(EndpointDetectionStrategy... delegates) {
method detectEndpoints (line 35) | @Override
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/endpoints/EndpointDetectionStrategy.java
type EndpointDetectionStrategy (line 24) | public interface EndpointDetectionStrategy {
method detectEndpoints (line 26) | Mono<Endpoints> detectEndpoints(Instance instance);
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/endpoints/ProbeEndpointsStrategy.java
class ProbeEndpointsStrategy (line 42) | public class ProbeEndpointsStrategy implements EndpointDetectionStrategy {
method ProbeEndpointsStrategy (line 50) | public ProbeEndpointsStrategy(InstanceWebClient instanceWebClient, Str...
method detectEndpoints (line 57) | @Override
method detectEndpoint (line 70) | protected Mono<DetectedEndpoint> detectEndpoint(Instance instance, End...
method convert (line 89) | protected Function<ClientResponse, Mono<DetectedEndpoint>> convert(Ins...
method convert (line 105) | protected Mono<Endpoints> convert(List<DetectedEndpoint> endpoints) {
method of (line 125) | private static DetectedEndpoint of(EndpointDefinition endpointDefiniti...
method create (line 133) | private static EndpointDefinition create(String idWithPath) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/endpoints/QueryIndexEndpointStrategy.java
class QueryIndexEndpointStrategy (line 41) | public class QueryIndexEndpointStrategy implements EndpointDetectionStra...
method QueryIndexEndpointStrategy (line 49) | public QueryIndexEndpointStrategy(InstanceWebClient instanceWebClient,...
method detectEndpoints (line 54) | @Override
method convert (line 76) | protected Function<ClientResponse, Mono<Endpoints>> convert(Instance i...
method alignWithManagementUrl (line 98) | protected Function<Endpoints, Endpoints> alignWithManagementUrl(Instan...
method convertResponse (line 116) | protected Mono<Endpoints> convertResponse(Response response) {
class Response (line 126) | @Data
class EndpointRef (line 132) | @Data
method EndpointRef (line 139) | @JsonCreator
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/AdminServerModule.java
class AdminServerModule (line 46) | public class AdminServerModule extends SimpleModule {
method AdminServerModule (line 53) | public AdminServerModule(String[] metadataKeyPatterns) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/BuildVersionMixin.java
class BuildVersionMixin (line 29) | public abstract class BuildVersionMixin {
method valueOf (line 31) | @JsonCreator
method getValue (line 36) | @JsonValue
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/EndpointMixin.java
class EndpointMixin (line 29) | public abstract class EndpointMixin {
method of (line 31) | @JsonCreator
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/EndpointsMixin.java
class EndpointsMixin (line 32) | public abstract class EndpointsMixin {
method of (line 34) | @JsonCreator
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/InfoMixin.java
class InfoMixin (line 33) | @JsonDeserialize(builder = InfoMixin.Builder.class)
method getValues (line 36) | @JsonAnyGetter
class Builder (line 39) | public static class Builder {
method set (line 43) | @JsonAnySetter
method build (line 49) | public Info build() {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/InstanceDeregisteredEventMixin.java
class InstanceDeregisteredEventMixin (line 32) | public abstract class InstanceDeregisteredEventMixin {
method InstanceDeregisteredEventMixin (line 34) | @JsonCreator
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/InstanceEndpointsDetectedEventMixin.java
class InstanceEndpointsDetectedEventMixin (line 34) | public abstract class InstanceEndpointsDetectedEventMixin {
method InstanceEndpointsDetectedEventMixin (line 36) | @JsonCreator
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/InstanceEventMixin.java
class InstanceEventMixin (line 35) | @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXIS...
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/InstanceIdMixin.java
class InstanceIdMixin (line 29) | public abstract class InstanceIdMixin {
method of (line 31) | @JsonCreator
method getValue (line 36) | @JsonValue
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/InstanceInfoChangedEventMixin.java
class InstanceInfoChangedEventMixin (line 33) | public abstract class InstanceInfoChangedEventMixin {
method InstanceInfoChangedEventMixin (line 35) | @JsonCreator
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/InstanceRegisteredEventMixin.java
class InstanceRegisteredEventMixin (line 33) | public abstract class InstanceRegisteredEventMixin {
method InstanceRegisteredEventMixin (line 35) | @JsonCreator
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/InstanceRegistrationUpdatedEventMixin.java
class InstanceRegistrationUpdatedEventMixin (line 34) | public abstract class InstanceRegistrationUpdatedEventMixin {
method InstanceRegistrationUpdatedEventMixin (line 36) | @JsonCreator
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/InstanceStatusChangedEventMixin.java
class InstanceStatusChangedEventMixin (line 33) | public abstract class InstanceStatusChangedEventMixin {
method InstanceStatusChangedEventMixin (line 35) | @JsonCreator
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/RegistrationBeanSerializerModifier.java
class RegistrationBeanSerializerModifier (line 29) | public class RegistrationBeanSerializerModifier extends ValueSerializerM...
method RegistrationBeanSerializerModifier (line 33) | @SuppressWarnings("unchecked")
method changeProperties (line 38) | @Override
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/RegistrationDeserializer.java
class RegistrationDeserializer (line 26) | public class RegistrationDeserializer extends StdDeserializer<Registrati...
method RegistrationDeserializer (line 28) | public RegistrationDeserializer() {
method deserialize (line 32) | @Override
method firstNonNullAsString (line 60) | private String firstNonNullAsString(JsonNode node, String... fieldName...
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/SanitizingMapSerializer.java
class SanitizingMapSerializer (line 28) | public class SanitizingMapSerializer extends StdSerializer<Map<String, S...
method SanitizingMapSerializer (line 32) | @SuppressWarnings("unchecked")
method createPatterns (line 38) | private static Pattern[] createPatterns(String... keys) {
method serialize (line 42) | @Override
method sanitize (line 51) | @Nullable private String sanitize(String key, @Nullable String value) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/StatusInfoMixin.java
class StatusInfoMixin (line 33) | public abstract class StatusInfoMixin {
method valueOf (line 35) | @JsonCreator
method isUp (line 41) | @JsonIgnore
method isOffline (line 44) | @JsonIgnore
method isDown (line 47) | @JsonIgnore
method isUnknown (line 50) | @JsonIgnore
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/TagsMixin.java
class TagsMixin (line 31) | public abstract class TagsMixin {
method from (line 33) | @JsonCreator
method getValues (line 38) | @JsonAnyGetter
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/web/ApplicationsController.java
class ApplicationsController (line 42) | @AdminController
method ApplicationsController (line 57) | public ApplicationsController(ApplicationRegistry registry, Applicatio...
method applications (line 62) | @GetMapping(path = "/applications", produces = MediaType.APPLICATION_J...
method refreshApplications (line 67) | @PostMapping(path = "/applications", produces = MediaType.APPLICATION_...
method application (line 72) | @GetMapping(path = "/applications/{name}", produces = MediaType.APPLIC...
method applicationsStream (line 77) | @GetMapping(path = "/applications", produces = MediaType.TEXT_EVENT_ST...
method unregister (line 84) | @DeleteMapping(path = "/applications/{name}")
method ping (line 93) | @SuppressWarnings("unchecked")
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/web/HttpHeaderFilter.java
class HttpHeaderFilter (line 35) | public class HttpHeaderFilter {
method HttpHeaderFilter (line 43) | public HttpHeaderFilter(Set<String> ignoredHeaders) {
method filterHeaders (line 49) | public HttpHeaders filterHeaders(HttpHeaders headers) {
method includeHeader (line 58) | private boolean includeHeader(String header) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/web/InstanceWebProxy.java
class InstanceWebProxy (line 58) | public class InstanceWebProxy {
method InstanceWebProxy (line 68) | public InstanceWebProxy(InstanceWebClient instanceWebClient) {
method forward (line 72) | public <V> Mono<V> forward(Mono<Instance> instanceMono, ForwardRequest...
method forward (line 85) | public Flux<InstanceResponse> forward(Flux<Instance> instances, Forwar...
method forward (line 98) | private <V> Mono<V> forward(Instance instance, ForwardRequest forwardR...
method requiresBody (line 135) | private boolean requiresBody(HttpMethod method) {
class InstanceResponse (line 139) | @lombok.Data
class ForwardRequest (line 157) | @lombok.Data
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/web/InstancesController.java
class InstancesController (line 50) | @AdminController
method InstancesController (line 65) | public InstancesController(InstanceRegistry registry, InstanceEventSto...
method register (line 76) | @PostMapping(path = "/instances", consumes = MediaType.APPLICATION_JSO...
method instances (line 92) | @GetMapping(path = "/instances", produces = MediaType.APPLICATION_JSON...
method instances (line 101) | @GetMapping(path = "/instances", produces = MediaType.APPLICATION_JSON...
method instance (line 112) | @GetMapping(path = "/instances/{id}", produces = MediaType.APPLICATION...
method unregister (line 126) | @DeleteMapping(path = "/instances/{id}")
method events (line 139) | @GetMapping(path = "/instances/events", produces = MediaType.APPLICATI...
method eventStream (line 149) | @GetMapping(path = "/instances/events", produces = MediaType.TEXT_EVEN...
method instanceStream (line 160) | @GetMapping(path = "/instances/{id}", produces = MediaType.TEXT_EVENT_...
method ping (line 189) | @SuppressWarnings("unchecked")
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/web/PathUtils.java
class PathUtils (line 21) | public final class PathUtils {
method PathUtils (line 23) | private PathUtils() {
method normalizePath (line 26) | public static String normalizePath(String path) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/web/client/BasicAuthHttpHeaderProvider.java
class BasicAuthHttpHeaderProvider (line 38) | public class BasicAuthHttpHeaderProvider implements HttpHeadersProvider {
method BasicAuthHttpHeaderProvider (line 50) | public BasicAuthHttpHeaderProvider(@Nullable String defaultUserName, @...
method BasicAuthHttpHeaderProvider (line 57) | public BasicAuthHttpHeaderProvider() {
method getMetadataValue (line 61) | private static @Nullable String getMetadataValue(Instance instance, St...
method base64Encode (line 72) | private static String base64Encode(byte[] src) {
method getHeaders (line 80) | @Override
method encode (line 105) | protected String encode(String username, String password) {
class InstanceCredentials (line 110) | @lombok.Data
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/web/client/CloudFoundryHttpHeaderProvider.java
class CloudFoundryHttpHeaderProvider (line 30) | public class CloudFoundryHttpHeaderProvider implements HttpHeadersProvid...
method getHeaders (line 32) | @Override
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/web/client/CompositeHttpHeadersProvider.java
class CompositeHttpHeadersProvider (line 25) | public class CompositeHttpHeadersProvider implements HttpHeadersProvider {
method CompositeHttpHeadersProvider (line 29) | public CompositeHttpHeadersProvider(Collection<HttpHeadersProvider> de...
method getHeaders (line 33) | @Override
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/web/client/HttpHeadersProvider.java
type HttpHeadersProvider (line 29) | public interface HttpHeadersProvider {
method getHeaders (line 31) | HttpHeaders getHeaders(Instance instance);
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/web/client/InstanceExchangeFilterFunction.java
type InstanceExchangeFilterFunction (line 32) | @FunctionalInterface
method filter (line 35) | Mono<ClientResponse> filter(Instance instance, ClientRequest request, ...
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/web/client/InstanceExchangeFilterFunctions.java
class InstanceExchangeFilterFunctions (line 49) | public final class InstanceExchangeFilterFunctions {
method InstanceExchangeFilterFunctions (line 63) | private InstanceExchangeFilterFunctions() {
method addHeaders (line 66) | public static InstanceExchangeFilterFunction addHeaders(HttpHeadersPro...
method addHeadersReactive (line 75) | public static InstanceExchangeFilterFunction addHeadersReactive(Reacti...
method rewriteEndpointUrl (line 85) | public static InstanceExchangeFilterFunction rewriteEndpointUrl() {
method rewriteUrl (line 120) | private static URI rewriteUrl(UriComponents oldUrl, String targetUrl) {
method convertLegacyEndpoints (line 131) | public static InstanceExchangeFilterFunction convertLegacyEndpoints(Li...
method isLegacyResponse (line 154) | private static Boolean isLegacyResponse(ClientResponse response) {
method convertLegacyResponse (line 161) | private static ClientResponse convertLegacyResponse(LegacyEndpointConv...
method setDefaultAcceptHeader (line 168) | public static InstanceExchangeFilterFunction setDefaultAcceptHeader() {
method retry (line 182) | public static InstanceExchangeFilterFunction retry(int defaultRetries,...
method timeout (line 193) | public static InstanceExchangeFilterFunction timeout(Duration defaultT...
method logfileAcceptWorkaround (line 205) | public static InstanceExchangeFilterFunction logfileAcceptWorkaround() {
method handleCookies (line 223) | public static InstanceExchangeFilterFunction handleCookies(final PerIn...
method enrichRequestWithStoredCookies (line 235) | private static ClientRequest enrichRequestWithStoredCookies(final Inst...
method storeCookiesFromResponse (line 248) | private static ClientResponse storeCookiesFromResponse(final InstanceI...
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/web/client/InstanceWebClient.java
class InstanceWebClient (line 31) | public class InstanceWebClient {
method InstanceWebClient (line 37) | protected InstanceWebClient(WebClient webClient) {
method instance (line 41) | public WebClient instance(Mono<Instance> instance) {
method instance (line 45) | public WebClient instance(Instance instance) {
method builder (line 49) | public static InstanceWebClient.Builder builder() {
method builder (line 53) | public static InstanceWebClient.Builder builder(WebClient.Builder webC...
method setInstance (line 57) | private static ExchangeFilterFunction setInstance(Mono<Instance> insta...
method toExchangeFilterFunction (line 64) | private static ExchangeFilterFunction toExchangeFilterFunction(Instanc...
class Builder (line 72) | public static class Builder {
method Builder (line 78) | public Builder() {
method Builder (line 82) | public Builder(WebClient.Builder webClientBuilder) {
method Builder (line 86) | protected Builder(Builder other) {
method filter (line 91) | public Builder filter(InstanceExchangeFilterFunction filter) {
method filters (line 96) | public Builder filters(Consumer<List<InstanceExchangeFilterFunction>...
method webClient (line 101) | public Builder webClient(WebClient.Builder builder) {
method clone (line 106) | public Builder clone() {
method build (line 110) | public InstanceWebClient build() {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/web/client/InstanceWebClientCustomizer.java
type InstanceWebClientCustomizer (line 25) | @FunctionalInterface
method customize (line 28) | void customize(InstanceWebClient.Builder instanceWebClientBuilder);
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/web/client/LegacyEndpointConverter.java
class LegacyEndpointConverter (line 27) | public class LegacyEndpointConverter {
method LegacyEndpointConverter (line 33) | protected LegacyEndpointConverter(String endpointId, Function<Flux<Dat...
method canConvert (line 38) | public boolean canConvert(Object endpointId) {
method convert (line 42) | public Flux<DataBuffer> convert(Flux<DataBuffer> body) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/web/client/LegacyEndpointConverters.java
class LegacyEndpointConverters (line 57) | public final class LegacyEndpointConverters {
method LegacyEndpointConverters (line 84) | private LegacyEndpointConverters() {
method health (line 87) | public static LegacyEndpointConverter health() {
method env (line 92) | public static LegacyEndpointConverter env() {
method httptrace (line 97) | public static LegacyEndpointConverter httptrace() {
method threaddump (line 102) | public static LegacyEndpointConverter threaddump() {
method liquibase (line 107) | public static LegacyEndpointConverter liquibase() {
method flyway (line 112) | public static LegacyEndpointConverter flyway() {
method info (line 117) | public static LegacyEndpointConverter info() {
method beans (line 121) | public static LegacyEndpointConverter beans() {
method configprops (line 126) | public static LegacyEndpointConverter configprops() {
method mappings (line 131) | public static LegacyEndpointConverter mappings() {
method startup (line 136) | public static LegacyEndpointConverter startup() {
method convertMappingHandlerMethod (line 140) | static Map<String, Object> convertMappingHandlerMethod(String methodDe...
method convertUsing (line 209) | @SuppressWarnings("unchecked")
method convertHealth (line 219) | @SuppressWarnings("unchecked")
method convertEnv (line 242) | @SuppressWarnings("unchecked")
method convertHttptrace (line 268) | private static Map<String, Object> convertHttptrace(List<Map<String, O...
method convertHttptrace (line 272) | @SuppressWarnings("unchecked")
method convertThreaddump (line 315) | private static Map<String, Object> convertThreaddump(List<Object> thre...
method convertLiquibase (line 319) | @SuppressWarnings("unchecked")
method convertLiquibaseChangesets (line 328) | private static List<Map<String, Object>> convertLiquibaseChangesets(Li...
method convertFlyway (line 352) | @SuppressWarnings("unchecked")
method convertFlywayMigrations (line 360) | private static List<Map<String, Object>> convertFlywayMigrations(List<...
method convertBeans (line 370) | private static Map<String, Object> convertBeans(List<Map<String, Objec...
method convertConfigprops (line 396) | private static Map<String, Object> convertConfigprops(Map<String, Obje...
method convertMappings (line 413) | private static Map<String, Object> convertMappings(Map<String, Object>...
method convertMappingConditions (line 441) | private static Map<String, Object> convertMappingConditions(String pre...
method getInstant (line 501) | @Nullable private static Instant getInstant(Object o) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/web/client/RefreshInstancesEvent.java
class RefreshInstancesEvent (line 21) | public class RefreshInstancesEvent extends ApplicationEvent {
method RefreshInstancesEvent (line 23) | public RefreshInstancesEvent(Object source) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/web/client/cookies/CookieStoreCleanupTrigger.java
class CookieStoreCleanupTrigger (line 32) | public class CookieStoreCleanupTrigger extends AbstractEventHandler<Inst...
method CookieStoreCleanupTrigger (line 43) | public CookieStoreCleanupTrigger(final Publisher<InstanceEvent> publis...
method handle (line 50) | @Override
method cleanupCookieStore (line 58) | private void cleanupCookieStore(final InstanceDeregisteredEvent event) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/web/client/cookies/JdkPerInstanceCookieStore.java
class JdkPerInstanceCookieStore (line 49) | public class JdkPerInstanceCookieStore implements PerInstanceCookieStore {
method JdkPerInstanceCookieStore (line 70) | public JdkPerInstanceCookieStore() {
method JdkPerInstanceCookieStore (line 79) | public JdkPerInstanceCookieStore(final CookiePolicy cookiePolicy) {
method get (line 84) | @Override
method put (line 105) | @Override
method cleanupInstance (line 115) | @Override
method getCookieHandler (line 128) | protected CookieHandler getCookieHandler(final InstanceId instanceId) {
method createCookieHandler (line 132) | protected CookieHandler createCookieHandler(final InstanceId instanceI...
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/web/client/cookies/PerInstanceCookieStore.java
type PerInstanceCookieStore (line 29) | public interface PerInstanceCookieStore {
method get (line 43) | MultiValueMap<String, String> get(InstanceId instanceId, URI requestUri,
method put (line 54) | void put(InstanceId instanceId, URI requestUri, MultiValueMap<String, ...
method cleanupInstance (line 61) | void cleanupInstance(InstanceId instanceId);
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/web/client/exception/InstanceWebClientException.java
class InstanceWebClientException (line 19) | public class InstanceWebClientException extends RuntimeException {
method InstanceWebClientException (line 21) | public InstanceWebClientException(String message) {
method InstanceWebClientException (line 25) | public InstanceWebClientException(String message, Throwable cause) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/web/client/exception/ResolveEndpointException.java
class ResolveEndpointException (line 19) | public class ResolveEndpointException extends InstanceWebClientException {
method ResolveEndpointException (line 21) | public ResolveEndpointException(String message) {
method ResolveEndpointException (line 25) | public ResolveEndpointException(String message, Throwable cause) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/web/client/exception/ResolveInstanceException.java
class ResolveInstanceException (line 19) | public class ResolveInstanceException extends InstanceWebClientException {
method ResolveInstanceException (line 21) | public ResolveInstanceException(String message) {
method ResolveInstanceException (line 25) | public ResolveInstanceException(String message, Throwable cause) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/web/client/reactive/CompositeReactiveHttpHeadersProvider.java
class CompositeReactiveHttpHeadersProvider (line 28) | public class CompositeReactiveHttpHeadersProvider implements ReactiveHtt...
method CompositeReactiveHttpHeadersProvider (line 32) | public CompositeReactiveHttpHeadersProvider(Collection<ReactiveHttpHea...
method getHeaders (line 36) | @Override
method mergeMonosToHeaders (line 45) | private HttpHeaders mergeMonosToHeaders(Object[] e) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/web/client/reactive/ReactiveHttpHeadersProvider.java
type ReactiveHttpHeadersProvider (line 28) | public interface ReactiveHttpHeadersProvider {
method getHeaders (line 30) | Mono<HttpHeaders> getHeaders(Instance instance);
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/web/reactive/AdminControllerHandlerMapping.java
class AdminControllerHandlerMapping (line 30) | public class AdminControllerHandlerMapping extends RequestMappingHandler...
method AdminControllerHandlerMapping (line 34) | public AdminControllerHandlerMapping(String adminContextPath) {
method isHandler (line 38) | @Override
method registerHandlerMethod (line 43) | @Override
method withPrefix (line 48) | private RequestMappingInfo withPrefix(RequestMappingInfo mapping) {
method withNewPatterns (line 55) | private String[] withNewPatterns(PatternsRequestCondition patternsRequ...
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/web/reactive/InstancesProxyController.java
class InstancesProxyController (line 50) | @AdminController
method InstancesProxyController (line 69) | public InstancesProxyController(String adminContextPath, Set<String> i...
method endpointProxy (line 77) | @RequestMapping(path = INSTANCE_MAPPED_PATH, method = { RequestMethod....
method endpointProxy (line 93) | @ResponseBody
method createForwardRequest (line 114) | private InstanceWebProxy.ForwardRequest createForwardRequest(ServerHtt...
method getLocalPath (line 126) | private String getLocalPath(String pathPattern, ServerHttpRequest requ...
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/web/servlet/AdminControllerHandlerMapping.java
class AdminControllerHandlerMapping (line 31) | public class AdminControllerHandlerMapping extends RequestMappingHandler...
method AdminControllerHandlerMapping (line 35) | public AdminControllerHandlerMapping(String adminContextPath) {
method isHandler (line 39) | @Override
method registerHandlerMethod (line 44) | @Override
method withPrefix (line 49) | private RequestMappingInfo withPrefix(RequestMappingInfo mapping) {
method withNewPatterns (line 59) | private String[] withNewPatterns(Set<PathPattern> patterns) {
FILE: spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/web/servlet/InstancesProxyController.java
class InstancesProxyController (line 57) | @AdminController
method InstancesProxyController (line 76) | public InstancesProxyController(String adminContextPath, Set<String> i...
method instanceProxy (line 84) | @ResponseBody
method endpointProxy (line 133) | @ResponseBody
method createForwardRequest (line 148) | private InstanceWebProxy.ForwardRequest createForwardRequest(ServletSe...
method getLocalPath (line 164) | private String getLocalPath(String pathPattern, ServletServerHttpReque...
method writeAndFlush (line 171) | private Mono<Void> writeAndFlush(Flux<DataBuffer> body, OutputStream r...
FILE: spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/AbstractAdminApplicationTest.java
class AbstractAdminApplicationTest (line 41) | @Getter
method setUp (line 48) | public void setUp(int port) {
method lifecycle (line 53) | @Test
method getEventStream (line 76) | protected Flux<JSONObject> getEventStream() {
method registerInstance (line 87) | protected URI registerInstance() {
method getInstance (line 99) | protected Mono<Boolean> getInstance(URI uri) {
method listInstances (line 114) | protected Mono<Boolean> listInstances() {
method listEmptyInstances (line 129) | protected Mono<Boolean> listEmptyInstances() {
method deregisterInstance (line 144) | protected Mono<Boolean> deregisterInstance(URI uri) {
method createRegistration (line 153) | private Registration createRegistration() {
method createWebClient (line 162) | protected WebTestClient createWebClient(int port) {
FILE: spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/AdminApplicationHazelcastTest.java
class AdminApplicationHazelcastTest (line 58) | class AdminApplicationHazelcastTest extends AbstractAdminApplicationTest {
method setUp (line 66) | @BeforeEach
method lifecycle (line 86) | @Test
method shutdown (line 116) | @AfterEach
class TestAdminApplication (line 122) | @SpringBootConfiguration
method securityWebFilterChain (line 128) | @Bean
method hazelcastConfig (line 135) | @Bean
FILE: spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/AdminReactiveApplicationTest.java
class AdminReactiveApplicationTest (line 33) | public class AdminReactiveApplicationTest extends AbstractAdminApplicati...
method setUp (line 37) | @BeforeEach
method shutdown (line 47) | @AfterEach
class TestAdminApplication (line 52) | @EnableAdminServer
method securityWebFilterChain (line 58) | @Bean
FILE: spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/AdminServletApplicationTest.java
class AdminServletApplicationTest (line 34) | public class AdminServletApplicationTest extends AbstractAdminApplicatio...
method setUp (line 38) | @BeforeEach
method shutdown (line 48) | @AfterEach
class TestAdminApplication (line 53) | @EnableAdminServer
class SecurityConfiguration (line 58) | @Configuration(proxyBeanMethods = false)
method filterChain (line 61) | @Bean
FILE: spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/config/AdminServerAutoConfigurationTest.java
class AdminServerAutoConfigurationTest (line 42) | class AdminServerAutoConfigurationTest {
method simpleConfig (line 50) | @Test
method hazelcastConfig (line 59) | @Test
class TestHazelcastConfig (line 67) | public static class TestHazelcastConfig {
method config (line 69) | @Bean
method notifier (line 74) | @Bean
FILE: spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/config/AdminServerCloudFoundryAutoConfigurationTest.java
class AdminServerCloudFoundryAutoConfigurationTest (line 34) | class AdminServerCloudFoundryAutoConfigurationTest {
method non_cloud_platform (line 42) | @Test
method cloudfoundry (line 50) | @Test
FILE: spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/config/AdminServerInstanceWebClientConfigurationTest.java
class AdminServerInstanceWebClientConfigurationTest (line 33) | class AdminServerInstanceWebClientConfigurationTest {
method simpleConfig (line 41) | @Test
FILE: spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/config/AdminServerNotifierAutoConfigurationTest.java
class AdminServerNotifierAutoConfigurationTest (line 52) | class AdminServerNotifierAutoConfigurationTest {
method test_notifierListener (line 60) | @Test
method test_no_notifierListener (line 68) | @Test
method test_mail (line 73) | @Test
method test_hipchat (line 79) | @Test
method test_letschat (line 85) | @Test
method test_slack (line 91) | @Test
method test_mattermost (line 97) | @Test
method test_pagerduty (line 103) | @Test
method test_opsgenie (line 109) | @Test
method test_ms_teams (line 115) | @Test
method test_telegram (line 121) | @Test
method test_discord (line 129) | @Test
method test_rocketchat (line 135) | @Test
method test_webex (line 141) | @Test
method test_multipleNotifiers (line 148) | @Test
method test_multipleNotifiersWithPrimary (line 156) | @Test
method test_notifierProxyProperties (line 164) | @Test
method test_autoConfigureAfterAnnotationReferencesExistingClass (line 170) | @Test
class TestSingleNotifierConfig (line 194) | public static class TestSingleNotifierConfig {
method testNotifier (line 196) | @Bean
class MailSenderConfig (line 204) | public static class MailSenderConfig {
method mailSender (line 206) | @Bean
class TestMultipleNotifierConfig (line 213) | public static class TestMultipleNotifierConfig {
method testNotifier1 (line 215) | @Bean
method testNotifier2 (line 221) | @Bean
class TestMultipleWithPrimaryNotifierConfig (line 229) | public static class TestMultipleWithPrimaryNotifierConfig {
method testNotifierPrimary (line 231) | @Bean
method testNotifier2 (line 238) | @Bean
FILE: spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/config/AdminServerPropertiesTest.java
class AdminServerPropertiesTest (line 28) | @ExtendWith(SpringExtension.class)
method testLoadConfigurationProperties (line 36) | @Test
FILE: spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/config/SpringBootAdminServerEnabledConditionTest.java
class SpringBootAdminServerEnabledConditionTest (line 29) | class SpringBootAdminServerEnabledConditionTest {
method setUp (line 37) | @BeforeEach
method test_server_enabled (line 44) | @Test
method test_server_disabled (line 51) | @Test
FILE: spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/domain/entities/AbstractInstanceRepositoryTest.java
class AbstractInstanceRepositoryTest (line 32) | public abstract class AbstractInstanceRepositoryTest {
method setUp (line 45) | public void setUp(InstanceRepository repository) {
method should_save (line 49) | @Test
method should_find_instances (line 57) | @Test
method should_computeIfPresent (line 76) | @Test
method should_not_compute_if_not_present (line 100) | @Test
method should_run_compute_with_null (line 115) | @Test
method should_retry_compute (line 136) | @Test
FILE: spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/domain/entities/EventsourcingInstanceRepositoryTest.java
class EventsourcingInstanceRepositoryTest (line 23) | class EventsourcingInstanceRepositoryTest extends AbstractInstanceReposi...
method setUp (line 25) | @BeforeEach
FILE: spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/domain/entities/InstanceTest.java
class InstanceTest (line 38) | class InstanceTest {
method invariants (line 40) | @Test
method should_track_unsaved_events (line 62) | @Test
method should_yield_same_status_from_replaying (line 104) | @Test
method should_throw_when_applied_wrong_event (line 140) | @Test
method should_update_buildVersion (line 155) | @Test
method should_extract_tags (line 177) | @Test
method should_rebuild_instance (line 202) | @Test
FILE: spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/domain/entities/SnapshottingInstanceRepositoryTest.java
class SnapshottingInstanceRepositoryTest (line 41) | class SnapshottingInstanceRepositoryTest extends AbstractInstanceReposit...
method setUp (line 50) | @BeforeEach
method tearDown (line 57) | @AfterEach
method should_return_instance_from_cache (line 62) | @Test
method should_return_all_instances_from_cache (line 73) | @Test
method should_update_cache_after_error (line 84) | @Test
method should_return_outdated_instance_not_present_in_cache (line 103) | @Test
method should_refresh_snapshots_eagerly_on_optimistic_locking_exception (line 113) | @Test
FILE: spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/domain/values/BuildVersionTest.java
class BuildVersionTest (line 25) | class BuildVersionTest {
method should_return_version (line 27) | @Test
method should_return_simple_string (line 37) | @Test
method compare (line 42) | @Test
method doCompare (line 71) | private int doCompare(String v1, String v2) {
FILE: spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/domain/values/EndpointTest.java
class EndpointTest (line 23) | class EndpointTest {
method invariants (line 25) | @Test
FILE: spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/domain/values/EndpointsTest.java
class EndpointsTest (line 26) | class EndpointsTest {
method should_return_endpoint_or_empty (line 28) | @Test
method factory_methods (line 36) | @Test
method should_throw_on_iterator_modification (line 44) | @Test
FILE: spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/domain/values/InfoTest.java
class InfoTest (line 28) | class InfoTest {
method should_keep_order (line 30) | @Test
FILE: spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/domain/values/InstanceIdTest.java
class InstanceIdTest (line 23) | class InstanceIdTest {
method invariants (line 25) | @Test
FILE: spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/domain/values/RegistrationTest.java
class RegistrationTest (line 24) | class RegistrationTest implements WithAssertions {
method invariants (line 26) | @Test
method returnsNull_whenServiceUrlIsNull_evenIfMetadataHasOverride (line 47) | @Test
method usesMetadataOverride_whenValidAbsoluteUrlProvided (line 58) | @Test
method fallsBackToOriginal_whenMetadataOverrideIsInvalidSyntax (line 68) | @Test
method keepsOriginal_whenNoMetadataOverridePresent (line 78) | @Test
method acceptsEmptyStringFromMetadata_evenThoughItIsRelative (line 88) | @Test
FILE: spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/domain/values/StatusInfoTest.java
class StatusInfoTest (line 36) | class StatusInfoTest {
method invariants (line 38) | @Test
method test_isMethods (line 44) | @Test
method from_map_should_return_same_result (line 96) | @Test
method factory_methods_with_details (line 105) | @Test
method when_first_level_key_is_components (line 120) | @Test
method should_sort_by_status_order (line 129) | @Test
FILE: spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/domain/values/TagsTest.java
class TagsTest (line 30) | class TagsTest {
method should_return_empty_from_factory_method (line 32) | @Test
method should_return_tags_from_flat_map (line 38) | @Test
method should_return_tags_from_nested_map (line 49) | @Test
method should_append_tags (line 63) | @Test
FILE: spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/eventstore/AbstractEventStoreTest.java
class AbstractEventStoreTest (line 46) | public abstract class AbstractEventStoreTest {
method createStore (line 56) | protected abstract InstanceEventStore createStore(int maxLogSizePerAgg...
method shutdownStore (line 58) | protected abstract void shutdownStore();
method tearDown (line 60) | @AfterEach
method should_store_events (line 65) | @Test
method should_shorten_log_on_exceeded_capacity (line 92) | @Test
method should_throw_optimistic_locking_exception (line 105) | @Test
method concurrent_read_writes (line 117) | @Test
FILE: spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/eventstore/HazelcastEventStoreTest.java
class HazelcastEventStoreTest (line 23) | public class HazelcastEventStoreTest extends AbstractEventStoreTest {
method createStore (line 27) | @Override
method shutdownStore (line 37) | @Override
FILE: spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/eventstore/HazelcastEventStoreWithClientConfigTest.java
class HazelcastEventStoreWithClientConfigTest (line 33) | @Testcontainers(disabledWithoutDocker = true)
method HazelcastEventStoreWithClientConfigTest (line 43) | public HazelcastEventStoreWithClientConfigTest() {
method createStore (line 47) | @Override
method shutdownStore (line 53) | @Override
method createH
Condensed preview — 1285 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,866K chars).
[
{
"path": ".editorconfig",
"chars": 1076,
"preview": "root = true\n\n[*]\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n\n[*.md]\ntrim_trailing_whitespace = false\nma"
},
{
"path": ".gitattributes",
"chars": 469,
"preview": "# All text files should have the \"lf\" (Unix) line endings\n* text eol=lf\n# windows cmd shoud have the \"crlf\" (Win32) line"
},
{
"path": ".github/CODEOWNERS",
"chars": 34,
"preview": "* @codecentric/spring-boot-admins\n"
},
{
"path": ".github/ISSUE_TEMPLATE/spring-boot-admin-bug.md",
"chars": 1599,
"preview": "---\nname: Bug\nabout: Spring Boot Admin issue template for reporting bugs\ntitle: ''\nlabels: bug, waiting-for-triage\nassig"
},
{
"path": ".github/ISSUE_TEMPLATE/spring-boot-admin-enhancement.md",
"chars": 724,
"preview": "---\nname: Enhancement / Feature Request\nabout: Spring Boot Admin issue template for proposing Enhancements or making fea"
},
{
"path": ".github/copilot-instructions.md",
"chars": 8851,
"preview": "# Spring Boot Admin\nSpring Boot Admin is a multi-module Maven project providing an admin interface for Spring Boot appli"
},
{
"path": ".github/milestones.sh",
"chars": 8219,
"preview": "#!/usr/bin/env bash\nset -euo pipefail\n\nshow_help() {\n cat <<EOF\nUsage:\n GITHUB_TOKEN=ghp_xxx ./create_milestone_for_ta"
},
{
"path": ".github/release.yml",
"chars": 375,
"preview": "changelog:\n categories:\n - title: Features\n labels:\n - '*'\n exclude:\n labels:\n - fi"
},
{
"path": ".github/workflows/build-feature.yml",
"chars": 1527,
"preview": "name: Build Pull Request\n\non:\n push:\n branches-ignore:\n - master\n - 1.*\n - 2.*\n pull_request:\n\njobs:"
},
{
"path": ".github/workflows/build-main.yml",
"chars": 2885,
"preview": "name: Build Main / Version Branch\n\non:\n push:\n branches:\n - master\n - 1.*\n - 2.*\n - 3.*\n\njobs:\n "
},
{
"path": ".github/workflows/deploy-documentation.yml",
"chars": 2663,
"preview": "name: Deploy Documentation\n\non:\n workflow_dispatch:\n inputs:\n releaseversion:\n description: 'Version to "
},
{
"path": ".github/workflows/issue-metrics.yml",
"chars": 1539,
"preview": "name: Monthly issue metrics\non:\n workflow_dispatch:\n inputs:\n start_date:\n description: 'Start date (YYY"
},
{
"path": ".github/workflows/release-to-maven-central.yml",
"chars": 5065,
"preview": "name: Release To Maven Central\n\non:\n workflow_dispatch:\n inputs:\n releaseversion:\n description: \"Version"
},
{
"path": ".github/workflows/vulnerability-scan.yml",
"chars": 326,
"preview": "name: Vulnerability Scan\n\non:\n workflow_dispatch: {}\n\njobs:\n semgrep:\n name: semgrep/ci\n runs-on: ubuntu-latest\n"
},
{
"path": ".gitignore",
"chars": 275,
"preview": "# Maven\ntarget/\n\n# Eclipse\n.settings/\n.classpath\n.project\n.factorypath\n.apt_generated/\n\n# Intellij\n.idea/\n*.iml\n*.iws\n\n#"
},
{
"path": ".mvn/wrapper/maven-wrapper.properties",
"chars": 147,
"preview": "distributionType=only-script\ndistributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.14/a"
},
{
"path": "CONTRIBUTING.md",
"chars": 3167,
"preview": "# Contributing to Spring Boot Admin\nContributions are highly welcome. Feel free to submit Pull Requests. Maybe watch out"
},
{
"path": "LICENSE.txt",
"chars": 11355,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "README.md",
"chars": 4410,
"preview": "# Spring Boot Admin by [codecentric](https://codecentric.de)\n[, a modern static website generator.\n\n### Ins"
},
{
"path": "spring-boot-admin-docs/src/site/babel.config.js",
"chars": 89,
"preview": "module.exports = {\n presets: [require.resolve('@docusaurus/core/lib/babel/preset')],\n};\n"
},
{
"path": "spring-boot-admin-docs/src/site/current/404.template.html",
"chars": 2545,
"preview": "<!DOCTYPE html>\n<html lang='en'>\n<head>\n <meta charset='utf-8'>\n <title>Page not found · GitHub Pages</title>\n <scrip"
},
{
"path": "spring-boot-admin-docs/src/site/current/index.template.html",
"chars": 251,
"preview": "<!DOCTYPE html>\n<html>\n<head>\n <title>Redirecting...</title>\n <link rel='canonical' href='/@@VERSION@@' />\n <meta cha"
},
{
"path": "spring-boot-admin-docs/src/site/docs/01-getting-started/10-server-setup.md",
"chars": 5007,
"preview": "---\nsidebar_position: 10\nsidebar_custom_props:\n icon: 'server'\n---\n\n# Server Setup\n\nSetting up a Spring Boot Admin Serv"
},
{
"path": "spring-boot-admin-docs/src/site/docs/01-getting-started/20-client-registration.md",
"chars": 8132,
"preview": "---\nsidebar_position: 20\nsidebar_custom_props:\n icon: 'link'\n---\n\n# Client Registration\n\nTo monitor your applications w"
},
{
"path": "spring-boot-admin-docs/src/site/docs/01-getting-started/50-snapshots.md",
"chars": 1159,
"preview": "---\nsidebar_custom_props:\n icon: 'package'\n---\n\n# SNAPSHOT-Versions\n\nIf you want to use a snapshot version of Spring Bo"
},
{
"path": "spring-boot-admin-docs/src/site/docs/01-getting-started/_category_.json",
"chars": 50,
"preview": "{\n \"label\": \"Getting Started\",\n \"position\": 1\n}\n"
},
{
"path": "spring-boot-admin-docs/src/site/docs/01-getting-started/index.md",
"chars": 2967,
"preview": "---\nsidebar_position: 2\nsidebar_custom_props:\n icon: 'rocket'\n---\n\n# Getting Started\n\nSpring Boot Admin follows a serve"
},
{
"path": "spring-boot-admin-docs/src/site/docs/02-server/01-server.mdx",
"chars": 4175,
"preview": "---\nsidebar_custom_props:\n icon: 'server'\n---\nimport metadataServer from \"@sba/spring-boot-admin-server/target/classes/"
},
{
"path": "spring-boot-admin-docs/src/site/docs/02-server/02-security.md",
"chars": 8132,
"preview": "---\nsidebar_custom_props:\n icon: 'shield'\n---\n\n# Foster Security\n\nSince there are several approaches on solving authent"
},
{
"path": "spring-boot-admin-docs/src/site/docs/02-server/10-Events.mdx",
"chars": 3391,
"preview": "---\nsidebar_custom_props:\n icon: 'server'\n---\n# Server(-Sent) Events\n\nSpring Boot Admin uses event sourcing per default"
},
{
"path": "spring-boot-admin-docs/src/site/docs/02-server/20-Clustering.mdx",
"chars": 4054,
"preview": "---\nsidebar_custom_props:\n icon: 'server'\n---\nimport metadataServer\n from \"@sba/spring-boot-admin-server/target/classe"
},
{
"path": "spring-boot-admin-docs/src/site/docs/02-server/30-persistence.md",
"chars": 7957,
"preview": "---\nsidebar_position: 30\nsidebar_custom_props:\n icon: 'database'\n---\n\n# Persistence and Event Store\n\nSpring Boot Admin "
},
{
"path": "spring-boot-admin-docs/src/site/docs/02-server/40-instance-registry.md",
"chars": 10460,
"preview": "---\nsidebar_position: 40\nsidebar_custom_props:\n icon: 'apps'\n---\n\n# Instance Registry\n\nThe Instance Registry is the cor"
},
{
"path": "spring-boot-admin-docs/src/site/docs/02-server/99-server-properties.mdx",
"chars": 401,
"preview": "---\nsidebar_custom_props:\n icon: 'properties'\n---\n# Properties\n\nimport metadata from \"@sba/spring-boot-admin-server/tar"
},
{
"path": "spring-boot-admin-docs/src/site/docs/02-server/_category_.json",
"chars": 41,
"preview": "{\n \"position\": 2,\n \"label\": \"Server\"\n}\n"
},
{
"path": "spring-boot-admin-docs/src/site/docs/02-server/index.md",
"chars": 1436,
"preview": "---\nsidebar_custom_props:\n icon: 'server'\n---\n\nimport DocCardList from '@theme/DocCardList';\n\n# Spring Boot Admin Serve"
},
{
"path": "spring-boot-admin-docs/src/site/docs/02-server/notifications/90-custom-notifiers.md",
"chars": 11876,
"preview": "---\nsidebar_position: 90\nsidebar_custom_props:\n icon: 'bell'\n---\n\n# Creating Custom Notifiers\n\nSpring Boot Admin makes "
},
{
"path": "spring-boot-admin-docs/src/site/docs/02-server/notifications/_category_.json",
"chars": 165,
"preview": "{\n \"label\": \"Notifications\",\n \"description\": \"Configure notifications to alert teams about instance status changes via"
},
{
"path": "spring-boot-admin-docs/src/site/docs/02-server/notifications/index.mdx",
"chars": 6159,
"preview": "---\nsidebar_position: 80\nsidebar_custom_props:\n icon: 'bell-ring'\n---\n\n# Notifications\n\nimport metadata from \"@sba/spri"
},
{
"path": "spring-boot-admin-docs/src/site/docs/02-server/notifications/notifier-dingtalk.mdx",
"chars": 641,
"preview": "---\nsidebar_custom_props:\n icon: 'notifications'\n---\nimport metadata from \"@sba/spring-boot-admin-server/target/classes"
},
{
"path": "spring-boot-admin-docs/src/site/docs/02-server/notifications/notifier-discord.mdx",
"chars": 560,
"preview": "---\nsidebar_custom_props:\n icon: 'notifications'\n---\nimport metadata from \"@sba/spring-boot-admin-server/target/classes"
},
{
"path": "spring-boot-admin-docs/src/site/docs/02-server/notifications/notifier-hipchat.mdx",
"chars": 617,
"preview": "---\nsidebar_custom_props:\n icon: 'notifications'\n---\nimport metadata from \"@sba/spring-boot-admin-server/target/classes"
},
{
"path": "spring-boot-admin-docs/src/site/docs/02-server/notifications/notifier-lets-chat.mdx",
"chars": 616,
"preview": "---\nsidebar_custom_props:\n icon: 'notifications'\n---\nimport metadata from \"@sba/spring-boot-admin-server/target/classes"
},
{
"path": "spring-boot-admin-docs/src/site/docs/02-server/notifications/notifier-mail.mdx",
"chars": 1344,
"preview": "---\nsidebar_custom_props:\n icon: 'notifications'\n---\nimport metadata from \"@sba/spring-boot-admin-server/target/classes"
},
{
"path": "spring-boot-admin-docs/src/site/docs/02-server/notifications/notifier-mattermost.mdx",
"chars": 629,
"preview": "---\nsidebar_custom_props:\n icon: 'notifications'\n---\nimport metadata from \"@sba/spring-boot-admin-server/target/classes"
},
{
"path": "spring-boot-admin-docs/src/site/docs/02-server/notifications/notifier-msteams.mdx",
"chars": 599,
"preview": "---\nsidebar_custom_props:\n icon: 'notifications'\n---\nimport metadata from \"@sba/spring-boot-admin-server/target/classes"
},
{
"path": "spring-boot-admin-docs/src/site/docs/02-server/notifications/notifier-rocketchat.mdx",
"chars": 607,
"preview": "---\nsidebar_custom_props:\n icon: 'notifications'\n---\nimport metadata from \"@sba/spring-boot-admin-server/target/classes"
},
{
"path": "spring-boot-admin-docs/src/site/docs/02-server/notifications/notifier-slack.mdx",
"chars": 604,
"preview": "---\nsidebar_custom_props:\n icon: 'bell'\n---\nimport metadata from \"@sba/spring-boot-admin-server/target/classes/META-INF"
},
{
"path": "spring-boot-admin-docs/src/site/docs/02-server/notifications/notifier-telegram.mdx",
"chars": 637,
"preview": "---\nsidebar_custom_props:\n icon: 'notifications'\n---\nimport metadata from \"@sba/spring-boot-admin-server/target/classes"
},
{
"path": "spring-boot-admin-docs/src/site/docs/02-server/notifications/notifier-webex.mdx",
"chars": 591,
"preview": "---\nsidebar_custom_props:\n icon: 'notifications'\n---\nimport metadata from \"@sba/spring-boot-admin-server/target/classes"
},
{
"path": "spring-boot-admin-docs/src/site/docs/03-client/10-client-features.md",
"chars": 4752,
"preview": "---\nsidebar_custom_props:\n icon: 'features'\n---\n\n# Features\n\n## Show Version in Application List\n\nFor **Spring Boot** a"
},
{
"path": "spring-boot-admin-docs/src/site/docs/03-client/20-registration.md",
"chars": 10981,
"preview": "---\n\nsidebar_position: 20\nsidebar_custom_props:\n icon: 'link'\n---\n\n# Application Registration\n\nThe Spring Boot Admin Cl"
},
{
"path": "spring-boot-admin-docs/src/site/docs/03-client/30-metadata.md",
"chars": 11668,
"preview": "---\nsidebar_position: 30\nsidebar_custom_props:\n icon: 'link'\n---\n\n# Metadata and Tags\n\nMetadata allows you to attach cu"
},
{
"path": "spring-boot-admin-docs/src/site/docs/03-client/40-service-discovery.md",
"chars": 11557,
"preview": "---\nsidebar_position: 40\nsidebar_custom_props:\n icon: 'cloud'\n---\n\n# Service Discovery Integration\n\nSpring Boot Admin i"
},
{
"path": "spring-boot-admin-docs/src/site/docs/03-client/80-configuration.md",
"chars": 2892,
"preview": "---\nsidebar_custom_props:\n icon: 'configuration'\n---\n\n# Configuration\n\nIn addition to discovering and registering servi"
},
{
"path": "spring-boot-admin-docs/src/site/docs/03-client/99-properties.mdx",
"chars": 389,
"preview": "---\nsidebar_custom_props:\n icon: 'server'\n---\n\n# Properties\n\nimport metadata from \"@sba/spring-boot-admin-client/target"
},
{
"path": "spring-boot-admin-docs/src/site/docs/03-client/_category_.json",
"chars": 42,
"preview": "{\n \"position\": 3,\n \"label\": \"Clients\"\n}\n"
},
{
"path": "spring-boot-admin-docs/src/site/docs/03-client/index.md",
"chars": 2214,
"preview": "---\nsidebar_custom_props:\n icon: 'link'\n---\n\nimport DocCardList from '@theme/DocCardList';\n\n# Registering Clients\n\nSpri"
},
{
"path": "spring-boot-admin-docs/src/site/docs/04-integration/10-eureka.md",
"chars": 11990,
"preview": "---\nsidebar_position: 10\nsidebar_custom_props:\n icon: 'cloud'\n---\n\n# Eureka Integration\n\nNetflix Eureka is a service di"
},
{
"path": "spring-boot-admin-docs/src/site/docs/04-integration/20-consul.md",
"chars": 11451,
"preview": "---\nsidebar_position: 20\nsidebar_custom_props:\n icon: 'cloud'\n---\n\n# Consul Integration\n\nHashiCorp Consul is a service "
},
{
"path": "spring-boot-admin-docs/src/site/docs/04-integration/30-zookeeper.md",
"chars": 7457,
"preview": "---\nsidebar_position: 30\nsidebar_custom_props:\n icon: 'cloud'\n---\n\n# Zookeeper Integration\n\nApache Zookeeper is a centr"
},
{
"path": "spring-boot-admin-docs/src/site/docs/04-integration/40-hazelcast.md",
"chars": 10532,
"preview": "---\nsidebar_position: 40\nsidebar_custom_props:\n icon: 'server'\n---\n\n# Hazelcast Clustering\n\nHazelcast provides distribu"
},
{
"path": "spring-boot-admin-docs/src/site/docs/04-integration/_category_.json",
"chars": 47,
"preview": "{\n \"position\": 4,\n \"label\": \"Integration\",\n}\n"
},
{
"path": "spring-boot-admin-docs/src/site/docs/04-integration/index.md",
"chars": 3622,
"preview": "---\nsidebar_position: 40\nsidebar_custom_props:\n icon: 'puzzle'\n---\n\n# Integration\n\nSpring Boot Admin integrates seamles"
},
{
"path": "spring-boot-admin-docs/src/site/docs/05-security/10-server-authentication.md",
"chars": 25564,
"preview": "---\nsidebar_position: 10\nsidebar_custom_props:\n icon: 'shield'\n---\n\n# Server Authentication\n\nSecure your Spring Boot Ad"
},
{
"path": "spring-boot-admin-docs/src/site/docs/05-security/20-actuator-security.md",
"chars": 18444,
"preview": "---\nsidebar_position: 20\nsidebar_custom_props:\n icon: 'shield'\n---\n\n# Actuator Security\n\nSecure your client application"
},
{
"path": "spring-boot-admin-docs/src/site/docs/05-security/30-csrf-protection.md",
"chars": 21123,
"preview": "---\nsidebar_position: 30\nsidebar_custom_props:\n icon: 'shield'\n---\n\n# CSRF Protection\n\nConfigure Cross-Site Request For"
},
{
"path": "spring-boot-admin-docs/src/site/docs/05-security/_category_.json",
"chars": 43,
"preview": "{\n \"position\": 5,\n \"label\": \"Security\"\n}\n"
},
{
"path": "spring-boot-admin-docs/src/site/docs/05-security/index.md",
"chars": 11332,
"preview": "---\nsidebar_position: 1\nsidebar_custom_props:\n icon: 'shield'\n---\n\n# Security\n\nSpring Boot Admin Server and Client can "
},
{
"path": "spring-boot-admin-docs/src/site/docs/06-customization/_category_.json",
"chars": 48,
"preview": "{\n \"position\": 6,\n \"label\": \"Customization\"\n}\n"
},
{
"path": "spring-boot-admin-docs/src/site/docs/06-customization/index.md",
"chars": 81,
"preview": "import DocCardList from '@theme/DocCardList';\n\n# Customization\n\n <DocCardList />\n"
},
{
"path": "spring-boot-admin-docs/src/site/docs/06-customization/monitoring/01-instance-filters.md",
"chars": 18826,
"preview": "---\n\nsidebar_position: 1\nsidebar_custom_props:\n icon: 'wrench'\n---\n\n# Instance Filters\n\nFilter which instances are visi"
},
{
"path": "spring-boot-admin-docs/src/site/docs/06-customization/monitoring/02-custom-health-status.md",
"chars": 26716,
"preview": "---\n\nsidebar_position: 2\nsidebar_custom_props:\n icon: 'wrench'\n---\n\n# Custom Health Status\n\nCustomize how Spring Boot A"
},
{
"path": "spring-boot-admin-docs/src/site/docs/06-customization/monitoring/_category_.json",
"chars": 29,
"preview": "{\n \"label\": \"Monitoring\",\n}\n"
},
{
"path": "spring-boot-admin-docs/src/site/docs/06-customization/server/04-endpoint-detection.md",
"chars": 23219,
"preview": "---\n\nsidebar_position: 4\nsidebar_custom_props:\n icon: 'wrench'\n---\n\n# Custom Endpoint Detection\n\nCustomize how Spring B"
},
{
"path": "spring-boot-admin-docs/src/site/docs/06-customization/server/_category_.json",
"chars": 24,
"preview": "{\n \"label\": \"Server\"\n}\n"
},
{
"path": "spring-boot-admin-docs/src/site/docs/08-third-party/_category_.json",
"chars": 59,
"preview": "{\n \"position\": 8,\n \"label\": \"Third Party Integrations\"\n}\n"
},
{
"path": "spring-boot-admin-docs/src/site/docs/08-third-party/index.md",
"chars": 140,
"preview": "---\nsidebar_custom_props:\n icon: 'puzzle'\n---\n\nimport DocCardList from '@theme/DocCardList';\n\n# Third Party Integration"
},
{
"path": "spring-boot-admin-docs/src/site/docs/08-third-party/pyctuator.md",
"chars": 1278,
"preview": "---\nsidebar_custom_props:\n icon: 'python'\n---\n\n# Pyctuator\n\nYou can easily integrate Spring Boot Admin with [Flask](htt"
},
{
"path": "spring-boot-admin-docs/src/site/docs/09-samples/10-sample-servlet.md",
"chars": 16428,
"preview": "---\n\nsidebar_position: 10\nsidebar_custom_props:\n icon: 'file-code'\n---\n\n# Servlet Sample\n\nThe Servlet sample demonstrat"
},
{
"path": "spring-boot-admin-docs/src/site/docs/09-samples/20-sample-reactive.md",
"chars": 13852,
"preview": "---\n\nsidebar_position: 20\nsidebar_custom_props:\n icon: 'file-code'\n---\n\n# Reactive Sample\n\nThe Reactive sample demonstr"
},
{
"path": "spring-boot-admin-docs/src/site/docs/09-samples/30-sample-eureka.md",
"chars": 16150,
"preview": "---\n\nsidebar_position: 30\nsidebar_custom_props:\n icon: 'file-code'\n---\n\n# Eureka Sample\n\nThe Eureka sample demonstrates"
},
{
"path": "spring-boot-admin-docs/src/site/docs/09-samples/40-sample-consul.md",
"chars": 15517,
"preview": "---\n\nsidebar_position: 40\nsidebar_custom_props:\n icon: 'file-code'\n---\n\n# Consul Sample\n\nThe Consul sample demonstrates"
},
{
"path": "spring-boot-admin-docs/src/site/docs/09-samples/50-sample-zookeeper.md",
"chars": 1890,
"preview": "---\n\nsidebar_position: 50\nsidebar_custom_props:\n icon: 'file-code'\n---\n\n# Zookeeper Sample\n\nSpring Boot Admin Server in"
},
{
"path": "spring-boot-admin-docs/src/site/docs/09-samples/60-sample-hazelcast.md",
"chars": 5732,
"preview": "---\n\nsidebar_position: 60\nsidebar_custom_props:\n icon: 'file-code'\n---\n\n# Hazelcast Sample\n\nClustered Spring Boot Admin"
},
{
"path": "spring-boot-admin-docs/src/site/docs/09-samples/70-sample-custom-ui.md",
"chars": 9157,
"preview": "---\n\nsidebar_position: 70\nsidebar_custom_props:\n icon: 'file-code'\n---\n\n# Custom UI Sample\n\nDemonstrates how to create "
},
{
"path": "spring-boot-admin-docs/src/site/docs/09-samples/_category_.json",
"chars": 42,
"preview": "{\n \"position\": 9,\n \"label\": \"Samples\"\n}\n"
},
{
"path": "spring-boot-admin-docs/src/site/docs/09-samples/index.md",
"chars": 6615,
"preview": "---\n\nsidebar_position: 70\nsidebar_custom_props:\n icon: 'file-code'\n---\n\n# Sample Projects\n\nSpring Boot Admin includes s"
},
{
"path": "spring-boot-admin-docs/src/site/docs/10-reference/10-event-types.md",
"chars": 12955,
"preview": "---\n\nsidebar_position: 10\nsidebar_custom_props:\n icon: 'book'\n---\n\n# Event Types Reference\n\nComplete reference of all `"
},
{
"path": "spring-boot-admin-docs/src/site/docs/10-reference/20-rest-api.md",
"chars": 12861,
"preview": "---\n\nsidebar_position: 20\nsidebar_custom_props:\n icon: 'book'\n---\n\n# REST API Reference\n\nComplete HTTP API reference fo"
},
{
"path": "spring-boot-admin-docs/src/site/docs/10-reference/60-actuator-endpoints.mdx",
"chars": 6100,
"preview": "---\nsidebar_custom_props:\n icon: 'book'\n---\n# Supported Spring Boot Actuator Endpoints\n\nBelow is a comprehensive list o"
},
{
"path": "spring-boot-admin-docs/src/site/docs/10-reference/_category_.json",
"chars": 45,
"preview": "{\n \"position\": 10,\n \"label\": \"Reference\"\n}\n"
},
{
"path": "spring-boot-admin-docs/src/site/docs/10-reference/index.md",
"chars": 3737,
"preview": "---\n\nsidebar_position: 95\nsidebar_custom_props:\n icon: 'book'\n---\n\n# Reference Documentation\n\nComprehensive reference m"
},
{
"path": "spring-boot-admin-docs/src/site/docs/11-upgrading/01-spring-boot-admin-4.md",
"chars": 8572,
"preview": "---\nsidebar_custom_props:\n icon: 'arrow-up'\n---\n\n# To Spring Boot Admin 4\n\nThis guide covers the breaking changes, depr"
},
{
"path": "spring-boot-admin-docs/src/site/docs/11-upgrading/_category_.json",
"chars": 45,
"preview": "{\n \"position\": 11,\n \"label\": \"Upgrading\"\n}\n"
},
{
"path": "spring-boot-admin-docs/src/site/docs/11-upgrading/index.md",
"chars": 127,
"preview": "---\nsidebar_custom_props:\n icon: 'arrow-up'\n---\n\nimport DocCardList from '@theme/DocCardList';\n\n# Upgrading\n\n <DocCardL"
},
{
"path": "spring-boot-admin-docs/src/site/docs/index.mdx",
"chars": 1432,
"preview": "---\nsidebar_position: 0\nslug: /index\nid: index\ntitle: Start\nhide_title: true\nhide_table_of_contents: true\nsidebar_custom"
},
{
"path": "spring-boot-admin-docs/src/site/docs/index.module.css",
"chars": 577,
"preview": ".hexMeshContainer {\n height: 600px;\n margin: 2rem 0;\n}\n\n.hexItem {\n display: flex;\n flex-direction: column;\n align-"
},
{
"path": "spring-boot-admin-docs/src/site/docusaurus.config.ts",
"chars": 4279,
"preview": "import 'dotenv/config';\nimport { themes as prismThemes } from \"prism-react-renderer\";\nimport type { Config } from \"@docu"
},
{
"path": "spring-boot-admin-docs/src/site/package.json",
"chars": 1568,
"preview": "{\n \"name\": \"site\",\n \"version\": \"0.0.0\",\n \"private\": true,\n \"scripts\": {\n \"docusaurus\": \"docusaurus\",\n \"start\":"
},
{
"path": "spring-boot-admin-docs/src/site/sidebars.ts",
"chars": 194,
"preview": "import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';\n\nconst sidebars: SidebarsConfig = {\n sidebar: [\n "
},
{
"path": "spring-boot-admin-docs/src/site/src/components/CopyButton.module.css",
"chars": 614,
"preview": ".copyButton {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 8px;\n background-colo"
},
{
"path": "spring-boot-admin-docs/src/site/src/components/CopyButton.tsx",
"chars": 1411,
"preview": "import React, { useState } from \"react\";\nimport styles from \"./CopyButton.module.css\";\n\nexport function CopyButton({ tex"
},
{
"path": "spring-boot-admin-docs/src/site/src/components/HexMesh.module.css",
"chars": 1645,
"preview": ".hexMesh {\n width: 100%;\n height: 75vh;\n display: flex;\n justify-content: space-around;\n align-items: cen"
},
{
"path": "spring-boot-admin-docs/src/site/src/components/HexMesh.tsx",
"chars": 8542,
"preview": "/*\n * Copyright 2014-2018 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
},
{
"path": "spring-boot-admin-docs/src/site/src/components/PropertyTable.module.css",
"chars": 911,
"preview": ".propertyTable {\n display: table;\n width: 100%;\n\n caption {\n text-align: left;\n font-weight: bold"
},
{
"path": "spring-boot-admin-docs/src/site/src/components/PropertyTable.tsx",
"chars": 2916,
"preview": "import { filterPropertiesByName } from \"@site/src/propertiesUtil\";\nimport styles from \"./PropertyTable.module.css\";\nimpo"
},
{
"path": "spring-boot-admin-docs/src/site/src/components/Screenshot.module.css",
"chars": 370,
"preview": ".screenshot {\n position: relative;\n}\n\n.screenshot__description {\n font-size: .9rem;\n position: absolute;\n te"
},
{
"path": "spring-boot-admin-docs/src/site/src/components/Screenshot.tsx",
"chars": 1322,
"preview": "import Carousel from \"react-multi-carousel\";\nimport \"react-multi-carousel/lib/styles.css\";\nimport styles from \"./Screens"
},
{
"path": "spring-boot-admin-docs/src/site/src/css/custom.css",
"chars": 975,
"preview": ":root {\n --ifm-color-primary: #18674e;\n --ifm-color-primary-dark: #165d46;\n --ifm-color-primary-darker: #145842"
},
{
"path": "spring-boot-admin-docs/src/site/src/global.d.ts",
"chars": 160,
"preview": "export {};\n\ndeclare global {\n type SpringPropertyDefinition = {\n name: string;\n description: string;\n type?: s"
},
{
"path": "spring-boot-admin-docs/src/site/src/pages/faq.md",
"chars": 18632,
"preview": "--- \ntoc_min_heading_level: 2\ntoc_max_heading_level: 2\n---\n# FAQ\n\nThis FAQ covers common questions and troubleshooting s"
},
{
"path": "spring-boot-admin-docs/src/site/src/pages/impressum.md",
"chars": 487,
"preview": "# Impressum\n\n## Hauptsitz der Gesellschaft\ncodecentric AG \nHochstraße 11 \n42697 Solingen \nTelefon: +49 (0) 212 23 36 "
},
{
"path": "spring-boot-admin-docs/src/site/src/pages/index.tsx",
"chars": 123,
"preview": "import { Redirect } from \"@docusaurus/router\";\n\nexport default function Home() {\n return <Redirect to='docs/index' />;\n"
},
{
"path": "spring-boot-admin-docs/src/site/src/pages/markdown-page.md",
"chars": 118,
"preview": "---\ntitle: Markdown page example\n---\n\n# Markdown page example\n\nYou don't need React to write simple standalone pages.\n"
},
{
"path": "spring-boot-admin-docs/src/site/src/pages/privacy.md",
"chars": 18567,
"preview": "# Datenschutzerklärung nach der DSGVO\n\n## Name und Anschrift der Verantwortlichen\n\nDie Verantwortliche im Sinne der Date"
},
{
"path": "spring-boot-admin-docs/src/site/src/propertiesUtil.ts",
"chars": 1099,
"preview": "/**\n * Filters an array of Spring property definitions by their names based on provided keywords.\n *\n * @param propertie"
},
{
"path": "spring-boot-admin-docs/src/site/src/theme/DocCard/index.js",
"chars": 3943,
"preview": "import React from \"react\";\nimport clsx from \"clsx\";\nimport Link from \"@docusaurus/Link\";\nimport { findFirstSidebarItemLi"
},
{
"path": "spring-boot-admin-docs/src/site/src/theme/DocCard/styles.module.css",
"chars": 669,
"preview": ".cardContainer {\n --ifm-link-color: var(--ifm-color-emphasis-800);\n --ifm-link-hover-color: var(--ifm-color-emphas"
},
{
"path": "spring-boot-admin-docs/src/site/src/theme/MDXComponents.ts",
"chars": 251,
"preview": "import MDXComponents from '@theme-original/MDXComponents';\nimport { Icon } from '@iconify/react';\n\nexport default {\n //"
},
{
"path": "spring-boot-admin-docs/src/site/static/.nojekyll",
"chars": 0,
"preview": ""
},
{
"path": "spring-boot-admin-docs/src/site/tsconfig.json",
"chars": 358,
"preview": "{\n // This file is not used in compilation. It is here just for a nice editor experience.\n \"extends\": \"@docusaurus/tsc"
},
{
"path": "spring-boot-admin-samples/pom.xml",
"chars": 4487,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n ~ Copyright 2014-2019 the original author or authors.\n ~\n ~ Licensed und"
},
{
"path": "spring-boot-admin-samples/spring-boot-admin-sample-consul/docker-compose.yml",
"chars": 79,
"preview": "services:\n consul:\n image: hashicorp/consul\n ports:\n - \"8500:8500\"\n"
},
{
"path": "spring-boot-admin-samples/spring-boot-admin-sample-consul/pom.xml",
"chars": 3039,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n ~ Copyright 2014-2019 the original author or authors.\n ~\n ~ Licensed und"
},
{
"path": "spring-boot-admin-samples/spring-boot-admin-sample-consul/src/main/java/de/codecentric/boot/admin/sample/SpringBootAdminConsulApplication.java",
"chars": 4654,
"preview": "/*\n * Copyright 2014-2023 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
},
{
"path": "spring-boot-admin-samples/spring-boot-admin-sample-consul/src/main/resources/application-dev.yml",
"chars": 267,
"preview": "spring:\n boot:\n admin:\n ui:\n cache:\n no-cache: true\n template-location: file:../../sprin"
},
{
"path": "spring-boot-admin-samples/spring-boot-admin-sample-consul/src/main/resources/application-insecure.yml",
"chars": 29,
"preview": "info.tags.security: insecure\n"
},
{
"path": "spring-boot-admin-samples/spring-boot-admin-sample-consul/src/main/resources/application-secure.yml",
"chars": 76,
"preview": "spring:\n security:\n user:\n name: \"user\"\n password: \"password\"\n"
},
{
"path": "spring-boot-admin-samples/spring-boot-admin-sample-consul/src/main/resources/application.yml",
"chars": 601,
"preview": "spring:\n application:\n name: consul-example\n cloud:\n config:\n enabled: false\n consul:\n host: localh"
},
{
"path": "spring-boot-admin-samples/spring-boot-admin-sample-consul/src/test/java/de/codecentric/boot/admin/sample/SpringBootAdminConsulApplicationTest.java",
"chars": 1127,
"preview": "/*\n * Copyright 2014-2023 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
},
{
"path": "spring-boot-admin-samples/spring-boot-admin-sample-custom-ui/.gitignore",
"chars": 214,
"preview": ".DS_Store\nnode_modules\n/dist\n\n# local env files\n.env.local\n.env.*.local\n\n# Log files\nnpm-debug.log*\nyarn-debug.log*\nyarn"
},
{
"path": "spring-boot-admin-samples/spring-boot-admin-sample-custom-ui/README.md",
"chars": 1085,
"preview": "spring-boot-admin-sample-custom-ui\n================================\n\n### Building this module\nThe jar **can be build wit"
},
{
"path": "spring-boot-admin-samples/spring-boot-admin-sample-custom-ui/babel.config.js",
"chars": 73,
"preview": "module.exports = {\n presets: [\n '@vue/cli-plugin-babel/preset'\n ]\n}\n"
},
{
"path": "spring-boot-admin-samples/spring-boot-admin-sample-custom-ui/package.json",
"chars": 640,
"preview": "{\n \"name\": \"spring-boot-admin-sample-custom-ui\",\n \"version\": \"0.0.0\",\n \"private\": true,\n \"type\": \"module\",\n \"script"
},
{
"path": "spring-boot-admin-samples/spring-boot-admin-sample-custom-ui/pom.xml",
"chars": 4152,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n ~ Copyright 2014-2018 the original author or authors.\n ~\n ~ Licensed und"
}
]
// ... and 1085 more files (download for full content)
About this extraction
This page contains the full source code of the codecentric/spring-boot-admin GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1285 files (4.2 MB), approximately 1.2M tokens, and a symbol index with 2587 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.