| 
17 | 17 | import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;  | 
18 | 18 | import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;  | 
19 | 19 | import java.io.InputStream;  | 
20 |  | -import java.nio.file.Files;  | 
21 |  | -import java.nio.file.Paths;  | 
 | 20 | +import java.net.URL;  | 
22 | 21 | import java.time.Duration;  | 
23 | 22 | import java.util.List;  | 
24 | 23 | 
 
  | 
@@ -78,13 +77,37 @@ private static void buildFromDefaultRules(  | 
78 | 77 |     }  | 
79 | 78 |   }  | 
80 | 79 | 
 
  | 
81 |  | -  private static void buildFromUserRules(  | 
82 |  | -      MetricConfiguration conf, ConfigProperties configProperties) {  | 
 | 80 | +  static void buildFromUserRules(MetricConfiguration conf, ConfigProperties configProperties) {  | 
 | 81 | + | 
83 | 82 |     List<String> configFiles = configProperties.getList("otel.jmx.config");  | 
 | 83 | + | 
 | 84 | +    // current working directory path  | 
 | 85 | +    String currentWorkingDirectory = System.getProperty("user.dir");  | 
 | 86 | + | 
84 | 87 |     for (String configFile : configFiles) {  | 
85 |  | -      JmxMetricInsight.getLogger().log(FINE, "JMX config file name: {0}", configFile);  | 
 | 88 | +      String configFileUrlString = configFile;  | 
 | 89 | + | 
 | 90 | +      if (configFile != null) {  | 
 | 91 | + | 
 | 92 | +        // handle relative path case  | 
 | 93 | +        if (!configFile.startsWith("/") && !configFile.contains("://")) {  | 
 | 94 | +          configFile = currentWorkingDirectory + "/" + configFile;  | 
 | 95 | +        }  | 
 | 96 | + | 
 | 97 | +        // handle relative path URL case  | 
 | 98 | +        if (configFile.startsWith("file://") && !configFile.startsWith("file:///")) {  | 
 | 99 | +          String configFileRelativePath = configFile.replaceFirst("^file://", "");  | 
 | 100 | +          configFile = "file://" + currentWorkingDirectory + "/" + configFileRelativePath;  | 
 | 101 | +        }  | 
 | 102 | + | 
 | 103 | +        // handle absolute path  | 
 | 104 | +        if (!configFile.contains("://")) {  | 
 | 105 | +          configFileUrlString = "file://" + configFile;  | 
 | 106 | +        }  | 
 | 107 | +      }  | 
 | 108 | +      JmxMetricInsight.getLogger().log(FINE, "JMX config file name: {0}", configFileUrlString);  | 
86 | 109 |       RuleParser parserInstance = RuleParser.get();  | 
87 |  | -      try (InputStream inputStream = Files.newInputStream(Paths.get(configFile))) {  | 
 | 110 | +      try (InputStream inputStream = new URL(configFileUrlString).openStream()) {  | 
88 | 111 |         parserInstance.addMetricDefsTo(conf, inputStream, configFile);  | 
89 | 112 |       } catch (Exception e) {  | 
90 | 113 |         // yaml parsing errors are caught and logged inside of addMetricDefsTo  | 
 | 
0 commit comments