@Override public TimeSeries<Long, Double> from(BinaryTimeSeries binaryTimeSeries, long queryStart, long queryEnd) { //This is a hack MetricTimeSeries metricTimeSeries = new MetricTimeSeriesConverter().from(binaryTimeSeries, queryStart, queryEnd); TimeSeries<Long, Double> timeSeries = new TimeSeries<>(map(metricTimeSeries.points())); metricTimeSeries.getAttributesReference().forEach(timeSeries::addAttribute); return timeSeries; }
@Override public BinaryTimeSeries to(TimeSeries<Long, Double> timeSeries) { //-oo is represented through the first element that is null, hence if the size is one the time series is empty if (timeSeries.size() == 1) { LOGGER.info("Empty time series detected. {}", timeSeries); //Create a builder with the minimal required fields BinaryTimeSeries.Builder builder = new BinaryTimeSeries.Builder() .data(new byte[]{}) .start(0) .end(0); return builder.build(); } else { return new MetricTimeSeriesConverter().to(map(timeSeries)); } }
/** * Creates a new instance. */ public ConverterService() { converter = new MetricTimeSeriesConverter(); }
/** * Converts a time series to a solr input document. * <p> * In order to avoid write conflicts, the resulting document does not contain * the attribute "_version_" and the attribute "id" is set to a random UUID. * * @param mts the time series * @return solr input document representing the given time series */ public SolrInputDocument toInputDocument(MetricTimeSeries mts) { SolrInputDocument inputDocument = new SolrInputDocument(); converter.to(mts) .getFields().entrySet() .stream() .filter(it -> !"_version_".equals(it.getKey())) .forEach(it -> inputDocument.addField(it.getKey(), it.getValue())); inputDocument.setField("id", UUID.randomUUID().toString()); return inputDocument; }
/** * Converts a solr document to a time series. * <p> * The resulting time series does not contain user defined attributes present in the solr document * (see {@link de.qaware.chronix.Schema#isUserDefined(String)} ). * * @param solrDoc the solr document * @return time series representing the given solr document */ public MetricTimeSeries toTimeSeries(SolrDocument solrDoc) { BinaryTimeSeries.Builder btsBuilder = new BinaryTimeSeries.Builder(); solrDoc.forEach(field -> btsBuilder.field(field.getKey(), field.getValue())); BinaryTimeSeries bts = btsBuilder.build(); long start = (long) solrDoc.get(START); long end = (long) solrDoc.get(END); return converter.from(bts, start, end); }
@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(); }
stream = detectGzip(stream); MetricTimeSeriesConverter converter = new MetricTimeSeriesConverter(); for (MetricTimeSeries series : formatParser.parse(stream)) { SolrInputDocument document = new SolrInputDocument(); converter.to(series).getFields().forEach(document::addField); storeDocument(document, processor, req);
public ChronixUpdater(SolrClient solr, BlockingQueue<Record> records, Map<String, String> fieldToMetricTypeMapping, int batchSize, long flushInterval) { this.solr = solr; this.records = records; this.batchSize = batchSize; this.flushInterval = flushInterval; this.lastTS = System.nanoTime(); // far in the future ... converter = new MetricTimeSeriesConverter(); storage = new ChronixSolrStorage<>(batchSize, groupBy, reduce); if (fieldToMetricTypeMapping != null) { this.fieldToMetricTypeMapping.putAll(fieldToMetricTypeMapping); } //add the defaults this.fieldToMetricTypeMapping.put(FieldDictionary.RECORD_VALUE, RecordDictionary.METRIC); threadCount++; }