aboutsummaryrefslogtreecommitdiffstats
path: root/node-admin
diff options
context:
space:
mode:
authorbjormel <bjormel@verizonmedia.com>2021-07-29 15:58:45 +0200
committerbjormel <bjormel@verizonmedia.com>2021-07-29 15:58:45 +0200
commit568ac5d621592fb6c675157a6cfd582408d3788f (patch)
tree2f1f271e8e510651a448e2e02a2d4d735b2ab748 /node-admin
parent0ee098ce8f4fa965145849101c28d836a2552f31 (diff)
Metric for last update of IP tables
Diffstat (limited to 'node-admin')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainer.java33
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainerTest.java4
2 files changed, 33 insertions, 4 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainer.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainer.java
index 20ca842784d..63217acd2f7 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainer.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainer.java
@@ -2,7 +2,10 @@
package com.yahoo.vespa.hosted.node.admin.maintenance.acl;
import com.google.common.net.InetAddresses;
+import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec;
import com.yahoo.vespa.hosted.node.admin.container.ContainerOperations;
+import com.yahoo.vespa.hosted.node.admin.container.metrics.Dimensions;
+import com.yahoo.vespa.hosted.node.admin.container.metrics.Metrics;
import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContext;
import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentTask;
import com.yahoo.vespa.hosted.node.admin.task.util.file.Editor;
@@ -43,10 +46,12 @@ public class AclMaintainer {
private final ContainerOperations containerOperations;
private final IPAddresses ipAddresses;
+ private final Metrics metrics;
- public AclMaintainer(ContainerOperations containerOperations, IPAddresses ipAddresses) {
+ public AclMaintainer(ContainerOperations containerOperations, IPAddresses ipAddresses, Metrics metrics) {
this.containerOperations = containerOperations;
this.ipAddresses = ipAddresses;
+ this.metrics = metrics;
}
// ip(6)tables operate while having the xtables lock, run with synchronized to prevent multiple NodeAgents
@@ -55,8 +60,10 @@ public class AclMaintainer {
if (context.isDisabled(NodeAgentTask.AclMaintainer)) return;
// Apply acl to the filter table
- editFlushOnError(context, IPVersion.IPv4, "filter", FilterTableLineEditor.from(context.acl(), IPVersion.IPv4));
- editFlushOnError(context, IPVersion.IPv6, "filter", FilterTableLineEditor.from(context.acl(), IPVersion.IPv6));
+ boolean updatedIPv4 = editFlushOnError(context, IPVersion.IPv4, "filter", FilterTableLineEditor.from(context.acl(), IPVersion.IPv4));
+ boolean updatedIPv6 = editFlushOnError(context, IPVersion.IPv6, "filter", FilterTableLineEditor.from(context.acl(), IPVersion.IPv6));
+ updateMetrics(context, updatedIPv4, "IPv4-acl.updated");
+ updateMetrics(context, updatedIPv6, "IPv6-acl.updated");
ipAddresses.getAddress(context.hostname().value(), IPVersion.IPv4).ifPresent(addr -> applyRedirect(context, addr));
ipAddresses.getAddress(context.hostname().value(), IPVersion.IPv6).ifPresent(addr -> applyRedirect(context, addr));
@@ -115,6 +122,26 @@ public class AclMaintainer {
};
}
+ void updateMetrics(NodeAgentContext context, boolean updated, String name) {
+ if (!updated) return;
+
+ Dimensions dimensions = generateDimensions(context);
+
+ metrics.declareGauge(Metrics.APPLICATION_NODE, name, dimensions, Metrics.DimensionType.PRETAGGED).sample(System.currentTimeMillis()/1000);
+
+ }
+
+ private Dimensions generateDimensions(NodeAgentContext context) {
+ NodeSpec node = context.node();
+ Dimensions.Builder dimensionsBuilder = new Dimensions.Builder()
+ .add("host", node.hostname())
+ .add("zone", context.zone().getId().value());
+
+ node.currentVespaVersion().ifPresent(vespaVersion -> dimensionsBuilder.add("vespaVersion", vespaVersion.toFullString()));
+
+ return dimensionsBuilder.build();
+ }
+
private static class TemporaryIpTablesFileHandler implements AutoCloseable {
private final Path path;
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainerTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainerTest.java
index 224cb3305f8..2c0ca343937 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainerTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainerTest.java
@@ -3,6 +3,7 @@ package com.yahoo.vespa.hosted.node.admin.maintenance.acl;
import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.Acl;
import com.yahoo.vespa.hosted.node.admin.container.ContainerOperations;
+import com.yahoo.vespa.hosted.node.admin.container.metrics.Metrics;
import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContext;
import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContextImpl;
import com.yahoo.vespa.hosted.node.admin.task.util.file.UnixPath;
@@ -37,7 +38,8 @@ public class AclMaintainerTest {
private final ContainerOperations containerOperations = mock(ContainerOperations.class);
private final IPAddressesMock ipAddresses = new IPAddressesMock();
- private final AclMaintainer aclMaintainer = new AclMaintainer(containerOperations, ipAddresses);
+ private final Metrics metrics = new Metrics();
+ private final AclMaintainer aclMaintainer = new AclMaintainer(containerOperations, ipAddresses, metrics);
private final FileSystem fileSystem = TestFileSystem.create();
private final Function<Acl, NodeAgentContext> contextGenerator =