GH-1062 Polished BindingsEndpoint

This commit is contained in:
Oleg Zhurakousky
2018-02-21 20:52:31 -05:00
parent 67d310da8c
commit d761e17a68
2 changed files with 30 additions and 25 deletions

View File

@@ -34,7 +34,7 @@ import org.springframework.context.annotation.Configuration;
* @since 2.0
*/
@Configuration
@ConditionalOnClass(name = "org.springframework.boot.actuate.endpoint.annotation.Endpoint")
@ConditionalOnClass(name = {"org.springframework.boot.actuate.endpoint.annotation.Endpoint"})
@ConditionalOnBean(BindingService.class)
@AutoConfigureAfter(EndpointAutoConfiguration.class)
public class BindingsEndpointAutoConfiguration {

View File

@@ -20,7 +20,6 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.DirectFieldAccessor;
@@ -32,6 +31,8 @@ import org.springframework.cloud.stream.binding.InputBindingLifecycle;
import org.springframework.util.Assert;
/**
*
* Actuator endpoint for binding control
*
* @author Oleg Zhurakousky
*
@@ -43,20 +44,23 @@ public class BindingsEndpoint {
static final String BASE_ENPOINT_ID = "bindings";
static final String START_ENPOINT_ID = BASE_ENPOINT_ID + "/" + "start/{name}";
static final String START_ENPOINT_ID = BASE_ENPOINT_ID + "/start/{name}";
static final String STOP_ENPOINT_ID = BASE_ENPOINT_ID + "/" + "stop/{name}";
static final String STOP_ENPOINT_ID = BASE_ENPOINT_ID + "/stop/{name}";
private final List<InputBindingLifecycle> inputBindingLifecycles;
private final ObjectMapper objectMapper;
public BindingsEndpoint(List<InputBindingLifecycle> inputBindingLifecycles) {
Assert.notEmpty(inputBindingLifecycles, "'inputBindingLifecycles' must not be null or empty");
this.inputBindingLifecycles = inputBindingLifecycles;
this.objectMapper = new ObjectMapper();
}
@ReadOperation
public List<Object> bindings() {
return new ObjectMapper().convertValue(this.gatherInputBindings(), new TypeReference<List<Object>>() {});
public List<?> bindings() {
return this.objectMapper.convertValue(this.gatherInputBindings(), List.class);
}
public StopEndpoint getStopEndpoint() {
@@ -68,28 +72,32 @@ public class BindingsEndpoint {
}
@SuppressWarnings("unchecked")
private List<Binding<Object>> gatherInputBindings() {
List<Binding<Object>> inputBindings = new ArrayList<>();
for (InputBindingLifecycle inputBindingLifecycle : inputBindingLifecycles) {
Collection<Binding<Object>> lifecycleInputBindings =
(Collection<Binding<Object>>) new DirectFieldAccessor(inputBindingLifecycle).getPropertyValue("inputBindings");
private List<Binding<?>> gatherInputBindings() {
List<Binding<?>> inputBindings = new ArrayList<>();
for (InputBindingLifecycle inputBindingLifecycle : this.inputBindingLifecycles) {
Collection<Binding<?>> lifecycleInputBindings =
(Collection<Binding<?>>) new DirectFieldAccessor(inputBindingLifecycle).getPropertyValue("inputBindings");
inputBindings.addAll(lifecycleInputBindings);
}
return inputBindings;
}
private Binding<?> locateBinding(String name) {
return BindingsEndpoint.this.gatherInputBindings().stream()
.filter(binding -> name.equals(binding.getName()))
.findFirst()
.orElse(null);
}
@Endpoint(id = BindingsEndpoint.STOP_ENPOINT_ID)
public class StopEndpoint {
@WriteOperation
public boolean stop(String name) {
List<Binding<Object>> inputBindings = BindingsEndpoint.this.gatherInputBindings();
for (Binding<Object> binding : inputBindings) {
if (name.equals(binding.getName())) {
binding.stop();
return true;
}
Binding<?> binding = BindingsEndpoint.this.locateBinding(name);
if (binding != null) {
binding.stop();
}
return false;
return binding != null;
}
}
@@ -97,14 +105,11 @@ public class BindingsEndpoint {
public class StartEndpoint {
@WriteOperation
public boolean start(String name) {
List<Binding<Object>> inputBindings = BindingsEndpoint.this.gatherInputBindings();
for (Binding<Object> binding : inputBindings) {
if (name.equals(binding.getName())) {
binding.start();
return true;
}
Binding<?> binding = BindingsEndpoint.this.locateBinding(name);
if (binding != null) {
binding.start();
}
return false;
return binding != null;
}
}