diff options
author | Jon Marius Venstad <venstad@gmail.com> | 2021-06-09 21:15:58 +0200 |
---|---|---|
committer | Jon Marius Venstad <venstad@gmail.com> | 2021-06-10 07:50:42 +0200 |
commit | 5be6949b581dc9c4b78c8d270a1868eae2bdda0b (patch) | |
tree | caac02229918df118b83445dab3b578c4fed7f88 /vespa-feed-client-cli/src | |
parent | 64324d85537dc7714150032a64ae50a5f3e0e702 (diff) |
Use stats aggregated by client
Diffstat (limited to 'vespa-feed-client-cli/src')
-rw-r--r-- | vespa-feed-client-cli/src/main/java/ai/vespa/feed/client/CliClient.java | 80 |
1 files changed, 31 insertions, 49 deletions
diff --git a/vespa-feed-client-cli/src/main/java/ai/vespa/feed/client/CliClient.java b/vespa-feed-client-cli/src/main/java/ai/vespa/feed/client/CliClient.java index a6119c5de4f..9d4f3525c32 100644 --- a/vespa-feed-client-cli/src/main/java/ai/vespa/feed/client/CliClient.java +++ b/vespa-feed-client-cli/src/main/java/ai/vespa/feed/client/CliClient.java @@ -8,6 +8,7 @@ import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLSession; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import java.io.PrintStream; import java.nio.file.Files; import java.time.Duration; @@ -57,18 +58,12 @@ public class CliClient { return 0; } try (InputStream in = createFeedInputStream(cliArgs); - JsonFeeder feeder = createJsonFeeder(cliArgs)) { + FeedClient feedClient = createFeedClient(cliArgs); + JsonFeeder feeder = createJsonFeeder(feedClient, cliArgs)) { + long startNanos = System.nanoTime(); + feeder.feedMany(in).join(); if (cliArgs.benchmarkModeEnabled()) { - BenchmarkResultAggregator aggregator = new BenchmarkResultAggregator(); - feeder.feedMany(in, aggregator).join(); - aggregator.printBenchmarkResult(); - } else { - JsonFeeder.ResultCallback emptyCallback = new JsonFeeder.ResultCallback() { - @Override public void onNextResult(Result result, Throwable error) {} - @Override public void onError(Throwable error) {} - @Override public void onComplete() {} - }; - feeder.feedMany(in, emptyCallback).join(); + printBenchmarkResult(System.nanoTime() - startNanos, feedClient.stats(), systemOut); } } return 0; @@ -94,8 +89,7 @@ public class CliClient { return builder.build(); } - private static JsonFeeder createJsonFeeder(CliArguments cliArgs) throws CliArguments.CliArgumentsException, IOException { - FeedClient feedClient = createFeedClient(cliArgs); + private static JsonFeeder createJsonFeeder(FeedClient feedClient, CliArguments cliArgs) throws CliArguments.CliArgumentsException, IOException { JsonFeeder.Builder builder = JsonFeeder.builder(feedClient); cliArgs.timeout().ifPresent(builder::withTimeout); cliArgs.route().ifPresent(builder::withRoute); @@ -129,42 +123,30 @@ public class CliClient { @Override public boolean verify(String hostname, SSLSession session) { return true; } } - private class BenchmarkResultAggregator implements JsonFeeder.ResultCallback { - - private final AtomicInteger okCount = new AtomicInteger(); - private final AtomicInteger errorCount = new AtomicInteger(); - private volatile long endNanoTime; - private volatile long startNanoTime; - - void start() { this.startNanoTime = System.nanoTime(); } - - void printBenchmarkResult() throws IOException { - JsonFactory factory = new JsonFactory(); - Duration duration = Duration.ofNanos(endNanoTime - startNanoTime); - int okCount = this.okCount.get(); - int errorCount = this.errorCount.get(); - double throughput = (double) okCount / duration.toMillis() * 1000D; - try (JsonGenerator generator = factory.createGenerator(systemOut).useDefaultPrettyPrinter()) { - generator.writeStartObject(); - generator.writeNumberField("feeder.runtime", duration.toMillis()); - generator.writeNumberField("feeder.okcount", okCount); - generator.writeNumberField("feeder.errorcount", errorCount); - generator.writeNumberField("feeder.throughput", throughput); - generator.writeEndObject(); - } - } - - @Override - public void onNextResult(Result result, Throwable error) { - if (error != null) { - errorCount.incrementAndGet(); - } else { - okCount.incrementAndGet(); - } + static void printBenchmarkResult(long durationNanos, OperationStats stats, OutputStream systemOut) throws IOException { + JsonFactory factory = new JsonFactory(); + long okCount = stats.successes(); + long errorCount = stats.requests() - okCount; + double throughput = okCount * 1e6D / Math.max(1, durationNanos); + try (JsonGenerator generator = factory.createGenerator(systemOut).useDefaultPrettyPrinter()) { + generator.writeStartObject(); + generator.writeNumberField("feeder.runtime", durationNanos / 1_000_000); + generator.writeNumberField("feeder.okcount", okCount); + generator.writeNumberField("feeder.errorcount", errorCount); + generator.writeNumberField("feeder.throughput", throughput); + generator.writeNumberField("feeder.minlatency", stats.minLatencyMillis()); + generator.writeNumberField("feeder.avglatency", stats.averageLatencyMillis()); + generator.writeNumberField("feeder.maxlatency", stats.maxLatencyMillis()); + generator.writeNumberField("feeder.bytessent", stats.bytesSent()); + generator.writeNumberField("feeder.bytesreceived", stats.bytesReceived()); + + generator.writeObjectFieldStart("feeder.responsecodes"); + for (Map.Entry<Integer, Long> entry : stats.responsesByCode().entrySet()) + generator.writeNumberField(Integer.toString(entry.getKey()), entry.getValue()); + generator.writeEndObject(); + + generator.writeEndObject(); } - - @Override public void onError(Throwable error) {} - - @Override public void onComplete() { this.endNanoTime = System.nanoTime(); } } + } |