54
54
import java .util .Map ;
55
55
import java .util .UUID ;
56
56
import java .util .stream .Collectors ;
57
+ import javax .annotation .Nullable ;
57
58
58
59
/**
59
60
* Parses Collectd JSON data as a {@link Record}.
@@ -94,6 +95,9 @@ public List<Record> parse(final HttpRequest request) throws ParsingException {
94
95
final String typeInstance = record .getTypeInstance ();
95
96
96
97
for (final CollectdRecord .Sample sample : record .getSamples ()) {
98
+ if (sample .getValue () == null ) {
99
+ continue ;
100
+ }
97
101
final String metricName = computeMetricName (plugin , pluginInstance , type , typeInstance , sample .getDsName ());
98
102
final MetricType metricType = mapDsType (sample .getDsType ());
99
103
final Metric metric = new DefaultMetric .Builder ()
@@ -226,13 +230,17 @@ private CollectdRecord(final Builder builder) {
226
230
_pluginInstance = builder ._pluginInstance ;
227
231
_type = builder ._type ;
228
232
_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 ();
236
244
}
237
245
}
238
246
@@ -370,12 +378,12 @@ public Builder setTypeInstance(final String value) {
370
378
private String _type ;
371
379
@ NotNull
372
380
private String _typeInstance ;
373
- @ NotNull
381
+ @ Nullable
374
382
@ CheckWith (value = ValueArraysValid .class , message = "values, dstypes, and dsnames must have the same number of entries" )
375
383
private List <Double > _values = Collections .emptyList ();
376
- @ NotNull
384
+ @ Nullable
377
385
private List <String > _dsTypes = Collections .emptyList ();
378
- @ NotNull
386
+ @ Nullable
379
387
private List <String > _dsNames = Collections .emptyList ();
380
388
381
389
@@ -384,6 +392,9 @@ private static class ValueArraysValid implements CheckWithCheck.SimpleCheck {
384
392
public boolean isSatisfied (final Object validatedObject , final Object value ) {
385
393
if (validatedObject instanceof Builder ) {
386
394
final Builder builder = (Builder ) validatedObject ;
395
+ if (builder ._values == null && builder ._dsNames == null && builder ._dsTypes == null ) {
396
+ return true ;
397
+ }
387
398
return builder ._values != null && builder ._dsTypes != null && builder ._dsNames != null
388
399
&& builder ._values .size () == builder ._dsTypes .size ()
389
400
&& builder ._values .size () == builder ._dsNames .size ();
0 commit comments