From 179aa987eebb3d21b620147e8984d9fc002822b5 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Fri, 4 Nov 2022 13:38:12 -0700 Subject: [PATCH] Unify actuator descriptor class names Update actuator endpoints to consistently use `...Descriptor` for JSON support classes. Closes gh-33022 --- .../condition/ConditionsReportEndpoint.java | 55 +++--- .../ConditionsReportEndpointTests.java | 6 +- ...sReportEndpointAutoConfigurationTests.java | 4 +- .../actuate/audit/AuditEventsEndpoint.java | 5 +- .../boot/actuate/beans/BeansEndpoint.java | 34 ++-- .../boot/actuate/cache/CachesEndpoint.java | 40 +++-- .../cache/CachesEndpointWebExtension.java | 8 +- .../actuate/context/ShutdownEndpoint.java | 33 +++- ...ConfigurationPropertiesReportEndpoint.java | 43 +++-- ...nPropertiesReportEndpointWebExtension.java | 8 +- .../boot/actuate/env/EnvironmentEndpoint.java | 12 +- .../boot/actuate/flyway/FlywayEndpoint.java | 43 +++-- .../boot/actuate/info/InfoEndpoint.java | 5 +- .../integration/IntegrationGraphEndpoint.java | 40 ++++- .../actuate/liquibase/LiquibaseEndpoint.java | 60 ++++--- .../boot/actuate/logging/LoggersEndpoint.java | 92 +++++++--- .../management/ThreadDumpEndpoint.java | 2 +- .../boot/actuate/metrics/MetricsEndpoint.java | 20 +-- .../boot/actuate/quartz/QuartzEndpoint.java | 160 +++++++++--------- .../quartz/QuartzEndpointWebExtension.java | 15 +- .../scheduling/ScheduledTasksEndpoint.java | 117 ++++++------- .../actuate/session/SessionsEndpoint.java | 14 +- .../boot/actuate/startup/StartupEndpoint.java | 15 +- .../web/exchanges/HttpExchangesEndpoint.java | 11 +- .../web/mappings/MappingsEndpoint.java | 30 ++-- .../actuate/beans/BeansEndpointTests.java | 18 +- .../actuate/cache/CachesEndpointTests.java | 10 +- .../context/ShutdownEndpointTests.java | 10 +- ...ropertiesReportEndpointFilteringTests.java | 19 ++- ...sReportEndpointMethodAnnotationsTests.java | 14 +- ...onPropertiesReportEndpointParentTests.java | 6 +- ...ionPropertiesReportEndpointProxyTests.java | 6 +- ...rtiesReportEndpointSerializationTests.java | 26 +-- ...gurationPropertiesReportEndpointTests.java | 7 +- ...ertiesReportEndpointWebExtensionTests.java | 4 +- .../IntegrationGraphEndpointTests.java | 19 ++- .../liquibase/LiquibaseEndpointTests.java | 18 +- .../actuate/logging/LoggersEndpointTests.java | 55 +++--- .../actuate/metrics/MetricsEndpointTests.java | 22 +-- .../actuate/quartz/QuartzEndpointTests.java | 60 +++---- .../QuartzEndpointWebExtensionTests.java | 12 +- .../ScheduledTasksEndpointTests.java | 30 ++-- .../actuate/startup/StartupEndpointTests.java | 8 +- .../web/mappings/MappingsEndpointTests.java | 18 +- 44 files changed, 660 insertions(+), 574 deletions(-) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/condition/ConditionsReportEndpoint.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/condition/ConditionsReportEndpoint.java index 2d232340c89..d9b79e8305e 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/condition/ConditionsReportEndpoint.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/condition/ConditionsReportEndpoint.java @@ -60,14 +60,14 @@ public class ConditionsReportEndpoint { } @ReadOperation - public ApplicationConditionEvaluation applicationConditionEvaluation() { - Map contextConditionEvaluations = new HashMap<>(); + public ConditionsDescriptor conditions() { + Map contextConditionEvaluations = new HashMap<>(); ConfigurableApplicationContext target = this.context; while (target != null) { - contextConditionEvaluations.put(target.getId(), new ContextConditionEvaluation(target)); + contextConditionEvaluations.put(target.getId(), new ContextConditionsDescriptor(target)); target = getConfigurableParent(target); } - return new ApplicationConditionEvaluation(contextConditionEvaluations); + return new ConditionsDescriptor(contextConditionEvaluations); } private ConfigurableApplicationContext getConfigurableParent(ConfigurableApplicationContext context) { @@ -79,18 +79,17 @@ public class ConditionsReportEndpoint { } /** - * A description of an application's condition evaluation, primarily intended for - * serialization to JSON. + * A description of an application's condition evaluation. */ - public static final class ApplicationConditionEvaluation { + public static final class ConditionsDescriptor { - private final Map contexts; + private final Map contexts; - private ApplicationConditionEvaluation(Map contexts) { + private ConditionsDescriptor(Map contexts) { this.contexts = contexts; } - public Map getContexts() { + public Map getContexts() { return this.contexts; } @@ -101,11 +100,11 @@ public class ConditionsReportEndpoint { * for serialization to JSON. */ @JsonInclude(Include.NON_EMPTY) - public static final class ContextConditionEvaluation { + public static final class ContextConditionsDescriptor { - private final MultiValueMap positiveMatches; + private final MultiValueMap positiveMatches; - private final Map negativeMatches; + private final Map negativeMatches; private final List exclusions; @@ -113,7 +112,7 @@ public class ConditionsReportEndpoint { private final String parentId; - public ContextConditionEvaluation(ConfigurableApplicationContext context) { + public ContextConditionsDescriptor(ConfigurableApplicationContext context) { ConditionEvaluationReport report = ConditionEvaluationReport.get(context.getBeanFactory()); this.positiveMatches = new LinkedMultiValueMap<>(); this.negativeMatches = new LinkedHashMap<>(); @@ -127,18 +126,18 @@ public class ConditionsReportEndpoint { String name = ClassUtils.getShortName(source); if (conditionAndOutcomes.isFullMatch()) { conditionAndOutcomes.forEach((conditionAndOutcome) -> this.positiveMatches.add(name, - new MessageAndCondition(conditionAndOutcome))); + new MessageAndConditionDescriptor(conditionAndOutcome))); } else { - this.negativeMatches.put(name, new MessageAndConditions(conditionAndOutcomes)); + this.negativeMatches.put(name, new MessageAndConditionsDescriptor(conditionAndOutcomes)); } } - public Map> getPositiveMatches() { + public Map> getPositiveMatches() { return this.positiveMatches; } - public Map getNegativeMatches() { + public Map getNegativeMatches() { return this.negativeMatches; } @@ -160,25 +159,25 @@ public class ConditionsReportEndpoint { * Adapts {@link ConditionAndOutcomes} to a JSON friendly structure. */ @JsonPropertyOrder({ "notMatched", "matched" }) - public static class MessageAndConditions { + public static class MessageAndConditionsDescriptor { - private final List notMatched = new ArrayList<>(); + private final List notMatched = new ArrayList<>(); - private final List matched = new ArrayList<>(); + private final List matched = new ArrayList<>(); - public MessageAndConditions(ConditionAndOutcomes conditionAndOutcomes) { + public MessageAndConditionsDescriptor(ConditionAndOutcomes conditionAndOutcomes) { for (ConditionAndOutcome conditionAndOutcome : conditionAndOutcomes) { - List target = (conditionAndOutcome.getOutcome().isMatch() ? this.matched + List target = (conditionAndOutcome.getOutcome().isMatch() ? this.matched : this.notMatched); - target.add(new MessageAndCondition(conditionAndOutcome)); + target.add(new MessageAndConditionDescriptor(conditionAndOutcome)); } } - public List getNotMatched() { + public List getNotMatched() { return this.notMatched; } - public List getMatched() { + public List getMatched() { return this.matched; } @@ -188,13 +187,13 @@ public class ConditionsReportEndpoint { * Adapts {@link ConditionAndOutcome} to a JSON friendly structure. */ @JsonPropertyOrder({ "condition", "message" }) - public static class MessageAndCondition { + public static class MessageAndConditionDescriptor { private final String condition; private final String message; - public MessageAndCondition(ConditionAndOutcome conditionAndOutcome) { + public MessageAndConditionDescriptor(ConditionAndOutcome conditionAndOutcome) { Condition condition = conditionAndOutcome.getCondition(); ConditionOutcome outcome = conditionAndOutcome.getOutcome(); this.condition = ClassUtils.getShortName(condition.getClass()); diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/condition/ConditionsReportEndpointTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/condition/ConditionsReportEndpointTests.java index f0c23e80327..d9f77cc59f1 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/condition/ConditionsReportEndpointTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/condition/ConditionsReportEndpointTests.java @@ -22,7 +22,7 @@ import java.util.Collections; import jakarta.annotation.PostConstruct; import org.junit.jupiter.api.Test; -import org.springframework.boot.actuate.autoconfigure.condition.ConditionsReportEndpoint.ContextConditionEvaluation; +import org.springframework.boot.actuate.autoconfigure.condition.ConditionsReportEndpoint.ContextConditionsDescriptor; import org.springframework.boot.autoconfigure.condition.ConditionEvaluationReport; import org.springframework.boot.autoconfigure.condition.ConditionOutcome; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -47,8 +47,8 @@ class ConditionsReportEndpointTests { @Test void invoke() { new ApplicationContextRunner().withUserConfiguration(Config.class).run((context) -> { - ContextConditionEvaluation report = context.getBean(ConditionsReportEndpoint.class) - .applicationConditionEvaluation().getContexts().get(context.getId()); + ContextConditionsDescriptor report = context.getBean(ConditionsReportEndpoint.class).conditions() + .getContexts().get(context.getId()); assertThat(report.getPositiveMatches()).isEmpty(); assertThat(report.getNegativeMatches()).containsKey("a"); assertThat(report.getUnconditionalClasses()).contains("b"); diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfigurationTests.java index a42f86e15ae..00fc0e289e3 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfigurationTests.java @@ -22,7 +22,7 @@ import java.util.Set; import org.junit.jupiter.api.Test; import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint; -import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ApplicationConfigurationProperties; +import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesDescriptor; import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpointWebExtension; import org.springframework.boot.actuate.endpoint.SanitizingFunction; import org.springframework.boot.actuate.endpoint.Show; @@ -115,7 +115,7 @@ class ConfigurationPropertiesReportEndpointAutoConfigurationTests { assertThat(context).hasSingleBean(ConfigurationPropertiesReportEndpoint.class); ConfigurationPropertiesReportEndpoint endpoint = context .getBean(ConfigurationPropertiesReportEndpoint.class); - ApplicationConfigurationProperties properties = endpoint.configurationProperties(); + ConfigurationPropertiesDescriptor properties = endpoint.configurationProperties(); Map nestedProperties = properties.getContexts().get(context.getId()).getBeans() .get("testProperties").getProperties(); assertThat(nestedProperties).isNotNull(); diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/audit/AuditEventsEndpoint.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/audit/AuditEventsEndpoint.java index 50fc9760ced..d656f2dbd0c 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/audit/AuditEventsEndpoint.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/audit/AuditEventsEndpoint.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2022 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. @@ -53,8 +53,7 @@ public class AuditEventsEndpoint { } /** - * A description of an application's {@link AuditEvent audit events}. Primarily - * intended for serialization to JSON. + * Description of an application's {@link AuditEvent audit events}. */ public static final class AuditEventsDescriptor { diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/beans/BeansEndpoint.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/beans/BeansEndpoint.java index 204797bb18b..f7829022795 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/beans/BeansEndpoint.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/beans/BeansEndpoint.java @@ -52,14 +52,14 @@ public class BeansEndpoint { } @ReadOperation - public ApplicationBeans beans() { - Map contexts = new HashMap<>(); + public BeansDescriptor beans() { + Map contexts = new HashMap<>(); ConfigurableApplicationContext context = this.context; while (context != null) { - contexts.put(context.getId(), ContextBeans.describing(context)); + contexts.put(context.getId(), ContextBeansDescriptor.describing(context)); context = getConfigurableParent(context); } - return new ApplicationBeans(contexts); + return new BeansDescriptor(contexts); } private static ConfigurableApplicationContext getConfigurableParent(ConfigurableApplicationContext context) { @@ -71,34 +71,32 @@ public class BeansEndpoint { } /** - * A description of an application's beans, primarily intended for serialization to - * JSON. + * Description of an application's beans. */ - public static final class ApplicationBeans { + public static final class BeansDescriptor { - private final Map contexts; + private final Map contexts; - private ApplicationBeans(Map contexts) { + private BeansDescriptor(Map contexts) { this.contexts = contexts; } - public Map getContexts() { + public Map getContexts() { return this.contexts; } } /** - * A description of an application context, primarily intended for serialization to - * JSON. + * Description of an application context beans. */ - public static final class ContextBeans { + public static final class ContextBeansDescriptor { private final Map beans; private final String parentId; - private ContextBeans(Map beans, String parentId) { + private ContextBeansDescriptor(Map beans, String parentId) { this.beans = beans; this.parentId = parentId; } @@ -111,12 +109,13 @@ public class BeansEndpoint { return this.beans; } - private static ContextBeans describing(ConfigurableApplicationContext context) { + private static ContextBeansDescriptor describing(ConfigurableApplicationContext context) { if (context == null) { return null; } ConfigurableApplicationContext parent = getConfigurableParent(context); - return new ContextBeans(describeBeans(context.getBeanFactory()), (parent != null) ? parent.getId() : null); + return new ContextBeansDescriptor(describeBeans(context.getBeanFactory()), + (parent != null) ? parent.getId() : null); } private static Map describeBeans(ConfigurableListableBeanFactory beanFactory) { @@ -144,8 +143,7 @@ public class BeansEndpoint { } /** - * A description of a bean in an application context, primarily intended for - * serialization to JSON. + * Description of a bean. */ public static final class BeanDescriptor { diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cache/CachesEndpoint.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cache/CachesEndpoint.java index 0b8851ae5d5..eb2217f0a81 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cache/CachesEndpoint.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cache/CachesEndpoint.java @@ -51,11 +51,11 @@ public class CachesEndpoint { } /** - * Return a {@link CachesReport} of all available {@link Cache caches}. + * Return a {@link CachesDescriptor} of all available {@link Cache caches}. * @return a caches reports */ @ReadOperation - public CachesReport caches() { + public CachesDescriptor caches() { Map> descriptors = new LinkedHashMap<>(); getCacheEntries(matchAll(), matchAll()).forEach((entry) -> { String cacheName = entry.getName(); @@ -66,7 +66,7 @@ public class CachesEndpoint { }); Map cacheManagerDescriptors = new LinkedHashMap<>(); descriptors.forEach((name, entries) -> cacheManagerDescriptors.put(name, new CacheManagerDescriptor(entries))); - return new CachesReport(cacheManagerDescriptors); + return new CachesDescriptor(cacheManagerDescriptors); } /** @@ -78,7 +78,7 @@ public class CachesEndpoint { * {@code cacheManager} was provided to identify a unique candidate */ @ReadOperation - public CacheEntry cache(@Selector String cache, @Nullable String cacheManager) { + public CacheEntryDescriptor cache(@Selector String cache, @Nullable String cacheManager) { return extractUniqueCacheEntry(cache, getCacheEntries((name) -> name.equals(cache), isNameMatch(cacheManager))); } @@ -101,32 +101,32 @@ public class CachesEndpoint { */ @DeleteOperation public boolean clearCache(@Selector String cache, @Nullable String cacheManager) { - CacheEntry entry = extractUniqueCacheEntry(cache, + CacheEntryDescriptor entry = extractUniqueCacheEntry(cache, getCacheEntries((name) -> name.equals(cache), isNameMatch(cacheManager))); return (entry != null && clearCache(entry)); } - private List getCacheEntries(Predicate cacheNamePredicate, + private List getCacheEntries(Predicate cacheNamePredicate, Predicate cacheManagerNamePredicate) { return this.cacheManagers.keySet().stream().filter(cacheManagerNamePredicate) .flatMap((cacheManagerName) -> getCacheEntries(cacheManagerName, cacheNamePredicate).stream()).toList(); } - private List getCacheEntries(String cacheManagerName, Predicate cacheNamePredicate) { + private List getCacheEntries(String cacheManagerName, Predicate cacheNamePredicate) { CacheManager cacheManager = this.cacheManagers.get(cacheManagerName); return cacheManager.getCacheNames().stream().filter(cacheNamePredicate).map(cacheManager::getCache) - .filter(Objects::nonNull).map((cache) -> new CacheEntry(cache, cacheManagerName)).toList(); + .filter(Objects::nonNull).map((cache) -> new CacheEntryDescriptor(cache, cacheManagerName)).toList(); } - private CacheEntry extractUniqueCacheEntry(String cache, List entries) { + private CacheEntryDescriptor extractUniqueCacheEntry(String cache, List entries) { if (entries.size() > 1) { throw new NonUniqueCacheException(cache, - entries.stream().map(CacheEntry::getCacheManager).distinct().toList()); + entries.stream().map(CacheEntryDescriptor::getCacheManager).distinct().toList()); } return (!entries.isEmpty() ? entries.get(0) : null); } - private boolean clearCache(CacheEntry entry) { + private boolean clearCache(CacheEntryDescriptor entry) { String cacheName = entry.getName(); String cacheManager = entry.getCacheManager(); Cache cache = this.cacheManagers.get(cacheManager).getCache(cacheName); @@ -146,14 +146,13 @@ public class CachesEndpoint { } /** - * A report of available {@link Cache caches}, primarily intended for serialization to - * JSON. + * Description of the caches. */ - public static final class CachesReport { + public static final class CachesDescriptor { private final Map cacheManagers; - public CachesReport(Map cacheManagers) { + public CachesDescriptor(Map cacheManagers) { this.cacheManagers = cacheManagers; } @@ -164,8 +163,7 @@ public class CachesEndpoint { } /** - * Description of a {@link CacheManager}, primarily intended for serialization to - * JSON. + * Description of a {@link CacheManager}. */ public static final class CacheManagerDescriptor { @@ -182,7 +180,7 @@ public class CachesEndpoint { } /** - * Basic description of a {@link Cache}, primarily intended for serialization to JSON. + * Description of a {@link Cache}. */ public static class CacheDescriptor { @@ -203,15 +201,15 @@ public class CachesEndpoint { } /** - * Description of a {@link Cache}, primarily intended for serialization to JSON. + * Description of a {@link Cache} entry. */ - public static final class CacheEntry extends CacheDescriptor { + public static final class CacheEntryDescriptor extends CacheDescriptor { private final String name; private final String cacheManager; - public CacheEntry(Cache cache, String cacheManager) { + public CacheEntryDescriptor(Cache cache, String cacheManager) { super(cache.getNativeCache().getClass().getName()); this.name = cache.getName(); this.cacheManager = cacheManager; diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cache/CachesEndpointWebExtension.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cache/CachesEndpointWebExtension.java index 3b4a8e70214..f2e200be6c2 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cache/CachesEndpointWebExtension.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cache/CachesEndpointWebExtension.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2022 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. @@ -16,7 +16,7 @@ package org.springframework.boot.actuate.cache; -import org.springframework.boot.actuate.cache.CachesEndpoint.CacheEntry; +import org.springframework.boot.actuate.cache.CachesEndpoint.CacheEntryDescriptor; import org.springframework.boot.actuate.endpoint.annotation.DeleteOperation; import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; import org.springframework.boot.actuate.endpoint.annotation.Selector; @@ -40,9 +40,9 @@ public class CachesEndpointWebExtension { } @ReadOperation - public WebEndpointResponse cache(@Selector String cache, @Nullable String cacheManager) { + public WebEndpointResponse cache(@Selector String cache, @Nullable String cacheManager) { try { - CacheEntry entry = this.delegate.cache(cache, cacheManager); + CacheEntryDescriptor entry = this.delegate.cache(cache, cacheManager); int status = (entry != null) ? WebEndpointResponse.STATUS_OK : WebEndpointResponse.STATUS_NOT_FOUND; return new WebEndpointResponse<>(entry, status); } diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/ShutdownEndpoint.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/ShutdownEndpoint.java index 412bbfad59b..488069cfe19 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/ShutdownEndpoint.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/ShutdownEndpoint.java @@ -16,8 +16,6 @@ package org.springframework.boot.actuate.context; -import java.util.Map; - import org.springframework.beans.BeansException; import org.springframework.boot.actuate.endpoint.annotation.Endpoint; import org.springframework.boot.actuate.endpoint.annotation.WriteOperation; @@ -36,19 +34,15 @@ import org.springframework.context.ConfigurableApplicationContext; @Endpoint(id = "shutdown", enableByDefault = false) public class ShutdownEndpoint implements ApplicationContextAware { - private static final Map NO_CONTEXT_MESSAGE = Map.of("message", "No context to shutdown."); - - private static final Map SHUTDOWN_MESSAGE = Map.of("message", "Shutting down, bye..."); - private ConfigurableApplicationContext context; @WriteOperation - public Map shutdown() { + public ShutdownDescriptor shutdown() { if (this.context == null) { - return NO_CONTEXT_MESSAGE; + return ShutdownDescriptor.NO_CONTEXT; } try { - return SHUTDOWN_MESSAGE; + return ShutdownDescriptor.DEFAULT; } finally { Thread thread = new Thread(this::performShutdown); @@ -74,4 +68,25 @@ public class ShutdownEndpoint implements ApplicationContextAware { } } + /** + * Description of the shutdown. + */ + public static class ShutdownDescriptor { + + private static final ShutdownDescriptor DEFAULT = new ShutdownDescriptor("Shutting down, bye..."); + + private static final ShutdownDescriptor NO_CONTEXT = new ShutdownDescriptor("No context to shutdown."); + + private final String message; + + ShutdownDescriptor(String message) { + this.message = message; + } + + public String getMessage() { + return this.message; + } + + } + } diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpoint.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpoint.java index 322cde03821..0b6250fd442 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpoint.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpoint.java @@ -125,37 +125,37 @@ public class ConfigurationPropertiesReportEndpoint implements ApplicationContext } @ReadOperation - public ApplicationConfigurationProperties configurationProperties() { + public ConfigurationPropertiesDescriptor configurationProperties() { boolean showUnsanitized = this.showValues.isShown(true); return getConfigurationProperties(showUnsanitized); } - ApplicationConfigurationProperties getConfigurationProperties(boolean showUnsanitized) { + ConfigurationPropertiesDescriptor getConfigurationProperties(boolean showUnsanitized) { return getConfigurationProperties(this.context, (bean) -> true, showUnsanitized); } @ReadOperation - public ApplicationConfigurationProperties configurationPropertiesWithPrefix(@Selector String prefix) { + public ConfigurationPropertiesDescriptor configurationPropertiesWithPrefix(@Selector String prefix) { boolean showUnsanitized = this.showValues.isShown(true); return getConfigurationProperties(prefix, showUnsanitized); } - ApplicationConfigurationProperties getConfigurationProperties(String prefix, boolean showUnsanitized) { + ConfigurationPropertiesDescriptor getConfigurationProperties(String prefix, boolean showUnsanitized) { return getConfigurationProperties(this.context, (bean) -> bean.getAnnotation().prefix().startsWith(prefix), showUnsanitized); } - private ApplicationConfigurationProperties getConfigurationProperties(ApplicationContext context, + private ConfigurationPropertiesDescriptor getConfigurationProperties(ApplicationContext context, Predicate beanFilterPredicate, boolean showUnsanitized) { ObjectMapper mapper = getObjectMapper(); - Map contexts = new HashMap<>(); + Map contexts = new HashMap<>(); ApplicationContext target = context; while (target != null) { contexts.put(target.getId(), describeBeans(mapper, target, beanFilterPredicate, showUnsanitized)); target = target.getParent(); } - return new ApplicationConfigurationProperties(contexts); + return new ConfigurationPropertiesDescriptor(contexts); } private ObjectMapper getObjectMapper() { @@ -202,13 +202,13 @@ public class ConfigurationPropertiesReportEndpoint implements ApplicationContext builder.serializerFactory(factory); } - private ContextConfigurationProperties describeBeans(ObjectMapper mapper, ApplicationContext context, + private ContextConfigurationPropertiesDescriptor describeBeans(ObjectMapper mapper, ApplicationContext context, Predicate beanFilterPredicate, boolean showUnsanitized) { Map beans = ConfigurationPropertiesBean.getAll(context); Map descriptors = beans.values().stream() .filter(beanFilterPredicate).collect(Collectors.toMap(ConfigurationPropertiesBean::getName, (bean) -> describeBean(mapper, bean, showUnsanitized))); - return new ContextConfigurationProperties(descriptors, + return new ContextConfigurationPropertiesDescriptor(descriptors, (context.getParent() != null) ? context.getParent().getId() : null); } @@ -561,36 +561,34 @@ public class ConfigurationPropertiesReportEndpoint implements ApplicationContext } /** - * A description of an application's - * {@link ConfigurationProperties @ConfigurationProperties} beans. Primarily intended - * for serialization to JSON. + * Description of an application's + * {@link ConfigurationProperties @ConfigurationProperties} beans. */ - public static final class ApplicationConfigurationProperties { + public static final class ConfigurationPropertiesDescriptor { - private final Map contexts; + private final Map contexts; - ApplicationConfigurationProperties(Map contexts) { + ConfigurationPropertiesDescriptor(Map contexts) { this.contexts = contexts; } - public Map getContexts() { + public Map getContexts() { return this.contexts; } } /** - * A description of an application context's - * {@link ConfigurationProperties @ConfigurationProperties} beans. Primarily intended - * for serialization to JSON. + * Description of an application context's + * {@link ConfigurationProperties @ConfigurationProperties} beans. */ - public static final class ContextConfigurationProperties { + public static final class ContextConfigurationPropertiesDescriptor { private final Map beans; private final String parentId; - private ContextConfigurationProperties(Map beans, + private ContextConfigurationPropertiesDescriptor(Map beans, String parentId) { this.beans = beans; this.parentId = parentId; @@ -607,8 +605,7 @@ public class ConfigurationPropertiesReportEndpoint implements ApplicationContext } /** - * A description of a {@link ConfigurationProperties @ConfigurationProperties} bean. - * Primarily intended for serialization to JSON. + * Description of a {@link ConfigurationProperties @ConfigurationProperties} bean. */ public static final class ConfigurationPropertiesBeanDescriptor { diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointWebExtension.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointWebExtension.java index bb1c2c151bd..9e4cdc0332a 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointWebExtension.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointWebExtension.java @@ -18,7 +18,7 @@ package org.springframework.boot.actuate.context.properties; import java.util.Set; -import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ApplicationConfigurationProperties; +import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesDescriptor; import org.springframework.boot.actuate.endpoint.SecurityContext; import org.springframework.boot.actuate.endpoint.Show; import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; @@ -50,16 +50,16 @@ public class ConfigurationPropertiesReportEndpointWebExtension { } @ReadOperation - public ApplicationConfigurationProperties configurationProperties(SecurityContext securityContext) { + public ConfigurationPropertiesDescriptor configurationProperties(SecurityContext securityContext) { boolean showUnsanitized = this.showValues.isShown(securityContext, this.roles); return this.delegate.getConfigurationProperties(showUnsanitized); } @ReadOperation - public WebEndpointResponse configurationPropertiesWithPrefix( + public WebEndpointResponse configurationPropertiesWithPrefix( SecurityContext securityContext, @Selector String prefix) { boolean showUnsanitized = this.showValues.isShown(securityContext, this.roles); - ApplicationConfigurationProperties configurationProperties = this.delegate.getConfigurationProperties(prefix, + ConfigurationPropertiesDescriptor configurationProperties = this.delegate.getConfigurationProperties(prefix, showUnsanitized); boolean foundMatchingBeans = configurationProperties.getContexts().values().stream() .anyMatch((context) -> !context.getBeans().isEmpty()); diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/env/EnvironmentEndpoint.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/env/EnvironmentEndpoint.java index 86de6242f23..c148c0f134f 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/env/EnvironmentEndpoint.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/env/EnvironmentEndpoint.java @@ -201,7 +201,7 @@ public class EnvironmentEndpoint { } /** - * A description of an {@link Environment}. + * Description of an {@link Environment}. */ public static final class EnvironmentDescriptor { @@ -225,7 +225,7 @@ public class EnvironmentEndpoint { } /** - * A description of an entry of the {@link Environment}. + * Description of an entry of the {@link Environment}. */ @JsonInclude(JsonInclude.Include.NON_NULL) public static final class EnvironmentEntryDescriptor { @@ -258,7 +258,7 @@ public class EnvironmentEndpoint { } /** - * A summary of a particular entry of the {@link Environment}. + * Description of a particular entry of the {@link Environment}. */ @JsonInclude(JsonInclude.Include.NON_NULL) public static final class PropertySummaryDescriptor { @@ -283,7 +283,7 @@ public class EnvironmentEndpoint { } /** - * A description of a {@link PropertySource}. + * Description of a {@link PropertySource}. */ public static final class PropertySourceDescriptor { @@ -307,7 +307,7 @@ public class EnvironmentEndpoint { } /** - * A description of a particular entry of {@link PropertySource}. + * Description of a particular entry of {@link PropertySource}. */ @JsonInclude(JsonInclude.Include.NON_NULL) public static final class PropertySourceEntryDescriptor { @@ -332,7 +332,7 @@ public class EnvironmentEndpoint { } /** - * A description of a property's value, including its origin if available. + * Description of a property's value, including its origin if available. */ @JsonInclude(JsonInclude.Include.NON_NULL) public static final class PropertyValueDescriptor { diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/flyway/FlywayEndpoint.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/flyway/FlywayEndpoint.java index ec9f8671a59..03da1ee553f 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/flyway/FlywayEndpoint.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/flyway/FlywayEndpoint.java @@ -21,6 +21,7 @@ import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import java.util.stream.Stream; import org.flywaydb.core.Flyway; @@ -50,50 +51,48 @@ public class FlywayEndpoint { } @ReadOperation - public ApplicationFlywayBeans flywayBeans() { + public FlywayBeansDescriptor flywayBeans() { ApplicationContext target = this.context; - Map contextFlywayBeans = new HashMap<>(); + Map contextFlywayBeans = new HashMap<>(); while (target != null) { Map flywayBeans = new HashMap<>(); target.getBeansOfType(Flyway.class) .forEach((name, flyway) -> flywayBeans.put(name, new FlywayDescriptor(flyway.info().all()))); ApplicationContext parent = target.getParent(); contextFlywayBeans.put(target.getId(), - new ContextFlywayBeans(flywayBeans, (parent != null) ? parent.getId() : null)); + new ContextFlywayBeansDescriptor(flywayBeans, (parent != null) ? parent.getId() : null)); target = parent; } - return new ApplicationFlywayBeans(contextFlywayBeans); + return new FlywayBeansDescriptor(contextFlywayBeans); } /** - * Description of an application's {@link Flyway} beans, primarily intended for - * serialization to JSON. + * Description of an application's {@link Flyway} beans. */ - public static final class ApplicationFlywayBeans { + public static final class FlywayBeansDescriptor { - private final Map contexts; + private final Map contexts; - private ApplicationFlywayBeans(Map contexts) { + private FlywayBeansDescriptor(Map contexts) { this.contexts = contexts; } - public Map getContexts() { + public Map getContexts() { return this.contexts; } } /** - * Description of an application context's {@link Flyway} beans, primarily intended - * for serialization to JSON. + * Description of an application context's {@link Flyway} beans. */ - public static final class ContextFlywayBeans { + public static final class ContextFlywayBeansDescriptor { private final Map flywayBeans; private final String parentId; - private ContextFlywayBeans(Map flywayBeans, String parentId) { + private ContextFlywayBeansDescriptor(Map flywayBeans, String parentId) { this.flywayBeans = flywayBeans; this.parentId = parentId; } @@ -109,30 +108,30 @@ public class FlywayEndpoint { } /** - * Description of a {@link Flyway} bean, primarily intended for serialization to JSON. + * Description of a {@link Flyway} bean. */ public static class FlywayDescriptor { - private final List migrations; + private final List migrations; private FlywayDescriptor(MigrationInfo[] migrations) { - this.migrations = Stream.of(migrations).map(FlywayMigration::new).toList(); + this.migrations = Stream.of(migrations).map(FlywayMigrationDescriptor::new).collect(Collectors.toList()); } - public FlywayDescriptor(List migrations) { + public FlywayDescriptor(List migrations) { this.migrations = migrations; } - public List getMigrations() { + public List getMigrations() { return this.migrations; } } /** - * Details of a migration performed by Flyway. + * Description of a migration performed by Flyway. */ - public static final class FlywayMigration { + public static final class FlywayMigrationDescriptor { private final String type; @@ -154,7 +153,7 @@ public class FlywayEndpoint { private final Integer executionTime; - private FlywayMigration(MigrationInfo info) { + private FlywayMigrationDescriptor(MigrationInfo info) { this.type = info.getType().name(); this.checksum = info.getChecksum(); this.version = nullSafeToString(info.getVersion()); diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/info/InfoEndpoint.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/info/InfoEndpoint.java index cbdad128f54..57b1e6f6558 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/info/InfoEndpoint.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/info/InfoEndpoint.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2022 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. @@ -51,8 +51,7 @@ public class InfoEndpoint { for (InfoContributor contributor : this.infoContributors) { contributor.contribute(builder); } - Info build = builder.build(); - return build.getDetails(); + return builder.build().getDetails(); } } diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/integration/IntegrationGraphEndpoint.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/integration/IntegrationGraphEndpoint.java index 7cd334a89eb..a741c0b27cb 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/integration/IntegrationGraphEndpoint.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/integration/IntegrationGraphEndpoint.java @@ -16,6 +16,9 @@ package org.springframework.boot.actuate.integration; +import java.util.Collection; +import java.util.Map; + import org.springframework.aot.hint.BindingReflectionHintsRegistrar; import org.springframework.aot.hint.RuntimeHints; import org.springframework.aot.hint.RuntimeHintsRegistrar; @@ -34,6 +37,8 @@ import org.springframework.integration.graph.ErrorCapableMessageHandlerNode; import org.springframework.integration.graph.ErrorCapableRoutingNode; import org.springframework.integration.graph.Graph; import org.springframework.integration.graph.IntegrationGraphServer; +import org.springframework.integration.graph.IntegrationNode; +import org.springframework.integration.graph.LinkNode; import org.springframework.integration.graph.MessageChannelNode; import org.springframework.integration.graph.MessageGatewayNode; import org.springframework.integration.graph.MessageHandlerNode; @@ -65,8 +70,8 @@ public class IntegrationGraphEndpoint { } @ReadOperation - public Graph graph() { - return this.graphServer.getGraph(); + public GraphDescriptor graph() { + return new GraphDescriptor(this.graphServer.getGraph()); } @WriteOperation @@ -91,4 +96,35 @@ public class IntegrationGraphEndpoint { } + /** + * Description of a {@link Graph}. + */ + public static class GraphDescriptor { + + private final Map contentDescriptor; + + private final Collection nodes; + + private final Collection links; + + GraphDescriptor(Graph graph) { + this.contentDescriptor = graph.getContentDescriptor(); + this.nodes = graph.getNodes(); + this.links = graph.getLinks(); + } + + public Map getContentDescriptor() { + return this.contentDescriptor; + } + + public Collection getNodes() { + return this.nodes; + } + + public Collection getLinks() { + return this.links; + } + + } + } diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpoint.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpoint.java index a5dfa76d973..73b3c9867a6 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpoint.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpoint.java @@ -55,23 +55,23 @@ public class LiquibaseEndpoint { } @ReadOperation - public ApplicationLiquibaseBeans liquibaseBeans() { + public LiquibaseBeansDescriptor liquibaseBeans() { ApplicationContext target = this.context; - Map contextBeans = new HashMap<>(); + Map contextBeans = new HashMap<>(); while (target != null) { - Map liquibaseBeans = new HashMap<>(); + Map liquibaseBeans = new HashMap<>(); DatabaseFactory factory = DatabaseFactory.getInstance(); target.getBeansOfType(SpringLiquibase.class) .forEach((name, liquibase) -> liquibaseBeans.put(name, createReport(liquibase, factory))); ApplicationContext parent = target.getParent(); contextBeans.put(target.getId(), - new ContextLiquibaseBeans(liquibaseBeans, (parent != null) ? parent.getId() : null)); + new ContextLiquibaseBeansDescriptor(liquibaseBeans, (parent != null) ? parent.getId() : null)); target = parent; } - return new ApplicationLiquibaseBeans(contextBeans); + return new LiquibaseBeansDescriptor(contextBeans); } - private LiquibaseBean createReport(SpringLiquibase liquibase, DatabaseFactory factory) { + private LiquibaseBeanDescriptor createReport(SpringLiquibase liquibase, DatabaseFactory factory) { try { DataSource dataSource = liquibase.getDataSource(); JdbcConnection connection = new JdbcConnection(dataSource.getConnection()); @@ -86,7 +86,8 @@ public class LiquibaseEndpoint { database.setDatabaseChangeLogLockTableName(liquibase.getDatabaseChangeLogLockTable()); StandardChangeLogHistoryService service = new StandardChangeLogHistoryService(); service.setDatabase(database); - return new LiquibaseBean(service.getRanChangeSets().stream().map(ChangeSet::new).toList()); + return new LiquibaseBeanDescriptor( + service.getRanChangeSets().stream().map(ChangeSetDescriptor::new).toList()); } finally { if (database != null) { @@ -103,39 +104,37 @@ public class LiquibaseEndpoint { } /** - * Description of an application's {@link SpringLiquibase} beans, primarily intended - * for serialization to JSON. + * Description of an application's {@link SpringLiquibase} beans. */ - public static final class ApplicationLiquibaseBeans { + public static final class LiquibaseBeansDescriptor { - private final Map contexts; + private final Map contexts; - private ApplicationLiquibaseBeans(Map contexts) { + private LiquibaseBeansDescriptor(Map contexts) { this.contexts = contexts; } - public Map getContexts() { + public Map getContexts() { return this.contexts; } } /** - * Description of an application context's {@link SpringLiquibase} beans, primarily - * intended for serialization to JSON. + * Description of an application context's {@link SpringLiquibase} beans. */ - public static final class ContextLiquibaseBeans { + public static final class ContextLiquibaseBeansDescriptor { - private final Map liquibaseBeans; + private final Map liquibaseBeans; private final String parentId; - private ContextLiquibaseBeans(Map liquibaseBeans, String parentId) { + private ContextLiquibaseBeansDescriptor(Map liquibaseBeans, String parentId) { this.liquibaseBeans = liquibaseBeans; this.parentId = parentId; } - public Map getLiquibaseBeans() { + public Map getLiquibaseBeans() { return this.liquibaseBeans; } @@ -146,27 +145,26 @@ public class LiquibaseEndpoint { } /** - * Description of a {@link SpringLiquibase} bean, primarily intended for serialization - * to JSON. + * Description of a {@link SpringLiquibase} bean. */ - public static final class LiquibaseBean { + public static final class LiquibaseBeanDescriptor { - private final List changeSets; + private final List changeSets; - public LiquibaseBean(List changeSets) { + public LiquibaseBeanDescriptor(List changeSets) { this.changeSets = changeSets; } - public List getChangeSets() { + public List getChangeSets() { return this.changeSets; } } /** - * A Liquibase change set. + * Description of a Liquibase change set. */ - public static class ChangeSet { + public static class ChangeSetDescriptor { private final String author; @@ -194,7 +192,7 @@ public class LiquibaseEndpoint { private final String tag; - public ChangeSet(RanChangeSet ranChangeSet) { + public ChangeSetDescriptor(RanChangeSet ranChangeSet) { this.author = ranChangeSet.getAuthor(); this.changeLog = ranChangeSet.getChangeLog(); this.comments = ranChangeSet.getComments(); @@ -266,13 +264,13 @@ public class LiquibaseEndpoint { } /** - * A context expression in a {@link ChangeSet}. + * Description of a context expression in a {@link ChangeSetDescriptor}. */ - public static class ContextExpression { + public static class ContextExpressionDescriptor { private final Set contexts; - public ContextExpression(Set contexts) { + public ContextExpressionDescriptor(Set contexts) { this.contexts = contexts; } diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/logging/LoggersEndpoint.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/logging/LoggersEndpoint.java index 000671d1502..d4c1f1aa1c3 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/logging/LoggersEndpoint.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/logging/LoggersEndpoint.java @@ -17,7 +17,6 @@ package org.springframework.boot.actuate.logging; import java.util.Collection; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -30,8 +29,8 @@ import org.springframework.boot.actuate.endpoint.annotation.Endpoint; import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; import org.springframework.boot.actuate.endpoint.annotation.Selector; import org.springframework.boot.actuate.endpoint.annotation.WriteOperation; -import org.springframework.boot.actuate.logging.LoggersEndpoint.GroupLoggerLevels; -import org.springframework.boot.actuate.logging.LoggersEndpoint.SingleLoggerLevels; +import org.springframework.boot.actuate.logging.LoggersEndpoint.GroupLoggerLevelsDescriptor; +import org.springframework.boot.actuate.logging.LoggersEndpoint.SingleLoggerLevelsDescriptor; import org.springframework.boot.logging.LogLevel; import org.springframework.boot.logging.LoggerConfiguration; import org.springframework.boot.logging.LoggerGroup; @@ -49,7 +48,7 @@ import org.springframework.util.Assert; * @since 2.0.0 */ @Endpoint(id = "loggers") -@RegisterReflectionForBinding({ GroupLoggerLevels.class, SingleLoggerLevels.class }) +@RegisterReflectionForBinding({ GroupLoggerLevelsDescriptor.class, SingleLoggerLevelsDescriptor.class }) public class LoggersEndpoint { private final LoggingSystem loggingSystem; @@ -69,34 +68,30 @@ public class LoggersEndpoint { } @ReadOperation - public Map loggers() { + public LoggersDescriptor loggers() { Collection configurations = this.loggingSystem.getLoggerConfigurations(); if (configurations == null) { - return Collections.emptyMap(); + return LoggersDescriptor.NONE; } - Map result = new LinkedHashMap<>(); - result.put("levels", getLevels()); - result.put("loggers", getLoggers(configurations)); - result.put("groups", getGroups()); - return result; + return new LoggersDescriptor(getLevels(), getLoggers(configurations), getGroups()); } - private Map getGroups() { - Map groups = new LinkedHashMap<>(); + private Map getGroups() { + Map groups = new LinkedHashMap<>(); this.loggerGroups.forEach((group) -> groups.put(group.getName(), - new GroupLoggerLevels(group.getConfiguredLevel(), group.getMembers()))); + new GroupLoggerLevelsDescriptor(group.getConfiguredLevel(), group.getMembers()))); return groups; } @ReadOperation - public LoggerLevels loggerLevels(@Selector String name) { + public LoggerLevelsDescriptor loggerLevels(@Selector String name) { Assert.notNull(name, "Name must not be null"); LoggerGroup group = this.loggerGroups.get(name); if (group != null) { - return new GroupLoggerLevels(group.getConfiguredLevel(), group.getMembers()); + return new GroupLoggerLevelsDescriptor(group.getConfiguredLevel(), group.getMembers()); } LoggerConfiguration configuration = this.loggingSystem.getLoggerConfiguration(name); - return (configuration != null) ? new SingleLoggerLevels(configuration) : null; + return (configuration != null) ? new SingleLoggerLevelsDescriptor(configuration) : null; } @WriteOperation @@ -115,22 +110,59 @@ public class LoggersEndpoint { return new TreeSet<>(levels).descendingSet(); } - private Map getLoggers(Collection configurations) { - Map loggers = new LinkedHashMap<>(configurations.size()); + private Map getLoggers(Collection configurations) { + Map loggers = new LinkedHashMap<>(configurations.size()); for (LoggerConfiguration configuration : configurations) { - loggers.put(configuration.getName(), new SingleLoggerLevels(configuration)); + loggers.put(configuration.getName(), new SingleLoggerLevelsDescriptor(configuration)); } return loggers; } /** - * Levels configured for a given logger exposed in a JSON friendly way. + * Description of loggers. */ - public static class LoggerLevels { + public static class LoggersDescriptor { + + /** + * Empty description. + */ + public static final LoggersDescriptor NONE = new LoggersDescriptor(null, null, null); + + private final NavigableSet levels; + + private final Map loggers; + + private final Map groups; + + public LoggersDescriptor(NavigableSet levels, Map loggers, + Map groups) { + this.levels = levels; + this.loggers = loggers; + this.groups = groups; + } + + public NavigableSet getLevels() { + return this.levels; + } + + public Map getLoggers() { + return this.loggers; + } + + public Map getGroups() { + return this.groups; + } + + } + + /** + * Description of levels configured for a given logger. + */ + public static class LoggerLevelsDescriptor { private String configuredLevel; - public LoggerLevels(LogLevel configuredLevel) { + public LoggerLevelsDescriptor(LogLevel configuredLevel) { this.configuredLevel = getName(configuredLevel); } @@ -144,11 +176,14 @@ public class LoggersEndpoint { } - public static class GroupLoggerLevels extends LoggerLevels { + /** + * Description of levels configured for a given group logger. + */ + public static class GroupLoggerLevelsDescriptor extends LoggerLevelsDescriptor { private List members; - public GroupLoggerLevels(LogLevel configuredLevel, List members) { + public GroupLoggerLevelsDescriptor(LogLevel configuredLevel, List members) { super(configuredLevel); this.members = members; } @@ -159,11 +194,14 @@ public class LoggersEndpoint { } - public static class SingleLoggerLevels extends LoggerLevels { + /** + * Description of levels configured for a given single logger. + */ + public static class SingleLoggerLevelsDescriptor extends LoggerLevelsDescriptor { private String effectiveLevel; - public SingleLoggerLevels(LoggerConfiguration configuration) { + public SingleLoggerLevelsDescriptor(LoggerConfiguration configuration) { super(configuration.getConfiguredLevel()); this.effectiveLevel = getName(configuration.getEffectiveLevel()); } diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/management/ThreadDumpEndpoint.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/management/ThreadDumpEndpoint.java index 90a168c5bf2..eaa5c238b42 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/management/ThreadDumpEndpoint.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/management/ThreadDumpEndpoint.java @@ -52,7 +52,7 @@ public class ThreadDumpEndpoint { } /** - * A description of a thread dump. Primarily intended for serialization to JSON. + * Description of a thread dump. */ public static final class ThreadDumpDescriptor { diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/MetricsEndpoint.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/MetricsEndpoint.java index 256ccb69c96..d7834552e69 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/MetricsEndpoint.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/MetricsEndpoint.java @@ -56,10 +56,10 @@ public class MetricsEndpoint { } @ReadOperation - public ListNamesResponse listNames() { + public MetricNamesDescriptor listNames() { Set names = new TreeSet<>(); collectNames(names, this.registry); - return new ListNamesResponse(names); + return new MetricNamesDescriptor(names); } private void collectNames(Set names, MeterRegistry registry) { @@ -76,7 +76,7 @@ public class MetricsEndpoint { } @ReadOperation - public MetricResponse metric(@Selector String requiredMetricName, @Nullable List tag) { + public MetricDescriptor metric(@Selector String requiredMetricName, @Nullable List tag) { List tags = parseTags(tag); Collection meters = findFirstMatchingMeters(this.registry, requiredMetricName, tags); if (meters.isEmpty()) { @@ -86,7 +86,7 @@ public class MetricsEndpoint { Map> availableTags = getAvailableTags(meters); tags.forEach((t) -> availableTags.remove(t.getKey())); Meter.Id meterId = meters.iterator().next().getId(); - return new MetricResponse(requiredMetricName, meterId.getDescription(), meterId.getBaseUnit(), + return new MetricDescriptor(requiredMetricName, meterId.getDescription(), meterId.getBaseUnit(), asList(samples, Sample::new), asList(availableTags, AvailableTag::new)); } @@ -157,13 +157,13 @@ public class MetricsEndpoint { } /** - * Response payload for a metric name listing. + * Description of metric names. */ - public static final class ListNamesResponse { + public static final class MetricNamesDescriptor { private final Set names; - ListNamesResponse(Set names) { + MetricNamesDescriptor(Set names) { this.names = names; } @@ -174,9 +174,9 @@ public class MetricsEndpoint { } /** - * Response payload for a metric name selector. + * Description of a metric. */ - public static final class MetricResponse { + public static final class MetricDescriptor { private final String name; @@ -188,7 +188,7 @@ public class MetricsEndpoint { private final List availableTags; - MetricResponse(String name, String description, String baseUnit, List measurements, + MetricDescriptor(String name, String description, String baseUnit, List measurements, List availableTags) { this.name = name; this.description = description; diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/quartz/QuartzEndpoint.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/quartz/QuartzEndpoint.java index 8e138ed0c58..e2df8766e56 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/quartz/QuartzEndpoint.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/quartz/QuartzEndpoint.java @@ -84,9 +84,9 @@ public class QuartzEndpoint { * @throws SchedulerException if retrieving the information from the scheduler failed */ @ReadOperation - public QuartzReport quartzReport() throws SchedulerException { - return new QuartzReport(new GroupNames(this.scheduler.getJobGroupNames()), - new GroupNames(this.scheduler.getTriggerGroupNames())); + public QuartzDescriptor quartzReport() throws SchedulerException { + return new QuartzDescriptor(new GroupNamesDescriptor(this.scheduler.getJobGroupNames()), + new GroupNamesDescriptor(this.scheduler.getTriggerGroupNames())); } /** @@ -94,14 +94,14 @@ public class QuartzEndpoint { * @return the available job names * @throws SchedulerException if retrieving the information from the scheduler failed */ - public QuartzGroups quartzJobGroups() throws SchedulerException { + public QuartzGroupsDescriptor quartzJobGroups() throws SchedulerException { Map result = new LinkedHashMap<>(); for (String groupName : this.scheduler.getJobGroupNames()) { List jobs = this.scheduler.getJobKeys(GroupMatcher.jobGroupEquals(groupName)).stream() .map((key) -> key.getName()).toList(); result.put(groupName, Collections.singletonMap("jobs", jobs)); } - return new QuartzGroups(result); + return new QuartzGroupsDescriptor(result); } /** @@ -109,7 +109,7 @@ public class QuartzEndpoint { * @return the available trigger names * @throws SchedulerException if retrieving the information from the scheduler failed */ - public QuartzGroups quartzTriggerGroups() throws SchedulerException { + public QuartzGroupsDescriptor quartzTriggerGroups() throws SchedulerException { Map result = new LinkedHashMap<>(); Set pausedTriggerGroups = this.scheduler.getPausedTriggerGroups(); for (String groupName : this.scheduler.getTriggerGroupNames()) { @@ -119,7 +119,7 @@ public class QuartzEndpoint { .stream().map((key) -> key.getName()).toList()); result.put(groupName, groupDetails); } - return new QuartzGroups(result); + return new QuartzGroupsDescriptor(result); } /** @@ -129,16 +129,16 @@ public class QuartzEndpoint { * @return a summary of the jobs in the given {@code group} * @throws SchedulerException if retrieving the information from the scheduler failed */ - public QuartzJobGroupSummary quartzJobGroupSummary(String group) throws SchedulerException { + public QuartzJobGroupSummaryDescriptor quartzJobGroupSummary(String group) throws SchedulerException { List jobs = findJobsByGroup(group); if (jobs.isEmpty() && !this.scheduler.getJobGroupNames().contains(group)) { return null; } - Map result = new LinkedHashMap<>(); + Map result = new LinkedHashMap<>(); for (JobDetail job : jobs) { - result.put(job.getKey().getName(), QuartzJobSummary.of(job)); + result.put(job.getKey().getName(), QuartzJobSummaryDescriptor.of(job)); } - return new QuartzJobGroupSummary(group, result); + return new QuartzJobGroupSummaryDescriptor(group, result); } private List findJobsByGroup(String group) throws SchedulerException { @@ -157,20 +157,20 @@ public class QuartzEndpoint { * @return a summary of the triggers in the given {@code group} * @throws SchedulerException if retrieving the information from the scheduler failed */ - public QuartzTriggerGroupSummary quartzTriggerGroupSummary(String group) throws SchedulerException { + public QuartzTriggerGroupSummaryDescriptor quartzTriggerGroupSummary(String group) throws SchedulerException { List triggers = findTriggersByGroup(group); if (triggers.isEmpty() && !this.scheduler.getTriggerGroupNames().contains(group)) { return null; } Map> result = new LinkedHashMap<>(); triggers.forEach((trigger) -> { - TriggerDescription triggerDescription = TriggerDescription.of(trigger); - Map triggerTypes = result.computeIfAbsent(triggerDescription.getType(), + TriggerDescriptor triggerDescriptor = TriggerDescriptor.of(trigger); + Map triggerTypes = result.computeIfAbsent(triggerDescriptor.getType(), (key) -> new LinkedHashMap<>()); - triggerTypes.put(trigger.getKey().getName(), triggerDescription.buildSummary(true)); + triggerTypes.put(trigger.getKey().getName(), triggerDescriptor.buildSummary(true)); }); boolean paused = this.scheduler.getPausedTriggerGroups().contains(group); - return new QuartzTriggerGroupSummary(group, paused, result); + return new QuartzTriggerGroupSummaryDescriptor(group, paused, result); } private List findTriggersByGroup(String group) throws SchedulerException { @@ -183,21 +183,21 @@ public class QuartzEndpoint { } /** - * Return the {@link QuartzJobDetails details of the job} identified with the given - * group name and job name. + * Return the {@link QuartzJobDetailsDescriptor details of the job} identified with + * the given group name and job name. * @param groupName the name of the group * @param jobName the name of the job * @param showUnsanitized whether to sanitize values in data map * @return the details of the job or {@code null} if such job does not exist * @throws SchedulerException if retrieving the information from the scheduler failed */ - public QuartzJobDetails quartzJob(String groupName, String jobName, boolean showUnsanitized) + public QuartzJobDetailsDescriptor quartzJob(String groupName, String jobName, boolean showUnsanitized) throws SchedulerException { JobKey jobKey = JobKey.jobKey(jobName, groupName); JobDetail jobDetail = this.scheduler.getJobDetail(jobKey); if (jobDetail != null) { List triggers = this.scheduler.getTriggersOfJob(jobKey); - return new QuartzJobDetails(jobDetail.getKey().getGroup(), jobDetail.getKey().getName(), + return new QuartzJobDetailsDescriptor(jobDetail.getKey().getGroup(), jobDetail.getKey().getName(), jobDetail.getDescription(), jobDetail.getJobClass().getName(), jobDetail.isDurable(), jobDetail.requestsRecovery(), sanitizeJobDataMap(jobDetail.getJobDataMap(), showUnsanitized), extractTriggersSummary(triggers)); @@ -213,7 +213,7 @@ public class QuartzEndpoint { Map triggerSummary = new LinkedHashMap<>(); triggerSummary.put("group", trigger.getKey().getGroup()); triggerSummary.put("name", trigger.getKey().getName()); - triggerSummary.putAll(TriggerDescription.of(trigger).buildSummary(false)); + triggerSummary.putAll(TriggerDescriptor.of(trigger).buildSummary(false)); result.add(triggerSummary); }); return result; @@ -232,10 +232,12 @@ public class QuartzEndpoint { throws SchedulerException { TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, groupName); Trigger trigger = this.scheduler.getTrigger(triggerKey); - return (trigger != null) - ? TriggerDescription.of(trigger).buildDetails(this.scheduler.getTriggerState(triggerKey), - sanitizeJobDataMap(trigger.getJobDataMap(), showUnsanitized)) - : null; + if (trigger == null) { + return null; + } + TriggerState triggerState = this.scheduler.getTriggerState(triggerKey); + return TriggerDescriptor.of(trigger).buildDetails(triggerState, + sanitizeJobDataMap(trigger.getJobDataMap(), showUnsanitized)); } private static Duration getIntervalDuration(long amount, IntervalUnit unit) { @@ -275,38 +277,37 @@ public class QuartzEndpoint { } /** - * A report of available job and trigger group names, primarily intended for - * serialization to JSON. + * Description of available job and trigger group names. */ - public static final class QuartzReport { + public static final class QuartzDescriptor { - private final GroupNames jobs; + private final GroupNamesDescriptor jobs; - private final GroupNames triggers; + private final GroupNamesDescriptor triggers; - QuartzReport(GroupNames jobs, GroupNames triggers) { + QuartzDescriptor(GroupNamesDescriptor jobs, GroupNamesDescriptor triggers) { this.jobs = jobs; this.triggers = triggers; } - public GroupNames getJobs() { + public GroupNamesDescriptor getJobs() { return this.jobs; } - public GroupNames getTriggers() { + public GroupNamesDescriptor getTriggers() { return this.triggers; } } /** - * A set of group names, primarily intended for serialization to JSON. + * Description of group names. */ - public static class GroupNames { + public static class GroupNamesDescriptor { private final Set groups; - public GroupNames(List groups) { + public GroupNamesDescriptor(List groups) { this.groups = new LinkedHashSet<>(groups); } @@ -317,14 +318,13 @@ public class QuartzEndpoint { } /** - * A summary for each group identified by name, primarily intended for serialization - * to JSON. + * Description of each group identified by name. */ - public static class QuartzGroups { + public static class QuartzGroupsDescriptor { private final Map groups; - public QuartzGroups(Map groups) { + public QuartzGroupsDescriptor(Map groups) { this.groups = groups; } @@ -335,15 +335,15 @@ public class QuartzEndpoint { } /** - * A summary report of the {@link JobDetail jobs} in a given group. + * Description of the {@link JobDetail jobs} in a given group. */ - public static final class QuartzJobGroupSummary { + public static final class QuartzJobGroupSummaryDescriptor { private final String group; - private final Map jobs; + private final Map jobs; - private QuartzJobGroupSummary(String group, Map jobs) { + private QuartzJobGroupSummaryDescriptor(String group, Map jobs) { this.group = group; this.jobs = jobs; } @@ -352,25 +352,25 @@ public class QuartzEndpoint { return this.group; } - public Map getJobs() { + public Map getJobs() { return this.jobs; } } /** - * Details of a {@link Job Quartz Job}, primarily intended for serialization to JSON. + * Description of a {@link Job Quartz Job}. */ - public static final class QuartzJobSummary { + public static final class QuartzJobSummaryDescriptor { private final String className; - private QuartzJobSummary(JobDetail job) { + private QuartzJobSummaryDescriptor(JobDetail job) { this.className = job.getJobClass().getName(); } - private static QuartzJobSummary of(JobDetail job) { - return new QuartzJobSummary(job); + private static QuartzJobSummaryDescriptor of(JobDetail job) { + return new QuartzJobSummaryDescriptor(job); } public String getClassName() { @@ -380,9 +380,9 @@ public class QuartzEndpoint { } /** - * Details of a {@link Job Quartz Job}, primarily intended for serialization to JSON. + * Description of a {@link Job Quartz Job}. */ - public static final class QuartzJobDetails { + public static final class QuartzJobDetailsDescriptor { private final String group; @@ -400,7 +400,7 @@ public class QuartzEndpoint { private final List> triggers; - QuartzJobDetails(String group, String name, String description, String className, boolean durable, + QuartzJobDetailsDescriptor(String group, String name, String description, String className, boolean durable, boolean requestRecovery, Map data, List> triggers) { this.group = group; this.name = name; @@ -447,9 +447,9 @@ public class QuartzEndpoint { } /** - * A summary report of the {@link Trigger triggers} in a given group. + * Description of the {@link Trigger triggers} in a given group. */ - public static final class QuartzTriggerGroupSummary { + public static final class QuartzTriggerGroupSummaryDescriptor { private final String group; @@ -457,7 +457,7 @@ public class QuartzEndpoint { private final Triggers triggers; - private QuartzTriggerGroupSummary(String group, boolean paused, + private QuartzTriggerGroupSummaryDescriptor(String group, boolean paused, Map> descriptionsByType) { this.group = group; this.paused = paused; @@ -550,30 +550,30 @@ public class QuartzEndpoint { /** * Base class for descriptions of a {@link Trigger}. */ - public abstract static class TriggerDescription { + public abstract static class TriggerDescriptor { - private static final Map, Function> DESCRIBERS = new LinkedHashMap<>(); + private static final Map, Function> DESCRIBERS = new LinkedHashMap<>(); static { - DESCRIBERS.put(CronTrigger.class, (trigger) -> new CronTriggerDescription((CronTrigger) trigger)); - DESCRIBERS.put(SimpleTrigger.class, (trigger) -> new SimpleTriggerDescription((SimpleTrigger) trigger)); + DESCRIBERS.put(CronTrigger.class, (trigger) -> new CronTriggerDescriptor((CronTrigger) trigger)); + DESCRIBERS.put(SimpleTrigger.class, (trigger) -> new SimpleTriggerDescriptor((SimpleTrigger) trigger)); DESCRIBERS.put(DailyTimeIntervalTrigger.class, - (trigger) -> new DailyTimeIntervalTriggerDescription((DailyTimeIntervalTrigger) trigger)); + (trigger) -> new DailyTimeIntervalTriggerDescriptor((DailyTimeIntervalTrigger) trigger)); DESCRIBERS.put(CalendarIntervalTrigger.class, - (trigger) -> new CalendarIntervalTriggerDescription((CalendarIntervalTrigger) trigger)); + (trigger) -> new CalendarIntervalTriggerDescriptor((CalendarIntervalTrigger) trigger)); } private final Trigger trigger; private final TriggerType type; - private static TriggerDescription of(Trigger trigger) { + private static TriggerDescriptor of(Trigger trigger) { return DESCRIBERS.entrySet().stream().filter((entry) -> entry.getKey().isInstance(trigger)) .map((entry) -> entry.getValue().apply(trigger)).findFirst() - .orElse(new CustomTriggerDescription(trigger)); + .orElse(new CustomTriggerDescriptor(trigger)); } - protected TriggerDescription(Trigger trigger, TriggerType type) { + protected TriggerDescriptor(Trigger trigger, TriggerType type) { this.trigger = trigger; this.type = type; } @@ -653,13 +653,13 @@ public class QuartzEndpoint { } /** - * A description of a {@link CronTrigger}. + * Description of a {@link CronTrigger}. */ - public static final class CronTriggerDescription extends TriggerDescription { + public static final class CronTriggerDescriptor extends TriggerDescriptor { private final CronTrigger trigger; - public CronTriggerDescription(CronTrigger trigger) { + public CronTriggerDescriptor(CronTrigger trigger) { super(trigger, TriggerType.CRON); this.trigger = trigger; } @@ -678,13 +678,13 @@ public class QuartzEndpoint { } /** - * A description of a {@link SimpleTrigger}. + * Description of a {@link SimpleTrigger}. */ - public static final class SimpleTriggerDescription extends TriggerDescription { + public static final class SimpleTriggerDescriptor extends TriggerDescriptor { private final SimpleTrigger trigger; - public SimpleTriggerDescription(SimpleTrigger trigger) { + public SimpleTriggerDescriptor(SimpleTrigger trigger) { super(trigger, TriggerType.SIMPLE); this.trigger = trigger; } @@ -704,13 +704,13 @@ public class QuartzEndpoint { } /** - * A description of a {@link DailyTimeIntervalTrigger}. + * Description of a {@link DailyTimeIntervalTrigger}. */ - public static final class DailyTimeIntervalTriggerDescription extends TriggerDescription { + public static final class DailyTimeIntervalTriggerDescriptor extends TriggerDescriptor { private final DailyTimeIntervalTrigger trigger; - public DailyTimeIntervalTriggerDescription(DailyTimeIntervalTrigger trigger) { + public DailyTimeIntervalTriggerDescriptor(DailyTimeIntervalTrigger trigger) { super(trigger, TriggerType.DAILY_INTERVAL); this.trigger = trigger; } @@ -735,13 +735,13 @@ public class QuartzEndpoint { } /** - * A description of a {@link CalendarIntervalTrigger}. + * Description of a {@link CalendarIntervalTrigger}. */ - public static final class CalendarIntervalTriggerDescription extends TriggerDescription { + public static final class CalendarIntervalTriggerDescriptor extends TriggerDescriptor { private final CalendarIntervalTrigger trigger; - public CalendarIntervalTriggerDescription(CalendarIntervalTrigger trigger) { + public CalendarIntervalTriggerDescriptor(CalendarIntervalTrigger trigger) { super(trigger, TriggerType.CALENDAR_INTERVAL); this.trigger = trigger; } @@ -766,11 +766,11 @@ public class QuartzEndpoint { } /** - * A description of a custom {@link Trigger}. + * Description of a custom {@link Trigger}. */ - public static final class CustomTriggerDescription extends TriggerDescription { + public static final class CustomTriggerDescriptor extends TriggerDescriptor { - public CustomTriggerDescription(Trigger trigger) { + public CustomTriggerDescriptor(Trigger trigger) { super(trigger, TriggerType.CUSTOM_TRIGGER); } diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/quartz/QuartzEndpointWebExtension.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/quartz/QuartzEndpointWebExtension.java index 441ec228ba0..c5d3ac3e0d0 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/quartz/QuartzEndpointWebExtension.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/quartz/QuartzEndpointWebExtension.java @@ -29,10 +29,10 @@ import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; import org.springframework.boot.actuate.endpoint.annotation.Selector; import org.springframework.boot.actuate.endpoint.web.WebEndpointResponse; import org.springframework.boot.actuate.endpoint.web.annotation.EndpointWebExtension; -import org.springframework.boot.actuate.quartz.QuartzEndpoint.QuartzGroups; -import org.springframework.boot.actuate.quartz.QuartzEndpoint.QuartzJobDetails; -import org.springframework.boot.actuate.quartz.QuartzEndpoint.QuartzJobGroupSummary; -import org.springframework.boot.actuate.quartz.QuartzEndpoint.QuartzTriggerGroupSummary; +import org.springframework.boot.actuate.quartz.QuartzEndpoint.QuartzGroupsDescriptor; +import org.springframework.boot.actuate.quartz.QuartzEndpoint.QuartzJobDetailsDescriptor; +import org.springframework.boot.actuate.quartz.QuartzEndpoint.QuartzJobGroupSummaryDescriptor; +import org.springframework.boot.actuate.quartz.QuartzEndpoint.QuartzTriggerGroupSummaryDescriptor; import org.springframework.boot.actuate.quartz.QuartzEndpointWebExtension.QuartzEndpointWebExtensionRuntimeHints; import org.springframework.context.annotation.ImportRuntimeHints; @@ -59,7 +59,7 @@ public class QuartzEndpointWebExtension { } @ReadOperation - public WebEndpointResponse quartzJobOrTriggerGroups(@Selector String jobsOrTriggers) + public WebEndpointResponse quartzJobOrTriggerGroups(@Selector String jobsOrTriggers) throws SchedulerException { return handle(jobsOrTriggers, this.delegate::quartzJobGroups, this.delegate::quartzTriggerGroups); } @@ -110,8 +110,9 @@ public class QuartzEndpointWebExtension { @Override public void registerHints(RuntimeHints hints, ClassLoader classLoader) { - this.bindingRegistrar.registerReflectionHints(hints.reflection(), QuartzGroups.class, - QuartzJobDetails.class, QuartzJobGroupSummary.class, QuartzTriggerGroupSummary.class); + this.bindingRegistrar.registerReflectionHints(hints.reflection(), QuartzGroupsDescriptor.class, + QuartzJobDetailsDescriptor.class, QuartzJobGroupSummaryDescriptor.class, + QuartzTriggerGroupSummaryDescriptor.class); } } diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/scheduling/ScheduledTasksEndpoint.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/scheduling/ScheduledTasksEndpoint.java index 37e99eead54..73dc40e7b88 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/scheduling/ScheduledTasksEndpoint.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/scheduling/ScheduledTasksEndpoint.java @@ -64,48 +64,47 @@ public class ScheduledTasksEndpoint { } @ReadOperation - public ScheduledTasksReport scheduledTasks() { - Map> descriptionsByType = this.scheduledTaskHolders.stream() + public ScheduledTasksDescriptor scheduledTasks() { + Map> descriptionsByType = this.scheduledTaskHolders.stream() .flatMap((holder) -> holder.getScheduledTasks().stream()).map(ScheduledTask::getTask) - .map(TaskDescription::of).filter(Objects::nonNull) - .collect(Collectors.groupingBy(TaskDescription::getType)); - return new ScheduledTasksReport(descriptionsByType); + .map(TaskDescriptor::of).filter(Objects::nonNull) + .collect(Collectors.groupingBy(TaskDescriptor::getType)); + return new ScheduledTasksDescriptor(descriptionsByType); } /** - * A report of an application's scheduled {@link Task Tasks}, primarily intended for - * serialization to JSON. + * Description of an application's scheduled {@link Task Tasks}. */ - public static final class ScheduledTasksReport { + public static final class ScheduledTasksDescriptor { - private final List cron; + private final List cron; - private final List fixedDelay; + private final List fixedDelay; - private final List fixedRate; + private final List fixedRate; - private final List custom; + private final List custom; - private ScheduledTasksReport(Map> descriptionsByType) { + private ScheduledTasksDescriptor(Map> descriptionsByType) { this.cron = descriptionsByType.getOrDefault(TaskType.CRON, Collections.emptyList()); this.fixedDelay = descriptionsByType.getOrDefault(TaskType.FIXED_DELAY, Collections.emptyList()); this.fixedRate = descriptionsByType.getOrDefault(TaskType.FIXED_RATE, Collections.emptyList()); this.custom = descriptionsByType.getOrDefault(TaskType.CUSTOM_TRIGGER, Collections.emptyList()); } - public List getCron() { + public List getCron() { return this.cron; } - public List getFixedDelay() { + public List getFixedDelay() { return this.fixedDelay; } - public List getFixedRate() { + public List getFixedRate() { return this.fixedRate; } - public List getCustom() { + public List getCustom() { return this.custom; } @@ -114,71 +113,71 @@ public class ScheduledTasksEndpoint { /** * Base class for descriptions of a {@link Task}. */ - public abstract static class TaskDescription { + public abstract static class TaskDescriptor { - private static final Map, Function> DESCRIBERS = new LinkedHashMap<>(); + private static final Map, Function> DESCRIBERS = new LinkedHashMap<>(); static { - DESCRIBERS.put(FixedRateTask.class, (task) -> new FixedRateTaskDescription((FixedRateTask) task)); - DESCRIBERS.put(FixedDelayTask.class, (task) -> new FixedDelayTaskDescription((FixedDelayTask) task)); - DESCRIBERS.put(CronTask.class, (task) -> new CronTaskDescription((CronTask) task)); + DESCRIBERS.put(FixedRateTask.class, (task) -> new FixedRateTaskDescriptor((FixedRateTask) task)); + DESCRIBERS.put(FixedDelayTask.class, (task) -> new FixedDelayTaskDescriptor((FixedDelayTask) task)); + DESCRIBERS.put(CronTask.class, (task) -> new CronTaskDescriptor((CronTask) task)); DESCRIBERS.put(TriggerTask.class, (task) -> describeTriggerTask((TriggerTask) task)); } private final TaskType type; - private final RunnableDescription runnable; + private final RunnableDescriptor runnable; - private static TaskDescription of(Task task) { + private static TaskDescriptor of(Task task) { return DESCRIBERS.entrySet().stream().filter((entry) -> entry.getKey().isInstance(task)) .map((entry) -> entry.getValue().apply(task)).findFirst().orElse(null); } - private static TaskDescription describeTriggerTask(TriggerTask triggerTask) { + private static TaskDescriptor describeTriggerTask(TriggerTask triggerTask) { Trigger trigger = triggerTask.getTrigger(); if (trigger instanceof CronTrigger cronTrigger) { - return new CronTaskDescription(triggerTask, cronTrigger); + return new CronTaskDescriptor(triggerTask, cronTrigger); } if (trigger instanceof PeriodicTrigger periodicTrigger) { if (periodicTrigger.isFixedRate()) { - return new FixedRateTaskDescription(triggerTask, periodicTrigger); + return new FixedRateTaskDescriptor(triggerTask, periodicTrigger); } - return new FixedDelayTaskDescription(triggerTask, periodicTrigger); + return new FixedDelayTaskDescriptor(triggerTask, periodicTrigger); } - return new CustomTriggerTaskDescription(triggerTask); + return new CustomTriggerTaskDescriptor(triggerTask); } - protected TaskDescription(TaskType type, Runnable runnable) { + protected TaskDescriptor(TaskType type, Runnable runnable) { this.type = type; - this.runnable = new RunnableDescription(runnable); + this.runnable = new RunnableDescriptor(runnable); } private TaskType getType() { return this.type; } - public final RunnableDescription getRunnable() { + public final RunnableDescriptor getRunnable() { return this.runnable; } } /** - * A description of an {@link IntervalTask}. + * Description of an {@link IntervalTask}. */ - public static class IntervalTaskDescription extends TaskDescription { + public static class IntervalTaskDescriptor extends TaskDescriptor { private final long initialDelay; private final long interval; - protected IntervalTaskDescription(TaskType type, IntervalTask task) { + protected IntervalTaskDescriptor(TaskType type, IntervalTask task) { super(type, task.getRunnable()); this.initialDelay = task.getInitialDelayDuration().toMillis(); this.interval = task.getIntervalDuration().toMillis(); } - protected IntervalTaskDescription(TaskType type, TriggerTask task, PeriodicTrigger trigger) { + protected IntervalTaskDescriptor(TaskType type, TriggerTask task, PeriodicTrigger trigger) { super(type, task.getRunnable()); this.initialDelay = trigger.getInitialDelayDuration().toMillis(); this.interval = trigger.getPeriodDuration().toMillis(); @@ -195,51 +194,51 @@ public class ScheduledTasksEndpoint { } /** - * A description of a {@link FixedDelayTask} or a {@link TriggerTask} with a - * fixed-delay {@link PeriodicTrigger}. + * Description of a {@link FixedDelayTask} or a {@link TriggerTask} with a fixed-delay + * {@link PeriodicTrigger}. */ - public static final class FixedDelayTaskDescription extends IntervalTaskDescription { + public static final class FixedDelayTaskDescriptor extends IntervalTaskDescriptor { - private FixedDelayTaskDescription(FixedDelayTask task) { + private FixedDelayTaskDescriptor(FixedDelayTask task) { super(TaskType.FIXED_DELAY, task); } - private FixedDelayTaskDescription(TriggerTask task, PeriodicTrigger trigger) { + private FixedDelayTaskDescriptor(TriggerTask task, PeriodicTrigger trigger) { super(TaskType.FIXED_DELAY, task, trigger); } } /** - * A description of a {@link FixedRateTask} or a {@link TriggerTask} with a fixed-rate + * Description of a {@link FixedRateTask} or a {@link TriggerTask} with a fixed-rate * {@link PeriodicTrigger}. */ - public static final class FixedRateTaskDescription extends IntervalTaskDescription { + public static final class FixedRateTaskDescriptor extends IntervalTaskDescriptor { - private FixedRateTaskDescription(FixedRateTask task) { + private FixedRateTaskDescriptor(FixedRateTask task) { super(TaskType.FIXED_RATE, task); } - private FixedRateTaskDescription(TriggerTask task, PeriodicTrigger trigger) { + private FixedRateTaskDescriptor(TriggerTask task, PeriodicTrigger trigger) { super(TaskType.FIXED_RATE, task, trigger); } } /** - * A description of a {@link CronTask} or a {@link TriggerTask} with a + * Description of a {@link CronTask} or a {@link TriggerTask} with a * {@link CronTrigger}. */ - public static final class CronTaskDescription extends TaskDescription { + public static final class CronTaskDescriptor extends TaskDescriptor { private final String expression; - private CronTaskDescription(CronTask task) { + private CronTaskDescriptor(CronTask task) { super(TaskType.CRON, task.getRunnable()); this.expression = task.getExpression(); } - private CronTaskDescription(TriggerTask task, CronTrigger trigger) { + private CronTaskDescriptor(TriggerTask task, CronTrigger trigger) { super(TaskType.CRON, task.getRunnable()); this.expression = trigger.getExpression(); } @@ -251,15 +250,13 @@ public class ScheduledTasksEndpoint { } /** - * A description of a {@link TriggerTask} with a custom {@link Trigger}. - * - * @since 2.1.3 + * Description of a {@link TriggerTask} with a custom {@link Trigger}. */ - public static final class CustomTriggerTaskDescription extends TaskDescription { + public static final class CustomTriggerTaskDescriptor extends TaskDescriptor { private final String trigger; - private CustomTriggerTaskDescription(TriggerTask task) { + private CustomTriggerTaskDescriptor(TriggerTask task) { super(TaskType.CUSTOM_TRIGGER, task.getRunnable()); this.trigger = task.getTrigger().toString(); } @@ -271,15 +268,13 @@ public class ScheduledTasksEndpoint { } /** - * A description of a {@link Task Task's} {@link Runnable}. - * - * @author Andy Wilkinson + * Description of a {@link Task Task's} {@link Runnable}. */ - public static final class RunnableDescription { + public static final class RunnableDescriptor { private final String target; - private RunnableDescription(Runnable runnable) { + private RunnableDescriptor(Runnable runnable) { if (runnable instanceof ScheduledMethodRunnable scheduledMethodRunnable) { Method method = scheduledMethodRunnable.getMethod(); this.target = method.getDeclaringClass().getName() + "." + method.getName(); @@ -307,8 +302,8 @@ public class ScheduledTasksEndpoint { @Override public void registerHints(RuntimeHints hints, ClassLoader classLoader) { - this.bindingRegistrar.registerReflectionHints(hints.reflection(), FixedRateTaskDescription.class, - FixedDelayTaskDescription.class, CronTaskDescription.class, CustomTriggerTaskDescription.class); + this.bindingRegistrar.registerReflectionHints(hints.reflection(), FixedRateTaskDescriptor.class, + FixedDelayTaskDescriptor.class, CronTaskDescriptor.class, CustomTriggerTaskDescriptor.class); } } diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/session/SessionsEndpoint.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/session/SessionsEndpoint.java index 99598964b0a..27272994521 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/session/SessionsEndpoint.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/session/SessionsEndpoint.java @@ -48,9 +48,9 @@ public class SessionsEndpoint { } @ReadOperation - public SessionsReport sessionsForUsername(String username) { + public SessionsDescriptor sessionsForUsername(String username) { Map sessions = this.sessionRepository.findByPrincipalName(username); - return new SessionsReport(sessions); + return new SessionsDescriptor(sessions); } @ReadOperation @@ -68,14 +68,13 @@ public class SessionsEndpoint { } /** - * A report of user's {@link Session sessions}. Primarily intended for serialization - * to JSON. + * Description of user's {@link Session sessions}. */ - public static final class SessionsReport { + public static final class SessionsDescriptor { private final List sessions; - public SessionsReport(Map sessions) { + public SessionsDescriptor(Map sessions) { this.sessions = sessions.values().stream().map(SessionDescriptor::new).toList(); } @@ -86,8 +85,7 @@ public class SessionsEndpoint { } /** - * A description of user's {@link Session session}. Primarily intended for - * serialization to JSON. + * Description of user's {@link Session session}. */ public static final class SessionDescriptor { diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/startup/StartupEndpoint.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/startup/StartupEndpoint.java index 496c9b1e735..4d5f50f9dae 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/startup/StartupEndpoint.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/startup/StartupEndpoint.java @@ -54,28 +54,27 @@ public class StartupEndpoint { } @ReadOperation - public StartupResponse startupSnapshot() { + public StartupDescriptor startupSnapshot() { StartupTimeline startupTimeline = this.applicationStartup.getBufferedTimeline(); - return new StartupResponse(startupTimeline); + return new StartupDescriptor(startupTimeline); } @WriteOperation - public StartupResponse startup() { + public StartupDescriptor startup() { StartupTimeline startupTimeline = this.applicationStartup.drainBufferedTimeline(); - return new StartupResponse(startupTimeline); + return new StartupDescriptor(startupTimeline); } /** - * A description of an application startup, primarily intended for serialization to - * JSON. + * Description of an application startup. */ - public static final class StartupResponse { + public static final class StartupDescriptor { private final String springBootVersion; private final StartupTimeline timeline; - private StartupResponse(StartupTimeline timeline) { + private StartupDescriptor(StartupTimeline timeline) { this.timeline = timeline; this.springBootVersion = SpringBootVersion.getVersion(); } diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/web/exchanges/HttpExchangesEndpoint.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/web/exchanges/HttpExchangesEndpoint.java index 698bd9905fb..58041ae402b 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/web/exchanges/HttpExchangesEndpoint.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/web/exchanges/HttpExchangesEndpoint.java @@ -44,19 +44,18 @@ public class HttpExchangesEndpoint { } @ReadOperation - public HttpExchanges httpExchanges() { - return new HttpExchanges(this.repository.findAll()); + public HttpExchangesDescriptor httpExchanges() { + return new HttpExchangesDescriptor(this.repository.findAll()); } /** - * A description of an application's {@link HttpExchange} entries. Primarily intended - * for serialization to JSON. + * Description of an application's {@link HttpExchange} entries. */ - public static final class HttpExchanges { + public static final class HttpExchangesDescriptor { private final List exchanges; - private HttpExchanges(List exchanges) { + private HttpExchangesDescriptor(List exchanges) { this.exchanges = exchanges; } diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/web/mappings/MappingsEndpoint.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/web/mappings/MappingsEndpoint.java index f5a312ba23b..de231926820 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/web/mappings/MappingsEndpoint.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/web/mappings/MappingsEndpoint.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2022 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. @@ -43,53 +43,51 @@ public class MappingsEndpoint { } @ReadOperation - public ApplicationMappings mappings() { + public ApplicationMappingsDescriptor mappings() { ApplicationContext target = this.context; - Map contextMappings = new HashMap<>(); + Map contextMappings = new HashMap<>(); while (target != null) { contextMappings.put(target.getId(), mappingsForContext(target)); target = target.getParent(); } - return new ApplicationMappings(contextMappings); + return new ApplicationMappingsDescriptor(contextMappings); } - private ContextMappings mappingsForContext(ApplicationContext applicationContext) { + private ContextMappingsDescriptor mappingsForContext(ApplicationContext applicationContext) { Map mappings = new HashMap<>(); this.descriptionProviders.forEach( (provider) -> mappings.put(provider.getMappingName(), provider.describeMappings(applicationContext))); - return new ContextMappings(mappings, + return new ContextMappingsDescriptor(mappings, (applicationContext.getParent() != null) ? applicationContext.getId() : null); } /** - * A description of an application's request mappings. Primarily intended for - * serialization to JSON. + * Description of an application's request mappings. */ - public static final class ApplicationMappings { + public static final class ApplicationMappingsDescriptor { - private final Map contextMappings; + private final Map contextMappings; - private ApplicationMappings(Map contextMappings) { + private ApplicationMappingsDescriptor(Map contextMappings) { this.contextMappings = contextMappings; } - public Map getContexts() { + public Map getContexts() { return this.contextMappings; } } /** - * A description of an application context's request mappings. Primarily intended for - * serialization to JSON. + * Description of an application context's request mappings. */ - public static final class ContextMappings { + public static final class ContextMappingsDescriptor { private final Map mappings; private final String parentId; - private ContextMappings(Map mappings, String parentId) { + private ContextMappingsDescriptor(Map mappings, String parentId) { this.mappings = mappings; this.parentId = parentId; } diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/beans/BeansEndpointTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/beans/BeansEndpointTests.java index b4a80437cfa..28480757827 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/beans/BeansEndpointTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/beans/BeansEndpointTests.java @@ -24,9 +24,9 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; -import org.springframework.boot.actuate.beans.BeansEndpoint.ApplicationBeans; import org.springframework.boot.actuate.beans.BeansEndpoint.BeanDescriptor; -import org.springframework.boot.actuate.beans.BeansEndpoint.ContextBeans; +import org.springframework.boot.actuate.beans.BeansEndpoint.BeansDescriptor; +import org.springframework.boot.actuate.beans.BeansEndpoint.ContextBeansDescriptor; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; @@ -48,8 +48,8 @@ class BeansEndpointTests { ApplicationContextRunner contextRunner = new ApplicationContextRunner() .withUserConfiguration(EndpointConfiguration.class); contextRunner.run((context) -> { - ApplicationBeans result = context.getBean(BeansEndpoint.class).beans(); - ContextBeans descriptor = result.getContexts().get(context.getId()); + BeansDescriptor result = context.getBean(BeansEndpoint.class).beans(); + ContextBeansDescriptor descriptor = result.getContexts().get(context.getId()); assertThat(descriptor.getParentId()).isNull(); Map beans = descriptor.getBeans(); assertThat(beans.size()).isLessThanOrEqualTo(context.getBeanDefinitionCount()); @@ -67,8 +67,8 @@ class BeansEndpointTests { List infrastructureBeans = Stream.of(context.getBeanDefinitionNames()) .filter((name) -> BeanDefinition.ROLE_INFRASTRUCTURE == factory.getBeanDefinition(name).getRole()) .toList(); - ApplicationBeans result = context.getBean(BeansEndpoint.class).beans(); - ContextBeans contextDescriptor = result.getContexts().get(context.getId()); + BeansDescriptor result = context.getBean(BeansEndpoint.class).beans(); + ContextBeansDescriptor contextDescriptor = result.getContexts().get(context.getId()); Map beans = contextDescriptor.getBeans(); for (String infrastructureBean : infrastructureBeans) { assertThat(beans).doesNotContainKey(infrastructureBean); @@ -81,8 +81,8 @@ class BeansEndpointTests { ApplicationContextRunner contextRunner = new ApplicationContextRunner() .withUserConfiguration(EndpointConfiguration.class, LazyBeanConfiguration.class); contextRunner.run((context) -> { - ApplicationBeans result = context.getBean(BeansEndpoint.class).beans(); - ContextBeans contextDescriptor = result.getContexts().get(context.getId()); + BeansDescriptor result = context.getBean(BeansEndpoint.class).beans(); + ContextBeansDescriptor contextDescriptor = result.getContexts().get(context.getId()); assertThat(context).hasBean("lazyBean"); assertThat(contextDescriptor.getBeans()).doesNotContainKey("lazyBean"); }); @@ -95,7 +95,7 @@ class BeansEndpointTests { parentRunner.run((parent) -> { new ApplicationContextRunner().withUserConfiguration(EndpointConfiguration.class).withParent(parent) .run((child) -> { - ApplicationBeans result = child.getBean(BeansEndpoint.class).beans(); + BeansDescriptor result = child.getBean(BeansEndpoint.class).beans(); assertThat(result.getContexts().get(parent.getId()).getBeans()).containsKey("bean"); assertThat(result.getContexts().get(child.getId()).getBeans()).containsKey("endpoint"); }); diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cache/CachesEndpointTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cache/CachesEndpointTests.java index bbbd0e5b42e..a0f424d095c 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cache/CachesEndpointTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cache/CachesEndpointTests.java @@ -24,7 +24,7 @@ import java.util.concurrent.ConcurrentHashMap; import org.junit.jupiter.api.Test; -import org.springframework.boot.actuate.cache.CachesEndpoint.CacheEntry; +import org.springframework.boot.actuate.cache.CachesEndpoint.CacheEntryDescriptor; import org.springframework.boot.actuate.cache.CachesEndpoint.CacheManagerDescriptor; import org.springframework.cache.Cache; import org.springframework.cache.CacheManager; @@ -73,7 +73,7 @@ class CachesEndpointTests { void namedCacheWithSingleCacheManager() { CachesEndpoint endpoint = new CachesEndpoint( Collections.singletonMap("test", new ConcurrentMapCacheManager("b", "a"))); - CacheEntry entry = endpoint.cache("a", null); + CacheEntryDescriptor entry = endpoint.cache("a", null); assertThat(entry).isNotNull(); assertThat(entry.getCacheManager()).isEqualTo("test"); assertThat(entry.getName()).isEqualTo("a"); @@ -94,7 +94,7 @@ class CachesEndpointTests { void namedCacheWithUnknownCache() { CachesEndpoint endpoint = new CachesEndpoint( Collections.singletonMap("test", new ConcurrentMapCacheManager("b", "a"))); - CacheEntry entry = endpoint.cache("unknown", null); + CacheEntryDescriptor entry = endpoint.cache("unknown", null); assertThat(entry).isNull(); } @@ -104,7 +104,7 @@ class CachesEndpointTests { cacheManagers.put("test", new ConcurrentMapCacheManager("b", "a")); cacheManagers.put("another", new ConcurrentMapCacheManager("c", "a")); CachesEndpoint endpoint = new CachesEndpoint(cacheManagers); - CacheEntry entry = endpoint.cache("c", "test"); + CacheEntryDescriptor entry = endpoint.cache("c", "test"); assertThat(entry).isNull(); } @@ -114,7 +114,7 @@ class CachesEndpointTests { cacheManagers.put("test", new ConcurrentMapCacheManager("b", "a")); cacheManagers.put("another", new ConcurrentMapCacheManager("c", "a")); CachesEndpoint endpoint = new CachesEndpoint(cacheManagers); - CacheEntry entry = endpoint.cache("a", "test"); + CacheEntryDescriptor entry = endpoint.cache("a", "test"); assertThat(entry).isNotNull(); assertThat(entry.getCacheManager()).isEqualTo("test"); assertThat(entry.getName()).isEqualTo("a"); diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/ShutdownEndpointTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/ShutdownEndpointTests.java index 05f0ef4b4b2..64ec3a4138b 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/ShutdownEndpointTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/ShutdownEndpointTests.java @@ -18,13 +18,13 @@ package org.springframework.boot.actuate.context; import java.net.URL; import java.net.URLClassLoader; -import java.util.Map; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import org.junit.jupiter.api.Test; import org.springframework.boot.WebApplicationType; +import org.springframework.boot.actuate.context.ShutdownEndpoint.ShutdownDescriptor; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.ApplicationListener; @@ -51,7 +51,7 @@ class ShutdownEndpointTests { contextRunner.run((context) -> { EndpointConfig config = context.getBean(EndpointConfig.class); ClassLoader previousTccl = Thread.currentThread().getContextClassLoader(); - Map result; + ShutdownDescriptor result; Thread.currentThread().setContextClassLoader(new URLClassLoader(new URL[0], getClass().getClassLoader())); try { result = context.getBean(ShutdownEndpoint.class).shutdown(); @@ -59,7 +59,7 @@ class ShutdownEndpointTests { finally { Thread.currentThread().setContextClassLoader(previousTccl); } - assertThat(result.get("message")).startsWith("Shutting down"); + assertThat(result.getMessage()).startsWith("Shutting down"); assertThat(((ConfigurableApplicationContext) context).isActive()).isTrue(); assertThat(config.latch.await(10, TimeUnit.SECONDS)).isTrue(); assertThat(config.threadContextClassLoader).isEqualTo(getClass().getClassLoader()); @@ -71,7 +71,7 @@ class ShutdownEndpointTests { ConfigurableApplicationContext context = new SpringApplicationBuilder(EmptyConfig.class) .child(EndpointConfig.class).web(WebApplicationType.NONE).run(); CountDownLatch latch = context.getBean(EndpointConfig.class).latch; - assertThat(context.getBean(ShutdownEndpoint.class).shutdown().get("message")).startsWith("Shutting down"); + assertThat(context.getBean(ShutdownEndpoint.class).shutdown().getMessage()).startsWith("Shutting down"); assertThat(context.isActive()).isTrue(); assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); } @@ -82,7 +82,7 @@ class ShutdownEndpointTests { .child(EmptyConfig.class).web(WebApplicationType.NONE).run(); CountDownLatch parentLatch = context.getBean(EndpointConfig.class).latch; CountDownLatch childLatch = context.getBean(EmptyConfig.class).latch; - assertThat(context.getBean(ShutdownEndpoint.class).shutdown().get("message")).startsWith("Shutting down"); + assertThat(context.getBean(ShutdownEndpoint.class).shutdown().getMessage()).startsWith("Shutting down"); assertThat(context.isActive()).isTrue(); assertThat(parentLatch.await(10, TimeUnit.SECONDS)).isTrue(); assertThat(childLatch.await(10, TimeUnit.SECONDS)).isTrue(); diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointFilteringTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointFilteringTests.java index e3a54d01c2b..dae543d3dee 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointFilteringTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointFilteringTests.java @@ -21,9 +21,9 @@ import java.util.Optional; import org.junit.jupiter.api.Test; -import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ApplicationConfigurationProperties; import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesBeanDescriptor; -import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ContextConfigurationProperties; +import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesDescriptor; +import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ContextConfigurationPropertiesDescriptor; import org.springframework.boot.actuate.endpoint.Show; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -55,10 +55,11 @@ class ConfigurationPropertiesReportEndpointFilteringTests { contextRunner.run((context) -> { ConfigurationPropertiesReportEndpoint endpoint = context .getBean(ConfigurationPropertiesReportEndpoint.class); - ApplicationConfigurationProperties applicationProperties = endpoint + ConfigurationPropertiesDescriptor applicationProperties = endpoint .configurationPropertiesWithPrefix("foo."); assertThat(applicationProperties.getContexts()).containsOnlyKeys(context.getId()); - ContextConfigurationProperties contextProperties = applicationProperties.getContexts().get(context.getId()); + ContextConfigurationPropertiesDescriptor contextProperties = applicationProperties.getContexts() + .get(context.getId()); assertThat(contextProperties.getBeans()).containsOnlyKeys("primaryFoo", "secondaryFoo"); }); } @@ -70,10 +71,11 @@ class ConfigurationPropertiesReportEndpointFilteringTests { contextRunner.run((context) -> { ConfigurationPropertiesReportEndpoint endpoint = context .getBean(ConfigurationPropertiesReportEndpoint.class); - ApplicationConfigurationProperties applicationProperties = endpoint + ConfigurationPropertiesDescriptor applicationProperties = endpoint .configurationPropertiesWithPrefix("foo.third"); assertThat(applicationProperties.getContexts()).containsOnlyKeys(context.getId()); - ContextConfigurationProperties contextProperties = applicationProperties.getContexts().get(context.getId()); + ContextConfigurationPropertiesDescriptor contextProperties = applicationProperties.getContexts() + .get(context.getId()); assertThat(contextProperties.getBeans()).isEmpty(); }); } @@ -98,10 +100,11 @@ class ConfigurationPropertiesReportEndpointFilteringTests { contextRunner.run((context) -> { ConfigurationPropertiesReportEndpoint endpoint = context .getBean(ConfigurationPropertiesReportEndpoint.class); - ApplicationConfigurationProperties applicationProperties = endpoint + ConfigurationPropertiesDescriptor applicationProperties = endpoint .configurationPropertiesWithPrefix("only.bar"); assertThat(applicationProperties.getContexts()).containsOnlyKeys(context.getId()); - ContextConfigurationProperties contextProperties = applicationProperties.getContexts().get(context.getId()); + ContextConfigurationPropertiesDescriptor contextProperties = applicationProperties.getContexts() + .get(context.getId()); Optional key = contextProperties.getBeans().keySet().stream() .filter((id) -> findIdFromPrefix("only.bar", id)).findAny(); ConfigurationPropertiesBeanDescriptor descriptor = contextProperties.getBeans().get(key.get()); diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointMethodAnnotationsTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointMethodAnnotationsTests.java index 6732426dcc3..ea048c864de 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointMethodAnnotationsTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointMethodAnnotationsTests.java @@ -20,9 +20,9 @@ import java.util.Collections; import org.junit.jupiter.api.Test; -import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ApplicationConfigurationProperties; import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesBeanDescriptor; -import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ContextConfigurationProperties; +import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesDescriptor; +import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ContextConfigurationPropertiesDescriptor; import org.springframework.boot.actuate.endpoint.Show; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -47,9 +47,10 @@ class ConfigurationPropertiesReportEndpointMethodAnnotationsTests { contextRunner.run((context) -> { ConfigurationPropertiesReportEndpoint endpoint = context .getBean(ConfigurationPropertiesReportEndpoint.class); - ApplicationConfigurationProperties applicationProperties = endpoint.configurationProperties(); + ConfigurationPropertiesDescriptor applicationProperties = endpoint.configurationProperties(); assertThat(applicationProperties.getContexts()).containsOnlyKeys(context.getId()); - ContextConfigurationProperties contextProperties = applicationProperties.getContexts().get(context.getId()); + ContextConfigurationPropertiesDescriptor contextProperties = applicationProperties.getContexts() + .get(context.getId()); ConfigurationPropertiesBeanDescriptor other = contextProperties.getBeans().get("other"); assertThat(other).isNotNull(); assertThat(other.getPrefix()).isEqualTo("other"); @@ -65,9 +66,10 @@ class ConfigurationPropertiesReportEndpointMethodAnnotationsTests { contextRunner.run((context) -> { ConfigurationPropertiesReportEndpoint endpoint = context .getBean(ConfigurationPropertiesReportEndpoint.class); - ApplicationConfigurationProperties applicationProperties = endpoint.configurationProperties(); + ConfigurationPropertiesDescriptor applicationProperties = endpoint.configurationProperties(); assertThat(applicationProperties.getContexts()).containsOnlyKeys(context.getId()); - ContextConfigurationProperties contextProperties = applicationProperties.getContexts().get(context.getId()); + ContextConfigurationPropertiesDescriptor contextProperties = applicationProperties.getContexts() + .get(context.getId()); ConfigurationPropertiesBeanDescriptor bar = contextProperties.getBeans().get("bar"); assertThat(bar).isNotNull(); assertThat(bar.getPrefix()).isEqualTo("other"); diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointParentTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointParentTests.java index 0808854014e..10c0d8a84e6 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointParentTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointParentTests.java @@ -20,7 +20,7 @@ import java.util.Collections; import org.junit.jupiter.api.Test; -import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ApplicationConfigurationProperties; +import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesDescriptor; import org.springframework.boot.actuate.endpoint.Show; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -46,7 +46,7 @@ class ConfigurationPropertiesReportEndpointParentTests { .run((child) -> { ConfigurationPropertiesReportEndpoint endpoint = child .getBean(ConfigurationPropertiesReportEndpoint.class); - ApplicationConfigurationProperties applicationProperties = endpoint.configurationProperties(); + ConfigurationPropertiesDescriptor applicationProperties = endpoint.configurationProperties(); assertThat(applicationProperties.getContexts()).containsOnlyKeys(child.getId(), parent.getId()); assertThat(applicationProperties.getContexts().get(child.getId()).getBeans().keySet()) .containsExactly("someProperties"); @@ -63,7 +63,7 @@ class ConfigurationPropertiesReportEndpointParentTests { .withParent(parent).run((child) -> { ConfigurationPropertiesReportEndpoint endpoint = child .getBean(ConfigurationPropertiesReportEndpoint.class); - ApplicationConfigurationProperties applicationProperties = endpoint.configurationProperties(); + ConfigurationPropertiesDescriptor applicationProperties = endpoint.configurationProperties(); assertThat(applicationProperties.getContexts().get(child.getId()).getBeans().keySet()) .containsExactlyInAnyOrder("otherProperties"); assertThat((applicationProperties.getContexts().get(parent.getId()).getBeans().keySet())) diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointProxyTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointProxyTests.java index 86ef7411220..0f1b5dd9f8c 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointProxyTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointProxyTests.java @@ -23,8 +23,8 @@ import javax.sql.DataSource; import org.junit.jupiter.api.Test; -import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ApplicationConfigurationProperties; import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesBeanDescriptor; +import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesDescriptor; import org.springframework.boot.actuate.endpoint.Show; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -59,7 +59,7 @@ class ConfigurationPropertiesReportEndpointProxyTests { ApplicationContextRunner contextRunner = new ApplicationContextRunner().withUserConfiguration(Config.class, SqlExecutor.class); contextRunner.run((context) -> { - ApplicationConfigurationProperties applicationProperties = context + ConfigurationPropertiesDescriptor applicationProperties = context .getBean(ConfigurationPropertiesReportEndpoint.class).configurationProperties(); assertThat(applicationProperties.getContexts().get(context.getId()).getBeans().values().stream() .map(ConfigurationPropertiesBeanDescriptor::getPrefix).filter("executor.sql"::equals).findFirst()) @@ -72,7 +72,7 @@ class ConfigurationPropertiesReportEndpointProxyTests { ApplicationContextRunner contextRunner = new ApplicationContextRunner() .withUserConfiguration(ValidatedConfiguration.class).withPropertyValues("validated.name=baz"); contextRunner.run((context) -> { - ApplicationConfigurationProperties applicationProperties = context + ConfigurationPropertiesDescriptor applicationProperties = context .getBean(ConfigurationPropertiesReportEndpoint.class).configurationProperties(); Map properties = applicationProperties.getContexts().get(context.getId()).getBeans() .values().stream().map(ConfigurationPropertiesBeanDescriptor::getProperties).findFirst().get(); diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointSerializationTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointSerializationTests.java index d4e02517a83..074f344ee69 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointSerializationTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointSerializationTests.java @@ -29,8 +29,8 @@ import java.util.Map; import com.zaxxer.hikari.HikariDataSource; import org.junit.jupiter.api.Test; -import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ApplicationConfigurationProperties; import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesBeanDescriptor; +import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesDescriptor; import org.springframework.boot.actuate.endpoint.Show; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationPropertiesBinding; @@ -63,7 +63,7 @@ class ConfigurationPropertiesReportEndpointSerializationTests { contextRunner.run((context) -> { ConfigurationPropertiesReportEndpoint endpoint = context .getBean(ConfigurationPropertiesReportEndpoint.class); - ApplicationConfigurationProperties applicationProperties = endpoint.configurationProperties(); + ConfigurationPropertiesDescriptor applicationProperties = endpoint.configurationProperties(); ConfigurationPropertiesBeanDescriptor foo = applicationProperties.getContexts().get(context.getId()) .getBeans().get("foo"); assertThat(foo).isNotNull(); @@ -83,7 +83,7 @@ class ConfigurationPropertiesReportEndpointSerializationTests { contextRunner.run((context) -> { ConfigurationPropertiesReportEndpoint endpoint = context .getBean(ConfigurationPropertiesReportEndpoint.class); - ApplicationConfigurationProperties applicationProperties = endpoint.configurationProperties(); + ConfigurationPropertiesDescriptor applicationProperties = endpoint.configurationProperties(); ConfigurationPropertiesBeanDescriptor foo = applicationProperties.getContexts().get(context.getId()) .getBeans().get("foo"); assertThat(foo).isNotNull(); @@ -102,7 +102,7 @@ class ConfigurationPropertiesReportEndpointSerializationTests { contextRunner.run((context) -> { ConfigurationPropertiesReportEndpoint endpoint = context .getBean(ConfigurationPropertiesReportEndpoint.class); - ApplicationConfigurationProperties applicationProperties = endpoint.configurationProperties(); + ConfigurationPropertiesDescriptor applicationProperties = endpoint.configurationProperties(); ConfigurationPropertiesBeanDescriptor foo = applicationProperties.getContexts().get(context.getId()) .getBeans().get("foo"); assertThat(foo.getPrefix()).isEqualTo("foo"); @@ -123,7 +123,7 @@ class ConfigurationPropertiesReportEndpointSerializationTests { contextRunner.run((context) -> { ConfigurationPropertiesReportEndpoint endpoint = context .getBean(ConfigurationPropertiesReportEndpoint.class); - ApplicationConfigurationProperties applicationProperties = endpoint.configurationProperties(); + ConfigurationPropertiesDescriptor applicationProperties = endpoint.configurationProperties(); ConfigurationPropertiesBeanDescriptor cycle = applicationProperties.getContexts().get(context.getId()) .getBeans().get("cycle"); assertThat(cycle.getPrefix()).isEqualTo("cycle"); @@ -142,7 +142,7 @@ class ConfigurationPropertiesReportEndpointSerializationTests { contextRunner.run((context) -> { ConfigurationPropertiesReportEndpoint endpoint = context .getBean(ConfigurationPropertiesReportEndpoint.class); - ApplicationConfigurationProperties applicationProperties = endpoint.configurationProperties(); + ConfigurationPropertiesDescriptor applicationProperties = endpoint.configurationProperties(); ConfigurationPropertiesBeanDescriptor fooProperties = applicationProperties.getContexts() .get(context.getId()).getBeans().get("foo"); assertThat(fooProperties).isNotNull(); @@ -160,7 +160,7 @@ class ConfigurationPropertiesReportEndpointSerializationTests { contextRunner.run((context) -> { ConfigurationPropertiesReportEndpoint endpoint = context .getBean(ConfigurationPropertiesReportEndpoint.class); - ApplicationConfigurationProperties applicationProperties = endpoint.configurationProperties(); + ConfigurationPropertiesDescriptor applicationProperties = endpoint.configurationProperties(); ConfigurationPropertiesBeanDescriptor foo = applicationProperties.getContexts().get(context.getId()) .getBeans().get("foo"); assertThat(foo).isNotNull(); @@ -180,7 +180,7 @@ class ConfigurationPropertiesReportEndpointSerializationTests { contextRunner.run((context) -> { ConfigurationPropertiesReportEndpoint endpoint = context .getBean(ConfigurationPropertiesReportEndpoint.class); - ApplicationConfigurationProperties applicationProperties = endpoint.configurationProperties(); + ConfigurationPropertiesDescriptor applicationProperties = endpoint.configurationProperties(); ConfigurationPropertiesBeanDescriptor foo = applicationProperties.getContexts().get(context.getId()) .getBeans().get("foo"); assertThat(foo).isNotNull(); @@ -199,7 +199,7 @@ class ConfigurationPropertiesReportEndpointSerializationTests { contextRunner.run((context) -> { ConfigurationPropertiesReportEndpoint endpoint = context .getBean(ConfigurationPropertiesReportEndpoint.class); - ApplicationConfigurationProperties applicationProperties = endpoint.configurationProperties(); + ConfigurationPropertiesDescriptor applicationProperties = endpoint.configurationProperties(); ConfigurationPropertiesBeanDescriptor foo = applicationProperties.getContexts().get(context.getId()) .getBeans().get("foo"); assertThat(foo).isNotNull(); @@ -220,7 +220,7 @@ class ConfigurationPropertiesReportEndpointSerializationTests { contextRunner.run((context) -> { ConfigurationPropertiesReportEndpoint endpoint = context .getBean(ConfigurationPropertiesReportEndpoint.class); - ApplicationConfigurationProperties applicationProperties = endpoint.configurationProperties(); + ConfigurationPropertiesDescriptor applicationProperties = endpoint.configurationProperties(); ConfigurationPropertiesBeanDescriptor foo = applicationProperties.getContexts().get(context.getId()) .getBeans().get("foo"); assertThat(foo.getPrefix()).isEqualTo("foo"); @@ -240,7 +240,7 @@ class ConfigurationPropertiesReportEndpointSerializationTests { contextRunner.run((context) -> { ConfigurationPropertiesReportEndpoint endpoint = context .getBean(ConfigurationPropertiesReportEndpoint.class); - ApplicationConfigurationProperties applicationProperties = endpoint.configurationProperties(); + ConfigurationPropertiesDescriptor applicationProperties = endpoint.configurationProperties(); ConfigurationPropertiesBeanDescriptor hikariDataSource = applicationProperties.getContexts() .get(context.getId()).getBeans().get("hikariDataSource"); Map nestedProperties = hikariDataSource.getProperties(); @@ -259,7 +259,7 @@ class ConfigurationPropertiesReportEndpointSerializationTests { contextRunner.run((context) -> { ConfigurationPropertiesReportEndpoint endpoint = context .getBean(ConfigurationPropertiesReportEndpoint.class); - ApplicationConfigurationProperties applicationProperties = endpoint.configurationProperties(); + ConfigurationPropertiesDescriptor applicationProperties = endpoint.configurationProperties(); ConfigurationPropertiesBeanDescriptor descriptor = applicationProperties.getContexts().get(context.getId()) .getBeans().get("foo"); assertThat((Map) descriptor.getInputs().get("name")).containsEntry("value", "Spring Boot"); @@ -277,7 +277,7 @@ class ConfigurationPropertiesReportEndpointSerializationTests { contextRunner.run((context) -> { ConfigurationPropertiesReportEndpoint endpoint = context .getBean(ConfigurationPropertiesReportEndpoint.class); - ApplicationConfigurationProperties applicationProperties = endpoint.configurationProperties(); + ConfigurationPropertiesDescriptor applicationProperties = endpoint.configurationProperties(); ConfigurationPropertiesBeanDescriptor descriptor = applicationProperties.getContexts().get(context.getId()) .getBeans().get("foo"); assertThat((Map) descriptor.getInputs().get("name")).containsEntry("value", diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointTests.java index d43fd22f31c..9fcd44822fe 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointTests.java @@ -30,7 +30,7 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesBeanDescriptor; -import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ContextConfigurationProperties; +import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ContextConfigurationPropertiesDescriptor; import org.springframework.boot.actuate.endpoint.SanitizingFunction; import org.springframework.boot.actuate.endpoint.Show; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -330,9 +330,10 @@ class ConfigurationPropertiesReportEndpointTests { return (context) -> { ConfigurationPropertiesReportEndpoint endpoint = context .getBean(ConfigurationPropertiesReportEndpoint.class); - ConfigurationPropertiesReportEndpoint.ApplicationConfigurationProperties configurationProperties = endpoint + ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesDescriptor configurationProperties = endpoint .configurationProperties(); - ContextConfigurationProperties allProperties = configurationProperties.getContexts().get(context.getId()); + ContextConfigurationPropertiesDescriptor allProperties = configurationProperties.getContexts() + .get(context.getId()); Optional key = allProperties.getBeans().keySet().stream() .filter((id) -> findIdFromPrefix(prefix, id)).findAny(); assertThat(key).describedAs("No configuration properties with prefix '%s' found", prefix).isPresent(); diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointWebExtensionTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointWebExtensionTests.java index c2cea580c22..30e299a27e0 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointWebExtensionTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointWebExtensionTests.java @@ -22,7 +22,7 @@ import java.util.Collections; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ApplicationConfigurationProperties; +import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesDescriptor; import org.springframework.boot.actuate.endpoint.SecurityContext; import org.springframework.boot.actuate.endpoint.Show; @@ -88,7 +88,7 @@ class ConfigurationPropertiesReportEndpointWebExtensionTests { private void verifyPrefixed(SecurityContext securityContext, boolean showUnsanitized) { given(this.delegate.getConfigurationProperties("test", showUnsanitized)) - .willReturn(new ApplicationConfigurationProperties(Collections.emptyMap())); + .willReturn(new ConfigurationPropertiesDescriptor(Collections.emptyMap())); this.webExtension.configurationPropertiesWithPrefix(securityContext, "test"); then(this.delegate).should().getConfigurationProperties("test", showUnsanitized); } diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/integration/IntegrationGraphEndpointTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/integration/IntegrationGraphEndpointTests.java index 2a8a63f50cd..2a32034e787 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/integration/IntegrationGraphEndpointTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/integration/IntegrationGraphEndpointTests.java @@ -16,6 +16,10 @@ package org.springframework.boot.actuate.integration; +import java.util.ArrayList; +import java.util.Collection; +import java.util.LinkedHashMap; +import java.util.Map; import java.util.Set; import org.junit.jupiter.api.Test; @@ -23,6 +27,7 @@ import org.junit.jupiter.api.Test; import org.springframework.aot.hint.MemberCategory; import org.springframework.aot.hint.RuntimeHints; import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; +import org.springframework.boot.actuate.integration.IntegrationGraphEndpoint.GraphDescriptor; import org.springframework.boot.actuate.integration.IntegrationGraphEndpoint.IntegrationGraphEndpointRuntimeHints; import org.springframework.integration.graph.CompositeMessageHandlerNode; import org.springframework.integration.graph.DiscardingMessageHandlerNode; @@ -34,6 +39,8 @@ import org.springframework.integration.graph.ErrorCapableMessageHandlerNode; import org.springframework.integration.graph.ErrorCapableRoutingNode; import org.springframework.integration.graph.Graph; import org.springframework.integration.graph.IntegrationGraphServer; +import org.springframework.integration.graph.IntegrationNode; +import org.springframework.integration.graph.LinkNode; import org.springframework.integration.graph.MessageChannelNode; import org.springframework.integration.graph.MessageGatewayNode; import org.springframework.integration.graph.MessageHandlerNode; @@ -62,10 +69,18 @@ class IntegrationGraphEndpointTests { @Test void readOperationShouldReturnGraph() { Graph mockedGraph = mock(Graph.class); + Map contentDescriptor = new LinkedHashMap<>(); + Collection nodes = new ArrayList<>(); + Collection links = new ArrayList<>(); + given(mockedGraph.getContentDescriptor()).willReturn(contentDescriptor); + given(mockedGraph.getNodes()).willReturn(nodes); + given(mockedGraph.getLinks()).willReturn(links); given(this.server.getGraph()).willReturn(mockedGraph); - Graph graph = this.endpoint.graph(); + GraphDescriptor graph = this.endpoint.graph(); then(this.server).should().getGraph(); - assertThat(graph).isEqualTo(mockedGraph); + assertThat(graph.getContentDescriptor()).isSameAs(contentDescriptor); + assertThat(graph.getNodes()).isSameAs(nodes); + assertThat(graph.getLinks()).isSameAs(links); } @Test diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpointTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpointTests.java index 4410b30f27e..0c640c7f45f 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpointTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpointTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2021 the original author or authors. + * Copyright 2012-2022 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. @@ -27,7 +27,7 @@ import javax.sql.DataSource; import liquibase.integration.spring.SpringLiquibase; import org.junit.jupiter.api.Test; -import org.springframework.boot.actuate.liquibase.LiquibaseEndpoint.LiquibaseBean; +import org.springframework.boot.actuate.liquibase.LiquibaseEndpoint.LiquibaseBeanDescriptor; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration; @@ -60,8 +60,8 @@ class LiquibaseEndpointTests { @Test void liquibaseReportIsReturned() { this.contextRunner.withUserConfiguration(Config.class).run((context) -> { - Map liquibaseBeans = context.getBean(LiquibaseEndpoint.class).liquibaseBeans() - .getContexts().get(context.getId()).getLiquibaseBeans(); + Map liquibaseBeans = context.getBean(LiquibaseEndpoint.class) + .liquibaseBeans().getContexts().get(context.getId()).getLiquibaseBeans(); assertThat(liquibaseBeans.get("liquibase").getChangeSets()).hasSize(1); }); } @@ -70,8 +70,8 @@ class LiquibaseEndpointTests { void liquibaseReportIsReturnedForContextHierarchy() { this.contextRunner.withUserConfiguration().run((parent) -> { this.contextRunner.withUserConfiguration(Config.class).withParent(parent).run((context) -> { - Map liquibaseBeans = context.getBean(LiquibaseEndpoint.class).liquibaseBeans() - .getContexts().get(parent.getId()).getLiquibaseBeans(); + Map liquibaseBeans = context.getBean(LiquibaseEndpoint.class) + .liquibaseBeans().getContexts().get(parent.getId()).getLiquibaseBeans(); assertThat(liquibaseBeans.get("liquibase").getChangeSets()).hasSize(1); }); }); @@ -81,7 +81,7 @@ class LiquibaseEndpointTests { void invokeWithCustomSchema() { this.contextRunner.withUserConfiguration(Config.class, DataSourceWithSchemaConfiguration.class) .withPropertyValues("spring.liquibase.default-schema=CUSTOMSCHEMA").run((context) -> { - Map liquibaseBeans = context.getBean(LiquibaseEndpoint.class) + Map liquibaseBeans = context.getBean(LiquibaseEndpoint.class) .liquibaseBeans().getContexts().get(context.getId()).getLiquibaseBeans(); assertThat(liquibaseBeans.get("liquibase").getChangeSets()).hasSize(1); }); @@ -93,7 +93,7 @@ class LiquibaseEndpointTests { .withPropertyValues("spring.liquibase.database-change-log-lock-table=liquibase_database_changelog_lock", "spring.liquibase.database-change-log-table=liquibase_database_changelog") .run((context) -> { - Map liquibaseBeans = context.getBean(LiquibaseEndpoint.class) + Map liquibaseBeans = context.getBean(LiquibaseEndpoint.class) .liquibaseBeans().getContexts().get(context.getId()).getLiquibaseBeans(); assertThat(liquibaseBeans.get("liquibase").getChangeSets()).hasSize(1); }); @@ -113,7 +113,7 @@ class LiquibaseEndpointTests { void whenMultipleLiquibaseBeansArePresentChangeSetsAreCorrectlyReportedForEachBean() { this.contextRunner.withUserConfiguration(Config.class, MultipleDataSourceLiquibaseConfiguration.class) .run((context) -> { - Map liquibaseBeans = context.getBean(LiquibaseEndpoint.class) + Map liquibaseBeans = context.getBean(LiquibaseEndpoint.class) .liquibaseBeans().getContexts().get(context.getId()).getLiquibaseBeans(); assertThat(liquibaseBeans.get("liquibase").getChangeSets()).hasSize(1); assertThat(liquibaseBeans.get("liquibase").getChangeSets().get(0).getChangeLog()) diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/logging/LoggersEndpointTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/logging/LoggersEndpointTests.java index 4cd6f2967eb..820cc72f824 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/logging/LoggersEndpointTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/logging/LoggersEndpointTests.java @@ -29,9 +29,10 @@ import org.springframework.aot.hint.RuntimeHints; import org.springframework.aot.hint.annotation.ReflectiveRuntimeHintsRegistrar; import org.springframework.aot.hint.predicate.ReflectionHintsPredicates; import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; -import org.springframework.boot.actuate.logging.LoggersEndpoint.GroupLoggerLevels; -import org.springframework.boot.actuate.logging.LoggersEndpoint.LoggerLevels; -import org.springframework.boot.actuate.logging.LoggersEndpoint.SingleLoggerLevels; +import org.springframework.boot.actuate.logging.LoggersEndpoint.GroupLoggerLevelsDescriptor; +import org.springframework.boot.actuate.logging.LoggersEndpoint.LoggerLevelsDescriptor; +import org.springframework.boot.actuate.logging.LoggersEndpoint.LoggersDescriptor; +import org.springframework.boot.actuate.logging.LoggersEndpoint.SingleLoggerLevelsDescriptor; import org.springframework.boot.logging.LogLevel; import org.springframework.boot.logging.LoggerConfiguration; import org.springframework.boot.logging.LoggerGroups; @@ -65,35 +66,33 @@ class LoggersEndpointTests { } @Test - @SuppressWarnings("unchecked") void loggersShouldReturnLoggerConfigurationsWithNoLoggerGroups() { given(this.loggingSystem.getLoggerConfigurations()) .willReturn(Collections.singletonList(new LoggerConfiguration("ROOT", null, LogLevel.DEBUG))); given(this.loggingSystem.getSupportedLogLevels()).willReturn(EnumSet.allOf(LogLevel.class)); - Map result = new LoggersEndpoint(this.loggingSystem, new LoggerGroups()).loggers(); - Map loggers = (Map) result.get("loggers"); - Set levels = (Set) result.get("levels"); - SingleLoggerLevels rootLevels = (SingleLoggerLevels) loggers.get("ROOT"); + LoggersDescriptor result = new LoggersEndpoint(this.loggingSystem, new LoggerGroups()).loggers(); + Map loggers = result.getLoggers(); + Set levels = result.getLevels(); + SingleLoggerLevelsDescriptor rootLevels = (SingleLoggerLevelsDescriptor) loggers.get("ROOT"); assertThat(rootLevels.getConfiguredLevel()).isNull(); assertThat(rootLevels.getEffectiveLevel()).isEqualTo("DEBUG"); assertThat(levels).containsExactly(LogLevel.OFF, LogLevel.FATAL, LogLevel.ERROR, LogLevel.WARN, LogLevel.INFO, LogLevel.DEBUG, LogLevel.TRACE); - Map groups = (Map) result.get("groups"); + Map groups = result.getGroups(); assertThat(groups).isEmpty(); } @Test - @SuppressWarnings("unchecked") void loggersShouldReturnLoggerConfigurationsWithLoggerGroups() { given(this.loggingSystem.getLoggerConfigurations()) .willReturn(Collections.singletonList(new LoggerConfiguration("ROOT", null, LogLevel.DEBUG))); given(this.loggingSystem.getSupportedLogLevels()).willReturn(EnumSet.allOf(LogLevel.class)); - Map result = new LoggersEndpoint(this.loggingSystem, this.loggerGroups).loggers(); - Map loggerGroups = (Map) result.get("groups"); - GroupLoggerLevels groupLevel = loggerGroups.get("test"); - Map loggers = (Map) result.get("loggers"); - Set levels = (Set) result.get("levels"); - SingleLoggerLevels rootLevels = (SingleLoggerLevels) loggers.get("ROOT"); + LoggersDescriptor result = new LoggersEndpoint(this.loggingSystem, this.loggerGroups).loggers(); + Map loggerGroups = result.getGroups(); + GroupLoggerLevelsDescriptor groupLevel = loggerGroups.get("test"); + Map loggers = result.getLoggers(); + Set levels = result.getLevels(); + SingleLoggerLevelsDescriptor rootLevels = (SingleLoggerLevelsDescriptor) loggers.get("ROOT"); assertThat(rootLevels.getConfiguredLevel()).isNull(); assertThat(rootLevels.getEffectiveLevel()).isEqualTo("DEBUG"); assertThat(levels).containsExactly(LogLevel.OFF, LogLevel.FATAL, LogLevel.ERROR, LogLevel.WARN, LogLevel.INFO, @@ -107,16 +106,16 @@ class LoggersEndpointTests { void loggerLevelsWhenNameSpecifiedShouldReturnLevels() { given(this.loggingSystem.getLoggerConfiguration("ROOT")) .willReturn(new LoggerConfiguration("ROOT", null, LogLevel.DEBUG)); - SingleLoggerLevels levels = (SingleLoggerLevels) new LoggersEndpoint(this.loggingSystem, this.loggerGroups) - .loggerLevels("ROOT"); + SingleLoggerLevelsDescriptor levels = (SingleLoggerLevelsDescriptor) new LoggersEndpoint(this.loggingSystem, + this.loggerGroups).loggerLevels("ROOT"); assertThat(levels.getConfiguredLevel()).isNull(); assertThat(levels.getEffectiveLevel()).isEqualTo("DEBUG"); } @Test void groupNameSpecifiedShouldReturnConfiguredLevelAndMembers() { - GroupLoggerLevels levels = (GroupLoggerLevels) new LoggersEndpoint(this.loggingSystem, this.loggerGroups) - .loggerLevels("test"); + GroupLoggerLevelsDescriptor levels = (GroupLoggerLevelsDescriptor) new LoggersEndpoint(this.loggingSystem, + this.loggerGroups).loggerLevels("test"); assertThat(levels.getConfiguredLevel()).isEqualTo("DEBUG"); assertThat(levels.getMembers()).isEqualTo(Collections.singletonList("test.member")); } @@ -150,14 +149,14 @@ class LoggersEndpointTests { RuntimeHints runtimeHints = new RuntimeHints(); new ReflectiveRuntimeHintsRegistrar().registerRuntimeHints(runtimeHints, LoggersEndpoint.class); ReflectionHintsPredicates reflection = RuntimeHintsPredicates.reflection(); - assertThat(reflection.onType(LoggerLevels.class)).accepts(runtimeHints); - assertThat(reflection.onMethod(LoggerLevels.class, "getConfiguredLevel")).accepts(runtimeHints); - assertThat(reflection.onType(SingleLoggerLevels.class)).accepts(runtimeHints); - assertThat(reflection.onMethod(SingleLoggerLevels.class, "getEffectiveLevel")).accepts(runtimeHints); - assertThat(reflection.onMethod(SingleLoggerLevels.class, "getConfiguredLevel")).accepts(runtimeHints); - assertThat(reflection.onType(GroupLoggerLevels.class)).accepts(runtimeHints); - assertThat(reflection.onMethod(GroupLoggerLevels.class, "getMembers")).accepts(runtimeHints); - assertThat(reflection.onMethod(GroupLoggerLevels.class, "getConfiguredLevel")).accepts(runtimeHints); + assertThat(reflection.onType(LoggerLevelsDescriptor.class)).accepts(runtimeHints); + assertThat(reflection.onMethod(LoggerLevelsDescriptor.class, "getConfiguredLevel")).accepts(runtimeHints); + assertThat(reflection.onType(SingleLoggerLevelsDescriptor.class)).accepts(runtimeHints); + assertThat(reflection.onMethod(SingleLoggerLevelsDescriptor.class, "getEffectiveLevel")).accepts(runtimeHints); + assertThat(reflection.onMethod(SingleLoggerLevelsDescriptor.class, "getConfiguredLevel")).accepts(runtimeHints); + assertThat(reflection.onType(GroupLoggerLevelsDescriptor.class)).accepts(runtimeHints); + assertThat(reflection.onMethod(GroupLoggerLevelsDescriptor.class, "getMembers")).accepts(runtimeHints); + assertThat(reflection.onMethod(GroupLoggerLevelsDescriptor.class, "getConfiguredLevel")).accepts(runtimeHints); } } diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/MetricsEndpointTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/MetricsEndpointTests.java index 9413ce68045..c61c901f80a 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/MetricsEndpointTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/MetricsEndpointTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2021 the original author or authors. + * Copyright 2012-2022 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. @@ -48,7 +48,7 @@ class MetricsEndpointTests { @Test void listNamesHandlesEmptyListOfMeters() { - MetricsEndpoint.ListNamesResponse result = this.endpoint.listNames(); + MetricsEndpoint.MetricNamesDescriptor result = this.endpoint.listNames(); assertThat(result.getNames()).isEmpty(); } @@ -61,7 +61,7 @@ class MetricsEndpointTests { this.registry.counter("com.example.delta"); this.registry.counter("com.example.echo"); this.registry.counter("com.example.bravo"); - MetricsEndpoint.ListNamesResponse result = this.endpoint.listNames(); + MetricsEndpoint.MetricNamesDescriptor result = this.endpoint.listNames(); assertThat(result.getNames()).containsExactly("com.example.alpha", "com.example.bravo", "com.example.charlie", "com.example.delta", "com.example.echo"); } @@ -84,7 +84,7 @@ class MetricsEndpointTests { this.registry.counter("cache", "result", "hit", "host", "1").increment(2); this.registry.counter("cache", "result", "miss", "host", "1").increment(2); this.registry.counter("cache", "result", "hit", "host", "2").increment(2); - MetricsEndpoint.MetricResponse response = this.endpoint.metric("cache", Collections.emptyList()); + MetricsEndpoint.MetricDescriptor response = this.endpoint.metric("cache", Collections.emptyList()); assertThat(response.getName()).isEqualTo("cache"); assertThat(availableTagKeys(response)).containsExactly("result", "host"); assertThat(getCount(response)).hasValue(6.0); @@ -106,7 +106,7 @@ class MetricsEndpointTests { secondLevel.counter("cache", "result", "miss", "host", "1").increment(2); secondLevel.counter("cache", "result", "hit", "host", "2").increment(2); MetricsEndpoint endpoint = new MetricsEndpoint(composite); - MetricsEndpoint.MetricResponse response = endpoint.metric("cache", Collections.emptyList()); + MetricsEndpoint.MetricDescriptor response = endpoint.metric("cache", Collections.emptyList()); assertThat(response.getName()).isEqualTo("cache"); assertThat(availableTagKeys(response)).containsExactly("result", "host"); assertThat(getCount(response)).hasValue(6.0); @@ -123,7 +123,7 @@ class MetricsEndpointTests { composite.add(firstLevel); firstLevel.add(secondLevel); MetricsEndpoint endpoint = new MetricsEndpoint(composite); - MetricsEndpoint.MetricResponse response = endpoint.metric("invalid.metric.name", Collections.emptyList()); + MetricsEndpoint.MetricDescriptor response = endpoint.metric("invalid.metric.name", Collections.emptyList()); assertThat(response).isNull(); } @@ -131,7 +131,7 @@ class MetricsEndpointTests { void metricTagValuesAreDeduplicated() { this.registry.counter("cache", "host", "1", "region", "east", "result", "hit"); this.registry.counter("cache", "host", "1", "region", "east", "result", "miss"); - MetricsEndpoint.MetricResponse response = this.endpoint.metric("cache", Collections.singletonList("host:1")); + MetricsEndpoint.MetricDescriptor response = this.endpoint.metric("cache", Collections.singletonList("host:1")); assertThat(response.getAvailableTags().stream().filter((t) -> t.getTag().equals("region")) .flatMap((t) -> t.getValues().stream())).containsExactly("east"); } @@ -139,7 +139,7 @@ class MetricsEndpointTests { @Test void metricWithSpaceInTagValue() { this.registry.counter("counter", "key", "a space").increment(2); - MetricsEndpoint.MetricResponse response = this.endpoint.metric("counter", + MetricsEndpoint.MetricDescriptor response = this.endpoint.metric("counter", Collections.singletonList("key:a space")); assertThat(response.getName()).isEqualTo("counter"); assertThat(availableTagKeys(response)).isEmpty(); @@ -168,7 +168,7 @@ class MetricsEndpointTests { @Test void nonExistentMetric() { - MetricsEndpoint.MetricResponse response = this.endpoint.metric("does.not.exist", Collections.emptyList()); + MetricsEndpoint.MetricDescriptor response = this.endpoint.metric("does.not.exist", Collections.emptyList()); assertThat(response).isNull(); } @@ -196,12 +196,12 @@ class MetricsEndpointTests { .hasValueSatisfying((sample) -> assertThat(sample.getValue()).isEqualTo(value)); } - private Optional getCount(MetricsEndpoint.MetricResponse response) { + private Optional getCount(MetricsEndpoint.MetricDescriptor response) { return response.getMeasurements().stream().filter((sample) -> sample.getStatistic().equals(Statistic.COUNT)) .findAny().map(MetricsEndpoint.Sample::getValue); } - private Stream availableTagKeys(MetricsEndpoint.MetricResponse response) { + private Stream availableTagKeys(MetricsEndpoint.MetricDescriptor response) { return response.getAvailableTags().stream().map(MetricsEndpoint.AvailableTag::getTag); } diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/quartz/QuartzEndpointTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/quartz/QuartzEndpointTests.java index f76599a2edb..3ae1656e35f 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/quartz/QuartzEndpointTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/quartz/QuartzEndpointTests.java @@ -62,11 +62,11 @@ import org.quartz.TriggerKey; import org.quartz.impl.matchers.GroupMatcher; import org.quartz.spi.OperableTrigger; -import org.springframework.boot.actuate.quartz.QuartzEndpoint.QuartzJobDetails; -import org.springframework.boot.actuate.quartz.QuartzEndpoint.QuartzJobGroupSummary; -import org.springframework.boot.actuate.quartz.QuartzEndpoint.QuartzJobSummary; -import org.springframework.boot.actuate.quartz.QuartzEndpoint.QuartzReport; -import org.springframework.boot.actuate.quartz.QuartzEndpoint.QuartzTriggerGroupSummary; +import org.springframework.boot.actuate.quartz.QuartzEndpoint.QuartzDescriptor; +import org.springframework.boot.actuate.quartz.QuartzEndpoint.QuartzJobDetailsDescriptor; +import org.springframework.boot.actuate.quartz.QuartzEndpoint.QuartzJobGroupSummaryDescriptor; +import org.springframework.boot.actuate.quartz.QuartzEndpoint.QuartzJobSummaryDescriptor; +import org.springframework.boot.actuate.quartz.QuartzEndpoint.QuartzTriggerGroupSummaryDescriptor; import org.springframework.scheduling.quartz.DelegatingJob; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; @@ -113,7 +113,7 @@ class QuartzEndpointTests { void quartzReport() throws SchedulerException { given(this.scheduler.getJobGroupNames()).willReturn(Arrays.asList("jobSamples", "DEFAULT")); given(this.scheduler.getTriggerGroupNames()).willReturn(Collections.singletonList("triggerSamples")); - QuartzReport quartzReport = this.endpoint.quartzReport(); + QuartzDescriptor quartzReport = this.endpoint.quartzReport(); assertThat(quartzReport.getJobs().getGroups()).containsOnly("jobSamples", "DEFAULT"); assertThat(quartzReport.getTriggers().getGroups()).containsOnly("triggerSamples"); then(this.scheduler).should().getJobGroupNames(); @@ -125,7 +125,7 @@ class QuartzEndpointTests { void quartzReportWithNoJob() throws SchedulerException { given(this.scheduler.getJobGroupNames()).willReturn(Collections.emptyList()); given(this.scheduler.getTriggerGroupNames()).willReturn(Arrays.asList("triggerSamples", "DEFAULT")); - QuartzReport quartzReport = this.endpoint.quartzReport(); + QuartzDescriptor quartzReport = this.endpoint.quartzReport(); assertThat(quartzReport.getJobs().getGroups()).isEmpty(); assertThat(quartzReport.getTriggers().getGroups()).containsOnly("triggerSamples", "DEFAULT"); } @@ -134,7 +134,7 @@ class QuartzEndpointTests { void quartzReportWithNoTrigger() throws SchedulerException { given(this.scheduler.getJobGroupNames()).willReturn(Collections.singletonList("jobSamples")); given(this.scheduler.getTriggerGroupNames()).willReturn(Collections.emptyList()); - QuartzReport quartzReport = this.endpoint.quartzReport(); + QuartzDescriptor quartzReport = this.endpoint.quartzReport(); assertThat(quartzReport.getJobs().getGroups()).containsOnly("jobSamples"); assertThat(quartzReport.getTriggers().getGroups()).isEmpty(); } @@ -179,7 +179,7 @@ class QuartzEndpointTests { @Test void quartzJobGroupSummaryWithInvalidGroup() throws SchedulerException { given(this.scheduler.getJobGroupNames()).willReturn(Collections.singletonList("DEFAULT")); - QuartzJobGroupSummary summary = this.endpoint.quartzJobGroupSummary("unknown"); + QuartzJobGroupSummaryDescriptor summary = this.endpoint.quartzJobGroupSummary("unknown"); assertThat(summary).isNull(); } @@ -187,7 +187,7 @@ class QuartzEndpointTests { void quartzJobGroupSummaryWithEmptyGroup() throws SchedulerException { given(this.scheduler.getJobGroupNames()).willReturn(Collections.singletonList("samples")); given(this.scheduler.getJobKeys(GroupMatcher.jobGroupEquals("samples"))).willReturn(Collections.emptySet()); - QuartzJobGroupSummary summary = this.endpoint.quartzJobGroupSummary("samples"); + QuartzJobGroupSummaryDescriptor summary = this.endpoint.quartzJobGroupSummary("samples"); assertThat(summary).isNotNull(); assertThat(summary.getGroup()).isEqualTo("samples"); assertThat(summary.getJobs()).isEmpty(); @@ -196,10 +196,10 @@ class QuartzEndpointTests { @Test void quartzJobGroupSummaryWithJobs() throws SchedulerException { mockJobs(jobOne, jobTwo); - QuartzJobGroupSummary summary = this.endpoint.quartzJobGroupSummary("DEFAULT"); + QuartzJobGroupSummaryDescriptor summary = this.endpoint.quartzJobGroupSummary("DEFAULT"); assertThat(summary).isNotNull(); assertThat(summary.getGroup()).isEqualTo("DEFAULT"); - Map jobSummaries = summary.getJobs(); + Map jobSummaries = summary.getJobs(); assertThat(jobSummaries).containsOnlyKeys("jobOne", "jobTwo"); assertThat(jobSummaries.get("jobOne").getClassName()).isEqualTo(Job.class.getName()); assertThat(jobSummaries.get("jobTwo").getClassName()).isEqualTo(DelegatingJob.class.getName()); @@ -208,7 +208,7 @@ class QuartzEndpointTests { @Test void quartzTriggerGroupSummaryWithInvalidGroup() throws SchedulerException { given(this.scheduler.getTriggerGroupNames()).willReturn(Collections.singletonList("DEFAULT")); - QuartzTriggerGroupSummary summary = this.endpoint.quartzTriggerGroupSummary("unknown"); + QuartzTriggerGroupSummaryDescriptor summary = this.endpoint.quartzTriggerGroupSummary("unknown"); assertThat(summary).isNull(); } @@ -217,7 +217,7 @@ class QuartzEndpointTests { given(this.scheduler.getTriggerGroupNames()).willReturn(Collections.singletonList("samples")); given(this.scheduler.getTriggerKeys(GroupMatcher.triggerGroupEquals("samples"))) .willReturn(Collections.emptySet()); - QuartzTriggerGroupSummary summary = this.endpoint.quartzTriggerGroupSummary("samples"); + QuartzTriggerGroupSummaryDescriptor summary = this.endpoint.quartzTriggerGroupSummary("samples"); assertThat(summary).isNotNull(); assertThat(summary.getGroup()).isEqualTo("samples"); assertThat(summary.isPaused()).isFalse(); @@ -233,7 +233,7 @@ class QuartzEndpointTests { CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("3am-every-day", "samples") .withSchedule(CronScheduleBuilder.dailyAtHourAndMinute(3, 0)).build(); mockTriggers(cronTrigger); - QuartzTriggerGroupSummary summary = this.endpoint.quartzTriggerGroupSummary("samples"); + QuartzTriggerGroupSummaryDescriptor summary = this.endpoint.quartzTriggerGroupSummary("samples"); assertThat(summary.getGroup()).isEqualTo("samples"); assertThat(summary.isPaused()).isFalse(); assertThat(summary.getTriggers().getCron()).containsOnlyKeys("3am-every-day"); @@ -253,7 +253,7 @@ class QuartzEndpointTests { ((OperableTrigger) cronTrigger).setPreviousFireTime(previousFireTime); ((OperableTrigger) cronTrigger).setNextFireTime(nextFireTime); mockTriggers(cronTrigger); - QuartzTriggerGroupSummary summary = this.endpoint.quartzTriggerGroupSummary("samples"); + QuartzTriggerGroupSummaryDescriptor summary = this.endpoint.quartzTriggerGroupSummary("samples"); Map triggers = summary.getTriggers().getCron(); assertThat(triggers).containsOnlyKeys("3am-every-day"); assertThat(triggers).extractingByKey("3am-every-day", nestedMap()).containsOnly( @@ -266,7 +266,7 @@ class QuartzEndpointTests { SimpleTrigger simpleTrigger = TriggerBuilder.newTrigger().withIdentity("every-hour", "samples") .withSchedule(SimpleScheduleBuilder.repeatHourlyForever(1)).build(); mockTriggers(simpleTrigger); - QuartzTriggerGroupSummary summary = this.endpoint.quartzTriggerGroupSummary("samples"); + QuartzTriggerGroupSummaryDescriptor summary = this.endpoint.quartzTriggerGroupSummary("samples"); assertThat(summary.getGroup()).isEqualTo("samples"); assertThat(summary.isPaused()).isFalse(); assertThat(summary.getTriggers().getCron()).isEmpty(); @@ -285,7 +285,7 @@ class QuartzEndpointTests { ((OperableTrigger) simpleTrigger).setPreviousFireTime(previousFireTime); ((OperableTrigger) simpleTrigger).setNextFireTime(nextFireTime); mockTriggers(simpleTrigger); - QuartzTriggerGroupSummary summary = this.endpoint.quartzTriggerGroupSummary("samples"); + QuartzTriggerGroupSummaryDescriptor summary = this.endpoint.quartzTriggerGroupSummary("samples"); Map triggers = summary.getTriggers().getSimple(); assertThat(triggers).containsOnlyKeys("every-hour"); assertThat(triggers).extractingByKey("every-hour", nestedMap()).containsOnly( @@ -300,7 +300,7 @@ class QuartzEndpointTests { .startingDailyAt(TimeOfDay.hourAndMinuteOfDay(9, 0)).withInterval(1, IntervalUnit.HOUR)) .build(); mockTriggers(trigger); - QuartzTriggerGroupSummary summary = this.endpoint.quartzTriggerGroupSummary("samples"); + QuartzTriggerGroupSummaryDescriptor summary = this.endpoint.quartzTriggerGroupSummary("samples"); assertThat(summary.getGroup()).isEqualTo("samples"); assertThat(summary.isPaused()).isFalse(); assertThat(summary.getTriggers().getCron()).isEmpty(); @@ -324,7 +324,7 @@ class QuartzEndpointTests { ((OperableTrigger) trigger).setPreviousFireTime(previousFireTime); ((OperableTrigger) trigger).setNextFireTime(nextFireTime); mockTriggers(trigger); - QuartzTriggerGroupSummary summary = this.endpoint.quartzTriggerGroupSummary("samples"); + QuartzTriggerGroupSummaryDescriptor summary = this.endpoint.quartzTriggerGroupSummary("samples"); Map triggers = summary.getTriggers().getDailyTimeInterval(); assertThat(triggers).containsOnlyKeys("every-hour-tue-thu"); assertThat(triggers).extractingByKey("every-hour-tue-thu", nestedMap()).containsOnly( @@ -340,7 +340,7 @@ class QuartzEndpointTests { .withSchedule(CalendarIntervalScheduleBuilder.calendarIntervalSchedule().withIntervalInWeeks(1)) .build(); mockTriggers(trigger); - QuartzTriggerGroupSummary summary = this.endpoint.quartzTriggerGroupSummary("samples"); + QuartzTriggerGroupSummaryDescriptor summary = this.endpoint.quartzTriggerGroupSummary("samples"); assertThat(summary.getGroup()).isEqualTo("samples"); assertThat(summary.isPaused()).isFalse(); assertThat(summary.getTriggers().getCron()).isEmpty(); @@ -362,7 +362,7 @@ class QuartzEndpointTests { ((OperableTrigger) trigger).setPreviousFireTime(previousFireTime); ((OperableTrigger) trigger).setNextFireTime(nextFireTime); mockTriggers(trigger); - QuartzTriggerGroupSummary summary = this.endpoint.quartzTriggerGroupSummary("samples"); + QuartzTriggerGroupSummaryDescriptor summary = this.endpoint.quartzTriggerGroupSummary("samples"); Map triggers = summary.getTriggers().getCalendarInterval(); assertThat(triggers).containsOnlyKeys("once-a-week"); assertThat(triggers).extractingByKey("once-a-week", nestedMap()).containsOnly( @@ -375,7 +375,7 @@ class QuartzEndpointTests { Trigger trigger = mock(Trigger.class); given(trigger.getKey()).willReturn(TriggerKey.triggerKey("custom", "samples")); mockTriggers(trigger); - QuartzTriggerGroupSummary summary = this.endpoint.quartzTriggerGroupSummary("samples"); + QuartzTriggerGroupSummaryDescriptor summary = this.endpoint.quartzTriggerGroupSummary("samples"); assertThat(summary.getGroup()).isEqualTo("samples"); assertThat(summary.isPaused()).isFalse(); assertThat(summary.getTriggers().getCron()).isEmpty(); @@ -395,7 +395,7 @@ class QuartzEndpointTests { given(trigger.getNextFireTime()).willReturn(nextFireTime); given(trigger.getPriority()).willReturn(9); mockTriggers(trigger); - QuartzTriggerGroupSummary summary = this.endpoint.quartzTriggerGroupSummary("samples"); + QuartzTriggerGroupSummaryDescriptor summary = this.endpoint.quartzTriggerGroupSummary("samples"); Map triggers = summary.getTriggers().getCustom(); assertThat(triggers).containsOnlyKeys("custom"); assertThat(triggers).extractingByKey("custom", nestedMap()).containsOnly( @@ -587,7 +587,7 @@ class QuartzEndpointTests { JobDetail job = JobBuilder.newJob(Job.class).withIdentity("hello", "samples").withDescription("A sample job") .storeDurably().requestRecovery(false).build(); mockJobs(job); - QuartzJobDetails jobDetails = this.endpoint.quartzJob("samples", "hello", true); + QuartzJobDetailsDescriptor jobDetails = this.endpoint.quartzJob("samples", "hello", true); assertThat(jobDetails.getGroup()).isEqualTo("samples"); assertThat(jobDetails.getName()).isEqualTo("hello"); assertThat(jobDetails.getDescription()).isEqualTo("A sample job"); @@ -612,7 +612,7 @@ class QuartzEndpointTests { mockTriggers(trigger); given(this.scheduler.getTriggersOfJob(JobKey.jobKey("hello", "samples"))) .willAnswer((invocation) -> Collections.singletonList(trigger)); - QuartzJobDetails jobDetails = this.endpoint.quartzJob("samples", "hello", true); + QuartzJobDetailsDescriptor jobDetails = this.endpoint.quartzJob("samples", "hello", true); assertThat(jobDetails.getTriggers()).hasSize(1); Map triggerDetails = jobDetails.getTriggers().get(0); assertThat(triggerDetails).containsOnly(entry("group", "samples"), entry("name", "3am-every-day"), @@ -634,7 +634,7 @@ class QuartzEndpointTests { mockTriggers(triggerOne, triggerTwo); given(this.scheduler.getTriggersOfJob(JobKey.jobKey("hello", "samples"))) .willAnswer((invocation) -> Arrays.asList(triggerOne, triggerTwo)); - QuartzJobDetails jobDetails = this.endpoint.quartzJob("samples", "hello", true); + QuartzJobDetailsDescriptor jobDetails = this.endpoint.quartzJob("samples", "hello", true); assertThat(jobDetails.getTriggers()).hasSize(2); assertThat(jobDetails.getTriggers().get(0)).containsEntry("name", "two"); assertThat(jobDetails.getTriggers().get(1)).containsEntry("name", "one"); @@ -654,7 +654,7 @@ class QuartzEndpointTests { mockTriggers(triggerOne, triggerTwo); given(this.scheduler.getTriggersOfJob(JobKey.jobKey("hello", "samples"))) .willAnswer((invocation) -> Arrays.asList(triggerOne, triggerTwo)); - QuartzJobDetails jobDetails = this.endpoint.quartzJob("samples", "hello", true); + QuartzJobDetailsDescriptor jobDetails = this.endpoint.quartzJob("samples", "hello", true); assertThat(jobDetails.getTriggers()).hasSize(2); assertThat(jobDetails.getTriggers().get(0)).containsEntry("name", "two"); assertThat(jobDetails.getTriggers().get(1)).containsEntry("name", "one"); @@ -665,7 +665,7 @@ class QuartzEndpointTests { JobDetail job = JobBuilder.newJob(Job.class).withIdentity("hello", "samples").usingJobData("user", "user") .usingJobData("password", "secret").usingJobData("url", "https://user:secret@example.com").build(); mockJobs(job); - QuartzJobDetails jobDetails = this.endpoint.quartzJob("samples", "hello", true); + QuartzJobDetailsDescriptor jobDetails = this.endpoint.quartzJob("samples", "hello", true); assertThat(jobDetails.getData()).containsOnly(entry("user", "user"), entry("password", "secret"), entry("url", "https://user:secret@example.com")); } @@ -675,7 +675,7 @@ class QuartzEndpointTests { JobDetail job = JobBuilder.newJob(Job.class).withIdentity("hello", "samples").usingJobData("user", "user") .usingJobData("password", "secret").usingJobData("url", "https://user:secret@example.com").build(); mockJobs(job); - QuartzJobDetails jobDetails = this.endpoint.quartzJob("samples", "hello", false); + QuartzJobDetailsDescriptor jobDetails = this.endpoint.quartzJob("samples", "hello", false); assertThat(jobDetails.getData()).containsOnly(entry("user", "******"), entry("password", "******"), entry("url", "******")); } diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/quartz/QuartzEndpointWebExtensionTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/quartz/QuartzEndpointWebExtensionTests.java index 85f35a428ad..9d7d58ae392 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/quartz/QuartzEndpointWebExtensionTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/quartz/QuartzEndpointWebExtensionTests.java @@ -28,10 +28,10 @@ import org.springframework.aot.hint.RuntimeHints; import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; import org.springframework.boot.actuate.endpoint.SecurityContext; import org.springframework.boot.actuate.endpoint.Show; -import org.springframework.boot.actuate.quartz.QuartzEndpoint.QuartzGroups; -import org.springframework.boot.actuate.quartz.QuartzEndpoint.QuartzJobDetails; -import org.springframework.boot.actuate.quartz.QuartzEndpoint.QuartzJobGroupSummary; -import org.springframework.boot.actuate.quartz.QuartzEndpoint.QuartzTriggerGroupSummary; +import org.springframework.boot.actuate.quartz.QuartzEndpoint.QuartzGroupsDescriptor; +import org.springframework.boot.actuate.quartz.QuartzEndpoint.QuartzJobDetailsDescriptor; +import org.springframework.boot.actuate.quartz.QuartzEndpoint.QuartzJobGroupSummaryDescriptor; +import org.springframework.boot.actuate.quartz.QuartzEndpoint.QuartzTriggerGroupSummaryDescriptor; import org.springframework.boot.actuate.quartz.QuartzEndpointWebExtension.QuartzEndpointWebExtensionRuntimeHints; import static org.assertj.core.api.Assertions.assertThat; @@ -100,8 +100,8 @@ class QuartzEndpointWebExtensionTests { void shouldRegisterHints() { RuntimeHints runtimeHints = new RuntimeHints(); new QuartzEndpointWebExtensionRuntimeHints().registerHints(runtimeHints, getClass().getClassLoader()); - Set> bindingTypes = Set.of(QuartzGroups.class, QuartzJobDetails.class, QuartzJobGroupSummary.class, - QuartzTriggerGroupSummary.class); + Set> bindingTypes = Set.of(QuartzGroupsDescriptor.class, QuartzJobDetailsDescriptor.class, + QuartzJobGroupSummaryDescriptor.class, QuartzTriggerGroupSummaryDescriptor.class); for (Class bindingType : bindingTypes) { assertThat(RuntimeHintsPredicates.reflection().onType(bindingType) .withMemberCategories(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, MemberCategory.DECLARED_FIELDS)) diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/scheduling/ScheduledTasksEndpointTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/scheduling/ScheduledTasksEndpointTests.java index eaed65550d7..ebeb8a97d69 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/scheduling/ScheduledTasksEndpointTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/scheduling/ScheduledTasksEndpointTests.java @@ -27,12 +27,12 @@ import org.junit.jupiter.api.Test; import org.springframework.aot.hint.MemberCategory; import org.springframework.aot.hint.RuntimeHints; import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; -import org.springframework.boot.actuate.scheduling.ScheduledTasksEndpoint.CronTaskDescription; -import org.springframework.boot.actuate.scheduling.ScheduledTasksEndpoint.CustomTriggerTaskDescription; -import org.springframework.boot.actuate.scheduling.ScheduledTasksEndpoint.FixedDelayTaskDescription; -import org.springframework.boot.actuate.scheduling.ScheduledTasksEndpoint.FixedRateTaskDescription; +import org.springframework.boot.actuate.scheduling.ScheduledTasksEndpoint.CronTaskDescriptor; +import org.springframework.boot.actuate.scheduling.ScheduledTasksEndpoint.CustomTriggerTaskDescriptor; +import org.springframework.boot.actuate.scheduling.ScheduledTasksEndpoint.FixedDelayTaskDescriptor; +import org.springframework.boot.actuate.scheduling.ScheduledTasksEndpoint.FixedRateTaskDescriptor; +import org.springframework.boot.actuate.scheduling.ScheduledTasksEndpoint.ScheduledTasksDescriptor; import org.springframework.boot.actuate.scheduling.ScheduledTasksEndpoint.ScheduledTasksEndpointRuntimeHints; -import org.springframework.boot.actuate.scheduling.ScheduledTasksEndpoint.ScheduledTasksReport; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -65,7 +65,7 @@ class ScheduledTasksEndpointTests { assertThat(tasks.getFixedRate()).isEmpty(); assertThat(tasks.getCustom()).isEmpty(); assertThat(tasks.getCron()).hasSize(1); - CronTaskDescription description = (CronTaskDescription) tasks.getCron().get(0); + CronTaskDescriptor description = (CronTaskDescriptor) tasks.getCron().get(0); assertThat(description.getExpression()).isEqualTo("0 0 0/3 1/1 * ?"); assertThat(description.getRunnable().getTarget()).isEqualTo(CronScheduledMethod.class.getName() + ".cron"); }); @@ -78,7 +78,7 @@ class ScheduledTasksEndpointTests { assertThat(tasks.getFixedDelay()).isEmpty(); assertThat(tasks.getCustom()).isEmpty(); assertThat(tasks.getCron()).hasSize(1); - CronTaskDescription description = (CronTaskDescription) tasks.getCron().get(0); + CronTaskDescriptor description = (CronTaskDescriptor) tasks.getCron().get(0); assertThat(description.getExpression()).isEqualTo("0 0 0/6 1/1 * ?"); assertThat(description.getRunnable().getTarget()).isEqualTo(CronTriggerRunnable.class.getName()); }); @@ -91,7 +91,7 @@ class ScheduledTasksEndpointTests { assertThat(tasks.getFixedRate()).isEmpty(); assertThat(tasks.getCustom()).isEmpty(); assertThat(tasks.getFixedDelay()).hasSize(1); - FixedDelayTaskDescription description = (FixedDelayTaskDescription) tasks.getFixedDelay().get(0); + FixedDelayTaskDescriptor description = (FixedDelayTaskDescriptor) tasks.getFixedDelay().get(0); assertThat(description.getInitialDelay()).isEqualTo(2); assertThat(description.getInterval()).isEqualTo(1); assertThat(description.getRunnable().getTarget()) @@ -106,7 +106,7 @@ class ScheduledTasksEndpointTests { assertThat(tasks.getFixedRate()).isEmpty(); assertThat(tasks.getCustom()).isEmpty(); assertThat(tasks.getFixedDelay()).hasSize(1); - FixedDelayTaskDescription description = (FixedDelayTaskDescription) tasks.getFixedDelay().get(0); + FixedDelayTaskDescriptor description = (FixedDelayTaskDescriptor) tasks.getFixedDelay().get(0); assertThat(description.getInitialDelay()).isEqualTo(2000); assertThat(description.getInterval()).isEqualTo(1000); assertThat(description.getRunnable().getTarget()).isEqualTo(FixedDelayTriggerRunnable.class.getName()); @@ -120,7 +120,7 @@ class ScheduledTasksEndpointTests { assertThat(tasks.getFixedDelay()).isEmpty(); assertThat(tasks.getCustom()).isEmpty(); assertThat(tasks.getFixedRate()).hasSize(1); - FixedRateTaskDescription description = (FixedRateTaskDescription) tasks.getFixedRate().get(0); + FixedRateTaskDescriptor description = (FixedRateTaskDescriptor) tasks.getFixedRate().get(0); assertThat(description.getInitialDelay()).isEqualTo(4); assertThat(description.getInterval()).isEqualTo(3); assertThat(description.getRunnable().getTarget()) @@ -135,7 +135,7 @@ class ScheduledTasksEndpointTests { assertThat(tasks.getFixedDelay()).isEmpty(); assertThat(tasks.getCustom()).isEmpty(); assertThat(tasks.getFixedRate()).hasSize(1); - FixedRateTaskDescription description = (FixedRateTaskDescription) tasks.getFixedRate().get(0); + FixedRateTaskDescriptor description = (FixedRateTaskDescriptor) tasks.getFixedRate().get(0); assertThat(description.getInitialDelay()).isEqualTo(3000); assertThat(description.getInterval()).isEqualTo(2000); assertThat(description.getRunnable().getTarget()).isEqualTo(FixedRateTriggerRunnable.class.getName()); @@ -149,7 +149,7 @@ class ScheduledTasksEndpointTests { assertThat(tasks.getFixedDelay()).isEmpty(); assertThat(tasks.getFixedRate()).isEmpty(); assertThat(tasks.getCustom()).hasSize(1); - CustomTriggerTaskDescription description = (CustomTriggerTaskDescription) tasks.getCustom().get(0); + CustomTriggerTaskDescriptor description = (CustomTriggerTaskDescriptor) tasks.getCustom().get(0); assertThat(description.getRunnable().getTarget()).isEqualTo(CustomTriggerRunnable.class.getName()); assertThat(description.getTrigger()).isEqualTo(CustomTriggerTask.trigger.toString()); }); @@ -159,8 +159,8 @@ class ScheduledTasksEndpointTests { void shouldRegisterHints() { RuntimeHints runtimeHints = new RuntimeHints(); new ScheduledTasksEndpointRuntimeHints().registerHints(runtimeHints, getClass().getClassLoader()); - Set> bindingTypes = Set.of(FixedRateTaskDescription.class, FixedDelayTaskDescription.class, - CronTaskDescription.class, CustomTriggerTaskDescription.class); + Set> bindingTypes = Set.of(FixedRateTaskDescriptor.class, FixedDelayTaskDescriptor.class, + CronTaskDescriptor.class, CustomTriggerTaskDescriptor.class); for (Class bindingType : bindingTypes) { assertThat(RuntimeHintsPredicates.reflection().onType(bindingType) .withMemberCategories(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, MemberCategory.DECLARED_FIELDS)) @@ -168,7 +168,7 @@ class ScheduledTasksEndpointTests { } } - private void run(Class configuration, Consumer consumer) { + private void run(Class configuration, Consumer consumer) { this.contextRunner.withUserConfiguration(configuration) .run((context) -> consumer.accept(context.getBean(ScheduledTasksEndpoint.class).scheduledTasks())); } diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/startup/StartupEndpointTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/startup/StartupEndpointTests.java index 206d6151bdf..b448d590e3c 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/startup/StartupEndpointTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/startup/StartupEndpointTests.java @@ -26,8 +26,8 @@ import org.springframework.aot.hint.RuntimeHints; import org.springframework.aot.hint.TypeReference; import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; import org.springframework.boot.SpringBootVersion; +import org.springframework.boot.actuate.startup.StartupEndpoint.StartupDescriptor; import org.springframework.boot.actuate.startup.StartupEndpoint.StartupEndpointRuntimeHints; -import org.springframework.boot.actuate.startup.StartupEndpoint.StartupResponse; import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.annotation.Bean; @@ -49,7 +49,7 @@ class StartupEndpointTests { void startupEventsAreFound() { BufferingApplicationStartup applicationStartup = new BufferingApplicationStartup(256); testStartupEndpoint(applicationStartup, (startupEndpoint) -> { - StartupResponse startup = startupEndpoint.startup(); + StartupDescriptor startup = startupEndpoint.startup(); assertThat(startup.getSpringBootVersion()).isEqualTo(SpringBootVersion.getVersion()); assertThat(startup.getTimeline().getStartTime()) .isEqualTo(applicationStartup.getBufferedTimeline().getStartTime()); @@ -60,7 +60,7 @@ class StartupEndpointTests { void bufferWithGetIsNotDrained() { BufferingApplicationStartup applicationStartup = new BufferingApplicationStartup(256); testStartupEndpoint(applicationStartup, (startupEndpoint) -> { - StartupResponse startup = startupEndpoint.startupSnapshot(); + StartupDescriptor startup = startupEndpoint.startupSnapshot(); assertThat(startup.getTimeline().getEvents()).isNotEmpty(); assertThat(applicationStartup.getBufferedTimeline().getEvents()).isNotEmpty(); }); @@ -70,7 +70,7 @@ class StartupEndpointTests { void bufferWithPostIsDrained() { BufferingApplicationStartup applicationStartup = new BufferingApplicationStartup(256); testStartupEndpoint(applicationStartup, (startupEndpoint) -> { - StartupResponse startup = startupEndpoint.startup(); + StartupDescriptor startup = startupEndpoint.startup(); assertThat(startup.getTimeline().getEvents()).isNotEmpty(); assertThat(applicationStartup.getBufferedTimeline().getEvents()).isEmpty(); }); diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/web/mappings/MappingsEndpointTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/web/mappings/MappingsEndpointTests.java index 541c77ea17a..2f99876a53a 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/web/mappings/MappingsEndpointTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/web/mappings/MappingsEndpointTests.java @@ -28,8 +28,8 @@ import jakarta.servlet.ServletException; import jakarta.servlet.ServletRegistration; import org.junit.jupiter.api.Test; -import org.springframework.boot.actuate.web.mappings.MappingsEndpoint.ApplicationMappings; -import org.springframework.boot.actuate.web.mappings.MappingsEndpoint.ContextMappings; +import org.springframework.boot.actuate.web.mappings.MappingsEndpoint.ApplicationMappingsDescriptor; +import org.springframework.boot.actuate.web.mappings.MappingsEndpoint.ContextMappingsDescriptor; import org.springframework.boot.actuate.web.mappings.reactive.DispatcherHandlerMappingDescription; import org.springframework.boot.actuate.web.mappings.reactive.DispatcherHandlersMappingDescriptionProvider; import org.springframework.boot.actuate.web.mappings.servlet.DispatcherServletMappingDescription; @@ -79,7 +79,7 @@ class MappingsEndpointTests { Supplier contextSupplier = prepareContextSupplier(); new WebApplicationContextRunner(contextSupplier) .withUserConfiguration(EndpointConfiguration.class, ServletWebConfiguration.class).run((context) -> { - ContextMappings contextMappings = contextMappings(context); + ContextMappingsDescriptor contextMappings = contextMappings(context); assertThat(contextMappings.getParentId()).isNull(); assertThat(contextMappings.getMappings()).containsOnlyKeys("dispatcherServlets", "servletFilters", "servlets"); @@ -101,7 +101,7 @@ class MappingsEndpointTests { Supplier contextSupplier = prepareContextSupplier(); new WebApplicationContextRunner(contextSupplier).withUserConfiguration(EndpointConfiguration.class, ServletWebConfiguration.class, PathPatternParserConfiguration.class).run((context) -> { - ContextMappings contextMappings = contextMappings(context); + ContextMappingsDescriptor contextMappings = contextMappings(context); assertThat(contextMappings.getParentId()).isNull(); assertThat(contextMappings.getMappings()).containsOnlyKeys("dispatcherServlets", "servletFilters", "servlets"); @@ -123,7 +123,7 @@ class MappingsEndpointTests { Supplier contextSupplier = prepareContextSupplier(); new WebApplicationContextRunner(contextSupplier).withUserConfiguration(EndpointConfiguration.class, ServletWebConfiguration.class, CustomDispatcherServletConfiguration.class).run((context) -> { - ContextMappings contextMappings = contextMappings(context); + ContextMappingsDescriptor contextMappings = contextMappings(context); Map> dispatcherServlets = mappings( contextMappings, "dispatcherServlets"); assertThat(dispatcherServlets).containsOnlyKeys("dispatcherServlet", @@ -156,7 +156,7 @@ class MappingsEndpointTests { void reactiveWebMappings() { new ReactiveWebApplicationContextRunner() .withUserConfiguration(EndpointConfiguration.class, ReactiveWebConfiguration.class).run((context) -> { - ContextMappings contextMappings = contextMappings(context); + ContextMappingsDescriptor contextMappings = contextMappings(context); assertThat(contextMappings.getParentId()).isNull(); assertThat(contextMappings.getMappings()).containsOnlyKeys("dispatcherHandlers"); Map> dispatcherHandlers = mappings( @@ -167,14 +167,14 @@ class MappingsEndpointTests { }); } - private ContextMappings contextMappings(ApplicationContext context) { - ApplicationMappings applicationMappings = context.getBean(MappingsEndpoint.class).mappings(); + private ContextMappingsDescriptor contextMappings(ApplicationContext context) { + ApplicationMappingsDescriptor applicationMappings = context.getBean(MappingsEndpoint.class).mappings(); assertThat(applicationMappings.getContexts()).containsOnlyKeys(context.getId()); return applicationMappings.getContexts().get(context.getId()); } @SuppressWarnings("unchecked") - private T mappings(ContextMappings contextMappings, String key) { + private T mappings(ContextMappingsDescriptor contextMappings, String key) { return (T) contextMappings.getMappings().get(key); }