/** * Serializes the collection of metric data points to json * * @param timeSeries - the time series whose points should be serialized. * @return a json serialized collection of metric data points */ public byte[] toJson(MetricTimeSeries timeSeries) { if (!timeSeries.isEmpty()) { try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); JsonWriter writer = new JsonWriter(new OutputStreamWriter(baos, UTF_8)); List[] data = new List[]{new ArrayList<>(timeSeries.size()), new ArrayList<>(timeSeries.size())}; for (int i = 0; i < timeSeries.size(); i++) { data[0].add(timeSeries.getTime(i)); data[1].add(timeSeries.getValue(i)); } gson.toJson(data, List[].class, writer); writer.close(); baos.flush(); return baos.toByteArray(); } catch (IOException e) { LOGGER.error("Could not serialize data to json", e); } } return EMPTY_JSON; }
/** * Serializes the collection of metric data points to json * * @param timeSeries - the time series whose points should be serialized. * @return a json serialized collection of metric data points */ public byte[] toJson(MetricTimeSeries timeSeries) { if (!timeSeries.isEmpty()) { try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); JsonWriter writer = new JsonWriter(new OutputStreamWriter(baos, UTF_8)); List[] data = new List[]{new ArrayList<>(timeSeries.size()), new ArrayList<>(timeSeries.size())}; for (int i = 0; i < timeSeries.size(); i++) { data[0].add(timeSeries.getTime(i)); data[1].add(timeSeries.getValue(i)); } gson.toJson(data, List[].class, writer); writer.close(); baos.flush(); return baos.toByteArray(); } catch (IOException e) { LOGGER.error("Could not serialize data to json", e); } } return EMPTY_JSON; }
@Override public void execute(List<ChronixTimeSeries<MetricTimeSeries>> timeSeriesList, FunctionCtx functionCtx) { for (ChronixTimeSeries<MetricTimeSeries> chronixTimeSeries : timeSeriesList) { MetricTimeSeries timeSeries = chronixTimeSeries.getRawTimeSeries(); if (timeSeries.isEmpty()) { continue; } long[] times = timeSeries.getTimestampsAsArray(); double[] values = timeSeries.getValuesAsArray(); timeSeries.clear(); for (int i = 0; i < times.length; i++) { times[i] += shift; } timeSeries.addAll(times, values); functionCtx.add(this, chronixTimeSeries.getJoinKey()); } }
/** * Gets the first value in the time series. * It first orders the time series. * * @param timeSeriesList list with time series * @return the average or 0 if the list is empty */ @Override public void execute(List<ChronixTimeSeries<MetricTimeSeries>> timeSeriesList, FunctionCtx functionCtx) { for (ChronixTimeSeries<MetricTimeSeries> chronixTimeSeries : timeSeriesList) { MetricTimeSeries timeSeries = chronixTimeSeries.getRawTimeSeries(); //If it is empty, we return NaN if (timeSeries.isEmpty()) { functionCtx.add(this, Double.NaN, chronixTimeSeries.getJoinKey()); continue; } //we need to sort the time series timeSeries.sort(); functionCtx.add(this, timeSeries.getValue(0), chronixTimeSeries.getJoinKey()); } }
MetricTimeSeries timeSeries = chronixTimeSeries.getRawTimeSeries(); if (timeSeries.isEmpty()) { continue;
@Override public void execute(List<ChronixTimeSeries<MetricTimeSeries>> timeSeriesList, FunctionCtx functionCtx) { for (ChronixTimeSeries<MetricTimeSeries> chronixTimeSeries : timeSeriesList) { MetricTimeSeries timeSeries = chronixTimeSeries.getRawTimeSeries(); if (timeSeries.isEmpty()) { functionCtx.add(this, Double.NaN, chronixTimeSeries.getJoinKey()); continue; } //Else calculate the analysis value int size = timeSeries.size(); double current = 0; for (int i = 0; i < size; i++) { current += timeSeries.getValue(i); } functionCtx.add(this, current / timeSeries.size(), chronixTimeSeries.getJoinKey()); } }
/** * Adds the increment to each value of the time series. * <pre> * foreach(value){ * value += increment; * } * </pre> * * @param functionCtx to add the this transformation to. */ @Override public void execute(List<ChronixTimeSeries<MetricTimeSeries>> timeSeriesList, FunctionCtx functionCtx) { for (ChronixTimeSeries<MetricTimeSeries> chronixTimeSeries : timeSeriesList) { MetricTimeSeries timeSeries = chronixTimeSeries.getRawTimeSeries(); if (timeSeries.isEmpty()) { continue; } long[] timestamps = timeSeries.getTimestampsAsArray(); double[] values = timeSeries.getValuesAsArray(); timeSeries.clear(); for (int i = 0; i < values.length; i++) { values[i] += value; } timeSeries.addAll(timestamps, values); functionCtx.add(this, chronixTimeSeries.getJoinKey()); } }
/** * Calculates the integral of the given time series using the simpson integrator of commons math lib * * @param timeSeriesList list with time series * @param functionCtx the analysis and values result map */ @Override public void execute(List<ChronixTimeSeries<MetricTimeSeries>> timeSeriesList, FunctionCtx functionCtx) { for (ChronixTimeSeries<MetricTimeSeries> chronixTimeSeries : timeSeriesList) { MetricTimeSeries timeSeries = chronixTimeSeries.getRawTimeSeries(); if (timeSeries.isEmpty()) { functionCtx.add(this, Double.NaN, chronixTimeSeries.getJoinKey()); continue; } SimpsonIntegrator simpsonIntegrator = new SimpsonIntegrator(); double integral = simpsonIntegrator.integrate(Integer.MAX_VALUE, x -> timeSeries.getValue((int) x), 0, timeSeries.size() - 1); functionCtx.add(this, integral, chronixTimeSeries.getJoinKey()); } }
if (timeSeries.isEmpty()) { functionCtx.add(this, false, chronixTimeSeries.getJoinKey()); return;