diff options
author | Arne H Juul <arnej27959@users.noreply.github.com> | 2024-06-10 15:51:02 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-10 15:51:02 +0200 |
commit | b6b1513e6df1e3e22f0c1d9b98f56f1f077d62bd (patch) | |
tree | 3d9a314af4e611903e2b780197759a82ead01316 | |
parent | d087ecfe9a280cf011471184f8e39e2bfafa4dde (diff) | |
parent | b031413cdf4db9c733e09ac8acc464e0cfa58670 (diff) |
Merge pull request #31517 from vespa-engine/arnej/add-parent-hostname
find parent hostname from nodename
3 files changed, 50 insertions, 4 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/otel/OpenTelemetryCollector.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/otel/OpenTelemetryCollector.java index 03b96b12c03..364048ff261 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/admin/otel/OpenTelemetryCollector.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/otel/OpenTelemetryCollector.java @@ -19,11 +19,13 @@ public class OpenTelemetryCollector extends AbstractService implements OpenTelem private final Zone zone; private final ApplicationId applicationId; + private final boolean isHostedVespa; public OpenTelemetryCollector(TreeConfigProducer<?> parent) { super(parent, "otelcol"); this.zone = null; this.applicationId = null; + this.isHostedVespa = false; setProp("clustertype", "admin"); setProp("clustername", "admin"); } @@ -32,6 +34,7 @@ public class OpenTelemetryCollector extends AbstractService implements OpenTelem super(parent, "otelcol"); this.zone = deployState.zone(); this.applicationId = deployState.getProperties().applicationId(); + this.isHostedVespa = deployState.isHosted(); setProp("clustertype", "admin"); setProp("clustername", "admin"); } @@ -54,7 +57,7 @@ public class OpenTelemetryCollector extends AbstractService implements OpenTelem @Override public void getConfig(OpenTelemetryConfig.Builder builder) { - var generator = new OpenTelemetryConfigGenerator(zone, applicationId); + var generator = new OpenTelemetryConfigGenerator(zone, applicationId, isHostedVespa); AnyConfigProducer pp = this; AnyConfigProducer p = pp.getParent(); while (p != null && p != pp) { diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/otel/OpenTelemetryConfigGenerator.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/otel/OpenTelemetryConfigGenerator.java index 9875cf434aa..43a13a3e7c1 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/admin/otel/OpenTelemetryConfigGenerator.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/otel/OpenTelemetryConfigGenerator.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.regex.Pattern; import static com.yahoo.vespa.defaults.Defaults.getDefaults; @@ -35,10 +36,12 @@ public class OpenTelemetryConfigGenerator { private List<StatePortInfo> statePorts = new ArrayList<>(); private final Zone zone; private final ApplicationId applicationId; + private final boolean isHostedVespa; - OpenTelemetryConfigGenerator(Zone zone, ApplicationId applicationId) { + OpenTelemetryConfigGenerator(Zone zone, ApplicationId applicationId, boolean isHostedVespa) { this.zone = zone; this.applicationId = applicationId; + this.isHostedVespa = isHostedVespa; boolean isCd = true; boolean isPublic = true; if (zone != null) { @@ -103,10 +106,29 @@ public class OpenTelemetryConfigGenerator { g.writeStringField(entry.getKey(), entry.getValue()); } } + String ph = findParentHost(statePort.hostName()); + if (isHostedVespa && ph != null) { + g.writeStringField("parentHostname", ph); + } g.writeEndObject(); } g.writeEndObject(); } + // note: this pattern should match entire node name + static private final Pattern expectedNodeName1 = Pattern.compile("[a-z0-9]+-v6-[0-9]+[.].+"); + static private final Pattern expectedNodeName2 = Pattern.compile("[a-z]*[0-9]+[a-z][.].+"); + // matches the part we want to replace with just a dot + static private final Pattern replaceNodeName1 = Pattern.compile("-v6-[0-9]+[.]"); + static private final Pattern replaceNodeName2 = Pattern.compile("[a-z][.]"); + static String findParentHost(String nodeName) { + if (expectedNodeName1.matcher(nodeName).matches()) { + return replaceNodeName1.matcher(nodeName).replaceFirst("."); + } + if (expectedNodeName2.matcher(nodeName).matches()) { + return replaceNodeName2.matcher(nodeName).replaceFirst("."); + } + return null; + } private void addTls(JsonGenerator g) throws java.io.IOException { g.writeFieldName("tls"); g.writeStartObject(); diff --git a/config-model/src/test/java/com/yahoo/vespa/model/admin/otel/OpenTelemetryConfigGeneratorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/admin/otel/OpenTelemetryConfigGeneratorTest.java index c24fcb27dc9..efe9cfe5060 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/admin/otel/OpenTelemetryConfigGeneratorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/admin/otel/OpenTelemetryConfigGeneratorTest.java @@ -31,7 +31,7 @@ public class OpenTelemetryConfigGeneratorTest { void testBuildsYaml() { var mockZone = new Zone(SystemName.PublicCd, Environment.prod, RegionName.from("mock")); var app = ApplicationId.from("mytenant", "myapp", "myinstance"); - var generator = new OpenTelemetryConfigGenerator(mockZone, app); + var generator = new OpenTelemetryConfigGenerator(mockZone, app, true); var root = new MockRoot(); var mockHost = new Host(root, "localhost2.local"); @@ -50,12 +50,15 @@ public class OpenTelemetryConfigGeneratorTest { var mockSvc2 = new MockService(root, "searchnode"); mockSvc2.setProp("clustername", "mycluster"); mockSvc2.setProp("clustertype", "mockup"); - var mockPort2 = new StatePortInfo("other.host.local", 19102, mockSvc2); + var mockPort2 = new StatePortInfo("other123x.host.local", 19102, mockSvc2); generator.addStatePorts(List.of(mockPort1, mockPort2)); String yaml = generator.generate(); // System.err.println(">>>\n" + yaml + "\n<<<"); assertTrue(yaml.contains("sentinel")); + String want = """ + "parentHostname":"other123.host.local"""; + assertTrue(yaml.contains(want)); } static class MockService extends AbstractService { @@ -70,4 +73,22 @@ public class OpenTelemetryConfigGeneratorTest { @Override public void allocatePorts(int start, PortAllocBridge from) { } } + @Test + void testFindParentHost() { + String result; + result = OpenTelemetryConfigGenerator.findParentHost("n1234c.foo.bar.some.cloud"); + assertEquals("n1234.foo.bar.some.cloud", result); + result = OpenTelemetryConfigGenerator.findParentHost("n1234-v6-7.foo.bar.some.cloud"); + assertEquals("n1234.foo.bar.some.cloud", result); + result = OpenTelemetryConfigGenerator.findParentHost("2000a.foo.bar.some.cloud"); + assertEquals("2000.foo.bar.some.cloud", result); + result = OpenTelemetryConfigGenerator.findParentHost("2000-v6-10.foo.bar.some.cloud"); + assertEquals("2000.foo.bar.some.cloud", result); + result = OpenTelemetryConfigGenerator.findParentHost("foobar.some.cloud"); + assertNull(result); + result = OpenTelemetryConfigGenerator.findParentHost("foo123bar.some.cloud"); + assertNull(result); + result = OpenTelemetryConfigGenerator.findParentHost("foo123.some.cloud"); + assertNull(result); + } } |