@Override protected MetricValues computeNext() { while (iterator.hasNext()) { Map.Entry<Map<String, String>, LoadingCache<String, AggregatedMetricsEmitter>> entry = iterator.next(); Map<String, AggregatedMetricsEmitter> metricEmitters = entry.getValue().asMap(); // +1 because we add extra metric about how many metric values did we emit in this context (see below) List<MetricValue> metricValues = Lists.newArrayListWithCapacity(metricEmitters.size() + 1); for (Map.Entry<String, AggregatedMetricsEmitter> emitterEntry : metricEmitters.entrySet()) { MetricValue metricValue = emitterEntry.getValue().emit(); // skip increment by 0 if (metricValue.getType() == MetricType.COUNTER && metricValue.getValue() == 0) { continue; } metricValues.add(metricValue); } if (metricValues.isEmpty()) { // skip if there are no metric values to send continue; } // number of emitted metrics metricValues.add(new MetricValue("metrics.emitted.count", MetricType.COUNTER, metricValues.size() + 1)); LOG.trace("Emit metric {}", metricValues); return new MetricValues(entry.getKey(), timestamp, metricValues); } return endOfData(); } };
@Override protected MetricValues computeNext() { while (iterator.hasNext()) { Map.Entry<Map<String, String>, LoadingCache<String, AggregatedMetricsEmitter>> entry = iterator.next(); Map<String, AggregatedMetricsEmitter> metricEmitters = entry.getValue().asMap(); // +1 because we add extra metric about how many metric values did we emit in this context (see below) List<MetricValue> metricValues = Lists.newArrayListWithCapacity(metricEmitters.size() + 1); for (Map.Entry<String, AggregatedMetricsEmitter> emitterEntry : metricEmitters.entrySet()) { MetricValue metricValue = emitterEntry.getValue().emit(); // skip increment by 0 if (metricValue.getType() == MetricType.COUNTER && metricValue.getValue() == 0) { continue; } metricValues.add(metricValue); } if (metricValues.isEmpty()) { // skip if there are no metric values to send continue; } // number of emitted metrics metricValues.add(new MetricValue("metrics.emitted.count", MetricType.COUNTER, metricValues.size() + 1)); LOG.trace("Emit metric {}", metricValues); return new MetricValues(entry.getKey(), timestamp, metricValues); } return endOfData(); } };
@Override public void add(Collection<? extends MetricValues> metricValues) { List<CubeFact> facts = Lists.newArrayListWithCapacity(metricValues.size()); for (MetricValues metricValue : metricValues) { String scope = metricValue.getTags().get(Constants.Metrics.Tag.SCOPE); List<Measurement> metrics = Lists.newArrayList(); // todo improve this logic? for (MetricValue metric : metricValue.getMetrics()) { String measureName = (scope == null ? "system." : scope + ".") + metric.getName(); MeasureType type = metric.getType() == MetricType.COUNTER ? MeasureType.COUNTER : MeasureType.GAUGE; metrics.add(new Measurement(measureName, type, metric.getValue())); } CubeFact fact = new CubeFact(metricValue.getTimestamp()) .addDimensionValues(metricValue.getTags()) .addMeasurements(metrics); facts.add(fact); } cube.get().add(facts); }
@Override public void add(Collection<? extends MetricValues> metricValues) { List<CubeFact> facts = Lists.newArrayListWithCapacity(metricValues.size()); for (MetricValues metricValue : metricValues) { String scope = metricValue.getTags().get(Constants.Metrics.Tag.SCOPE); List<Measurement> metrics = Lists.newArrayList(); // todo improve this logic? for (MetricValue metric : metricValue.getMetrics()) { String measureName = (scope == null ? "system." : scope + ".") + metric.getName(); MeasureType type = metric.getType() == MetricType.COUNTER ? MeasureType.COUNTER : MeasureType.GAUGE; metrics.add(new Measurement(measureName, type, metric.getValue())); } CubeFact fact = new CubeFact(metricValue.getTimestamp()) .addDimensionValues(metricValue.getTags()) .addMeasurements(metrics); facts.add(fact); } cube.get().add(facts); }