/** * Adds a point to the given metrics map. If the metric doesn't exist in the map, it will be created. * * @param metrics Metric map. * @param metricName Name of the metric. * @param timestamp Timestamp of the point. * @param value Value of the point. * @param tags Tags for the metric. These are only used if the metric doesn't already exist in the metrics map. */ private void addPoint(Map<Metric, MetricTimeSeries.Builder> metrics, String metricName, Instant timestamp, double value, Map<String, String> tags) { Metric metric = new Metric(metricName, tags); MetricTimeSeries.Builder metricBuilder = metrics.get(metric); if (metricBuilder == null) { metricBuilder = new MetricTimeSeries.Builder(metricName,METRIC_TYPE); for (Map.Entry<String, String> tagEntry : tags.entrySet()) { metricBuilder.attribute(tagEntry.getKey(), tagEntry.getValue()); } metrics.put(metric, metricBuilder); } metricBuilder.point(timestamp.toEpochMilli(), value); }
metricBuilder = new MetricTimeSeries.Builder(metricName, METRIC_TYPE); for (Map.Entry<String, String> tagEntry : tags.entrySet()) { metricBuilder.attribute(tagEntry.getKey(), tagEntry.getValue());
@Override public Iterable<MetricTimeSeries> parse(InputStream stream) throws FormatParseException { Map<Metric, MetricTimeSeries.Builder> metrics = new HashMap<>(); List<KairosDbMetric> kairosMetrics = parseJson(stream); for (KairosDbMetric kairosMetric : kairosMetrics) { // If the metric is already known, add a point. Otherwise create the metric and add the point. Metric metric = new Metric(kairosMetric.getName(), kairosMetric.getTags()); MetricTimeSeries.Builder metricBuilder = metrics.get(metric); if (metricBuilder == null) { metricBuilder = new MetricTimeSeries.Builder(kairosMetric.getName(), METRIC_TYPE); for (Map.Entry<String, String> tagEntry : kairosMetric.getTags().entrySet()) { metricBuilder.attribute(tagEntry.getKey(), tagEntry.getValue()); } metrics.put(metric, metricBuilder); } Instant timestamp = convertTimestamp(kairosMetric.getTimestamp()); metricBuilder.point(timestamp.toEpochMilli(), kairosMetric.getValue()); } return metrics.values().stream().map(MetricTimeSeries.Builder::build).collect(Collectors.toList()); }
.end(lastTS) .attributes(attributes) .attribute("id", batchUID) .build();
metricBuilder = new MetricTimeSeries.Builder(metricName, METRIC_TYPE); for (Map.Entry<String, String> tagEntry : tags.entrySet()) { metricBuilder.attribute(tagEntry.getKey(), tagEntry.getValue());
@Override public MetricTimeSeries from(BinaryTimeSeries binaryTimeSeries, long queryStart, long queryEnd) { LOGGER.debug("Converting {} to MetricTimeSeries starting at {} and ending at {}", binaryTimeSeries, queryStart, queryEnd); //get the metric String metric = binaryTimeSeries.get(MetricTSSchema.METRIC).toString(); //Third build a minimal time series MetricTimeSeries.Builder builder = new MetricTimeSeries.Builder(metric); //add all user defined attributes binaryTimeSeries.getFields().forEach((field, value) -> { if (MetricTSSchema.isUserDefined(field)) { builder.attribute(field, value); } }); //Default serialization is protocol buffers. if (binaryTimeSeries.getPoints().length > 0) { fromProtocolBuffers(binaryTimeSeries, queryStart, queryEnd, builder); } else if (binaryTimeSeries.getFields().containsKey(DATA_AS_JSON_FIELD)) { //do it from json fromJson(binaryTimeSeries, queryStart, queryEnd, builder); } else { //we have no data //set the start and end builder.start(binaryTimeSeries.getStart()); builder.end(binaryTimeSeries.getEnd()); } return builder.build(); }
@Override public MetricTimeSeries from(BinaryTimeSeries binaryTimeSeries, long queryStart, long queryEnd) { LOGGER.debug("Converting {} to MetricTimeSeries starting at {} and ending at {}", binaryTimeSeries, queryStart, queryEnd); //get the metric String metric = binaryTimeSeries.get(MetricTSSchema.METRIC).toString(); //Third build a minimal time series MetricTimeSeries.Builder builder = new MetricTimeSeries.Builder(metric); //add all user defined attributes binaryTimeSeries.getFields().forEach((field, value) -> { if (MetricTSSchema.isUserDefined(field)) { builder.attribute(field, value); } }); //Default serialization is protocol buffers. if (binaryTimeSeries.getPoints().length > 0) { fromProtocolBuffers(binaryTimeSeries, queryStart, queryEnd, builder); } else if (binaryTimeSeries.getFields().containsKey(DATA_AS_JSON_FIELD)) { //do it from json fromJson(binaryTimeSeries, queryStart, queryEnd, builder); } else { //we have no data //set the start and end builder.start(binaryTimeSeries.getStart()); builder.end(binaryTimeSeries.getEnd()); } return builder.build(); }
@Override public Iterable<MetricTimeSeries> parse(InputStream stream) throws FormatParseException { Map<Metric, MetricTimeSeries.Builder> metrics = new HashMap<>(); List<TsdbMetric> tsdbMetrics = parseJson(stream); for (TsdbMetric tsdbMetric : tsdbMetrics) { // If the metric is already known, add a point. Otherwise create the metric and add the point. Metric metric = new Metric(tsdbMetric.getMetric(), tsdbMetric.getTags()); MetricTimeSeries.Builder metricBuilder = metrics.get(metric); if (metricBuilder == null) { metricBuilder = new MetricTimeSeries.Builder(tsdbMetric.getMetric(), METRIC_TYPE); // Assuming tag entry is always a string, which it should be for (Map.Entry<String, String> tagEntry : tsdbMetric.getTags().entrySet()) { metricBuilder.attribute(tagEntry.getKey().concat("_s"), tagEntry.getValue()); } metrics.put(metric, metricBuilder); } Instant timestamp = convertTimestamp(tsdbMetric.getTimestamp()); metricBuilder.point(timestamp.toEpochMilli(), tsdbMetric.getValue()); } return metrics.values().stream().map(MetricTimeSeries.Builder::build).collect(Collectors.toList()); }
private MetricTimeSeries map(TimeSeries<Long, Double> timeSeries) { MetricTimeSeries.Builder builder = new MetricTimeSeries.Builder(timeSeries.getAttribute("metric").toString()); //add points Iterator<Pair<Long, Double>> it = timeSeries.iterator(); //ignore the first element if (it.hasNext()) { it.next(); } while (it.hasNext()) { Pair<Long, Double> pair = it.next(); builder.point(pair.getFirst(), pair.getSecond()); } //add attributes timeSeries.getAttributes().forEachRemaining(attribute -> builder.attribute(attribute.getKey(), attribute.getValue())); return builder.build(); } }