From 64db4c48a28fcdde7ec9dabcdac760655916cdff Mon Sep 17 00:00:00 2001 From: ahr Date: Mon, 6 Nov 2017 16:57:22 +0100 Subject: [PATCH] add plots for percentiles --- .../java/org/lucares/memory/MemoryScale.java | 1 + pdb-plotting/build.gradle | 1 + .../pdb/plot/api/AggregateHandler.java | 5 +- .../lucares/pdb/plot/api/AggregatedData.java | 21 +++ .../pdb/plot/api/AggregatedDataEntry.java | 18 +++ .../pdb/plot/api/CustomAggregator.java | 9 ++ .../lucares/pdb/plot/api/MeanAggregate.java | 8 +- .../lucares/pdb/plot/api/NullAggregate.java | 7 +- .../pdb/plot/api/NullCustomAggregator.java | 16 ++ .../pdb/plot/api/PercentileAggregate.java | 50 ++++++ .../plot/api/PercentileCustomAggregator.java | 54 +++++++ .../lucares/recommind/logs/CsvSummary.java | 10 +- .../lucares/recommind/logs/DataSeries.java | 146 +++++++++--------- .../recommind/logs/GnuplotFileGenerator.java | 3 +- .../recommind/logs/GnuplotSettings.java | 1 - .../org/lucares/recommind/logs/Plotter.java | 28 ++-- .../pdbui/PlotSettingsTransformer.java | 8 +- .../java/org/lucares/utils/MiniMapTest.java | 2 - performanceDb/build.gradle | 28 ++-- 19 files changed, 301 insertions(+), 115 deletions(-) create mode 100644 pdb-plotting/src/main/java/org/lucares/pdb/plot/api/AggregatedData.java create mode 100644 pdb-plotting/src/main/java/org/lucares/pdb/plot/api/AggregatedDataEntry.java create mode 100644 pdb-plotting/src/main/java/org/lucares/pdb/plot/api/CustomAggregator.java create mode 100644 pdb-plotting/src/main/java/org/lucares/pdb/plot/api/NullCustomAggregator.java create mode 100644 pdb-plotting/src/main/java/org/lucares/pdb/plot/api/PercentileAggregate.java create mode 100644 pdb-plotting/src/main/java/org/lucares/pdb/plot/api/PercentileCustomAggregator.java diff --git a/pdb-api/src/test/java/org/lucares/memory/MemoryScale.java b/pdb-api/src/test/java/org/lucares/memory/MemoryScale.java index 5e0cdfd..12e5ecb 100644 --- a/pdb-api/src/test/java/org/lucares/memory/MemoryScale.java +++ b/pdb-api/src/test/java/org/lucares/memory/MemoryScale.java @@ -25,6 +25,7 @@ public class MemoryScale { runGc(); long memoryAfter = getUsedMemory(); System.out.println("used memory: " + (memoryAfter - memoryBefore)); + handle.hashCode(); // use the variable, so causes no warnings and is not removed by JIT compiler } private static Object createObject(){ diff --git a/pdb-plotting/build.gradle b/pdb-plotting/build.gradle index 0b94c8e..c706a7e 100644 --- a/pdb-plotting/build.gradle +++ b/pdb-plotting/build.gradle @@ -1,6 +1,7 @@ dependencies { compile project(':performanceDb') + compile 'org.lucares:primitiveCollections:0.1.20171007100354' compile 'com.fasterxml.jackson.core:jackson-databind:2.9.1' compile 'com.google.guava:guava:23.0' } diff --git a/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/AggregateHandler.java b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/AggregateHandler.java index c35dd07..fbb4e68 100644 --- a/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/AggregateHandler.java +++ b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/AggregateHandler.java @@ -6,11 +6,14 @@ import org.lucares.recommind.logs.DataSeries; public interface AggregateHandler { - void addStats(StringBuilder result, Collection dataSeries); + void addGnuplotDefinitions(StringBuilder result, String separator, Collection dataSeries); default void appendfln(final StringBuilder builder, final String format, final Object... args) { builder.append(String.format(format + "\n", args)); } void addPlots(StringBuilder result, Collection dataSeries); + + CustomAggregator createCustomAggregator(long minDate, long maxDate); + } diff --git a/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/AggregatedData.java b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/AggregatedData.java new file mode 100644 index 0000000..51b8898 --- /dev/null +++ b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/AggregatedData.java @@ -0,0 +1,21 @@ +package org.lucares.pdb.plot.api; + +import java.util.List; + +public class AggregatedData { +private final String label; +private final List data; +public AggregatedData(String label, List data) { + super(); + this.label = label; + this.data = data; +} +public String getLabel() { + return label; +} +public List getData() { + return data; +} + + +} diff --git a/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/AggregatedDataEntry.java b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/AggregatedDataEntry.java new file mode 100644 index 0000000..535ae9e --- /dev/null +++ b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/AggregatedDataEntry.java @@ -0,0 +1,18 @@ +package org.lucares.pdb.plot.api; + +public class AggregatedDataEntry { +private final double epochSeconds; +private final long value; +public AggregatedDataEntry(double epochSeconds, long value) { + super(); + this.epochSeconds = epochSeconds; + this.value = value; +} +public double getEpochSeconds() { + return epochSeconds; +} +public long getValue() { + return value; +} + +} diff --git a/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/CustomAggregator.java b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/CustomAggregator.java new file mode 100644 index 0000000..be0a8e5 --- /dev/null +++ b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/CustomAggregator.java @@ -0,0 +1,9 @@ +package org.lucares.pdb.plot.api; + +public interface CustomAggregator { + + void addValue(long epochMilli, long value); + + AggregatedData getAggregatedData(); + +} diff --git a/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/MeanAggregate.java b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/MeanAggregate.java index e04a321..2ef51e6 100644 --- a/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/MeanAggregate.java +++ b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/MeanAggregate.java @@ -9,7 +9,7 @@ public class MeanAggregate implements AggregateHandler{ @Override - public void addStats(StringBuilder result, Collection dataSeries) { + public void addGnuplotDefinitions(StringBuilder result, String separator, Collection dataSeries) { int count = 1; for (final DataSeries dataSerie : dataSeries) { @@ -24,7 +24,13 @@ public class MeanAggregate implements AggregateHandler{ for (final DataSeries dataSerie : dataSeries) { appendfln(result, "A%d_mean title '%s Mean', \\", count, dataSerie.getTitle(), dataSerie.getTitle()); + count++; } } + @Override + public CustomAggregator createCustomAggregator(long minDate, long maxDate) { + return new NullCustomAggregator(); + } + } diff --git a/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/NullAggregate.java b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/NullAggregate.java index d1c948a..6304d6e 100644 --- a/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/NullAggregate.java +++ b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/NullAggregate.java @@ -8,7 +8,7 @@ public class NullAggregate implements AggregateHandler { @Override - public void addStats(StringBuilder result, Collection dataSeries) { + public void addGnuplotDefinitions(StringBuilder result, String separator ,Collection dataSeries) { // nothing to do; this is a Null-Object } @@ -17,4 +17,9 @@ public class NullAggregate implements AggregateHandler { // nothing to do; this is a Null-Object } + @Override + public CustomAggregator createCustomAggregator(long minDate, long maxDate) { + return new NullCustomAggregator(); + } + } diff --git a/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/NullCustomAggregator.java b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/NullCustomAggregator.java new file mode 100644 index 0000000..d6a5eae --- /dev/null +++ b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/NullCustomAggregator.java @@ -0,0 +1,16 @@ +package org.lucares.pdb.plot.api; + +public class NullCustomAggregator implements CustomAggregator{ + + @Override + public void addValue(long epochMilli, long value) { + // TODO Auto-generated method stub + + } + + @Override + public AggregatedData getAggregatedData() { + return null; + } + +} diff --git a/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/PercentileAggregate.java b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/PercentileAggregate.java new file mode 100644 index 0000000..562a579 --- /dev/null +++ b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/PercentileAggregate.java @@ -0,0 +1,50 @@ +package org.lucares.pdb.plot.api; + +import java.util.Collection; + +import org.lucares.recommind.logs.DataSeries; + +public class PercentileAggregate implements AggregateHandler{ + + private double percentile; + + /** + * + * @param percentile range > 0.0 and < 1.0) + */ + public PercentileAggregate(double percentile) { + this.percentile = percentile; + } + + @Override + public void addGnuplotDefinitions(StringBuilder result, String separator, Collection dataSeries) { + + for (DataSeries dataSerie : dataSeries) { + if (dataSerie.getAggregatedData() != null){ + + appendfln(result, "$%s << EOD", dataSerie.getId()); + + for (AggregatedDataEntry aggregatedData : dataSerie.getAggregatedData().getData()) { + appendfln(result, "%.3f%s%d", aggregatedData.getEpochSeconds(), separator, aggregatedData.getValue()); + } + + + appendfln(result, "EOD", dataSerie.getId()); + } + } + + } + + @Override + public void addPlots(StringBuilder result, Collection dataSeries) { + for (DataSeries dataSerie : dataSeries) { + appendfln(result, "'$%s' using 1:2 title '%s' with line, \\", dataSerie.getId(), dataSerie.getTitle()+" " +dataSerie.getAggregatedData().getLabel()); + } + } + + @Override + public CustomAggregator createCustomAggregator(long minDate, long maxDate) { + return new PercentileCustomAggregator(percentile, minDate, maxDate); + } + +} diff --git a/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/PercentileCustomAggregator.java b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/PercentileCustomAggregator.java new file mode 100644 index 0000000..5be09ba --- /dev/null +++ b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/PercentileCustomAggregator.java @@ -0,0 +1,54 @@ +package org.lucares.pdb.plot.api; + +import java.util.ArrayList; +import java.util.List; + +import org.lucares.collections.IntList; + +public class PercentileCustomAggregator implements CustomAggregator{ + + private double percentile; + private long fromEpochMilli; + private long numBuckets; + private long bucketSize; + + private List buckets = new ArrayList<>(); + + public PercentileCustomAggregator(double percentile, long fromEpochMilli, long toEpochMilli) { + this.percentile = percentile; + this.fromEpochMilli = fromEpochMilli; + this.numBuckets = 50; + this.bucketSize = (toEpochMilli - fromEpochMilli) / numBuckets; + for(int i = 0; i < numBuckets; i++){ + buckets.add(new IntList()); + } + } + + @Override + public void addValue(long epochMilli, long value) { + final int bucket = (int) ((epochMilli - fromEpochMilli ) / bucketSize); + buckets.get(bucket).add((int)value); // TODO we should use a LongList instead of an IntList + } + + @Override + public AggregatedData getAggregatedData() { + final List data = new ArrayList<>((int)numBuckets); + + for (int i= 0; i < numBuckets; i++) { + final IntList values = buckets.get(i); + values.sort(); + final int indexOfPercentile = (int) (values.size() * percentile); + final long value = values.size() > indexOfPercentile ? values.get(indexOfPercentile) : 0; + final long epochMilli = fromEpochMilli + i*bucketSize + bucketSize/2; // the middle of the bucket + final double epochSecond = epochMilli / 1000.0; // gnuplot wants the time in seconds + final AggregatedDataEntry aggregatedDataEntry = new AggregatedDataEntry(epochSecond, value); + + if (value > 0){ + data.add(aggregatedDataEntry ); + } + } + final String title = String.format("%.1f%% percentile", percentile*100); + return new AggregatedData(title, data); + } + +} diff --git a/pdb-plotting/src/main/java/org/lucares/recommind/logs/CsvSummary.java b/pdb-plotting/src/main/java/org/lucares/recommind/logs/CsvSummary.java index f1432d0..1f39cce 100644 --- a/pdb-plotting/src/main/java/org/lucares/recommind/logs/CsvSummary.java +++ b/pdb-plotting/src/main/java/org/lucares/recommind/logs/CsvSummary.java @@ -2,17 +2,21 @@ package org.lucares.recommind.logs; import java.io.File; +import org.lucares.pdb.plot.api.AggregatedData; + class CsvSummary { private final int values; private long maxValue; private File dataFile; + private AggregatedData aggregatedData; - public CsvSummary(File dataFile, final int values, long maxValue) { + public CsvSummary(File dataFile, final int values, long maxValue, AggregatedData aggregatedData) { super(); this.dataFile = dataFile; this.values = values; this.maxValue = maxValue; + this.aggregatedData = aggregatedData; } public File getDataFile() { @@ -26,4 +30,8 @@ class CsvSummary { public long getMaxValue() { return maxValue; } + + public AggregatedData getAggregatedData() { + return aggregatedData; + } } diff --git a/pdb-plotting/src/main/java/org/lucares/recommind/logs/DataSeries.java b/pdb-plotting/src/main/java/org/lucares/recommind/logs/DataSeries.java index e443a0a..c868071 100644 --- a/pdb-plotting/src/main/java/org/lucares/recommind/logs/DataSeries.java +++ b/pdb-plotting/src/main/java/org/lucares/recommind/logs/DataSeries.java @@ -1,76 +1,70 @@ -package org.lucares.recommind.logs; - -import java.io.File; -import java.util.Comparator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -public class DataSeries { - public static final Comparator BY_NUMBER_OF_VALUES = (a, b) -> { - return a.getValues() - b.getValues(); - }; - - public static final Comparator BY_MAX_VALUE = (a, b) -> { - final long result = a.getMaxValue() - b.getMaxValue(); - return result <0 ? -1 : (result > 0 ? 1 : 0); - }; - - private final File dataFile; - - private final String title; - - private final GnuplotColor color; - - private final Integer pointType; - - private final int values; - - private long maxValue; - - public DataSeries(final File dataFile, final String title, final int values, long maxValue) { - super(); - this.dataFile = dataFile; - this.title = title; - this.values = values; - this.maxValue = maxValue; - this.color = null; - this.pointType = null; - } - - public GnuplotColor getColor() { - return color; - } - - public Integer getPointType() { - return pointType; - } - - public File getDataFile() { - return dataFile; - } - - public String getTitle() { - return title; - } - - public int getValues() { - return values; - } - - public long getMaxValue() { - return maxValue; - } - - public static Map toMap(final List dataSeries) { - final Map result = new LinkedHashMap<>(); - - for (final DataSeries dataSerie : dataSeries) { - - result.put(dataSerie.getTitle(), dataSerie.values); - - } - - return result; - } -} +package org.lucares.recommind.logs; + +import java.io.File; +import java.util.Comparator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import org.lucares.pdb.plot.api.AggregatedData; + +public class DataSeries { + public static final Comparator BY_NUMBER_OF_VALUES = ( + a, b) -> { + return a.getValues() - b.getValues(); + }; + + public static final Comparator BY_MAX_VALUE = (a, b) -> { + final long result = a.getMaxValue() - b.getMaxValue(); + return result < 0 ? -1 : (result > 0 ? 1 : 0); + }; + + private final String title; + + private CsvSummary csvSummary; + + private String id; + + public DataSeries(String id, String title, CsvSummary csvSummary) { + this.id = id; + this.title = title; + this.csvSummary = csvSummary; + } + public String getId() { + return id; + } + + public File getDataFile() { + return csvSummary.getDataFile(); + } + + public String getTitle() { + return title; + } + + public int getValues() { + return csvSummary.getValues(); + } + + public long getMaxValue() { + return csvSummary.getMaxValue(); + } + + public AggregatedData getAggregatedData() { + return csvSummary.getAggregatedData(); + } + + public static Map toMap(final List dataSeries) { + final Map result = new LinkedHashMap<>(); + + for (final DataSeries dataSerie : dataSeries) { + + result.put(dataSerie.getTitle(), dataSerie.getValues()); + + } + + return result; + } + + +} diff --git a/pdb-plotting/src/main/java/org/lucares/recommind/logs/GnuplotFileGenerator.java b/pdb-plotting/src/main/java/org/lucares/recommind/logs/GnuplotFileGenerator.java index 996b406..b89fc7d 100644 --- a/pdb-plotting/src/main/java/org/lucares/recommind/logs/GnuplotFileGenerator.java +++ b/pdb-plotting/src/main/java/org/lucares/recommind/logs/GnuplotFileGenerator.java @@ -2,7 +2,6 @@ package org.lucares.recommind.logs; import java.util.Collection; -import org.lucares.pdb.plot.api.AggreateInternal; import org.lucares.pdb.plot.api.AxisScale; public class GnuplotFileGenerator { @@ -18,7 +17,7 @@ public class GnuplotFileGenerator { appendfln(result, "set datafile separator \"%s\"", settings.getDatafileSeparator()); - settings.getAggregate().addStats(result, dataSeries); + settings.getAggregate().addGnuplotDefinitions(result, settings.getDatafileSeparator(), dataSeries); appendfln(result, "set timefmt '%s'", settings.getTimefmt()); diff --git a/pdb-plotting/src/main/java/org/lucares/recommind/logs/GnuplotSettings.java b/pdb-plotting/src/main/java/org/lucares/recommind/logs/GnuplotSettings.java index cf1ef7c..551a10d 100644 --- a/pdb-plotting/src/main/java/org/lucares/recommind/logs/GnuplotSettings.java +++ b/pdb-plotting/src/main/java/org/lucares/recommind/logs/GnuplotSettings.java @@ -2,7 +2,6 @@ package org.lucares.recommind.logs; import java.nio.file.Path; -import org.lucares.pdb.plot.api.AggreateInternal; import org.lucares.pdb.plot.api.AggregateHandler; import org.lucares.pdb.plot.api.AxisScale; diff --git a/pdb-plotting/src/main/java/org/lucares/recommind/logs/Plotter.java b/pdb-plotting/src/main/java/org/lucares/recommind/logs/Plotter.java index 91591a6..09b44d7 100644 --- a/pdb-plotting/src/main/java/org/lucares/recommind/logs/Plotter.java +++ b/pdb-plotting/src/main/java/org/lucares/recommind/logs/Plotter.java @@ -26,8 +26,7 @@ import org.lucares.pdb.api.Entry; import org.lucares.pdb.api.GroupResult; import org.lucares.pdb.api.Result; import org.lucares.pdb.api.Tags; -import org.lucares.pdb.plot.api.AggreateInternal; -import org.lucares.pdb.plot.api.AggregateHandler; +import org.lucares.pdb.plot.api.CustomAggregator; import org.lucares.pdb.plot.api.Limit; import org.lucares.pdb.plot.api.PlotSettings; import org.lucares.performance.db.PerformanceDb; @@ -92,6 +91,7 @@ public class Plotter { final Result result = db.get(query, groupBy); + int idCounter = 0; for (final GroupResult groupResult : result.getGroups()) { final Stream entries = groupResult.asStream(); @@ -99,10 +99,11 @@ public class Plotter { final CsvSummary csvSummary = toCsv(entries, tmpDir, dateFrom, dateTo, plotSettings); final String title = title(groupResult.getGroupedBy(), csvSummary.getValues()); - final DataSeries dataSerie = new DataSeries(csvSummary.getDataFile(), title, csvSummary.getValues(), csvSummary.getMaxValue()); + final DataSeries dataSerie = new DataSeries("id"+idCounter, title, csvSummary); if (dataSerie.getValues() > 0) { dataSeries.add(dataSerie); } + idCounter++; } if (dataSeries.isEmpty()) { @@ -233,8 +234,7 @@ public class Plotter { final long fromEpochMilli = dateFrom.toInstant().toEpochMilli(); final long toEpochMilli = dateTo.toInstant().toEpochMilli(); final boolean useMillis = (toEpochMilli - fromEpochMilli) < TimeUnit.MINUTES.toMillis(5); - final AggregateHandler aggregate = plotSettings.getAggregate(); - + final CustomAggregator aggregator = plotSettings.getAggregate().createCustomAggregator(fromEpochMilli, toEpochMilli); long maxValue = 0; long ignoredValues = 0; @@ -248,26 +248,30 @@ public class Plotter { while (it.hasNext()) { final Entry entry = it.next(); - if (fromEpochMilli <= entry.getEpochMilli() && entry.getEpochMilli() <= toEpochMilli) { + long epochMilli = entry.getEpochMilli(); + if (fromEpochMilli <= epochMilli && epochMilli <= toEpochMilli) { - final String value = longToString(entry.getValue()); + long value = entry.getValue(); + final String stringValue = longToString(value); final String formattedDate; if (useMillis){ formattedDateBuilder.delete(0, formattedDateBuilder.length()); - formatter.format("%.3f", entry.getEpochMilli() / 1000.0); + formatter.format("%.3f", epochMilli / 1000.0); formattedDate = formattedDateBuilder.toString(); }else { - formattedDate = String.valueOf(entry.getEpochMilli() / 1000); + formattedDate = String.valueOf(epochMilli / 1000); } output.write(formattedDate); output.write(separator); - output.write(value); + output.write(stringValue); output.write(newline); + aggregator.addValue(epochMilli, value); + count++; - maxValue = Math.max(maxValue, entry.getValue()); + maxValue = Math.max(maxValue, value); }else { ignoredValues++; } @@ -275,7 +279,7 @@ public class Plotter { } METRICS_LOGGER.debug("wrote {} values to csv in: {}ms (ignored {} values) use millis: {}", count, (System.nanoTime() - start) / 1_000_000.0, ignoredValues, Boolean.toString(useMillis)); - return new CsvSummary(dataFile, count, maxValue); + return new CsvSummary(dataFile, count, maxValue, aggregator.getAggregatedData()); } private static String longToString(final long value){ diff --git a/pdb-ui/src/main/java/org/lucares/pdbui/PlotSettingsTransformer.java b/pdb-ui/src/main/java/org/lucares/pdbui/PlotSettingsTransformer.java index 223bedc..bbb5eff 100644 --- a/pdb-ui/src/main/java/org/lucares/pdbui/PlotSettingsTransformer.java +++ b/pdb-ui/src/main/java/org/lucares/pdbui/PlotSettingsTransformer.java @@ -1,11 +1,11 @@ package org.lucares.pdbui; -import org.lucares.pdb.plot.api.AggreateInternal; import org.lucares.pdb.plot.api.AggregateHandler; import org.lucares.pdb.plot.api.AxisScale; import org.lucares.pdb.plot.api.Limit; import org.lucares.pdb.plot.api.MeanAggregate; import org.lucares.pdb.plot.api.NullAggregate; +import org.lucares.pdb.plot.api.PercentileAggregate; import org.lucares.pdb.plot.api.PlotSettings; import org.lucares.pdbui.domain.Aggregate; import org.lucares.pdbui.domain.LimitBy; @@ -36,9 +36,9 @@ class PlotSettingsTransformer { switch (aggregate) { case NONE:return new NullAggregate(); case MEAN:return new MeanAggregate(); - case PERCENTILE95:return new NullAggregate(); - case PERCENTILE99:return new NullAggregate(); - case PERCENTILE999:return new NullAggregate(); + case PERCENTILE95:return new PercentileAggregate(0.95); + case PERCENTILE99:return new PercentileAggregate(0.99); + case PERCENTILE999:return new PercentileAggregate(0.999); } throw new IllegalStateException("unhandled enum: " + aggregate); } diff --git a/pdb-utils/src/test/java/org/lucares/utils/MiniMapTest.java b/pdb-utils/src/test/java/org/lucares/utils/MiniMapTest.java index 1b8b321..9519881 100644 --- a/pdb-utils/src/test/java/org/lucares/utils/MiniMapTest.java +++ b/pdb-utils/src/test/java/org/lucares/utils/MiniMapTest.java @@ -1,7 +1,5 @@ package org.lucares.utils; -import java.util.Map; - import org.testng.Assert; import org.testng.annotations.Test; diff --git a/performanceDb/build.gradle b/performanceDb/build.gradle index 6b81f6f..1c5cb96 100644 --- a/performanceDb/build.gradle +++ b/performanceDb/build.gradle @@ -1,14 +1,14 @@ - -dependencies { - compile project(':pdb-api') - compile project(':data-store') - compile project(':file-utils') - //compile 'org.lucares:ludb:1.0.20170408081113' - compile 'com.fasterxml.jackson.core:jackson-databind:2.9.1' - compile 'org.apache.commons:commons-collections4:4.1' - - - compile 'org.apache.logging.log4j:log4j-api:2.9.1' - compile 'org.apache.logging.log4j:log4j-core:2.9.1' - compile 'org.apache.logging.log4j:log4j-slf4j-impl:2.9.1' -} + +dependencies { + compile project(':pdb-api') + compile project(':data-store') + compile project(':file-utils') + //compile 'org.lucares:ludb:0.1.20171007100354' + compile 'com.fasterxml.jackson.core:jackson-databind:2.9.1' + compile 'org.apache.commons:commons-collections4:4.1' + + + compile 'org.apache.logging.log4j:log4j-api:2.9.1' + compile 'org.apache.logging.log4j:log4j-core:2.9.1' + compile 'org.apache.logging.log4j:log4j-slf4j-impl:2.9.1' +}