diff --git a/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/AxisScale.java b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/AxisScale.java new file mode 100644 index 0000000..4baf4f9 --- /dev/null +++ b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/AxisScale.java @@ -0,0 +1,5 @@ +package org.lucares.pdb.plot.api; + +public enum AxisScale { + LINEAR, LOG10, LOG2 +} diff --git a/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/PlotSettings.java b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/PlotSettings.java index 35bc8e1..bb9bd68 100644 --- a/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/PlotSettings.java +++ b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/PlotSettings.java @@ -30,6 +30,8 @@ public class PlotSettings { private String dateRange; + private AxisScale yAxisScale; + public String getQuery() { return query; } @@ -142,11 +144,18 @@ public class PlotSettings { } } + public void setYAxisScale(final AxisScale axisScale) { + this.yAxisScale = axisScale; + } + + public AxisScale getYAxisScale() { + return yAxisScale; + } + @Override public String toString() { return "PlotSettings [query=" + query + ", height=" + height + ", width=" + width + ", groupBy=" + groupBy + ", limitBy=" + limitBy + ", limit=" + limit + ", dateFrom=" + dateFrom + ", dateRange=" + dateRange - + "]"; + + ", axisScale=" + yAxisScale + "]"; } - } 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 b0170bc..3d4899b 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,6 +2,8 @@ package org.lucares.recommind.logs; import java.util.Collection; +import org.lucares.pdb.plot.api.AxisScale; + public class GnuplotFileGenerator { public String generate(final GnuplotSettings settings, final Collection dataSeries) { @@ -20,6 +22,11 @@ public class GnuplotFileGenerator { appendfln(result, "set xtics rotate by %d", settings.getRotateXAxisLabel()); appendfln(result, "set ylabel \"%s\"", settings.getYlabel()); + if (settings.getYAxisScale() == AxisScale.LOG10) { + appendfln(result, "set logscale y"); + } else if (settings.getYAxisScale() == AxisScale.LOG2) { + appendfln(result, "set logscale y 2"); + } appendfln(result, "set output \"%s\"", settings.getOutput().toAbsolutePath().toString().replace("\\", "/")); appendf(result, "plot "); 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 0779e3d..9a6130c 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,6 +2,8 @@ package org.lucares.recommind.logs; import java.nio.file.Path; +import org.lucares.pdb.plot.api.AxisScale; + public class GnuplotSettings { private String terminal = "png"; private int height = 1200; @@ -25,6 +27,7 @@ public class GnuplotSettings { // set xtics rotate by 80 private int rotateXAxisLabel = -80; + private AxisScale yAxisScale; public GnuplotSettings(final Path output) { this.output = output; @@ -106,6 +109,14 @@ public class GnuplotSettings { return output; } + public void setYAxisScale(final AxisScale yAxisScale) { + this.yAxisScale = yAxisScale; + } + + public AxisScale getYAxisScale() { + return yAxisScale; + } + // plot 'sample.txt' using 1:2 title 'Bytes' with linespoints 2 } 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 c8475d0..381e07f 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 @@ -110,6 +110,7 @@ public class Plotter { gnuplotSettings.setHeight(height); gnuplotSettings.setWidth(width); gnuplotSettings.setFormatX(getFormatX(minDate, maxDate)); + gnuplotSettings.setYAxisScale(plotSettings.getYAxisScale()); gnuplot.plot(gnuplotSettings, dataSeries); return new PlotResult(outputFile.getFileName(), dataSeries); 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 d6c4390..d5bbab7 100644 --- a/pdb-ui/src/main/java/org/lucares/pdbui/PlotSettingsTransformer.java +++ b/pdb-ui/src/main/java/org/lucares/pdbui/PlotSettingsTransformer.java @@ -1,9 +1,11 @@ package org.lucares.pdbui; +import org.lucares.pdb.plot.api.AxisScale; import org.lucares.pdb.plot.api.Limit; import org.lucares.pdb.plot.api.PlotSettings; import org.lucares.pdbui.domain.LimitBy; import org.lucares.pdbui.domain.PlotRequest; +import org.lucares.pdbui.domain.YAxis; class PlotSettingsTransformer { static PlotSettings toSettings(final PlotRequest request) { @@ -18,10 +20,24 @@ class PlotSettingsTransformer { result.setLimitBy(toLimit(request.getLimitBy())); result.setDateFrom(request.getDateFrom()); result.setDateRange(request.getDateRange()); + result.setYAxisScale(toAxisScale(request.getAxisScale())); return result; } + private static AxisScale toAxisScale(final YAxis yAxis) { + switch (yAxis) { + case LINEAR: + return AxisScale.LINEAR; + case LOG10: + return AxisScale.LOG10; + case LOG2: + return AxisScale.LOG2; + default: + throw new IllegalStateException("unhandled enum: " + yAxis); + } + } + private static Limit toLimit(final LimitBy limitBy) { switch (limitBy) { case NO_LIMIT: diff --git a/pdb-ui/src/main/java/org/lucares/pdbui/domain/PlotRequest.java b/pdb-ui/src/main/java/org/lucares/pdbui/domain/PlotRequest.java index 619d8a6..2ce8741 100644 --- a/pdb-ui/src/main/java/org/lucares/pdbui/domain/PlotRequest.java +++ b/pdb-ui/src/main/java/org/lucares/pdbui/domain/PlotRequest.java @@ -13,6 +13,8 @@ public class PlotRequest { private LimitBy limitBy = LimitBy.NO_LIMIT; + private YAxis yAxis = YAxis.LINEAR; + private int limit = Integer.MAX_VALUE; private String dateFrom; @@ -91,4 +93,11 @@ public class PlotRequest { this.dateRange = dateRange; } + public YAxis getAxisScale() { + return yAxis; + } + + public void setAxisScale(final YAxis yAxis) { + this.yAxis = yAxis; + } } diff --git a/pdb-ui/src/main/java/org/lucares/pdbui/domain/YAxis.java b/pdb-ui/src/main/java/org/lucares/pdbui/domain/YAxis.java new file mode 100644 index 0000000..2881899 --- /dev/null +++ b/pdb-ui/src/main/java/org/lucares/pdbui/domain/YAxis.java @@ -0,0 +1,5 @@ +package org.lucares.pdbui.domain; + +public enum YAxis { + LINEAR, LOG10, LOG2 +} diff --git a/pdb-ui/src/main/resources/resources/js/search.js b/pdb-ui/src/main/resources/resources/js/search.js index 17a86ef..a899aa5 100644 --- a/pdb-ui/src/main/resources/resources/js/search.js +++ b/pdb-ui/src/main/resources/resources/js/search.js @@ -96,6 +96,7 @@ function plot(event){ request['limit'] = parseInt($('#search-limit-value').val()); request['dateFrom'] = $('#search-date-from').val(); request['dateRange'] = $('#search-date-range').val(); + request['axisScale'] = $('#search-y-axis-scale').val(); var success = function(response){ diff --git a/pdb-ui/src/main/resources/templates/main.html b/pdb-ui/src/main/resources/templates/main.html index 55670e7..f5e0e9a 100644 --- a/pdb-ui/src/main/resources/templates/main.html +++ b/pdb-ui/src/main/resources/templates/main.html @@ -46,6 +46,13 @@