mattyb149 commented on a change in pull request #4156: NIFI-7273: Add flow
metrics REST endpoint with for Prometheus scraping
URL: https://github.com/apache/nifi/pull/4156#discussion_r403141431
##########
File path:
nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/FlowResource.java
##########
@@ -381,6 +388,66 @@ public Response getFlow(
return generateOkResponse(entity).build();
}
+ /**
+ * Retrieves the metrics of the entire flow.
+ *
+ * @return A flowMetricsEntity.
+ * @throws InterruptedException if interrupted
+ */
+ @GET
+ @Consumes(MediaType.WILDCARD)
+ @Produces(MediaType.WILDCARD)
+ @Path("metrics/{producer}")
+ @ApiOperation(
+ value = "Gets all metrics for the flow from a particular node",
+ response = StreamingOutput.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 getFlowMetrics(
+ @ApiParam(
+ value = "The producer for flow file metrics. Each producer
may have its own output format.",
+ required = true
+ )
+ @PathParam("producer") final String producer) throws
InterruptedException {
+
+ authorizeFlow();
+
+ if ("prometheus".equalsIgnoreCase(producer)) {
+ // get this process group flow
+ serviceFacade.generateFlowMetrics();
+ // generate a streaming response
+ final StreamingOutput response = output -> {
+ Writer writer = new BufferedWriter(new
OutputStreamWriter(output));
+ for (CollectorRegistry collectorRegistry :
PrometheusMetricsUtil.ALL_REGISTRIES) {
+ TextFormat.write004(writer,
collectorRegistry.metricFamilySamples());
+ // flush the response
+ output.flush();
+ }
+ writer.flush();
+ writer.close();
+ };
+
+ String generatedFilename = "flowMetrics_" +
System.currentTimeMillis();
+ return generateOkResponse(response)
+ .type(MediaType.TEXT_PLAIN_TYPE)
+ .header("Content-Disposition", String.format("attachment;
filename=\"%s\"", generatedFilename))
Review comment:
Good point, will change
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services