From 059b1a74f8d49ee425baa22c45bb940f4897928b Mon Sep 17 00:00:00 2001 From: misaya <3315605798@qq.com> Date: Thu, 31 Oct 2024 12:49:44 +0800 Subject: [PATCH 1/7] compatible different command line style for find jar path compatible command like : java -jar -XX:MaxRAM=128m app.jar --- .../instrumentation/resources/MainJarPathFinder.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/MainJarPathFinder.java b/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/MainJarPathFinder.java index 8f9b9287ac68..f4e794ed01e8 100644 --- a/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/MainJarPathFinder.java +++ b/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/MainJarPathFinder.java @@ -44,9 +44,13 @@ Path detectJarPath() { @Nullable private Path getJarPathFromProcessHandle() { String[] javaArgs = getProcessHandleArguments.get(); - for (int i = 0; i < javaArgs.length; ++i) { - if ("-jar".equals(javaArgs[i]) && (i < javaArgs.length - 1)) { - return Paths.get(javaArgs[i + 1]); + boolean jarOptionFound = false; + for (String javaArg : javaArgs) { + if ("-jar".equals(javaArg)) { + jarOptionFound = true; + } + if (jarOptionFound && !javaArg.startsWith("-")) { + return Paths.get(javaArg); } } return null; From c96705804edca21fdb62192627b4a410da73ad49 Mon Sep 17 00:00:00 2001 From: misaya <3315605798@qq.com> Date: Tue, 5 Nov 2024 15:32:18 +0800 Subject: [PATCH 2/7] add unit test for jar command variant --- .../resources/JarServiceNameDetectorTest.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/instrumentation/resources/library/src/test/java/io/opentelemetry/instrumentation/resources/JarServiceNameDetectorTest.java b/instrumentation/resources/library/src/test/java/io/opentelemetry/instrumentation/resources/JarServiceNameDetectorTest.java index bcb0ff2c631d..b733ee9ec917 100644 --- a/instrumentation/resources/library/src/test/java/io/opentelemetry/instrumentation/resources/JarServiceNameDetectorTest.java +++ b/instrumentation/resources/library/src/test/java/io/opentelemetry/instrumentation/resources/JarServiceNameDetectorTest.java @@ -73,6 +73,21 @@ void createResource_processHandleJar() { .containsEntry(ServiceAttributes.SERVICE_NAME, "my-service"); } + @Test + void createResource_processHandleJar_jar_command_variant() { + JarServiceNameDetector serviceNameProvider = + getDetector( + getArgs_jar_command_variant("my-service.jar"), + prop -> null, + JarServiceNameDetectorTest::failPath); + + Resource resource = serviceNameProvider.createResource(config); + + assertThat(resource.getAttributes()) + .hasSize(1) + .containsEntry(ServiceAttributes.SERVICE_NAME, "my-service"); + } + @Test void createResource_processHandleJarWithoutExtension() { JarServiceNameDetector serviceNameProvider = @@ -90,6 +105,11 @@ static String[] getArgs(String jarName) { return new String[] {"-Dtest=42", "-Xmx666m", "-jar", path, "abc", "def"}; } + static String[] getArgs_jar_command_variant(String jarName) { + String path = Paths.get("path", "to", "app", jarName).toString(); + return new String[] {"-Dtest=42", "-jar", "-Xmx666m", path, "abc", "def"}; + } + @ParameterizedTest @ArgumentsSource(SunCommandLineProvider.class) void createResource_sunCommandLine(String commandLine, Path jarPath) { From cbc1facb01cbf80255f8020be6e2d9ffe7a5a9d6 Mon Sep 17 00:00:00 2001 From: misaya <3315605798@qq.com> Date: Wed, 6 Nov 2024 09:41:53 +0800 Subject: [PATCH 3/7] Update jvm params for test Co-authored-by: Trask Stalnaker --- .../instrumentation/resources/JarServiceNameDetectorTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/instrumentation/resources/library/src/test/java/io/opentelemetry/instrumentation/resources/JarServiceNameDetectorTest.java b/instrumentation/resources/library/src/test/java/io/opentelemetry/instrumentation/resources/JarServiceNameDetectorTest.java index b733ee9ec917..0f60c35605e6 100644 --- a/instrumentation/resources/library/src/test/java/io/opentelemetry/instrumentation/resources/JarServiceNameDetectorTest.java +++ b/instrumentation/resources/library/src/test/java/io/opentelemetry/instrumentation/resources/JarServiceNameDetectorTest.java @@ -107,7 +107,7 @@ static String[] getArgs(String jarName) { static String[] getArgs_jar_command_variant(String jarName) { String path = Paths.get("path", "to", "app", jarName).toString(); - return new String[] {"-Dtest=42", "-jar", "-Xmx666m", path, "abc", "def"}; + return new String[] {"-Dtest=42", "-jar", "-Xmx512m", path, "abc", "def"}; } @ParameterizedTest From 06013f34da172c990b92e665ef390ce4c5574a3e Mon Sep 17 00:00:00 2001 From: misaya <3315605798@qq.com> Date: Wed, 6 Nov 2024 15:14:06 +0800 Subject: [PATCH 4/7] inline getArgs_jar_command_variant in JarServiceNameDetectorTest --- .../resources/JarServiceNameDetectorTest.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/instrumentation/resources/library/src/test/java/io/opentelemetry/instrumentation/resources/JarServiceNameDetectorTest.java b/instrumentation/resources/library/src/test/java/io/opentelemetry/instrumentation/resources/JarServiceNameDetectorTest.java index 0f60c35605e6..949ac2c7a00b 100644 --- a/instrumentation/resources/library/src/test/java/io/opentelemetry/instrumentation/resources/JarServiceNameDetectorTest.java +++ b/instrumentation/resources/library/src/test/java/io/opentelemetry/instrumentation/resources/JarServiceNameDetectorTest.java @@ -75,9 +75,10 @@ void createResource_processHandleJar() { @Test void createResource_processHandleJar_jar_command_variant() { + String path = Paths.get("path", "to", "app", "my-service.jar").toString(); JarServiceNameDetector serviceNameProvider = getDetector( - getArgs_jar_command_variant("my-service.jar"), + new String[] {"-Dtest=42", "-jar", "-Xmx512m", path, "abc", "def"}, prop -> null, JarServiceNameDetectorTest::failPath); @@ -105,11 +106,6 @@ static String[] getArgs(String jarName) { return new String[] {"-Dtest=42", "-Xmx666m", "-jar", path, "abc", "def"}; } - static String[] getArgs_jar_command_variant(String jarName) { - String path = Paths.get("path", "to", "app", jarName).toString(); - return new String[] {"-Dtest=42", "-jar", "-Xmx512m", path, "abc", "def"}; - } - @ParameterizedTest @ArgumentsSource(SunCommandLineProvider.class) void createResource_sunCommandLine(String commandLine, Path jarPath) { From 92855400e27979145284a04cd5f08afbddf503ff Mon Sep 17 00:00:00 2001 From: misaya <3315605798@qq.com> Date: Wed, 6 Nov 2024 15:48:37 +0800 Subject: [PATCH 5/7] rename test method name --- .../instrumentation/resources/JarServiceNameDetectorTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/instrumentation/resources/library/src/test/java/io/opentelemetry/instrumentation/resources/JarServiceNameDetectorTest.java b/instrumentation/resources/library/src/test/java/io/opentelemetry/instrumentation/resources/JarServiceNameDetectorTest.java index 949ac2c7a00b..b44851bfaa13 100644 --- a/instrumentation/resources/library/src/test/java/io/opentelemetry/instrumentation/resources/JarServiceNameDetectorTest.java +++ b/instrumentation/resources/library/src/test/java/io/opentelemetry/instrumentation/resources/JarServiceNameDetectorTest.java @@ -74,7 +74,7 @@ void createResource_processHandleJar() { } @Test - void createResource_processHandleJar_jar_command_variant() { + void createResource_processHandleJarExtraFlag() { String path = Paths.get("path", "to", "app", "my-service.jar").toString(); JarServiceNameDetector serviceNameProvider = getDetector( From 957e2e728824ab2f9728059c03520eb0b31e99c5 Mon Sep 17 00:00:00 2001 From: misaya <3315605798@qq.com> Date: Wed, 6 Nov 2024 15:49:24 +0800 Subject: [PATCH 6/7] add comment for args handle --- .../instrumentation/resources/MainJarPathFinder.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/MainJarPathFinder.java b/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/MainJarPathFinder.java index f4e794ed01e8..4862fc42b42b 100644 --- a/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/MainJarPathFinder.java +++ b/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/MainJarPathFinder.java @@ -49,7 +49,8 @@ private Path getJarPathFromProcessHandle() { if ("-jar".equals(javaArg)) { jarOptionFound = true; } - if (jarOptionFound && !javaArg.startsWith("-")) { + // flags can appear between -jar and the jar path, ignore them + else if (jarOptionFound && !javaArg.startsWith("-")) { return Paths.get(javaArg); } } From 6c65922eae1904694ba6eb863d0cc376b603abaa Mon Sep 17 00:00:00 2001 From: misaya <3315605798@qq.com> Date: Wed, 6 Nov 2024 16:55:15 +0800 Subject: [PATCH 7/7] reformat MainJarPathFinder.java --- .../instrumentation/resources/MainJarPathFinder.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/MainJarPathFinder.java b/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/MainJarPathFinder.java index 4862fc42b42b..c0c7588698f2 100644 --- a/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/MainJarPathFinder.java +++ b/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/MainJarPathFinder.java @@ -48,9 +48,9 @@ private Path getJarPathFromProcessHandle() { for (String javaArg : javaArgs) { if ("-jar".equals(javaArg)) { jarOptionFound = true; - } - // flags can appear between -jar and the jar path, ignore them - else if (jarOptionFound && !javaArg.startsWith("-")) { + } else if (jarOptionFound + && !javaArg.startsWith( + "-")) { // flags can appear between -jar and the jar path, ignore them return Paths.get(javaArg); } }