limit the number of plots
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user