aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src
diff options
context:
space:
mode:
authorArne Juul <arnej@vespa.ai>2024-06-06 12:30:30 +0000
committerArne Juul <arnej@vespa.ai>2024-06-10 11:24:54 +0000
commitb031413cdf4db9c733e09ac8acc464e0cfa58670 (patch)
tree9e3f9015fb50266d18a11c5da62bca3f84fe94f4 /config-model/src
parent832426e4de1e5c7995538074e9af746de26e643f (diff)
find parent hostname from nodename
Diffstat (limited to 'config-model/src')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/otel/OpenTelemetryCollector.java5
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/otel/OpenTelemetryConfigGenerator.java24
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/admin/otel/OpenTelemetryConfigGeneratorTest.java25
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);
+ }
}