diff options
Diffstat (limited to 'vespaclient-java/src/main/java/com/yahoo/vespafeeder/BenchmarkProgressPrinter.java')
-rw-r--r-- | vespaclient-java/src/main/java/com/yahoo/vespafeeder/BenchmarkProgressPrinter.java | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/vespaclient-java/src/main/java/com/yahoo/vespafeeder/BenchmarkProgressPrinter.java b/vespaclient-java/src/main/java/com/yahoo/vespafeeder/BenchmarkProgressPrinter.java new file mode 100644 index 00000000000..cc0d8f8c780 --- /dev/null +++ b/vespaclient-java/src/main/java/com/yahoo/vespafeeder/BenchmarkProgressPrinter.java @@ -0,0 +1,76 @@ +// Copyright 2017 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespafeeder; + +import com.yahoo.clientmetrics.MessageTypeMetricSet; +import com.yahoo.clientmetrics.RouteMetricSet; +import com.yahoo.concurrent.Timer; +import com.yahoo.metrics.Metric; +import com.yahoo.metrics.MetricSet; +import com.yahoo.metrics.MetricVisitor; + +import java.io.PrintStream; + +/** + * Class that takes progress from the feed and prints to a stream. + */ +public class BenchmarkProgressPrinter implements RouteMetricSet.ProgressCallback { + private final long startTime; + private final Timer timer; + private final PrintStream output; + + public BenchmarkProgressPrinter(Timer timer, PrintStream output) { + this.timer = timer; + this.output = output; + this.startTime = timer.milliTime(); + } + + class PrintVisitor extends MetricVisitor { + private final PrintStream out; + + PrintVisitor(PrintStream out) { + this.out = out; + } + + @Override + public boolean visitMetricSet(MetricSet set, boolean autoGenerated) { + if (set instanceof MessageTypeMetricSet && set.getName().equals("total")) { + Metric m = set.getMetric("latency"); + Metric count = set.getMetric("count"); + Metric err = set.getMetric("errors.total"); + + long okCount = 0, errCount = 0, minLatency = 0, maxLatency = 0, avgLatency = 0; + + if (m != null) { + minLatency = m.getLongValue("min"); + maxLatency = m.getLongValue("max"); + avgLatency = m.getLongValue("average"); + } + if (count != null) { + okCount = count.getLongValue("count"); + } + + if (err != null) { + errCount = err.getLongValue("count"); + } + long timeUsed = timer.milliTime() - startTime; + out.println(timeUsed + ", " + okCount + ", " + errCount + ", " + minLatency + ", " + maxLatency + ", " + avgLatency); + } + return true; + } + } + + @Override + public void onProgress(RouteMetricSet metrics) { + //metrics.visit(new PrintVisitor(output), false); + } + + @Override + public void done(RouteMetricSet metrics) { + try { + output.println("# Time used, num ok, num error, min latency, max latency, average latency"); + metrics.visit(new PrintVisitor(output), false); + } catch (Exception e) { + e.printStackTrace(); + } + } +} |