diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2019-01-21 13:58:19 +0100 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2019-01-22 12:26:50 +0100 |
commit | e7a2b1be18fa1b9238ec863f8b99cb73183c3afd (patch) | |
tree | df53e3fa450442e4ea677453ae20bce10ee83a8a /jrt | |
parent | 485f81f1eb9200511b22c7f984363592567b1508 (diff) |
Add calculation of metrics changes since previous snapshot
- Move metric diff calculation to TransportMetrics.Snapshot.
- Remove TransportMetrics.reset() and use changesSince() instead in EchoTest.
- Remove unnecessary volatile modifier on JrtMetrics.previousSnapshot.
- Initialize JrtMetrics.previousSnapshot in constructor.
- Use separate field declarations for fields in TransportMetrics.Snapshot.
Diffstat (limited to 'jrt')
-rw-r--r-- | jrt/src/com/yahoo/jrt/TransportMetrics.java | 58 | ||||
-rw-r--r-- | jrt/tests/com/yahoo/jrt/EchoTest.java | 7 |
2 files changed, 45 insertions, 20 deletions
diff --git a/jrt/src/com/yahoo/jrt/TransportMetrics.java b/jrt/src/com/yahoo/jrt/TransportMetrics.java index e4524b138e7..507a925572f 100644 --- a/jrt/src/com/yahoo/jrt/TransportMetrics.java +++ b/jrt/src/com/yahoo/jrt/TransportMetrics.java @@ -2,6 +2,7 @@ package com.yahoo.jrt; import java.util.concurrent.atomic.AtomicLong; +import java.util.function.ToLongFunction; /** * Metric values produced by {@link Transport}. @@ -73,15 +74,6 @@ public class TransportMetrics { clientUnencryptedConnectionsEstablished.incrementAndGet(); } - void reset() { - tlsCertificateVerificationFailures.set(0); - peerAuthorizationFailures.set(0); - serverTlsConnectionsEstablished.set(0); - clientTlsConnectionsEstablished.set(0); - serverUnencryptedConnectionsEstablished.set(0); - clientUnencryptedConnectionsEstablished.set(0); - } - @Override public String toString() { return "TransportMetrics{" + @@ -95,16 +87,34 @@ public class TransportMetrics { } public static class Snapshot { - private final long tlsCertificateVerificationFailures, peerAuthorizationFailures, serverTlsConnectionsEstablished, - clientTlsConnectionsEstablished, serverUnencryptedConnectionsEstablished, clientUnencryptedConnectionsEstablished; + private final long tlsCertificateVerificationFailures; + private final long peerAuthorizationFailures; + private final long serverTlsConnectionsEstablished; + private final long clientTlsConnectionsEstablished; + private final long serverUnencryptedConnectionsEstablished; + private final long clientUnencryptedConnectionsEstablished; private Snapshot(TransportMetrics metrics) { - tlsCertificateVerificationFailures = metrics.tlsCertificateVerificationFailures.get(); - peerAuthorizationFailures = metrics.peerAuthorizationFailures.get(); - serverTlsConnectionsEstablished = metrics.serverTlsConnectionsEstablished.get(); - clientTlsConnectionsEstablished = metrics.clientTlsConnectionsEstablished.get(); - serverUnencryptedConnectionsEstablished = metrics.serverUnencryptedConnectionsEstablished.get(); - clientUnencryptedConnectionsEstablished = metrics.clientUnencryptedConnectionsEstablished.get(); + this(metrics.tlsCertificateVerificationFailures.get(), + metrics.peerAuthorizationFailures.get(), + metrics.serverTlsConnectionsEstablished.get(), + metrics.clientTlsConnectionsEstablished.get(), + metrics.serverUnencryptedConnectionsEstablished.get(), + metrics.clientUnencryptedConnectionsEstablished.get()); + } + + private Snapshot(long tlsCertificateVerificationFailures, + long peerAuthorizationFailures, + long serverTlsConnectionsEstablished, + long clientTlsConnectionsEstablished, + long serverUnencryptedConnectionsEstablished, + long clientUnencryptedConnectionsEstablished) { + this.tlsCertificateVerificationFailures = tlsCertificateVerificationFailures; + this.peerAuthorizationFailures = peerAuthorizationFailures; + this.serverTlsConnectionsEstablished = serverTlsConnectionsEstablished; + this.clientTlsConnectionsEstablished = clientTlsConnectionsEstablished; + this.serverUnencryptedConnectionsEstablished = serverUnencryptedConnectionsEstablished; + this.clientUnencryptedConnectionsEstablished = clientUnencryptedConnectionsEstablished; } public long tlsCertificateVerificationFailures() { return tlsCertificateVerificationFailures; } @@ -114,6 +124,20 @@ public class TransportMetrics { public long serverUnencryptedConnectionsEstablished() { return serverUnencryptedConnectionsEstablished; } public long clientUnencryptedConnectionsEstablished() { return clientUnencryptedConnectionsEstablished; } + public Snapshot changesSince(Snapshot base) { + return new Snapshot( + changesSince(base, Snapshot::tlsCertificateVerificationFailures), + changesSince(base, Snapshot::peerAuthorizationFailures), + changesSince(base, Snapshot::serverTlsConnectionsEstablished), + changesSince(base, Snapshot::clientTlsConnectionsEstablished), + changesSince(base, Snapshot::serverUnencryptedConnectionsEstablished), + changesSince(base, Snapshot::clientUnencryptedConnectionsEstablished)); + } + + private long changesSince(Snapshot base, ToLongFunction<Snapshot> metricProperty) { + return metricProperty.applyAsLong(this) - metricProperty.applyAsLong(base); + } + @Override public String toString() { return "Snapshot{" + diff --git a/jrt/tests/com/yahoo/jrt/EchoTest.java b/jrt/tests/com/yahoo/jrt/EchoTest.java index 4ca9ba2bd64..8fe98ff3510 100644 --- a/jrt/tests/com/yahoo/jrt/EchoTest.java +++ b/jrt/tests/com/yahoo/jrt/EchoTest.java @@ -17,6 +17,7 @@ import static org.junit.Assert.assertTrue; public class EchoTest { TransportMetrics metrics; + TransportMetrics.Snapshot startSnapshot; Supervisor server; Acceptor acceptor; Supervisor client; @@ -24,7 +25,7 @@ public class EchoTest { Values refValues; private interface MetricsAssertions { - void assertMetrics(TransportMetrics metrics) throws AssertionError; + void assertMetrics(TransportMetrics.Snapshot snapshot) throws AssertionError; } @Parameter(value = 0) public CryptoEngine crypto; @@ -63,7 +64,7 @@ public class EchoTest { @Before public void setUp() throws ListenFailedException { metrics = TransportMetrics.getInstance(); - metrics.reset(); + startSnapshot = metrics.snapshot(); server = new Supervisor(new Transport(crypto)); client = new Supervisor(new Transport(crypto)); acceptor = server.listen(new Spec(0)); @@ -134,7 +135,7 @@ public class EchoTest { assertTrue(Test.equals(req.returnValues(), refValues)); assertTrue(Test.equals(req.parameters(), refValues)); if (metricsAssertions != null) { - metricsAssertions.assertMetrics(metrics); + metricsAssertions.assertMetrics(metrics.snapshot().changesSince(startSnapshot)); } } } |