Skip to content

Commit 4049d4f

Browse files
authored
Merge pull request #28 from ArpNetworking/collectd_400_fix
fix dropped messages due to not accepting collectd data
2 parents 62ca7c7 + 4345cca commit 4049d4f

File tree

1 file changed

+21
-10
lines changed

1 file changed

+21
-10
lines changed

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

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
import java.util.Map;
5555
import java.util.UUID;
5656
import java.util.stream.Collectors;
57+
import javax.annotation.Nullable;
5758

5859
/**
5960
* Parses Collectd JSON data as a {@link Record}.
@@ -94,6 +95,9 @@ public List<Record> parse(final HttpRequest request) throws ParsingException {
9495
final String typeInstance = record.getTypeInstance();
9596

9697
for (final CollectdRecord.Sample sample : record.getSamples()) {
98+
if (sample.getValue() == null) {
99+
continue;
100+
}
97101
final String metricName = computeMetricName(plugin, pluginInstance, type, typeInstance, sample.getDsName());
98102
final MetricType metricType = mapDsType(sample.getDsType());
99103
final Metric metric = new DefaultMetric.Builder()
@@ -226,13 +230,17 @@ private CollectdRecord(final Builder builder) {
226230
_pluginInstance = builder._pluginInstance;
227231
_type = builder._type;
228232
_typeInstance = builder._typeInstance;
229-
_samples = Lists.newArrayListWithExpectedSize(builder._values.size());
230-
231-
final Iterator<Double> valuesIterator = builder._values.iterator();
232-
final Iterator<String> typesIterator = builder._dsTypes.iterator();
233-
final Iterator<String> namesIterator = builder._dsNames.iterator();
234-
while (valuesIterator.hasNext() && typesIterator.hasNext() && namesIterator.hasNext()) {
235-
_samples.add(new Sample(valuesIterator.next(), typesIterator.next(), namesIterator.next()));
233+
if (builder._values != null && builder._dsTypes != null && builder._dsNames != null) {
234+
_samples = Lists.newArrayListWithExpectedSize(builder._values.size());
235+
236+
final Iterator<Double> valuesIterator = builder._values.iterator();
237+
final Iterator<String> typesIterator = builder._dsTypes.iterator();
238+
final Iterator<String> namesIterator = builder._dsNames.iterator();
239+
while (valuesIterator.hasNext() && typesIterator.hasNext() && namesIterator.hasNext()) {
240+
_samples.add(new Sample(valuesIterator.next(), typesIterator.next(), namesIterator.next()));
241+
}
242+
} else {
243+
_samples = Collections.emptyList();
236244
}
237245
}
238246

@@ -370,12 +378,12 @@ public Builder setTypeInstance(final String value) {
370378
private String _type;
371379
@NotNull
372380
private String _typeInstance;
373-
@NotNull
381+
@Nullable
374382
@CheckWith(value = ValueArraysValid.class, message = "values, dstypes, and dsnames must have the same number of entries")
375383
private List<Double> _values = Collections.emptyList();
376-
@NotNull
384+
@Nullable
377385
private List<String> _dsTypes = Collections.emptyList();
378-
@NotNull
386+
@Nullable
379387
private List<String> _dsNames = Collections.emptyList();
380388

381389

@@ -384,6 +392,9 @@ private static class ValueArraysValid implements CheckWithCheck.SimpleCheck {
384392
public boolean isSatisfied(final Object validatedObject, final Object value) {
385393
if (validatedObject instanceof Builder) {
386394
final Builder builder = (Builder) validatedObject;
395+
if (builder._values == null && builder._dsNames == null && builder._dsTypes == null) {
396+
return true;
397+
}
387398
return builder._values != null && builder._dsTypes != null && builder._dsNames != null
388399
&& builder._values.size() == builder._dsTypes.size()
389400
&& builder._values.size() == builder._dsNames.size();

0 commit comments

Comments
 (0)