diff options
author | valerijf <valerijf@yahoo-inc.com> | 2016-09-29 08:50:53 +0200 |
---|---|---|
committer | valerijf <valerijf@yahoo-inc.com> | 2016-09-29 09:45:47 +0200 |
commit | 1a80d176855b0b45d79e1c081d3cccae7c008e2d (patch) | |
tree | dee80c01d4bea504800a41ea8287ec26f6e00cc7 | |
parent | cf58f368b71543ddbe8298fbc4d3cd024e3d7515 (diff) |
Added NullGauge in metrics.simple to avoid having to re-create null implementation in wrappers
14 files changed, 90 insertions, 66 deletions
diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java index bdb574cf592..946cc7ae434 100644 --- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java +++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java @@ -113,7 +113,7 @@ public class DockerImpl implements Docker { throw new RuntimeException("Could not setup docker network", e); } - numberOfRunningContainersGauge = metricReceiver.declageGauge("containers.running"); + numberOfRunningContainersGauge = metricReceiver.declareGauge("containers.running"); numberOfDockerDaemonFails = metricReceiver.declareCounter("daemon.api_fails"); } diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/metrics/CounterWrapper.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/metrics/CounterWrapper.java index cb3812a4bd9..59fd6a82682 100644 --- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/metrics/CounterWrapper.java +++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/metrics/CounterWrapper.java @@ -33,19 +33,4 @@ public class CounterWrapper implements MetricValue { return value; } } - - - static final class NullCounter extends CounterWrapper { - NullCounter() { - super(null); - } - - @Override - public void add() { - } - - @Override - public void add(long n) { - } - } }
\ No newline at end of file diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/metrics/GaugeWrapper.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/metrics/GaugeWrapper.java index 9a05034f039..aae841b24fc 100644 --- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/metrics/GaugeWrapper.java +++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/metrics/GaugeWrapper.java @@ -28,15 +28,4 @@ public class GaugeWrapper implements MetricValue { public Number getValue() { return value; } - - - final static class NullGauge extends GaugeWrapper { - NullGauge() { - super(null); - } - - @Override - public void sample(double x) { - } - } } diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/metrics/MetricReceiverWrapper.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/metrics/MetricReceiverWrapper.java index 16a847c962d..851af65dfb3 100644 --- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/metrics/MetricReceiverWrapper.java +++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/metrics/MetricReceiverWrapper.java @@ -3,7 +3,6 @@ package com.yahoo.vespa.hosted.dockerapi.metrics; import com.google.inject.Inject; import com.yahoo.metrics.simple.MetricReceiver; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -15,8 +14,6 @@ import java.util.Set; * @author valerijf */ public class MetricReceiverWrapper { - public static final MetricReceiverWrapper nullImplementation = new MetricReceiverWrapper.NullReceiver(); - private final Map<String, MetricValue> metrics = new HashMap<>(); private final MetricReceiver metricReceiver; @@ -31,7 +28,7 @@ public class MetricReceiverWrapper { return counter; } - public GaugeWrapper declageGauge(String name) { + public GaugeWrapper declareGauge(String name) { GaugeWrapper gauge = new GaugeWrapper(metricReceiver.declareGauge(name)); metrics.put(name, gauge); return gauge; @@ -44,28 +41,4 @@ public class MetricReceiverWrapper { public MetricValue getMetricByName(String name) { return metrics.get(name); } - - - private static final class NullReceiver extends MetricReceiverWrapper { - NullReceiver() { - super(null); - } - - @Override - public CounterWrapper declareCounter(String name) { - return new CounterWrapper.NullCounter(); - } - - public GaugeWrapper declageGauge(String name) { - return new GaugeWrapper.NullGauge(); - } - - public Set<String> getMetricNames() { - return Collections.emptySet(); - } - - public MetricValue getMetricByName(String name) { - return null; - } - } } diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImpl.java index 6eac3ff15ab..a796db7a4f1 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImpl.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImpl.java @@ -66,8 +66,8 @@ public class NodeAdminImpl implements NodeAdmin { this.maintenanceScheduler = maintenanceScheduler; this.nodeAgentScanIntervalMillis = nodeAgentScanIntervalMillis; - this.numberOfContainersInActiveState = metricReceiver.declageGauge("nodes.state.active"); - this.numberOfContainersInLoadImageState = metricReceiver.declageGauge("nodes.image.loading"); + this.numberOfContainersInActiveState = metricReceiver.declareGauge("nodes.state.active"); + this.numberOfContainersInLoadImageState = metricReceiver.declareGauge("nodes.image.loading"); this.numberOfUnhandledExceptionsInNodeAgent = metricReceiver.declareCounter("nodes.unhandled_exceptions"); } diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/ComponentsProviderWithMocks.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/ComponentsProviderWithMocks.java index 6c42e0bb387..258c9463589 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/ComponentsProviderWithMocks.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/ComponentsProviderWithMocks.java @@ -1,6 +1,7 @@ // Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.node.admin.integrationTests; +import com.yahoo.metrics.simple.MetricReceiver; import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper; import com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdmin; import com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminImpl; @@ -30,7 +31,8 @@ public class ComponentsProviderWithMocks implements ComponentsProvider { private Environment environment = new Environment(); private final Function<String, NodeAgent> nodeAgentFactory = (hostName) -> new NodeAgentImpl(hostName, nodeRepositoryMock, orchestratorMock, new DockerOperationsImpl(dockerMock, environment), maintenanceSchedulerMock); - private NodeAdmin nodeAdmin = new NodeAdminImpl(dockerMock, nodeAgentFactory, maintenanceSchedulerMock, 100, MetricReceiverWrapper.nullImplementation); + private NodeAdmin nodeAdmin = new NodeAdminImpl(dockerMock, nodeAgentFactory, maintenanceSchedulerMock, 100, + new MetricReceiverWrapper(MetricReceiver.nullImplementation)); @Override diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerFailTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerFailTest.java index b74a17094f7..52991a84f73 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerFailTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerFailTest.java @@ -1,6 +1,7 @@ // Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.node.admin.integrationTests; +import com.yahoo.metrics.simple.MetricReceiver; import com.yahoo.vespa.hosted.dockerapi.ContainerName; import com.yahoo.vespa.hosted.dockerapi.Docker; import com.yahoo.vespa.hosted.dockerapi.DockerImage; @@ -51,7 +52,8 @@ public class DockerFailTest { Function<String, NodeAgent> nodeAgentFactory = (hostName) -> new NodeAgentImpl(hostName, nodeRepositoryMock, orchestratorMock, new DockerOperationsImpl(dockerMock, environment), maintenanceSchedulerMock); - NodeAdmin nodeAdmin = new NodeAdminImpl(dockerMock, nodeAgentFactory, maintenanceSchedulerMock, 100, MetricReceiverWrapper.nullImplementation); + NodeAdmin nodeAdmin = new NodeAdminImpl(dockerMock, nodeAgentFactory, maintenanceSchedulerMock, 100, + new MetricReceiverWrapper(MetricReceiver.nullImplementation)); initialContainerNodeSpec = new ContainerNodeSpec( "hostName", diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/MultiDockerTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/MultiDockerTest.java index 13d52a4491c..e8a3ff039ad 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/MultiDockerTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/MultiDockerTest.java @@ -1,6 +1,7 @@ // Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.node.admin.integrationTests; +import com.yahoo.metrics.simple.MetricReceiver; import com.yahoo.vespa.hosted.dockerapi.ContainerName; import com.yahoo.vespa.hosted.dockerapi.DockerImage; import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper; @@ -53,7 +54,8 @@ public class MultiDockerTest { Function<String, NodeAgent> nodeAgentFactory = (hostName) -> new NodeAgentImpl(hostName, nodeRepositoryMock, orchestratorMock, new DockerOperationsImpl(dockerMock, environment), maintenanceSchedulerMock); - nodeAdmin = new NodeAdminImpl(dockerMock, nodeAgentFactory, maintenanceSchedulerMock, 100, MetricReceiverWrapper.nullImplementation); + nodeAdmin = new NodeAdminImpl(dockerMock, nodeAgentFactory, maintenanceSchedulerMock, 100, + new MetricReceiverWrapper(MetricReceiver.nullImplementation)); updater = new NodeAdminStateUpdater(nodeRepositoryMock, nodeAdmin, 1, 1, orchestratorMock, "basehostname"); } diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeStateTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeStateTest.java index 3bb69cdc562..a92f887b330 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeStateTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeStateTest.java @@ -1,6 +1,7 @@ // Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.node.admin.integrationTests; +import com.yahoo.metrics.simple.MetricReceiver; import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper; import com.yahoo.vespa.hosted.node.admin.ContainerNodeSpec; import com.yahoo.vespa.hosted.dockerapi.ContainerName; @@ -58,7 +59,8 @@ public class NodeStateTest { Function<String, NodeAgent> nodeAgentFactory = (hostName) -> new NodeAgentImpl(hostName, nodeRepositoryMock, orchestratorMock, new DockerOperationsImpl(dockerMock, environment), maintenanceSchedulerMock); - NodeAdmin nodeAdmin = new NodeAdminImpl(dockerMock, nodeAgentFactory, maintenanceSchedulerMock, 100, MetricReceiverWrapper.nullImplementation); + NodeAdmin nodeAdmin = new NodeAdminImpl(dockerMock, nodeAgentFactory, maintenanceSchedulerMock, 100, + new MetricReceiverWrapper(MetricReceiver.nullImplementation)); initialContainerNodeSpec = new ContainerNodeSpec( "host1", diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/ResumeTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/ResumeTest.java index a68786b40e1..9ece9c8cc12 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/ResumeTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/ResumeTest.java @@ -1,6 +1,7 @@ // Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.node.admin.integrationTests; +import com.yahoo.metrics.simple.MetricReceiver; import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper; import com.yahoo.vespa.hosted.node.admin.ContainerNodeSpec; import com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdmin; @@ -48,7 +49,8 @@ public class ResumeTest { Function<String, NodeAgent> nodeAgentFactory = (hostName) -> new NodeAgentImpl(hostName, nodeRepositoryMock, orchestratorMock, new DockerOperationsImpl(dockerMock, environment), maintenanceSchedulerMock); - NodeAdmin nodeAdmin = new NodeAdminImpl(dockerMock, nodeAgentFactory, maintenanceSchedulerMock, 100, MetricReceiverWrapper.nullImplementation); + NodeAdmin nodeAdmin = new NodeAdminImpl(dockerMock, nodeAgentFactory, maintenanceSchedulerMock, 100, + new MetricReceiverWrapper(MetricReceiver.nullImplementation)); nodeRepositoryMock.addContainerNodeSpec(new ContainerNodeSpec( "host1", diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImplTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImplTest.java index b4754e653d8..ca23a601a23 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImplTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImplTest.java @@ -2,6 +2,7 @@ package com.yahoo.vespa.hosted.node.admin.nodeadmin; import com.yahoo.collections.Pair; +import com.yahoo.metrics.simple.MetricReceiver; import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper; import com.yahoo.vespa.hosted.node.admin.ContainerNodeSpec; import com.yahoo.vespa.hosted.dockerapi.Container; @@ -51,7 +52,8 @@ public class NodeAdminImplTest { final Function<String, NodeAgent> nodeAgentFactory = mock(NodeAgentFactory.class); final MaintenanceScheduler maintenanceScheduler = mock(MaintenanceScheduler.class); - final NodeAdminImpl nodeAdmin = new NodeAdminImpl(docker, nodeAgentFactory, maintenanceScheduler, 100, MetricReceiverWrapper.nullImplementation); + final NodeAdminImpl nodeAdmin = new NodeAdminImpl(docker, nodeAgentFactory, maintenanceScheduler, 100, + new MetricReceiverWrapper(MetricReceiver.nullImplementation)); final NodeAgent nodeAgent1 = mock(NodeAgentImpl.class); final NodeAgent nodeAgent2 = mock(NodeAgentImpl.class); diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/restapi/SecretAgentHandlerTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/restapi/SecretAgentHandlerTest.java new file mode 100644 index 00000000000..55b83d66268 --- /dev/null +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/restapi/SecretAgentHandlerTest.java @@ -0,0 +1,46 @@ +package com.yahoo.vespa.hosted.node.admin.restapi; + +import com.yahoo.metrics.simple.MetricReceiver; +import com.yahoo.vespa.hosted.dockerapi.metrics.CounterWrapper; +import com.yahoo.vespa.hosted.dockerapi.metrics.GaugeWrapper; +import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper; +import org.junit.Test; + +import java.util.Map; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +/** + * @author valerijf + */ +public class SecretAgentHandlerTest { + @Test + public void testSecretAgentFormat() { + MetricReceiverWrapper metricReceiver = new MetricReceiverWrapper(MetricReceiver.nullImplementation); + GaugeWrapper someGauge1 = metricReceiver.declareGauge("some.gauge-1"); + GaugeWrapper someGauge2 = metricReceiver.declareGauge("some.other.gauge"); + CounterWrapper counter = metricReceiver.declareCounter("a_counter.value"); + + SecretAgentHandler secretAgentHandler = new SecretAgentHandler(metricReceiver); + Map<String, Object> response = secretAgentHandler.getSecretAgentReport(); + + // Test required fields + assertTrue(response.containsKey("application")); + assertTrue(response.containsKey("timestamp")); + assertTrue(response.containsKey("dimensions")); + assertFalse(((Map) response.get("dimensions")).isEmpty()); + + assertTrue(response.containsKey("metrics")); + + // Test default value + assertEquals(0L, ((Map) response.get("metrics")).get("a_counter.value")); + + // Set a sample value and check that the new reports contains it + counter.add(123); + response = secretAgentHandler.getSecretAgentReport(); + assertEquals(123L, ((Map) response.get("metrics")).get("a_counter.value")); + + } +} diff --git a/simplemetrics/src/main/java/com/yahoo/metrics/simple/Gauge.java b/simplemetrics/src/main/java/com/yahoo/metrics/simple/Gauge.java index 87ea7ffdaf0..edfa198416e 100644 --- a/simplemetrics/src/main/java/com/yahoo/metrics/simple/Gauge.java +++ b/simplemetrics/src/main/java/com/yahoo/metrics/simple/Gauge.java @@ -14,7 +14,7 @@ import edu.umd.cs.findbugs.annotations.Nullable; * @author steinar */ @Beta -public final class Gauge { +public class Gauge { @Nullable private final Point defaultPosition; private final String name; diff --git a/simplemetrics/src/main/java/com/yahoo/metrics/simple/MetricReceiver.java b/simplemetrics/src/main/java/com/yahoo/metrics/simple/MetricReceiver.java index a0b94f1e571..c45d50db065 100644 --- a/simplemetrics/src/main/java/com/yahoo/metrics/simple/MetricReceiver.java +++ b/simplemetrics/src/main/java/com/yahoo/metrics/simple/MetricReceiver.java @@ -55,6 +55,25 @@ public class MetricReceiver { } } + private static final class NullGauge extends Gauge { + NullGauge() { + super(null, null, null); + } + + @Override + public void sample(double x) { + } + + @Override + public void sample(double x, Point p) { + } + + @Override + public PointBuilder builder() { + return super.builder(); + } + } + private static final class NullReceiver extends MetricReceiver { NullReceiver() { super(null, null); @@ -76,12 +95,12 @@ public class MetricReceiver { @Override public Gauge declareGauge(String name) { - return null; + return new NullGauge(); } @Override public Gauge declareGauge(String name, Point boundDimensions) { - return null; + return new NullGauge(); } @Override |