aboutsummaryrefslogtreecommitdiffstats
path: root/vespa-feed-client
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2021-06-30 13:36:48 +0200
committerJon Marius Venstad <venstad@gmail.com>2021-06-30 13:36:48 +0200
commit890b2ceff15f244ac9a5bf44fba9ba0aa9f5ab8d (patch)
treeae3691244605c4701ff7beb12ae3d9eb0f0e0f3d /vespa-feed-client
parent49833295b149f33c97961a56a689b00efc76f24b (diff)
Compute benchmark stats difference
Diffstat (limited to 'vespa-feed-client')
-rw-r--r--vespa-feed-client/abi-spec.json3
-rw-r--r--vespa-feed-client/src/main/java/ai/vespa/feed/client/OperationStats.java32
-rw-r--r--vespa-feed-client/src/test/java/ai/vespa/feed/client/HttpRequestStrategyTest.java6
3 files changed, 41 insertions, 0 deletions
diff --git a/vespa-feed-client/abi-spec.json b/vespa-feed-client/abi-spec.json
index e77f71fd2c5..e1fddfeefef 100644
--- a/vespa-feed-client/abi-spec.json
+++ b/vespa-feed-client/abi-spec.json
@@ -291,6 +291,7 @@
],
"methods": [
"public void <init>(long, java.util.Map, long, long, long, long, long, long, long)",
+ "public ai.vespa.feed.client.OperationStats since(ai.vespa.feed.client.OperationStats)",
"public long requests()",
"public long responses()",
"public long successes()",
@@ -302,6 +303,8 @@
"public long maxLatencyMillis()",
"public long bytesSent()",
"public long bytesReceived()",
+ "public boolean equals(java.lang.Object)",
+ "public int hashCode()",
"public java.lang.String toString()"
],
"fields": []
diff --git a/vespa-feed-client/src/main/java/ai/vespa/feed/client/OperationStats.java b/vespa-feed-client/src/main/java/ai/vespa/feed/client/OperationStats.java
index d36475a51fb..abba0f15880 100644
--- a/vespa-feed-client/src/main/java/ai/vespa/feed/client/OperationStats.java
+++ b/vespa-feed-client/src/main/java/ai/vespa/feed/client/OperationStats.java
@@ -2,6 +2,8 @@
package ai.vespa.feed.client;
import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
/**
* Statistics for feed operations over HTTP against a Vespa cluster.
@@ -34,6 +36,23 @@ public class OperationStats {
this.bytesReceived = bytesReceived;
}
+ /** Returns the difference between this and the initial. Min and max latency are not modified. */
+ public OperationStats since(OperationStats initial) {
+ return new OperationStats(requests - initial.requests,
+ responsesByCode.entrySet().stream()
+ .collect(Collectors.toMap(entry -> entry.getKey(),
+ entry -> entry.getValue() - initial.responsesByCode.getOrDefault(entry.getKey(), 0L))),
+ exceptions - initial.exceptions,
+ inflight - initial.inflight,
+ responsesByCode.size() == initial.responsesByCode.size() ? 0 :
+ (averageLatencyMillis * responsesByCode.size() - initial.averageLatencyMillis * initial.responsesByCode.size())
+ / (responsesByCode.size() - initial.responsesByCode.size()),
+ minLatencyMillis,
+ maxLatencyMillis,
+ bytesSent - initial.bytesSent,
+ bytesReceived - initial.bytesReceived);
+ }
+
public long requests() {
return requests;
}
@@ -79,6 +98,19 @@ public class OperationStats {
}
@Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ OperationStats that = (OperationStats) o;
+ return requests == that.requests && inflight == that.inflight && exceptions == that.exceptions && averageLatencyMillis == that.averageLatencyMillis && minLatencyMillis == that.minLatencyMillis && maxLatencyMillis == that.maxLatencyMillis && bytesSent == that.bytesSent && bytesReceived == that.bytesReceived && responsesByCode.equals(that.responsesByCode);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(requests, responsesByCode, inflight, exceptions, averageLatencyMillis, minLatencyMillis, maxLatencyMillis, bytesSent, bytesReceived);
+ }
+
+ @Override
public String toString() {
return "Stats{" +
"requests=" + requests +
diff --git a/vespa-feed-client/src/test/java/ai/vespa/feed/client/HttpRequestStrategyTest.java b/vespa-feed-client/src/test/java/ai/vespa/feed/client/HttpRequestStrategyTest.java
index beb231b61d4..c40735b3b2a 100644
--- a/vespa-feed-client/src/test/java/ai/vespa/feed/client/HttpRequestStrategyTest.java
+++ b/vespa-feed-client/src/test/java/ai/vespa/feed/client/HttpRequestStrategyTest.java
@@ -91,6 +91,7 @@ class HttpRequestStrategyTest {
.setConnectionsPerEndpoint(1)
.setMaxStreamPerConnection(minStreams),
new BenchmarkingCluster(cluster));
+ OperationStats initial = strategy.stats();
DocumentId id1 = DocumentId.of("ns", "type", "1");
DocumentId id2 = DocumentId.of("ns", "type", "2");
@@ -176,6 +177,11 @@ class HttpRequestStrategyTest {
codes.put(500, 3L);
assertEquals(codes, strategy.stats().responsesByCode());
assertEquals(3, strategy.stats().exceptions());
+
+ assertEquals(strategy.stats(), strategy.stats().since(initial));
+ assertEquals(0, strategy.stats().since(strategy.stats()).averageLatencyMillis());
+ assertEquals(0, strategy.stats().since(strategy.stats()).requests());
+ assertEquals(0, strategy.stats().since(strategy.stats()).bytesSent());
}
@Test