From 70eb09fe7059a30bc1819124d3bcaa8afd81864a Mon Sep 17 00:00:00 2001 From: Sylvain Juge <763082+SylvainJuge@users.noreply.github.com> Date: Tue, 16 Dec 2025 10:34:06 +0100 Subject: [PATCH 1/2] jmx scraper remove usage of deprecated API --- .../contrib/jmxscraper/JmxScraper.java | 20 ++----------------- 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/jmx-scraper/src/main/java/io/opentelemetry/contrib/jmxscraper/JmxScraper.java b/jmx-scraper/src/main/java/io/opentelemetry/contrib/jmxscraper/JmxScraper.java index 9537b9471..8bd120d8b 100644 --- a/jmx-scraper/src/main/java/io/opentelemetry/contrib/jmxscraper/JmxScraper.java +++ b/jmx-scraper/src/main/java/io/opentelemetry/contrib/jmxscraper/JmxScraper.java @@ -27,9 +27,7 @@ import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.nio.file.Files; -import java.nio.file.Path; import java.nio.file.Paths; -import java.nio.file.StandardCopyOption; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -240,30 +238,16 @@ private static JmxTelemetry createJmxTelemetry( JmxTelemetryBuilder builder = JmxTelemetry.builder(openTelemetry); builder.beanDiscoveryDelay(config.getSamplingInterval()); - // Unfortunately we can't use the convenient 'addClassPathRules' here as it does not yet - // allow to customize the path of the yaml resources in classpath. - // config.getTargetSystems().forEach(builder::addClassPathRules); - // - // As a temporary workaround we load configuration through temporary files and register them - // as if they were custom rules. config .getTargetSystems() .forEach( system -> { try (InputStream input = config.getTargetSystemYaml(system)) { - Path tempFile = Files.createTempFile("jmx-scraper-" + system, ".yaml"); - try { - Files.copy(input, tempFile, StandardCopyOption.REPLACE_EXISTING); - builder.addCustomRules(tempFile); - } finally { - Files.delete(tempFile); - } - } catch (IOException e) { - throw new IllegalStateException(e); + builder.addRules(input); } }); - config.getJmxConfig().stream().map(Paths::get).forEach(builder::addCustomRules); + config.getJmxConfig().stream().map(Paths::get).forEach(path -> builder.addRules(path)); return builder.build(); } From 110626bf2a1bcc6bbc24ac007f0593d35d37e4f2 Mon Sep 17 00:00:00 2001 From: Sylvain Juge <763082+SylvainJuge@users.noreply.github.com> Date: Tue, 16 Dec 2025 11:19:00 +0100 Subject: [PATCH 2/2] handle IOException even if unlikely to be thrown --- .../contrib/jmxscraper/JmxScraper.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/jmx-scraper/src/main/java/io/opentelemetry/contrib/jmxscraper/JmxScraper.java b/jmx-scraper/src/main/java/io/opentelemetry/contrib/jmxscraper/JmxScraper.java index 8bd120d8b..366fa48ca 100644 --- a/jmx-scraper/src/main/java/io/opentelemetry/contrib/jmxscraper/JmxScraper.java +++ b/jmx-scraper/src/main/java/io/opentelemetry/contrib/jmxscraper/JmxScraper.java @@ -238,14 +238,14 @@ private static JmxTelemetry createJmxTelemetry( JmxTelemetryBuilder builder = JmxTelemetry.builder(openTelemetry); builder.beanDiscoveryDelay(config.getSamplingInterval()); - config - .getTargetSystems() - .forEach( - system -> { - try (InputStream input = config.getTargetSystemYaml(system)) { - builder.addRules(input); - } - }); + for (String system : config.getTargetSystems()) { + try (InputStream input = config.getTargetSystemYaml(system)) { + builder.addRules(input); + } catch (IOException e) { + // can only be triggered by close(), thus very unlikely to be triggered in practice + throw new IllegalStateException("IO error loading rules for system: " + system, e); + } + } config.getJmxConfig().stream().map(Paths::get).forEach(path -> builder.addRules(path)); return builder.build();