mirror of https://github.com/apache/nifi.git
NIFI-6715: Metrics of removed/renamed components continues to remain in PrometheusReportingTask
Signed-off-by: Pierre Villard <pierre.villard.fr@gmail.com> This closes #3766.
This commit is contained in:
parent
261a395992
commit
a0a66839c4
|
@ -17,8 +17,11 @@
|
|||
|
||||
package org.apache.nifi.reporting.prometheus.api;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.util.Map;
|
||||
|
||||
import io.prometheus.client.SimpleCollector;
|
||||
import org.apache.nifi.components.AllowableValue;
|
||||
import org.apache.nifi.controller.status.ConnectionStatus;
|
||||
import org.apache.nifi.controller.status.PortStatus;
|
||||
|
@ -254,6 +257,18 @@ public class PrometheusMetricsUtil {
|
|||
final String componentId = status.getId();
|
||||
final String componentName = status.getName();
|
||||
|
||||
// Clear all collectors to deal with removed/renamed components
|
||||
try {
|
||||
for (final Field field : PrometheusMetricsUtil.class.getDeclaredFields()) {
|
||||
if (Modifier.isStatic(field.getModifiers()) && (field.get(null) instanceof SimpleCollector)) {
|
||||
SimpleCollector sc = (SimpleCollector)(field.get(null));
|
||||
sc.clear();
|
||||
}
|
||||
}
|
||||
} catch (IllegalAccessException e) {
|
||||
// ignore
|
||||
}
|
||||
|
||||
AMOUNT_FLOWFILES_SENT.labels(instanceId, componentType, componentName, componentId, parentPGId).set(status.getFlowFilesSent());
|
||||
AMOUNT_FLOWFILES_TRANSFERRED.labels(instanceId, componentType, componentName, componentId, parentPGId).set(status.getFlowFilesTransferred());
|
||||
AMOUNT_FLOWFILES_RECEIVED.labels(instanceId, componentType, componentName, componentId, parentPGId).set(status.getFlowFilesReceived());
|
||||
|
|
|
@ -91,6 +91,26 @@ public class TestPrometheusReportingTask {
|
|||
reportingContextStub.getEventAccess().setProcessGroupStatus(rootGroupStatus);
|
||||
testedReportingTask.onTrigger(reportingContextStub);
|
||||
|
||||
String content = getMetrics();
|
||||
Assert.assertTrue(content.contains(
|
||||
"nifi_amount_flowfiles_received{instance=\"localhost\",component_type=\"RootProcessGroup\",component_name=\"root\",component_id=\"1234\",parent_id=\"\",} 5.0"));
|
||||
Assert.assertTrue(content.contains(
|
||||
"nifi_amount_threads_active{instance=\"localhost\",component_type=\"RootProcessGroup\",component_name=\"root\",component_id=\"1234\",parent_id=\"\",} 5.0"));
|
||||
|
||||
// Rename the component
|
||||
rootGroupStatus.setName("rootroot");
|
||||
content = getMetrics();
|
||||
Assert.assertFalse(content.contains(
|
||||
"nifi_amount_flowfiles_received{instance=\"localhost\",component_type=\"RootProcessGroup\",component_name=\"root\",component_id=\"1234\",parent_id=\"\",} 5.0"));
|
||||
Assert.assertFalse(content.contains(
|
||||
"nifi_amount_threads_active{instance=\"localhost\",component_type=\"RootProcessGroup\",component_name=\"root\",component_id=\"1234\",parent_id=\"\",} 5.0"));
|
||||
Assert.assertTrue(content.contains(
|
||||
"nifi_amount_flowfiles_received{instance=\"localhost\",component_type=\"RootProcessGroup\",component_name=\"rootroot\",component_id=\"1234\",parent_id=\"\",} 5.0"));
|
||||
Assert.assertTrue(content.contains(
|
||||
"nifi_amount_threads_active{instance=\"localhost\",component_type=\"RootProcessGroup\",component_name=\"rootroot\",component_id=\"1234\",parent_id=\"\",} 5.0"));
|
||||
}
|
||||
|
||||
private String getMetrics() throws IOException {
|
||||
URL url = new URL("http://localhost:9092/metrics");
|
||||
HttpURLConnection con = (HttpURLConnection) url.openConnection();
|
||||
con.setRequestMethod("GET");
|
||||
|
@ -102,10 +122,8 @@ public class TestPrometheusReportingTask {
|
|||
HttpResponse response = client.execute(request);
|
||||
HttpEntity entity = response.getEntity();
|
||||
String content = EntityUtils.toString(entity);
|
||||
Assert.assertEquals(true, content.contains(
|
||||
"nifi_amount_flowfiles_received{instance=\"localhost\",component_type=\"RootProcessGroup\",component_name=\"root\",component_id=\"1234\",parent_id=\"\",} 5.0"));
|
||||
Assert.assertEquals(true, content.contains(
|
||||
"nifi_amount_threads_active{instance=\"localhost\",component_type=\"RootProcessGroup\",component_name=\"root\",component_id=\"1234\",parent_id=\"\",} 5.0"));
|
||||
|
||||
return content;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue