/** * Gets the system diagnostics for this NiFi instance. * * @return A systemDiagnosticsEntity. * @throws InterruptedException if interrupted */ @GET @Consumes(MediaType.WILDCARD) @Produces(MediaType.APPLICATION_JSON) @ApiOperation( value = "Gets the diagnostics for the system NiFi is running on", response = SystemDiagnosticsEntity.class, authorizations = {@Authorization(value = "Read - /system", type = "")}) @ApiResponses( value = { @ApiResponse(code = 401, message = "Client could not be authenticated."), @ApiResponse(code = 403, message = "Client is not authorized to make this request."), }) public Response getSystemDiagnostics( @ApiParam( value = "Whether or not to include the breakdown per node. Optional, defaults to false", required = false) @QueryParam("nodewise") @DefaultValue(NODEWISE) final Boolean nodewise, @ApiParam(value = "The id of the node where to get the status.", required = false) @QueryParam("clusterNodeId") final String clusterNodeId) throws InterruptedException { authorizeSystem(); // ensure a valid request if (Boolean.TRUE.equals(nodewise) && clusterNodeId != null) { throw new IllegalArgumentException( "Nodewise requests cannot be directed at a specific node."); } if (isReplicateRequest()) { // determine where this request should be sent if (clusterNodeId == null) { final NodeResponse nodeResponse; // Determine whether we should replicate only to the cluster coordinator, or if we should // replicate directly // to the cluster nodes themselves. if (getReplicationTarget() == ReplicationTarget.CLUSTER_NODES) { nodeResponse = getRequestReplicator() .replicate( HttpMethod.GET, getAbsolutePath(), getRequestParameters(), getHeaders()) .awaitMergedResponse(); } else { nodeResponse = getRequestReplicator() .forwardToCoordinator( getClusterCoordinatorNode(), HttpMethod.GET, getAbsolutePath(), getRequestParameters(), getHeaders()) .awaitMergedResponse(); } final SystemDiagnosticsEntity entity = (SystemDiagnosticsEntity) nodeResponse.getUpdatedEntity(); // ensure there is an updated entity (result of merging) and prune the response as necessary if (entity != null && !nodewise) { entity.getSystemDiagnostics().setNodeSnapshots(null); } return nodeResponse.getResponse(); } else { return replicate(HttpMethod.GET); } } final SystemDiagnosticsDTO systemDiagnosticsDto = serviceFacade.getSystemDiagnostics(); // create the response final SystemDiagnosticsEntity entity = new SystemDiagnosticsEntity(); entity.setSystemDiagnostics(systemDiagnosticsDto); // generate the response return clusterContext(generateOkResponse(entity)).build(); }