Skip to content

Commit eb0633f

Browse files
committed
ignore collectd nulls
1 parent e0d92f5 commit eb0633f

File tree

1 file changed

+41
-33
lines changed

1 file changed

+41
-33
lines changed

src/main/java/com/arpnetworking/metrics/mad/parsers/CollectdJsonToRecordParser.java

Lines changed: 41 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -89,41 +89,11 @@ public List<Record> parse(final HttpRequest request) throws ParsingException {
8989
final List<CollectdRecord> records = OBJECT_MAPPER.readValue(request.getBody().toArray(), COLLECTD_RECORD_LIST);
9090
final List<Record> parsedRecords = Lists.newArrayList();
9191
for (final CollectdRecord record : records) {
92-
final Multimap<String, Metric> metrics = HashMultimap.create();
9392

9493
metricTags.put(Key.HOST_DIMENSION_KEY, record.getHost());
95-
96-
final String plugin = record.getPlugin();
97-
final String pluginInstance = record.getPluginInstance();
98-
final String type = record.getType();
99-
final String typeInstance = record.getTypeInstance();
100-
101-
final List<String> dsTypes = record.getDsTypes();
102-
final List<String> dsNames = record.getDsNames();
103-
final List<Double> values = record.getValues();
104-
105-
if (values != null && dsTypes != null && dsNames != null) {
106-
if (values.size() == 1 && values.get(0) == null) {
107-
// Ignore null values
108-
continue;
109-
}
110-
final Iterator<Double> valuesIterator = values.iterator();
111-
final Iterator<String> typesIterator = dsTypes.iterator();
112-
final Iterator<String> namesIterator = dsNames.iterator();
113-
114-
while (valuesIterator.hasNext() && typesIterator.hasNext() && namesIterator.hasNext()) {
115-
final String metricName = computeMetricName(plugin, pluginInstance, type, typeInstance, namesIterator.next());
116-
final MetricType metricType = mapDsType(typesIterator.next());
117-
// TODO(ville): Support units and normalize
118-
final Metric metric = ThreadLocalBuilder.build(
119-
DefaultMetric.Builder.class,
120-
b1 -> b1.setType(metricType)
121-
.setValues(ImmutableList.of(
122-
ThreadLocalBuilder.build(
123-
DefaultQuantity.Builder.class,
124-
b2 -> b2.setValue(valuesIterator.next())))));
125-
metrics.put(metricName, metric);
126-
}
94+
final Multimap<String, Metric> metrics = buildMetrics(record);
95+
if (metrics.isEmpty()) {
96+
continue;
12797
}
12898
final Map<String, Metric> collectedMetrics = metrics.asMap()
12999
.entrySet()
@@ -147,6 +117,44 @@ public List<Record> parse(final HttpRequest request) throws ParsingException {
147117
}
148118
}
149119

120+
private Multimap<String, Metric> buildMetrics(final CollectdRecord record) {
121+
final Multimap<String, Metric> metrics = HashMultimap.create();
122+
final List<String> dsTypes = record.getDsTypes();
123+
final List<String> dsNames = record.getDsNames();
124+
final List<Double> values = record.getValues();
125+
final String plugin = record.getPlugin();
126+
final String pluginInstance = record.getPluginInstance();
127+
final String type = record.getType();
128+
final String typeInstance = record.getTypeInstance();
129+
130+
if (values != null && dsTypes != null && dsNames != null) {
131+
final Iterator<Double> valuesIterator = values.iterator();
132+
final Iterator<String> typesIterator = dsTypes.iterator();
133+
final Iterator<String> namesIterator = dsNames.iterator();
134+
135+
while (valuesIterator.hasNext() && typesIterator.hasNext() && namesIterator.hasNext()) {
136+
final String metricName = computeMetricName(plugin, pluginInstance, type, typeInstance, namesIterator.next());
137+
final MetricType metricType = mapDsType(typesIterator.next());
138+
final Double val = valuesIterator.next();
139+
if (val == null) {
140+
continue;
141+
}
142+
// TODO(ville): Support units and normalize
143+
final Metric metric = ThreadLocalBuilder.build(
144+
DefaultMetric.Builder.class,
145+
b1 -> b1.setType(metricType)
146+
.setValues(ImmutableList.of(
147+
ThreadLocalBuilder.build(
148+
DefaultQuantity.Builder.class,
149+
b2 -> {
150+
b2.setValue(val);
151+
}))));
152+
metrics.put(metricName, metric);
153+
}
154+
}
155+
return metrics;
156+
}
157+
150158
private String computeMetricName(
151159
final String plugin,
152160
final String pluginInstance,

0 commit comments

Comments
 (0)