Search in sources :

Example 1 with ClusterSearchResultsEntity

use of org.apache.nifi.web.api.entity.ClusterSearchResultsEntity in project nifi by apache.

the class FlowResource method searchCluster.

// --------------------
// search cluster nodes
// --------------------
/**
 * Searches the cluster for a node with a given address.
 *
 * @param value Search value that will be matched against a node's address
 * @return Nodes that match the specified criteria
 */
@GET
@Consumes(MediaType.WILDCARD)
@Produces(MediaType.APPLICATION_JSON)
@Path("cluster/search-results")
@ApiOperation(value = "Searches the cluster for a node with the specified address", notes = NON_GUARANTEED_ENDPOINT, response = ClusterSearchResultsEntity.class, authorizations = { @Authorization(value = "Read - /flow") })
@ApiResponses(value = { @ApiResponse(code = 400, message = "NiFi was unable to complete the request because it was invalid. The request should not be retried without modification."), @ApiResponse(code = 401, message = "Client could not be authenticated."), @ApiResponse(code = 403, message = "Client is not authorized to make this request."), @ApiResponse(code = 404, message = "The specified resource could not be found."), @ApiResponse(code = 409, message = "The request was valid but NiFi was not in the appropriate state to process it. Retrying the same request later may be successful.") })
public Response searchCluster(@ApiParam(value = "Node address to search for.", required = true) @QueryParam("q") @DefaultValue(StringUtils.EMPTY) String value) {
    authorizeFlow();
    // ensure connected to the cluster
    if (!isConnectedToCluster()) {
        throw new IllegalClusterResourceRequestException("Only a node connected to a cluster can process the request.");
    }
    final List<NodeSearchResultDTO> nodeMatches = new ArrayList<>();
    // get the nodes in the cluster
    final ClusterDTO cluster = serviceFacade.getCluster();
    // check each to see if it matches the search term
    for (NodeDTO node : cluster.getNodes()) {
        // ensure the node is connected
        if (!NodeConnectionState.CONNECTED.name().equals(node.getStatus())) {
            continue;
        }
        // determine the current nodes address
        final String address = node.getAddress() + ":" + node.getApiPort();
        // count the node if there is no search or it matches the address
        if (StringUtils.isBlank(value) || StringUtils.containsIgnoreCase(address, value)) {
            final NodeSearchResultDTO nodeMatch = new NodeSearchResultDTO();
            nodeMatch.setId(node.getNodeId());
            nodeMatch.setAddress(address);
            nodeMatches.add(nodeMatch);
        }
    }
    // build the response
    ClusterSearchResultsEntity results = new ClusterSearchResultsEntity();
    results.setNodeResults(nodeMatches);
    // generate an 200 - OK response
    return noCache(Response.ok(results)).build();
}
Also used : ClusterSearchResultsEntity(org.apache.nifi.web.api.entity.ClusterSearchResultsEntity) IllegalClusterResourceRequestException(org.apache.nifi.web.IllegalClusterResourceRequestException) NodeSearchResultDTO(org.apache.nifi.web.api.dto.search.NodeSearchResultDTO) ClusterDTO(org.apache.nifi.web.api.dto.ClusterDTO) ArrayList(java.util.ArrayList) NodeDTO(org.apache.nifi.web.api.dto.NodeDTO) Path(javax.ws.rs.Path) Consumes(javax.ws.rs.Consumes) Produces(javax.ws.rs.Produces) GET(javax.ws.rs.GET) ApiOperation(io.swagger.annotations.ApiOperation) ApiResponses(io.swagger.annotations.ApiResponses)

Aggregations

ApiOperation (io.swagger.annotations.ApiOperation)1 ApiResponses (io.swagger.annotations.ApiResponses)1 ArrayList (java.util.ArrayList)1 Consumes (javax.ws.rs.Consumes)1 GET (javax.ws.rs.GET)1 Path (javax.ws.rs.Path)1 Produces (javax.ws.rs.Produces)1 IllegalClusterResourceRequestException (org.apache.nifi.web.IllegalClusterResourceRequestException)1 ClusterDTO (org.apache.nifi.web.api.dto.ClusterDTO)1 NodeDTO (org.apache.nifi.web.api.dto.NodeDTO)1 NodeSearchResultDTO (org.apache.nifi.web.api.dto.search.NodeSearchResultDTO)1 ClusterSearchResultsEntity (org.apache.nifi.web.api.entity.ClusterSearchResultsEntity)1