Add HealthEndpointGroupsRegistry and its Customizer
Prior to this commit, `HealthContributor` would be exposed under the main `HealthEndpoint` and subgroups, `HealthEndpointGroups`. Groups are driven by configuration properties and there was no way to contribute programmatically new groups. This commit introduces the `HealthEndpointGroupsRegistry` (a mutable version of `HealthEndpointGroups`) and a `HealthEndpointGroupsRegistryCustomizer`. This allows configurations to add/remove groups during Actuator auto-configuration. Closes gh-20554
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2019 the original author or authors.
|
||||
* Copyright 2012-2020 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -23,6 +23,7 @@ import org.springframework.boot.actuate.endpoint.SecurityContext;
|
||||
* by the {@link HealthEndpoint}.
|
||||
*
|
||||
* @author Phillip Webb
|
||||
* @author Brian Clozel
|
||||
* @since 2.2.0
|
||||
*/
|
||||
public interface HealthEndpointGroup {
|
||||
@@ -62,4 +63,27 @@ public interface HealthEndpointGroup {
|
||||
*/
|
||||
HttpCodeStatusMapper getHttpCodeStatusMapper();
|
||||
|
||||
/**
|
||||
* Options for showing items in responses from the {@link HealthEndpointGroup} web
|
||||
* extensions.
|
||||
*/
|
||||
enum Show {
|
||||
|
||||
/**
|
||||
* Never show the item in the response.
|
||||
*/
|
||||
NEVER,
|
||||
|
||||
/**
|
||||
* Show the item in the response when accessed by an authorized user.
|
||||
*/
|
||||
WHEN_AUTHORIZED,
|
||||
|
||||
/**
|
||||
* Always show the item in the response.
|
||||
*/
|
||||
ALWAYS
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
/*
|
||||
* Copyright 2012-2020 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.actuate.health;
|
||||
|
||||
import org.springframework.boot.actuate.health.HealthEndpointGroup.Show;
|
||||
|
||||
/**
|
||||
* A configurer for customizing an {@link HealthEndpointGroup} being built.
|
||||
*
|
||||
* @author Brian Clozel
|
||||
* @since 2.3.0
|
||||
*/
|
||||
public interface HealthEndpointGroupConfigurer {
|
||||
|
||||
/**
|
||||
* Configure the indicator endpoint ids to include in this group.
|
||||
* @param indicators the indicator endpoint ids
|
||||
* @return the configurer instance
|
||||
*/
|
||||
HealthEndpointGroupConfigurer include(String... indicators);
|
||||
|
||||
/**
|
||||
* Configure the indicator endpoint ids to exclude from this group.
|
||||
* @param indicators the indicator endpoint ids
|
||||
* @return the configurer instance
|
||||
*/
|
||||
HealthEndpointGroupConfigurer exclude(String... indicators);
|
||||
|
||||
/**
|
||||
* Configure the {@link StatusAggregator} to use for this group.
|
||||
* <p>
|
||||
* If none set, this will default to the globalmy configured {@link StatusAggregator}.
|
||||
* @param statusAggregator the status aggregator
|
||||
* @return the configurer instance
|
||||
*/
|
||||
HealthEndpointGroupConfigurer statusAggregator(StatusAggregator statusAggregator);
|
||||
|
||||
/**
|
||||
* Configure the {@link HttpCodeStatusMapper} to use for this group.
|
||||
* <p>
|
||||
* If none set, this will default to the globalmy configured
|
||||
* {@link HttpCodeStatusMapper}.
|
||||
* @param httpCodeStatusMapper the status code mapper
|
||||
* @return the configurer instance
|
||||
*/
|
||||
HealthEndpointGroupConfigurer httpCodeStatusMapper(HttpCodeStatusMapper httpCodeStatusMapper);
|
||||
|
||||
/**
|
||||
* Configure the {@link Show visbility option} for showing components of this group.
|
||||
* @param showComponents the components visibility
|
||||
* @return the configurer instance
|
||||
*/
|
||||
HealthEndpointGroupConfigurer showComponents(Show showComponents);
|
||||
|
||||
/**
|
||||
* Configure the {@link Show visbility option} for showing details of this group.
|
||||
* @param showDetails the details visibility
|
||||
* @return the configurer instance
|
||||
*/
|
||||
HealthEndpointGroupConfigurer showDetails(Show showDetails);
|
||||
|
||||
/**
|
||||
* Configure roles used to determine whether or not a user is authorized to be shown
|
||||
* details.
|
||||
* @param roles the roles
|
||||
* @return the configurer instance
|
||||
*/
|
||||
HealthEndpointGroupConfigurer roles(String... roles);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* Copyright 2012-2020 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.actuate.health;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/**
|
||||
* Builder for an {@link HealthEndpointGroups} immutable instance.
|
||||
*
|
||||
* @author Brian Clozel
|
||||
* @since 2.3.0
|
||||
*/
|
||||
public interface HealthEndpointGroupsRegistry extends HealthEndpointGroups {
|
||||
|
||||
/**
|
||||
* Add a new {@link HealthEndpointGroup}.
|
||||
* @param groupName the name of the group to add
|
||||
* @param builder the group to add
|
||||
* @return the builder instance
|
||||
*/
|
||||
HealthEndpointGroupsRegistry add(String groupName, Consumer<HealthEndpointGroupConfigurer> builder);
|
||||
|
||||
/**
|
||||
* Remove an existing {@link HealthEndpointGroup}.
|
||||
* @param groupName the name of the group to remove
|
||||
* @return the builder instance
|
||||
*/
|
||||
HealthEndpointGroupsRegistry remove(String groupName);
|
||||
|
||||
/**
|
||||
* Build an immutable {@link HealthEndpointGroups}.
|
||||
* @return the {@link HealthEndpointGroups}
|
||||
*/
|
||||
HealthEndpointGroups toGroups();
|
||||
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Copyright 2012-2020 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.actuate.health;
|
||||
|
||||
/**
|
||||
* Callback interface that can be used to customize a
|
||||
* {@link HealthEndpointGroupsRegistry}.
|
||||
*
|
||||
* @author Brian Clozel
|
||||
* @since 2.3.0
|
||||
*/
|
||||
@FunctionalInterface
|
||||
public interface HealthEndpointGroupsRegistryCustomizer {
|
||||
|
||||
/**
|
||||
* Callback to customize a {@link HealthEndpointGroupsRegistry} instance.
|
||||
* @param healthEndpointGroupsRegistry the registry to customize
|
||||
*/
|
||||
void customize(HealthEndpointGroupsRegistry healthEndpointGroupsRegistry);
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user