diff options
author | bjormel <bjormel@verizonmedia.com> | 2021-07-29 15:58:45 +0200 |
---|---|---|
committer | bjormel <bjormel@verizonmedia.com> | 2021-07-29 15:58:45 +0200 |
commit | 568ac5d621592fb6c675157a6cfd582408d3788f (patch) | |
tree | 2f1f271e8e510651a448e2e02a2d4d735b2ab748 /node-admin | |
parent | 0ee098ce8f4fa965145849101c28d836a2552f31 (diff) |
Metric for last update of IP tables
Diffstat (limited to 'node-admin')
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 = |