Move code from spring-boot-actuator to spring-boot-integration
This commit is contained in:
committed by
Phillip Webb
parent
108ee378ff
commit
792314c2ec
@@ -0,0 +1,93 @@
|
||||
/*
|
||||
* Copyright 2012-2025 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.integration.actuate.endpoint;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.boot.actuate.endpoint.OperationResponseBody;
|
||||
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
|
||||
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
|
||||
import org.springframework.boot.actuate.endpoint.annotation.WriteOperation;
|
||||
import org.springframework.integration.graph.Graph;
|
||||
import org.springframework.integration.graph.IntegrationGraphServer;
|
||||
import org.springframework.integration.graph.IntegrationNode;
|
||||
import org.springframework.integration.graph.LinkNode;
|
||||
|
||||
/**
|
||||
* {@link Endpoint @Endpoint} to expose the Spring Integration graph.
|
||||
*
|
||||
* @author Tim Ysewyn
|
||||
* @since 4.0.0
|
||||
*/
|
||||
@Endpoint(id = "integrationgraph")
|
||||
public class IntegrationGraphEndpoint {
|
||||
|
||||
private final IntegrationGraphServer graphServer;
|
||||
|
||||
/**
|
||||
* Create a new {@code IntegrationGraphEndpoint} instance that exposes a graph
|
||||
* containing all the Spring Integration components in the given
|
||||
* {@link IntegrationGraphServer}.
|
||||
* @param graphServer the integration graph server
|
||||
*/
|
||||
public IntegrationGraphEndpoint(IntegrationGraphServer graphServer) {
|
||||
this.graphServer = graphServer;
|
||||
}
|
||||
|
||||
@ReadOperation
|
||||
public GraphDescriptor graph() {
|
||||
return new GraphDescriptor(this.graphServer.getGraph());
|
||||
}
|
||||
|
||||
@WriteOperation
|
||||
public void rebuild() {
|
||||
this.graphServer.rebuild();
|
||||
}
|
||||
|
||||
/**
|
||||
* Description of a {@link Graph}.
|
||||
*/
|
||||
public static class GraphDescriptor implements OperationResponseBody {
|
||||
|
||||
private final Map<String, Object> contentDescriptor;
|
||||
|
||||
private final Collection<IntegrationNode> nodes;
|
||||
|
||||
private final Collection<LinkNode> links;
|
||||
|
||||
GraphDescriptor(Graph graph) {
|
||||
this.contentDescriptor = graph.getContentDescriptor();
|
||||
this.nodes = graph.getNodes();
|
||||
this.links = graph.getLinks();
|
||||
}
|
||||
|
||||
public Map<String, Object> getContentDescriptor() {
|
||||
return this.contentDescriptor;
|
||||
}
|
||||
|
||||
public Collection<IntegrationNode> getNodes() {
|
||||
return this.nodes;
|
||||
}
|
||||
|
||||
public Collection<LinkNode> getLinks() {
|
||||
return this.links;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright 2012-2025 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Actuator endpoint for Spring Integration.
|
||||
*/
|
||||
package org.springframework.boot.integration.actuate.endpoint;
|
||||
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
* Copyright 2012-2025 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.integration;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.boot.integration.actuate.endpoint.IntegrationGraphEndpoint;
|
||||
import org.springframework.boot.integration.actuate.endpoint.IntegrationGraphEndpoint.GraphDescriptor;
|
||||
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 static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.BDDMockito.given;
|
||||
import static org.mockito.BDDMockito.then;
|
||||
import static org.mockito.Mockito.mock;
|
||||
|
||||
/**
|
||||
* Tests for {@link IntegrationGraphEndpoint}.
|
||||
*
|
||||
* @author Tim Ysewyn
|
||||
* @author Moritz Halbritter
|
||||
*/
|
||||
class IntegrationGraphEndpointTests {
|
||||
|
||||
private final IntegrationGraphServer server = mock(IntegrationGraphServer.class);
|
||||
|
||||
private final IntegrationGraphEndpoint endpoint = new IntegrationGraphEndpoint(this.server);
|
||||
|
||||
@Test
|
||||
void readOperationShouldReturnGraph() {
|
||||
Graph graph = mock(Graph.class);
|
||||
Map<String, Object> contentDescriptor = new LinkedHashMap<>();
|
||||
Collection<IntegrationNode> nodes = new ArrayList<>();
|
||||
Collection<LinkNode> links = new ArrayList<>();
|
||||
given(graph.getContentDescriptor()).willReturn(contentDescriptor);
|
||||
given(graph.getNodes()).willReturn(nodes);
|
||||
given(graph.getLinks()).willReturn(links);
|
||||
given(this.server.getGraph()).willReturn(graph);
|
||||
GraphDescriptor descriptor = this.endpoint.graph();
|
||||
then(this.server).should().getGraph();
|
||||
assertThat(descriptor.getContentDescriptor()).isSameAs(contentDescriptor);
|
||||
assertThat(descriptor.getNodes()).isSameAs(nodes);
|
||||
assertThat(descriptor.getLinks()).isSameAs(links);
|
||||
}
|
||||
|
||||
@Test
|
||||
void writeOperationShouldRebuildGraph() {
|
||||
this.endpoint.rebuild();
|
||||
then(this.server).should().rebuild();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
* Copyright 2012-2025 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.integration;
|
||||
|
||||
import org.springframework.boot.actuate.endpoint.web.test.WebEndpointTest;
|
||||
import org.springframework.boot.integration.actuate.endpoint.IntegrationGraphEndpoint;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.integration.config.EnableIntegration;
|
||||
import org.springframework.integration.graph.IntegrationGraphServer;
|
||||
import org.springframework.test.web.reactive.server.WebTestClient;
|
||||
|
||||
/**
|
||||
* Integration tests for {@link IntegrationGraphEndpoint} exposed by Jersey, Spring MVC,
|
||||
* and WebFlux.
|
||||
*
|
||||
* @author Tim Ysewyn
|
||||
*/
|
||||
class IntegrationGraphEndpointWebIntegrationTests {
|
||||
|
||||
@WebEndpointTest
|
||||
void graph(WebTestClient client) {
|
||||
client.get()
|
||||
.uri("/actuator/integrationgraph")
|
||||
.accept(MediaType.APPLICATION_JSON)
|
||||
.exchange()
|
||||
.expectStatus()
|
||||
.isOk()
|
||||
.expectBody()
|
||||
.jsonPath("contentDescriptor.providerVersion")
|
||||
.isNotEmpty()
|
||||
.jsonPath("contentDescriptor.providerFormatVersion")
|
||||
.isEqualTo(1.2f)
|
||||
.jsonPath("contentDescriptor.provider")
|
||||
.isEqualTo("spring-integration");
|
||||
}
|
||||
|
||||
@WebEndpointTest
|
||||
void rebuild(WebTestClient client) {
|
||||
client.post()
|
||||
.uri("/actuator/integrationgraph")
|
||||
.accept(MediaType.APPLICATION_JSON)
|
||||
.exchange()
|
||||
.expectStatus()
|
||||
.isNoContent();
|
||||
}
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@EnableIntegration
|
||||
static class TestConfiguration {
|
||||
|
||||
@Bean
|
||||
IntegrationGraphEndpoint endpoint(IntegrationGraphServer integrationGraphServer) {
|
||||
return new IntegrationGraphEndpoint(integrationGraphServer);
|
||||
}
|
||||
|
||||
@Bean
|
||||
IntegrationGraphServer integrationGraphServer() {
|
||||
return new IntegrationGraphServer();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user