summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvalerijf <valerijf@yahoo-inc.com>2016-09-29 08:50:53 +0200
committervalerijf <valerijf@yahoo-inc.com>2016-09-29 09:45:47 +0200
commit1a80d176855b0b45d79e1c081d3cccae7c008e2d (patch)
treedee80c01d4bea504800a41ea8287ec26f6e00cc7
parentcf58f368b71543ddbe8298fbc4d3cd024e3d7515 (diff)
Added NullGauge in metrics.simple to avoid having to re-create null implementation in wrappers
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java2
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/metrics/CounterWrapper.java15
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/metrics/GaugeWrapper.java11
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/metrics/MetricReceiverWrapper.java29
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImpl.java4
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/ComponentsProviderWithMocks.java4
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerFailTest.java4
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/MultiDockerTest.java4
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeStateTest.java4
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/ResumeTest.java4
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImplTest.java4
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/restapi/SecretAgentHandlerTest.java46
-rw-r--r--simplemetrics/src/main/java/com/yahoo/metrics/simple/Gauge.java2
-rw-r--r--simplemetrics/src/main/java/com/yahoo/metrics/simple/MetricReceiver.java23
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