diff --git a/pdb-ui/src/main/java/org/lucares/pdbui/CsvReaderSettings.java b/pdb-ui/src/main/java/org/lucares/pdbui/CsvReaderSettings.java index cdd101a..e0efbc0 100644 --- a/pdb-ui/src/main/java/org/lucares/pdbui/CsvReaderSettings.java +++ b/pdb-ui/src/main/java/org/lucares/pdbui/CsvReaderSettings.java @@ -19,36 +19,40 @@ public class CsvReaderSettings { private String timeColumn; + private String valueColumn; + private byte comment = '#'; public CsvReaderSettings() { - this("@timestamp", (byte) ',', Collections.emptyList()); + this("@timestamp", "duration", (byte) ',', Collections.emptyList()); } - private CsvReaderSettings(final String timeColumn, final byte separator, final Collection ignoreColumns) { + private CsvReaderSettings(final String timeColumn, final String valueColumn, final byte separator, + final Collection ignoreColumns) { this.timeColumn = timeColumn; + this.valueColumn = valueColumn; this.separator = separator; this.ignoreColumnNames.addAll(ignoreColumns); } - public static CsvReaderSettings create(final String timeColumn, final byte separator, + public static CsvReaderSettings create(final String timeColumn, final String valueColumn, final byte separator, final String... ignoreColumnNames) { - return new CsvReaderSettings(timeColumn, separator, List.of(ignoreColumnNames)); + return new CsvReaderSettings(timeColumn, valueColumn, separator, List.of(ignoreColumnNames)); } - public static CsvReaderSettings create(final String timeColumn, final char separator, + public static CsvReaderSettings create(final String timeColumn, final String valueColumn, final char separator, final String... ignoreColumnNames) { - return CsvReaderSettings.create(timeColumn, separator, List.of(ignoreColumnNames)); + return CsvReaderSettings.create(timeColumn, valueColumn, separator, List.of(ignoreColumnNames)); } - public static CsvReaderSettings create(final String timeColumn, final char separator, + public static CsvReaderSettings create(final String timeColumn, final String valueColumn, final char separator, final Collection ignoreColumnNames) { Preconditions.checkTrue(separator == (byte) separator, "Only separators that fulfill separator == (byte)separator are supported. " + "This restriction is because the parsing algorithm skips the overhead of " + "translating bytes to characters."); - return new CsvReaderSettings(timeColumn, (byte) separator, ignoreColumnNames); + return new CsvReaderSettings(timeColumn, valueColumn, (byte) separator, ignoreColumnNames); } public String getTimeColumn() { @@ -59,6 +63,14 @@ public class CsvReaderSettings { this.timeColumn = timeColumn; } + public String getValueColumn() { + return valueColumn; + } + + public void setValueColumn(final String valueColumn) { + this.valueColumn = valueColumn; + } + public byte getSeparator() { return separator; } diff --git a/pdb-ui/src/main/java/org/lucares/pdbui/CsvToEntryTransformer.java b/pdb-ui/src/main/java/org/lucares/pdbui/CsvToEntryTransformer.java index 07df387..9a558fe 100644 --- a/pdb-ui/src/main/java/org/lucares/pdbui/CsvToEntryTransformer.java +++ b/pdb-ui/src/main/java/org/lucares/pdbui/CsvToEntryTransformer.java @@ -50,7 +50,7 @@ class CsvToEntryTransformer { int[] columns = null; final byte[] buffer = new byte[4096 * 16]; final int keyTimestamp = Tags.STRING_COMPRESSOR.put(settings.getTimeColumn()); - final int keyDuration = Tags.STRING_COMPRESSOR.put("duration"); + final int keyDuration = Tags.STRING_COMPRESSOR.put(settings.getValueColumn()); final FastISODateParser dateParser = new FastISODateParser(); final Tags additionalTags = initAditionalTags(); diff --git a/pdb-ui/src/main/java/org/lucares/pdbui/IngestionHandler.java b/pdb-ui/src/main/java/org/lucares/pdbui/IngestionHandler.java index 0fd3323..d1d701d 100644 --- a/pdb-ui/src/main/java/org/lucares/pdbui/IngestionHandler.java +++ b/pdb-ui/src/main/java/org/lucares/pdbui/IngestionHandler.java @@ -67,7 +67,7 @@ public final class IngestionHandler implements Callable { } else { in.reset(); final CsvToEntryTransformer csvTransformer = new CsvToEntryTransformer(queue, - CsvReaderSettings.create("@timestamp", ',')); + CsvReaderSettings.create("@timestamp", "duration", ',')); csvTransformer.readCSV(in); } } diff --git a/pdb-ui/src/test/java/org/lucares/pdbui/CsvToEntryTransformerTest.java b/pdb-ui/src/test/java/org/lucares/pdbui/CsvToEntryTransformerTest.java index 0d06da9..75cb053 100644 --- a/pdb-ui/src/test/java/org/lucares/pdbui/CsvToEntryTransformerTest.java +++ b/pdb-ui/src/test/java/org/lucares/pdbui/CsvToEntryTransformerTest.java @@ -49,7 +49,7 @@ public class CsvToEntryTransformerTest { + dateB.format(DateTimeFormatter.ISO_ZONED_DATE_TIME) + ",2,tagValue\n"; final ArrayBlockingQueue queue = db.getQueue(); - final CsvReaderSettings settings = CsvReaderSettings.create("@timestamp", ','); + final CsvReaderSettings settings = CsvReaderSettings.create("@timestamp", "duration", ','); final CsvToEntryTransformer csvToEntryTransformer = new CsvToEntryTransformer(queue, settings); csvToEntryTransformer.readCSV(new ByteArrayInputStream(csv.getBytes(StandardCharsets.UTF_8))); queue.put(Entries.POISON); @@ -88,7 +88,7 @@ public class CsvToEntryTransformerTest { + "2000-01-01T00:00:00.001Z,2,ignoreValue,ignoreValue,tagValue\n"; final ArrayBlockingQueue queue = db.getQueue(); - final CsvReaderSettings settings = CsvReaderSettings.create("@timestamp", ',', "ignoredColumn"); + final CsvReaderSettings settings = CsvReaderSettings.create("@timestamp", "duration", ',', "ignoredColumn"); final CsvToEntryTransformer csvToEntryTransformer = new CsvToEntryTransformer(queue, settings); csvToEntryTransformer.readCSV(new ByteArrayInputStream(csv.getBytes(StandardCharsets.UTF_8))); queue.put(Entries.POISON); diff --git a/pdb-ui/src/test/java/org/lucares/pdbui/PdbControllerTest.java b/pdb-ui/src/test/java/org/lucares/pdbui/PdbControllerTest.java index e9f1c9e..100721b 100644 --- a/pdb-ui/src/test/java/org/lucares/pdbui/PdbControllerTest.java +++ b/pdb-ui/src/test/java/org/lucares/pdbui/PdbControllerTest.java @@ -51,15 +51,16 @@ public class PdbControllerTest { final String additionalValue = "additionalValue"; final String ignoredColumn = "ignoredColumn"; final String timeColumn = "time"; + final String valueColumn = "value"; final OffsetDateTime dateA = OffsetDateTime.now(); final OffsetDateTime dateB = OffsetDateTime.now(); final String csv = "# first line is a comment\n"// - + timeColumn + ",duration,tag," + ignoredColumn + "\n"// + + timeColumn + "," + valueColumn + ",tag," + ignoredColumn + "\n"// + dateA.format(DateTimeFormatter.ISO_ZONED_DATE_TIME) + ",1,tagValue,ignoredValue\n"// + dateB.format(DateTimeFormatter.ISO_ZONED_DATE_TIME) + ",2,tagValue,ignoredValue\n"; - final CsvReaderSettings settings = CsvReaderSettings.create(timeColumn, ',', ignoredColumn); + final CsvReaderSettings settings = CsvReaderSettings.create(timeColumn, valueColumn, ',', ignoredColumn); settings.putAdditionalTag(additionalColumn, additionalValue); uploadCsv(settings, csv); {