limit the number of plots

This commit is contained in:
2017-02-12 18:17:36 +01:00
parent e47519e6d9
commit d137f7c9cb
11 changed files with 215 additions and 17 deletions

View File

@@ -1,8 +1,13 @@
package org.lucares.recommind.logs;
import java.io.File;
import java.util.Comparator;
public class DataSeries {
public static final Comparator<? super DataSeries> BY_VALUES = (a, b) -> {
return a.getValues() - b.getValues();
};
private final File dataFile;
private final String title;

View File

@@ -12,14 +12,17 @@ import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Stream;
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.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;
@@ -47,10 +50,14 @@ public class Plotter {
return outputDir;
}
public File plot(final String query, final int height, final int width, final String groupBy)
throws InternalPlottingException {
public File plot(final PlotSettings plotSettings) throws InternalPlottingException {
try {
final Collection<DataSeries> dataSeries = new ArrayList<>();
final List<DataSeries> dataSeries = new ArrayList<>();
final String query = plotSettings.getQuery();
final String groupBy = plotSettings.getGroupBy();
final int height = plotSettings.getHeight();
final int width = plotSettings.getWidth();
final Result result = db.get(query, groupBy);
@@ -66,12 +73,14 @@ public class Plotter {
dataSeries.add(dataSerie);
}
sortAndLimit(dataSeries, plotSettings);
final File outputFile = File.createTempFile("out", ".png", outputDir.toFile());
final Gnuplot gnuplot = new Gnuplot(tmpBaseDir);
final GnuplotSettings settings = new GnuplotSettings(outputFile);
settings.setHeight(height);
settings.setWidth(width);
gnuplot.plot(settings, dataSeries);
final GnuplotSettings gnuplotSettings = new GnuplotSettings(outputFile);
gnuplotSettings.setHeight(height);
gnuplotSettings.setWidth(width);
gnuplot.plot(gnuplotSettings, dataSeries);
return outputFile;
} catch (final InterruptedException e) {
Thread.currentThread().interrupt();
@@ -81,6 +90,29 @@ public class Plotter {
}
}
private void sortAndLimit(final List<DataSeries> dataSeries, final PlotSettings plotSettings) {
final Limit limitBy = plotSettings.getLimitBy();
if (limitBy != Limit.NO_LIMIT) {
dataSeries.sort(getDataSeriesComparator(limitBy));
while (dataSeries.size() > plotSettings.getLimit()) {
dataSeries.remove(plotSettings.getLimit());
}
}
}
private Comparator<? super DataSeries> getDataSeriesComparator(final Limit limitBy) {
if (limitBy == Limit.MOST_VALUES) {
return DataSeries.BY_VALUES.reversed();
}
return DataSeries.BY_VALUES;
}
private String title(final Tags tags, final int values) {
final StringBuilder result = new StringBuilder();
@@ -109,7 +141,15 @@ public class Plotter {
try (PerformanceDb db = new PerformanceDb(dataDirectory)) {
final Plotter plotter = new Plotter(db, tmpBaseDir, outputDirectory);
final File image = plotter.plot(query, 1600, 1200, Grouping.NO_GROUPING);
// 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);
System.out.println("plotted image: " + image);
}