diff options
-rw-r--r-- | container-disc/src/main/java/com/yahoo/container/jdisc/metric/JrtMetrics.java | 27 | ||||
-rw-r--r-- | jrt/src/com/yahoo/jrt/TransportMetrics.java | 58 | ||||
-rw-r--r-- | jrt/tests/com/yahoo/jrt/EchoTest.java | 7 |
3 files changed, 54 insertions, 38 deletions
diff --git a/container-disc/src/main/java/com/yahoo/container/jdisc/metric/JrtMetrics.java b/container-disc/src/main/java/com/yahoo/container/jdisc/metric/JrtMetrics.java index 6bebaedc28b..1fff1b2ab33 100644 --- a/container-disc/src/main/java/com/yahoo/container/jdisc/metric/JrtMetrics.java +++ b/container-disc/src/main/java/com/yahoo/container/jdisc/metric/JrtMetrics.java @@ -4,9 +4,7 @@ package com.yahoo.container.jdisc.metric; import com.yahoo.jdisc.Metric; import com.yahoo.jrt.TransportMetrics; -import java.util.function.ToLongFunction; - -import static com.yahoo.jrt.TransportMetrics.*; +import static com.yahoo.jrt.TransportMetrics.Snapshot; /** * Emits jrt metrics @@ -17,7 +15,7 @@ class JrtMetrics { private final TransportMetrics transportMetrics = TransportMetrics.getInstance(); private final Metric metric; - private volatile Snapshot previousSnapshot; + private Snapshot previousSnapshot = transportMetrics.snapshot(); JrtMetrics(Metric metric) { this.metric = metric; @@ -25,20 +23,13 @@ class JrtMetrics { void emitMetrics() { Snapshot snapshot = transportMetrics.snapshot(); - increment("jrt.transport.tls-certificate-verification-failures", Snapshot::tlsCertificateVerificationFailures, snapshot); - increment("jrt.transport.peer-authorization-failures", Snapshot::peerAuthorizationFailures, snapshot); - increment("jrt.transport.server.tls-connections-established", Snapshot::serverTlsConnectionsEstablished, snapshot); - increment("jrt.transport.client.tls-connections-established", Snapshot::clientTlsConnectionsEstablished, snapshot); - increment("jrt.transport.server.unencrypted-connections-established", Snapshot::serverUnencryptedConnectionsEstablished, snapshot); - increment("jrt.transport.client.unencrypted-connections-established", Snapshot::clientUnencryptedConnectionsEstablished, snapshot); + Snapshot changesSincePrevious = snapshot.changesSince(previousSnapshot); + metric.add("jrt.transport.tls-certificate-verification-failures", changesSincePrevious.tlsCertificateVerificationFailures(), null); + metric.add("jrt.transport.peer-authorization-failures", changesSincePrevious.peerAuthorizationFailures(), null); + metric.add("jrt.transport.server.tls-connections-established", changesSincePrevious.serverTlsConnectionsEstablished(), null); + metric.add("jrt.transport.client.tls-connections-established", changesSincePrevious.clientTlsConnectionsEstablished(), null); + metric.add("jrt.transport.server.unencrypted-connections-established", changesSincePrevious.serverUnencryptedConnectionsEstablished(), null); + metric.add("jrt.transport.client.unencrypted-connections-established", changesSincePrevious.clientUnencryptedConnectionsEstablished(), null); previousSnapshot = snapshot; } - - private void increment(String metricName, ToLongFunction<Snapshot> metricGetter, Snapshot snapshot) { - long currentValue = metricGetter.applyAsLong(snapshot); - long increment = previousSnapshot != null - ? currentValue - metricGetter.applyAsLong(previousSnapshot) - : currentValue; - metric.add(metricName, increment, null); - } } 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)); } } } |