@@ -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