make computation of mean value optional

This commit is contained in:
2017-09-23 12:42:22 +02:00
parent adbde57d95
commit 79d860cee7
10 changed files with 85 additions and 4 deletions

View File

@@ -0,0 +1,5 @@
package org.lucares.pdb.plot.api;
public enum AggreateInternal {
NONE, MEAN
}

View File

@@ -32,6 +32,8 @@ public class PlotSettings {
private AxisScale yAxisScale;
private AggreateInternal aggregate;
public String getQuery() {
return query;
}
@@ -156,6 +158,14 @@ public class PlotSettings {
public String toString() {
return "PlotSettings [query=" + query + ", height=" + height + ", width=" + width + ", groupBy=" + groupBy
+ ", limitBy=" + limitBy + ", limit=" + limit + ", dateFrom=" + dateFrom + ", dateRange=" + dateRange
+ ", axisScale=" + yAxisScale + "]";
+ ", axisScale=" + yAxisScale + ", aggregate="+aggregate+"]";
}
public void setAggregate(AggreateInternal aggregate) {
this.aggregate = aggregate;
}
public AggreateInternal getAggregate() {
return aggregate;
}
}

View File

@@ -2,6 +2,7 @@ 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 {
@@ -13,7 +14,20 @@ public class GnuplotFileGenerator {
appendfln(result, "set terminal %s noenhanced size %d,%d", settings.getTerminal(), settings.getWidth(),
settings.getHeight());
appendfln(result, "set datafile separator \"%s\"", settings.getDatafileSeparator());
int count = 1;
if (settings.getAggregate() != AggreateInternal.NONE)
{
for (final DataSeries dataSerie : dataSeries) {
appendfln(result, "stats '%s' using 2 prefix \"A%d\"", dataSerie.getDataFile(),count);
count++;
}
}
appendfln(result, "set timefmt '%s'", settings.getTimefmt());
appendfln(result, "set xdata time");
@@ -21,6 +35,7 @@ public class GnuplotFileGenerator {
appendfln(result, "set xlabel \"%s\"", settings.getXlabel());
appendfln(result, "set xtics rotate by %d", settings.getRotateXAxisLabel());
appendfln(result, "set xrange [\"%s\":\"%s\"]", settings.getDateFrom(), settings.getDateTo());
appendfln(result, "set yrange [\"1\":]");
appendfln(result, "set ylabel \"%s\"", settings.getYlabel());
if (settings.getYAxisScale() == AxisScale.LOG10) {
@@ -29,12 +44,19 @@ public class GnuplotFileGenerator {
appendfln(result, "set logscale y 2");
}
appendfln(result, "set grid");
appendfln(result, "set output \"%s\"", settings.getOutput().toAbsolutePath().toString().replace("\\", "/"));
appendf(result, "plot ");
count = 1;
for (final DataSeries dataSerie : dataSeries) {
appendfln(result, "'%s' using 1:2 title '%s' with points, \\", dataSerie.getDataFile(),
dataSerie.getTitle());
if (settings.getAggregate() == AggreateInternal.MEAN) {
appendfln(result, "A%d_mean title '%s Mean', \\", count, dataSerie.getTitle(),
dataSerie.getTitle());
}
count++;
}
return result.toString();

View File

@@ -2,6 +2,7 @@ package org.lucares.recommind.logs;
import java.nio.file.Path;
import org.lucares.pdb.plot.api.AggreateInternal;
import org.lucares.pdb.plot.api.AxisScale;
public class GnuplotSettings {
@@ -30,6 +31,7 @@ public class GnuplotSettings {
private AxisScale yAxisScale;
private String dateFrom;
private String dateTo;
private AggreateInternal aggregate;
public GnuplotSettings(final Path output) {
this.output = output;
@@ -135,6 +137,14 @@ public class GnuplotSettings {
return dateTo;
}
public void setAggregate(AggreateInternal aggregate) {
this.aggregate = aggregate;
}
public AggreateInternal getAggregate() {
return aggregate;
}
// plot 'sample.txt' using 1:2 title 'Bytes' with linespoints 2
}

View File

@@ -116,6 +116,7 @@ public class Plotter {
defineXAxis(gnuplotSettings, plotSettings.dateFrom(), plotSettings.dateTo());
gnuplotSettings.setYAxisScale(plotSettings.getYAxisScale());
gnuplotSettings.setAggregate(plotSettings.getAggregate());
gnuplot.plot(gnuplotSettings, dataSeries);
return new PlotResult(outputFile.getFileName(), dataSeries);

View File

@@ -1,8 +1,10 @@
package org.lucares.pdbui;
import org.lucares.pdb.plot.api.AggreateInternal;
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.Aggregate;
import org.lucares.pdbui.domain.LimitBy;
import org.lucares.pdbui.domain.PlotRequest;
import org.lucares.pdbui.domain.YAxis;
@@ -21,10 +23,19 @@ class PlotSettingsTransformer {
result.setDateFrom(request.getDateFrom());
result.setDateRange(request.getDateRange());
result.setYAxisScale(toAxisScale(request.getAxisScale()));
result.setAggregate(toAggregateInternal(request.getAggregate()));
return result;
}
private static AggreateInternal toAggregateInternal(Aggregate aggregate) {
switch (aggregate) {
case NONE:return AggreateInternal.NONE;
case MEAN:return AggreateInternal.MEAN;
}
throw new IllegalStateException("unhandled enum: " + aggregate);
}
private static AxisScale toAxisScale(final YAxis yAxis) {
switch (yAxis) {
case LINEAR:

View File

@@ -0,0 +1,5 @@
package org.lucares.pdbui.domain;
public enum Aggregate {
NONE, MEAN
}

View File

@@ -21,6 +21,8 @@ public class PlotRequest {
private String dateRange;
private Aggregate aggregate = Aggregate.NONE;
public String getQuery() {
return query;
}
@@ -100,4 +102,12 @@ public class PlotRequest {
public void setAxisScale(final YAxis yAxis) {
this.yAxis = yAxis;
}
public void setAggregate(Aggregate aggregate) {
this.aggregate = aggregate;
}
public Aggregate getAggregate() {
return aggregate;
}
}

View File

@@ -182,6 +182,7 @@ function plot(event){
request['dateFrom'] = $('#search-date-from').val();
request['dateRange'] = $('#search-date-range').val();
request['axisScale'] = $('#search-y-axis-scale').val();
request['aggregate'] = $('#show-aggregate').val();
var success = function(response){

View File

@@ -47,13 +47,19 @@
<option value="1 month">
</datalist>
<label for="search-y-axis-scale">y-axis:</label>
<label for="search-y-axis-scale">Y-Axis:</label>
<select id="search-y-axis-scale">
<option value="LINEAR" selected="selected">linear</option>
<option value="LOG10">log 10</option>
<option value="LOG2">log 2</option>
</select>
<label for="show-aggregate">Aggregate:</label>
<select id="show-aggregate">
<option value="NONE" selected="selected">-</option>
<option value="MEAN">Mean</option>
</select>
<button id="search-submit"><i class="fa fa-area-chart" aria-hidden="true"></i> Plot</button>
</div>