|
27 | 27 | import java.io.InputStream; |
28 | 28 | import java.nio.charset.StandardCharsets; |
29 | 29 | import java.nio.file.Files; |
| 30 | +import java.nio.file.Path; |
30 | 31 | import java.nio.file.Paths; |
| 32 | +import java.nio.file.StandardCopyOption; |
31 | 33 | import java.util.ArrayList; |
32 | 34 | import java.util.Arrays; |
33 | 35 | import java.util.List; |
@@ -229,15 +231,37 @@ private static Properties loadPropertiesFromPath(String path) throws InvalidArgu |
229 | 231 | private JmxScraper( |
230 | 232 | JmxConnectorBuilder client, OpenTelemetry openTelemetry, JmxScraperConfig config) { |
231 | 233 | this.client = client; |
232 | | - this.jmxTelemetry = jmxTelemetry(openTelemetry, config); |
| 234 | + this.jmxTelemetry = createJmxTelemetry(openTelemetry, config); |
233 | 235 | } |
234 | 236 |
|
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(); |
241 | 265 | } |
242 | 266 |
|
243 | 267 | private void start() throws IOException { |
|
0 commit comments