From d6271cccc7f2b6742ae47e2186d8c12d8a7d5a03 Mon Sep 17 00:00:00 2001 From: adamleantech <65166709+adamleantech@users.noreply.github.com> Date: Sun, 2 Apr 2023 02:58:43 +0100 Subject: [PATCH] Spring boot service name (#8006) resolves #7998 --------- Co-authored-by: Mateusz Rzeszutek Co-authored-by: Lauri Tulmin --- .../SpringBootServiceNameDetector.java | 18 ++++++++++-------- .../SpringBootServiceNameDetectorTest.java | 10 ++++++++++ .../src/test/resources/application-multi.yml | 19 +++++++++++++++++++ 3 files changed, 39 insertions(+), 8 deletions(-) create mode 100644 instrumentation/spring/spring-boot-resources/library/src/test/resources/application-multi.yml diff --git a/instrumentation/spring/spring-boot-resources/library/src/main/java/io/opentelemetry/instrumentation/spring/resources/SpringBootServiceNameDetector.java b/instrumentation/spring/spring-boot-resources/library/src/main/java/io/opentelemetry/instrumentation/spring/resources/SpringBootServiceNameDetector.java index d8c470ff66..9eccd46b44 100644 --- a/instrumentation/spring/spring-boot-resources/library/src/main/java/io/opentelemetry/instrumentation/spring/resources/SpringBootServiceNameDetector.java +++ b/instrumentation/spring/spring-boot-resources/library/src/main/java/io/opentelemetry/instrumentation/spring/resources/SpringBootServiceNameDetector.java @@ -178,14 +178,16 @@ public class SpringBootServiceNameDetector implements ConditionalResourceProvide try { LoadSettings settings = LoadSettings.builder().build(); Load yaml = new Load(settings); - Map data = (Map) yaml.loadFromInputStream(in); - Map> spring = - (Map>) data.get("spring"); - if (spring != null) { - Map app = spring.get("application"); - if (app != null) { - Object name = app.get("name"); - return (String) name; + for (Object o : yaml.loadAllFromInputStream(in)) { + Map data = (Map) o; + Map> spring = + (Map>) data.get("spring"); + if (spring != null) { + Map app = spring.get("application"); + if (app != null) { + Object name = app.get("name"); + return (String) name; + } } } } catch (RuntimeException e) { diff --git a/instrumentation/spring/spring-boot-resources/library/src/test/java/io/opentelemetry/instrumentation/spring/resources/SpringBootServiceNameDetectorTest.java b/instrumentation/spring/spring-boot-resources/library/src/test/java/io/opentelemetry/instrumentation/spring/resources/SpringBootServiceNameDetectorTest.java index 6a82f01941..0e8d6dd186 100644 --- a/instrumentation/spring/spring-boot-resources/library/src/test/java/io/opentelemetry/instrumentation/spring/resources/SpringBootServiceNameDetectorTest.java +++ b/instrumentation/spring/spring-boot-resources/library/src/test/java/io/opentelemetry/instrumentation/spring/resources/SpringBootServiceNameDetectorTest.java @@ -75,6 +75,16 @@ class SpringBootServiceNameDetectorTest { expectServiceName(result, "cat-store"); } + @Test + void classpathApplicationYamlContainingMultipleYamlDefinitions() { + when(system.openClasspathResource(APPLICATION_YML)) + .thenReturn( + ClassLoader.getSystemClassLoader().getResourceAsStream("application-multi.yml")); + SpringBootServiceNameDetector guesser = new SpringBootServiceNameDetector(system); + Resource result = guesser.createResource(config); + expectServiceName(result, "cat-store"); + } + @Test void yamlFileInCurrentDir() throws Exception { Path yamlPath = Paths.get(APPLICATION_YML); diff --git a/instrumentation/spring/spring-boot-resources/library/src/test/resources/application-multi.yml b/instrumentation/spring/spring-boot-resources/library/src/test/resources/application-multi.yml new file mode 100644 index 0000000000..8edcf2bacc --- /dev/null +++ b/instrumentation/spring/spring-boot-resources/library/src/test/resources/application-multi.yml @@ -0,0 +1,19 @@ +flib: + something: + 12 + +section: + two: 2 + +server: + port: 777 + context-path: /meow + +spring: + application: + name: cat-store + +--- +some: + other: + property: value