Skip to content

Commit f50417d

Browse files
committed
add workaround for new API limitation
1 parent 1a506f6 commit f50417d

1 file changed

Lines changed: 31 additions & 7 deletions

File tree

  • jmx-scraper/src/main/java/io/opentelemetry/contrib/jmxscraper

jmx-scraper/src/main/java/io/opentelemetry/contrib/jmxscraper/JmxScraper.java

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@
2727
import java.io.InputStream;
2828
import java.nio.charset.StandardCharsets;
2929
import java.nio.file.Files;
30+
import java.nio.file.Path;
3031
import java.nio.file.Paths;
32+
import java.nio.file.StandardCopyOption;
3133
import java.util.ArrayList;
3234
import java.util.Arrays;
3335
import java.util.List;
@@ -229,15 +231,37 @@ private static Properties loadPropertiesFromPath(String path) throws InvalidArgu
229231
private JmxScraper(
230232
JmxConnectorBuilder client, OpenTelemetry openTelemetry, JmxScraperConfig config) {
231233
this.client = client;
232-
this.jmxTelemetry = jmxTelemetry(openTelemetry, config);
234+
this.jmxTelemetry = createJmxTelemetry(openTelemetry, config);
233235
}
234236

235-
private static JmxTelemetry jmxTelemetry(OpenTelemetry openTelemetry, JmxScraperConfig config) {
236-
JmxTelemetryBuilder jmxTelemetryBuilder =
237-
JmxTelemetry.builder(openTelemetry).beanDiscoveryDelay(config.getSamplingInterval());
238-
config.getTargetSystems().forEach(jmxTelemetryBuilder::addClassPathRules);
239-
config.getJmxConfig().stream().map(Paths::get).forEach(jmxTelemetryBuilder::addCustomRules);
240-
return jmxTelemetryBuilder.build();
237+
private static JmxTelemetry createJmxTelemetry(
238+
OpenTelemetry openTelemetry, JmxScraperConfig config) {
239+
240+
JmxTelemetryBuilder builder = JmxTelemetry.builder(openTelemetry);
241+
builder.beanDiscoveryDelay(config.getSamplingInterval());
242+
243+
// Unfortunately we can't use the convenient 'addClassPathRules' here as it does not yet
244+
// allow to customize the path of the yaml resources in classpath.
245+
// config.getTargetSystems().forEach(builder::addClassPathRules);
246+
//
247+
// As a temporary workaround we load configuration through temporary files and register them
248+
// as if they were custom rules.
249+
config
250+
.getTargetSystems()
251+
.forEach(
252+
system -> {
253+
try (InputStream input = config.getTargetSystemYaml(system)) {
254+
Path tempFile = Files.createTempFile("jmx-scraper-" + system, ".yaml");
255+
Files.copy(input, tempFile, StandardCopyOption.REPLACE_EXISTING);
256+
builder.addCustomRules(tempFile);
257+
Files.delete(tempFile);
258+
} catch (IOException e) {
259+
throw new IllegalStateException(e);
260+
}
261+
});
262+
263+
config.getJmxConfig().stream().map(Paths::get).forEach(builder::addCustomRules);
264+
return builder.build();
241265
}
242266

243267
private void start() throws IOException {

0 commit comments

Comments
 (0)