mirror of
https://github.com/apache/nifi.git
synced 2025-02-07 10:38:33 +00:00
NIFI-7942 Fixing ordering issue when counter based metrics are added by component
Signed-off-by: Pierre Villard <pierre.villard.fr@gmail.com> This closes #4621.
This commit is contained in:
parent
718b77c7c4
commit
c8ea7523ef
@ -28,9 +28,11 @@ import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class StatusHistoryUtil {
|
||||
|
||||
@ -76,13 +78,24 @@ public class StatusHistoryUtil {
|
||||
}
|
||||
|
||||
public static List<StatusDescriptorDTO> createFieldDescriptorDtos(final Collection<MetricDescriptor<?>> metricDescriptors) {
|
||||
final StatusDescriptorDTO[] result = new StatusDescriptorDTO[metricDescriptors.size()];
|
||||
final StatusDescriptorDTO[] standardMetricDescriptors = new StatusDescriptorDTO[metricDescriptors.size()];
|
||||
final List<StatusDescriptorDTO> counterMetricDescriptors = new LinkedList<>();
|
||||
|
||||
for (final MetricDescriptor<?> metricDescriptor : metricDescriptors) {
|
||||
result[metricDescriptor.getMetricIdentifier()] = createStatusDescriptorDto(metricDescriptor);
|
||||
if (metricDescriptor instanceof StandardMetricDescriptor) {
|
||||
standardMetricDescriptors[metricDescriptor.getMetricIdentifier()] = createStatusDescriptorDto(metricDescriptor);
|
||||
} else if (metricDescriptor instanceof CounterMetricDescriptor) {
|
||||
counterMetricDescriptors.add(createStatusDescriptorDto(metricDescriptor));
|
||||
} else {
|
||||
throw new IllegalArgumentException("Unknown metric descriptor type: " + metricDescriptor.getClass().getName());
|
||||
}
|
||||
}
|
||||
|
||||
return Arrays.asList(result);
|
||||
// Ordered standard metric descriptors are added first than counter metric descriptors in the order of appearance.
|
||||
final List<StatusDescriptorDTO> result = new ArrayList<>(metricDescriptors.size());
|
||||
result.addAll(Arrays.asList(standardMetricDescriptors).stream().filter(i -> i != null).collect(Collectors.toList()));
|
||||
result.addAll(counterMetricDescriptors);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static List<StatusDescriptorDTO> createFieldDescriptorDtos(final StatusHistory statusHistory) {
|
||||
|
@ -71,4 +71,30 @@ public class StatusHistoryUtilTest {
|
||||
// then
|
||||
Assert.assertEquals(expected, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateFieldDescriptorDtosWhenCounterTypeAppears() {
|
||||
// given
|
||||
final Collection<MetricDescriptor<?>> metricDescriptors = Arrays.asList(
|
||||
new CounterMetricDescriptor<>("fieldCounter1", "FieldCounter1", "Field Counter 1", MetricDescriptor.Formatter.COUNT, __ -> 3L),
|
||||
new StandardMetricDescriptor<>(() -> 1, "field2", "Field2", "Field 2", MetricDescriptor.Formatter.COUNT, __ -> 2L),
|
||||
new CounterMetricDescriptor<>("fieldCounter2", "FieldCounter2", "Field Counter 2", MetricDescriptor.Formatter.COUNT, __ -> 4L),
|
||||
new StandardMetricDescriptor<>(() -> 0, "field1", "Field1", "Field 1", MetricDescriptor.Formatter.COUNT, __ -> 1L),
|
||||
new CounterMetricDescriptor<>("fieldCounter3", "FieldCounter3", "Field Counter 3", MetricDescriptor.Formatter.COUNT, __ -> 5L)
|
||||
);
|
||||
|
||||
final List<StatusDescriptorDTO> expected = Arrays.asList(
|
||||
new StatusDescriptorDTO("field1", "Field1", "Field 1", MetricDescriptor.Formatter.COUNT.name()),
|
||||
new StatusDescriptorDTO("field2", "Field2", "Field 2", MetricDescriptor.Formatter.COUNT.name()),
|
||||
new StatusDescriptorDTO("fieldCounter1", "FieldCounter1", "Field Counter 1", MetricDescriptor.Formatter.COUNT.name()),
|
||||
new StatusDescriptorDTO("fieldCounter2", "FieldCounter2", "Field Counter 2", MetricDescriptor.Formatter.COUNT.name()),
|
||||
new StatusDescriptorDTO("fieldCounter3", "FieldCounter3", "Field Counter 3", MetricDescriptor.Formatter.COUNT.name())
|
||||
);
|
||||
|
||||
// when
|
||||
final List<StatusDescriptorDTO> result = StatusHistoryUtil.createFieldDescriptorDtos(metricDescriptors);
|
||||
|
||||
// then
|
||||
Assert.assertEquals(expected, result);
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user