use of org.spf4j.tsdb2.TimeSeries in project spf4j by zolyfarkas.
the class TimeSeriesDatabase method read.
/**
* Read measurements from table.
*
* @param tableName
* @param startTime start time including
* @param endTime end time including
* @return
* @throws IOException
*/
private TimeSeries read(final long startTime, final long endTime, final long startAtFragment, final long endAtFragment, final boolean skipFirst) throws IOException {
synchronized (path) {
TLongArrayList timeStamps = new TLongArrayList();
List<long[]> data = new ArrayList<>();
if (startAtFragment > 0) {
FileLock lock = ch.lock(0, Long.MAX_VALUE, true);
try {
DataFragment frag;
long nextFragmentLocation = startAtFragment;
boolean last = false;
boolean psFirst = skipFirst;
do {
if (nextFragmentLocation == endAtFragment) {
last = true;
}
file.seek(nextFragmentLocation);
frag = new DataFragment(file);
if (psFirst) {
psFirst = false;
} else {
long fragStartTime = frag.getStartTimeMillis();
if (fragStartTime >= startTime) {
TIntArrayList fragTimestamps = frag.getTimestamps();
int nr = 0;
for (int i = 0; i < fragTimestamps.size(); i++) {
long ts = fragStartTime + fragTimestamps.get(i);
if (ts <= endTime) {
timeStamps.add(ts);
nr++;
} else {
break;
}
}
int i = 0;
for (long[] d : frag.getData()) {
if (i < nr) {
data.add(d);
} else {
break;
}
nr++;
}
if (fragTimestamps.size() > nr) {
break;
}
}
}
nextFragmentLocation = frag.getNextDataFragment();
} while (nextFragmentLocation > 0 && !last);
} catch (IOException | RuntimeException e) {
try {
lock.release();
throw e;
} catch (IOException ex) {
ex.addSuppressed(e);
throw ex;
}
}
lock.release();
}
return new TimeSeries(timeStamps.toArray(), data.toArray(new long[data.size()][]));
}
}
use of org.spf4j.tsdb2.TimeSeries in project spf4j by zolyfarkas.
the class TimeSeriesDatabase method writeCsvTable.
public void writeCsvTable(final String tableName, final File output) throws IOException {
TSTable table = getTSTable(tableName);
TimeSeries data = readAll(tableName);
DateTimeFormatter formatter = DateTimeFormats.TS_FORMAT;
try (Writer writer = new BufferedWriter(new OutputStreamWriter(Files.newOutputStream(output.toPath()), Charsets.UTF_8))) {
Csv.writeCsvElement("timestamp", writer);
for (String colName : table.getColumnNames()) {
writer.append(',');
Csv.writeCsvElement(colName, writer);
}
writer.write('\n');
long[] timestamps = data.getTimeStamps();
long[][] values = data.getValues();
for (int i = 0; i < timestamps.length; i++) {
Csv.writeCsvElement(formatter.format(Instant.ofEpochMilli(timestamps[i])), writer);
for (long val : values[i]) {
writer.append(',');
Csv.writeCsvElement(Long.toString(val), writer);
}
writer.write('\n');
}
}
}
use of org.spf4j.tsdb2.TimeSeries in project spf4j by zolyfarkas.
the class TimeSeriesDatabase method createJFreeCharts.
public List<JFreeChart> createJFreeCharts(final String tableName, final long startTime, final long endTime) throws IOException {
TSTable info = this.getTSTable(tableName);
TimeSeries data = this.read(tableName, startTime, endTime);
return createJFreeCharts(data, info);
}
use of org.spf4j.tsdb2.TimeSeries in project spf4j by zolyfarkas.
the class RecorderFactoryTest method assertData.
@SuppressFBWarnings("CLI_CONSTANT_LIST_INDEX")
public static void assertData(final String forWhat, final long expectedValue) throws IOException {
TSDBWriter dbWriter = ((TSDBMeasurementStore) RecorderFactory.MEASUREMENT_STORE).getDBWriter();
dbWriter.flush();
final File file = dbWriter.getFile();
List<TableDef> tableDefs = TSDBQuery.getTableDef(file, forWhat);
TableDef tableDef = tableDefs.get(0);
TimeSeries timeSeries = TSDBQuery.getTimeSeries(file, new long[] { tableDef.id }, 0, Long.MAX_VALUE);
long sum = 0;
long[][] values = timeSeries.getValues();
for (long[] row : values) {
sum += row[0];
}
Assert.assertEquals(expectedValue, sum);
}
use of org.spf4j.tsdb2.TimeSeries in project java-docs-samples by GoogleCloudPlatform.
the class TimeSeriesSummary method getMostRecentPoint.
Point getMostRecentPoint(TimeSeries timeSeries) {
Point max = Collections.max(timeSeries.getPointsList(), Comparator.comparingLong(p -> p.getInterval().getEndTime().getSeconds()));
mostRecentRunTime = max.getInterval().getEndTime();
return max;
}
Aggregations