@Override public double[] getSnapshots() { double[] result; int startIdx = getStartIdx(); int endIdx = getEndIdx(startIdx); int resultSize = (endIdx - startIdx) + 1; if (filter != FILTER_NONE && resultSize > 1) { long[] timestamps = null; if (filter == FILTER_PERSEC) { timestamps = resource.getAllRawTimeStamps(); } result = new double[resultSize - 1]; int tsIdx = resource.getFirstTimeStampIdx() + startIdx; double[] values = series.getValuesEx(descriptor.getTypeCode(), startIdx, resultSize); for (int i = 0; i < result.length; i++) { double valueDelta = values[i + 1] - values[i]; if (filter == FILTER_PERSEC) { double timeDelta = (timestamps[tsIdx + i + 1] - timestamps[tsIdx + i]); // millis valueDelta /= (timeDelta / 1000); // per second } result[i] = valueDelta; } } else { result = series.getValuesEx(descriptor.getTypeCode(), startIdx, resultSize); } calcStats(result); return result; }
@Override public long[] getRawAbsoluteTimeStamps() { int startIdx = getStartIdx(); int endIdx = getEndIdx(startIdx); int resultSize = (endIdx - startIdx) + 1; if (resultSize <= 0) { return new long[0]; } else { long[] result = new long[resultSize]; long[] timestamps = resource.getAllRawTimeStamps(); int tsIdx = resource.getFirstTimeStampIdx() + startIdx; long base = resource.getTimeBase(); for (int i = 0; i < resultSize; i++) { result[i] = base + timestamps[tsIdx + i]; } return result; } }
private int getEndIdx(int startIdx) { int endIdx = series.getSize() - 1; if (endTime != -1) { long endTimeStamp = endTime - resource.getTimeBase(); long[] timestamps = resource.getAllRawTimeStamps(); endIdx = startIdx - 1; for (int i = resource.getFirstTimeStampIdx() + startIdx; i < resource.getFirstTimeStampIdx() + series.getSize(); i++) { if (timestamps[i] >= endTimeStamp) { break; } endIdx++; } Assert.assertTrue(endIdx == startIdx - 1 || timestamps[endIdx] < endTimeStamp); } return endIdx; }
private int getStartIdx() { int startIdx = 0; if (startTime != -1) { long startTimeStamp = startTime - resource.getTimeBase(); long[] timestamps = resource.getAllRawTimeStamps(); for (int i = resource.getFirstTimeStampIdx(); i < resource.getFirstTimeStampIdx() + series.getSize(); i++) { if (timestamps[i] >= startTimeStamp) { break; } startIdx++; } } return startIdx; }