use of org.spf4j.tsdb2.avro.DataBlock in project spf4j by zolyfarkas.
the class TSDBQuery method getAllTables.
@SuppressFBWarnings("RV_RETURN_VALUE_IGNORED")
public static ListMultimap<String, TableDef> getAllTables(final File tsdbFile) throws IOException {
ListMultimap<String, TableDef> result = ArrayListMultimap.create();
try (TSDBReader reader = new TSDBReader(tsdbFile, 8192)) {
Either<TableDef, DataBlock> read;
while ((read = reader.read()) != null) {
if (read.isLeft()) {
final TableDef tdef = read.getLeft();
result.put(tdef.getName(), tdef);
}
}
}
return result;
}
use of org.spf4j.tsdb2.avro.DataBlock in project spf4j by zolyfarkas.
the class TSDBQuery method getAllTablesWithDataRanges.
@SuppressFBWarnings("RV_RETURN_VALUE_IGNORED")
public static ListMultimap<String, TableDefEx> getAllTablesWithDataRanges(final File tsdbFile) throws IOException {
ListMultimap<String, TableDefEx> result = ArrayListMultimap.create();
TLongObjectMap<TableDefEx> id2Def = new TLongObjectHashMap<>();
try (TSDBReader reader = new TSDBReader(tsdbFile, 8192)) {
Either<TableDef, DataBlock> read;
while ((read = reader.read()) != null) {
if (read.isLeft()) {
final TableDef left = read.getLeft();
final TableDefEx tableDefEx = new TableDefEx(left, Long.MAX_VALUE, 0L);
id2Def.put(left.id, tableDefEx);
result.put(tableDefEx.getTableDef().getName(), tableDefEx);
} else {
DataBlock right = read.getRight();
long baseTs = right.baseTimestamp;
for (DataRow row : right.getValues()) {
TableDefEx tdex = id2Def.get(row.tableDefId);
if (tdex == null) {
throw new IOException("Potentially corupted file data row with no tableDef " + row);
}
long ts = baseTs + row.relTimeStamp;
if (ts < tdex.getStartTime()) {
tdex.setStartTime(ts);
}
if (ts > tdex.getEndTime()) {
tdex.setEndTime(ts);
}
}
}
}
}
return result;
}
use of org.spf4j.tsdb2.avro.DataBlock in project spf4j by zolyfarkas.
the class TSDBQuery method getTimeSeries.
public static TimeSeries getTimeSeries(final File tsdbFile, final long[] tableIds, final long startTimeMillis, final long endTimeMillis) throws IOException {
TLongList timestamps = new TLongArrayList();
List<long[]> metrics = new ArrayList<>();
try (TSDBReader reader = new TSDBReader(tsdbFile, 8192)) {
Either<TableDef, DataBlock> read;
while ((read = reader.read()) != null) {
if (read.isRight()) {
DataBlock data = read.getRight();
long baseTs = data.baseTimestamp;
for (DataRow row : data.getValues()) {
for (long tableId : tableIds) {
if (tableId == row.tableDefId) {
final long ts = baseTs + row.relTimeStamp;
if (ts >= startTimeMillis && ts <= endTimeMillis) {
timestamps.add(ts);
metrics.add(Longs.toArray(row.data));
}
}
}
}
}
}
}
return new TimeSeries(timestamps.toArray(), metrics.toArray(new long[metrics.size()][]));
}
use of org.spf4j.tsdb2.avro.DataBlock in project spf4j by zolyfarkas.
the class TSDBQuery method getTables.
@SuppressFBWarnings("RV_RETURN_VALUE_IGNORED")
public static ListMultimap<String, TableDef> getTables(final File tsdbFile, final Set<String> tables) throws IOException {
ListMultimap<String, TableDef> result = ArrayListMultimap.create();
try (TSDBReader reader = new TSDBReader(tsdbFile, 8192)) {
Either<TableDef, DataBlock> read;
while ((read = reader.read()) != null) {
if (read.isLeft()) {
final TableDef tdef = read.getLeft();
final String name = tdef.getName();
if (tables.contains(name)) {
result.put(name, tdef);
}
}
}
}
return result;
}
use of org.spf4j.tsdb2.avro.DataBlock in project spf4j by zolyfarkas.
the class TSDBReader method read.
@Nullable
public synchronized Either<TableDef, DataBlock> read() throws IOException {
final long position = bis.getCount();
if (position >= size) {
return null;
}
Object result;
try {
result = recordReader.read(null, decoder);
} catch (IOException | RuntimeException ex) {
if (CORUPTION_LENIENT) {
return null;
} else {
throw new IOException("Error reading tsdb file at " + position + ", this= " + this, ex);
}
}
if (result instanceof TableDef) {
final TableDef td = (TableDef) result;
if (position != td.id) {
throw new IOException("Table Id should be equal with file position " + position + ", " + td.id);
}
return Either.left(td);
} else {
return Either.right((DataBlock) result);
}
}
Aggregations