use of org.spf4j.tsdb2.avro.TableDef 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.TableDef in project spf4j by zolyfarkas.
the class TSDBQuery method writeCsvTables.
public static void writeCsvTables(final File tsDB, final Set<String> tableNames, final File output) throws IOException {
if (tableNames.isEmpty()) {
return;
}
ListMultimap<String, TableDef> tables = getTables(tsDB, tableNames);
try (Writer writer = new BufferedWriter(new OutputStreamWriter(Files.newOutputStream(output.toPath()), Charsets.UTF_8))) {
TableDef table = tables.values().iterator().next();
Csv.writeCsvElement("table", writer);
writer.append(',');
Csv.writeCsvElement("timestamp", writer);
for (ColumnDef col : table.getColumns()) {
writer.append(',');
Csv.writeCsvElement(col.getName(), writer);
}
writer.write('\n');
for (Map.Entry<String, Collection<TableDef>> tEntry : tables.asMap().entrySet()) {
TimeSeries data = getTimeSeries(tsDB, getIds(tEntry.getValue()), 0, Long.MAX_VALUE);
long[] timestamps = data.getTimeStamps();
long[][] values = data.getValues();
for (int i = 0; i < timestamps.length; i++) {
Csv.writeCsvElement(tEntry.getKey(), writer);
writer.append(',');
Csv.writeCsvElement(DateTimeFormats.TS_FORMAT.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.avro.TableDef 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.TableDef in project spf4j by zolyfarkas.
the class TSDBQuery method getColumnUnitsOfMeasurement.
public static String[] getColumnUnitsOfMeasurement(final TableDef td) {
List<ColumnDef> columns = td.getColumns();
String[] result = new String[columns.size()];
int i = 0;
for (ColumnDef cd : columns) {
result[i++] = cd.getUnitOfMeasurement();
}
return result;
}
use of org.spf4j.tsdb2.avro.TableDef 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