From 46ce445010ebe5e665b78094a3bcadfe601fba2f Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Sat, 1 Apr 2017 18:27:43 +0200 Subject: [PATCH] return information about the plotted sequences this information can be used for tests --- .../lucares/recommind/logs/DataSeries.java | 15 ++++++++ .../recommind/logs/GnuplotFileGenerator.java | 2 +- .../recommind/logs/GnuplotSettings.java | 12 ++---- .../lucares/recommind/logs/PlotResult.java | 23 ++++++++++++ .../org/lucares/recommind/logs/Plotter.java | 37 ++----------------- .../java/org/lucares/pdbui/BadRequest.java | 18 +++++++++ .../java/org/lucares/pdbui/PdbController.java | 13 +++---- .../lucares/pdbui/domain/PlotResponse.java | 19 +++++++--- 8 files changed, 84 insertions(+), 55 deletions(-) create mode 100644 pdb-plotting/src/main/java/org/lucares/recommind/logs/PlotResult.java create mode 100644 pdb-ui/src/main/java/org/lucares/pdbui/BadRequest.java 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 a6bce54..b974738 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 @@ -2,6 +2,9 @@ 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_VALUES = (a, b) -> { @@ -46,4 +49,16 @@ public class DataSeries { public int getValues() { return values; } + + 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; + } } 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 62ada12..9a7cc5a 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 @@ -21,7 +21,7 @@ public class GnuplotFileGenerator { appendfln(result, "set ylabel \"%s\"", settings.getYlabel()); - appendfln(result, "set output \"%s\"", settings.getOutput().getAbsolutePath()); + appendfln(result, "set output \"%s\"", settings.getOutput().toAbsolutePath()); appendf(result, "plot "); for (final DataSeries dataSerie : dataSeries) { 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 8645d88..0779e3d 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 @@ -1,6 +1,6 @@ package org.lucares.recommind.logs; -import java.io.File; +import java.nio.file.Path; public class GnuplotSettings { private String terminal = "png"; @@ -21,12 +21,12 @@ public class GnuplotSettings { private String ylabel = "Duration in ms"; // set output "datausage.png" - private File output = new File("/tmp/out.png"); + private final Path output; // set xtics rotate by 80 private int rotateXAxisLabel = -80; - public GnuplotSettings(final File output) { + public GnuplotSettings(final Path output) { this.output = output; } @@ -102,14 +102,10 @@ public class GnuplotSettings { this.ylabel = ylabel; } - public File getOutput() { + public Path getOutput() { return output; } - public void setOutput(final File output) { - this.output = output; - } - // plot 'sample.txt' using 1:2 title 'Bytes' with linespoints 2 } diff --git a/pdb-plotting/src/main/java/org/lucares/recommind/logs/PlotResult.java b/pdb-plotting/src/main/java/org/lucares/recommind/logs/PlotResult.java new file mode 100644 index 0000000..155bc1b --- /dev/null +++ b/pdb-plotting/src/main/java/org/lucares/recommind/logs/PlotResult.java @@ -0,0 +1,23 @@ +package org.lucares.recommind.logs; + +import java.nio.file.Path; +import java.util.List; + +public class PlotResult { + private final Path imageName; + private final List dataSeries; + + public PlotResult(final Path imageName, final List dataSeries) { + super(); + this.imageName = imageName; + this.dataSeries = dataSeries; + } + + public Path getImageName() { + return imageName; + } + + public List getDataSeries() { + return dataSeries; + } +} 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 7f5725a..a23b5ae 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 @@ -9,7 +9,6 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.LinkOption; import java.nio.file.Path; -import java.nio.file.Paths; import java.time.Instant; import java.time.OffsetDateTime; import java.time.ZoneOffset; @@ -29,7 +28,6 @@ import org.lucares.pdb.api.Tags; import org.lucares.pdb.plot.api.Limit; import org.lucares.pdb.plot.api.PlotSettings; import org.lucares.performance.db.FileUtils; -import org.lucares.performance.db.Grouping; import org.lucares.performance.db.PerformanceDb; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -59,7 +57,7 @@ public class Plotter { return outputDir; } - public File plot(final PlotSettings plotSettings) throws InternalPlottingException { + public PlotResult plot(final PlotSettings plotSettings) throws InternalPlottingException { final String tmpSubDir = uniqueDirectoryName(); final Path tmpDir = tmpBaseDir.resolve(tmpSubDir); @@ -102,14 +100,15 @@ public class Plotter { sortAndLimit(dataSeries, plotSettings); - final File outputFile = File.createTempFile("out", ".png", outputDir.toFile()); + final Path outputFile = Files.createTempFile(outputDir, "out", ".png"); final Gnuplot gnuplot = new Gnuplot(tmpBaseDir); final GnuplotSettings gnuplotSettings = new GnuplotSettings(outputFile); gnuplotSettings.setHeight(height); gnuplotSettings.setWidth(width); gnuplotSettings.setFormatX(getFormatX(minDate, maxDate)); gnuplot.plot(gnuplotSettings, dataSeries); - return outputFile; + + return new PlotResult(outputFile.getFileName(), dataSeries); } catch (final InterruptedException e) { Thread.currentThread().interrupt(); throw new IllegalStateException("Plotting was interrupted."); @@ -176,34 +175,6 @@ public class Plotter { } - public static void main(final String[] args) throws Exception { - final Path dataDirectory = Paths.get(args[0]); - final Path outputDirectory = Paths.get(args[1]); - final String query = args[2]; - final Path tmpBaseDir = Paths.get(args[0], "tmp", "gnuplot"); - Files.createDirectories(tmpBaseDir); - Files.createDirectories(outputDirectory); - try { - - try (PerformanceDb db = new PerformanceDb(dataDirectory)) { - final Plotter plotter = new Plotter(db, tmpBaseDir, outputDirectory); - // query, 1600, 1200, Grouping.NO_GROUPING - - final PlotSettings plotSettings = new PlotSettings(); - plotSettings.setQuery(query); - plotSettings.setWidth(1600); - plotSettings.setHeight(1200); - plotSettings.setGroupBy(Grouping.NO_GROUPING); - - final File image = plotter.plot(plotSettings); - LOGGER.trace("plotted image: {}", image); - } - - } finally { - FileUtils.delete(tmpBaseDir); - } - } - private static CsvSummary toCsv(final Stream entries, final File dataFile, final OffsetDateTime dateFrom, final OffsetDateTime dateTo) throws IOException { diff --git a/pdb-ui/src/main/java/org/lucares/pdbui/BadRequest.java b/pdb-ui/src/main/java/org/lucares/pdbui/BadRequest.java new file mode 100644 index 0000000..10d08fb --- /dev/null +++ b/pdb-ui/src/main/java/org/lucares/pdbui/BadRequest.java @@ -0,0 +1,18 @@ +package org.lucares.pdbui; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(value = HttpStatus.BAD_REQUEST, reason = "BadRequest") +public class BadRequest extends RuntimeException { + + private static final long serialVersionUID = 694206253376122420L; + + public BadRequest(final String message, final Throwable cause) { + super(message, cause); + } + + public BadRequest(final Throwable cause) { + super(cause); + } +} diff --git a/pdb-ui/src/main/java/org/lucares/pdbui/PdbController.java b/pdb-ui/src/main/java/org/lucares/pdbui/PdbController.java index c01f1ed..3c6c70d 100644 --- a/pdb-ui/src/main/java/org/lucares/pdbui/PdbController.java +++ b/pdb-ui/src/main/java/org/lucares/pdbui/PdbController.java @@ -1,7 +1,5 @@ package org.lucares.pdbui; -import java.io.File; -import java.nio.file.Path; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; @@ -19,8 +17,10 @@ import org.lucares.pdbui.domain.AutocompleteResponse; import org.lucares.pdbui.domain.PlotRequest; import org.lucares.pdbui.domain.PlotResponse; import org.lucares.performance.db.CollectionUtils; +import org.lucares.recommind.logs.DataSeries; import org.lucares.recommind.logs.InternalPlottingException; import org.lucares.recommind.logs.NoDataPointsException; +import org.lucares.recommind.logs.PlotResult; import org.lucares.recommind.logs.Plotter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -73,13 +73,12 @@ public class PdbController implements HardcodedValues, CollectionUtils { final PlotSettings plotSettings = PlotSettingsTransformer.toSettings(request); try { - final File image = plotter.plot(plotSettings); + final PlotResult result = plotter.plot(plotSettings); - final Path relativeImagePath = plotter.getOutputDir().relativize(image.toPath()); - final String relativeImgUrl = relativeImagePath.toString().replace('\\', '/'); - final String imageUrl = WEB_IMAGE_OUTPUT_PATH + "/" + relativeImgUrl; + final String imageUrl = WEB_IMAGE_OUTPUT_PATH + "/" + result.getImageName(); LOGGER.trace("image url: {}", imageUrl); - return new PlotResponse(imageUrl); + + return new PlotResponse(DataSeries.toMap(result.getDataSeries()), imageUrl); } catch (final NoDataPointsException e) { throw new NotFoundException(e); } diff --git a/pdb-ui/src/main/java/org/lucares/pdbui/domain/PlotResponse.java b/pdb-ui/src/main/java/org/lucares/pdbui/domain/PlotResponse.java index cc2ced8..53e0e50 100644 --- a/pdb-ui/src/main/java/org/lucares/pdbui/domain/PlotResponse.java +++ b/pdb-ui/src/main/java/org/lucares/pdbui/domain/PlotResponse.java @@ -3,15 +3,14 @@ package org.lucares.pdbui.domain; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Map; public class PlotResponse { private List imageUrls = new ArrayList<>(); + private Map dataSeries; - public PlotResponse() { - super(); - } - - public PlotResponse(final String... imageUrls) { + public PlotResponse(final Map dataSeries, final String... imageUrls) { + this.dataSeries = dataSeries; this.imageUrls.addAll(Arrays.asList(imageUrls)); } @@ -23,9 +22,17 @@ public class PlotResponse { this.imageUrls = imageUrls; } + public Map getDataSeries() { + return dataSeries; + } + + public void setDataSeries(final Map dataSeries) { + this.dataSeries = dataSeries; + } + @Override public String toString() { - return String.valueOf(imageUrls); + return String.valueOf(imageUrls) + " " + dataSeries; } }