Skip to content

Commit b383958

Browse files
committed
Add support for remote jmx rules files.
1 parent c6a6fa6 commit b383958

File tree

1 file changed

+29
-6
lines changed

1 file changed

+29
-6
lines changed

instrumentation/jmx-metrics/javaagent/src/main/java/io/opentelemetry/instrumentation/javaagent/jmx/JmxMetricInsightInstaller.java

+29-6
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@
1717
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
1818
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
1919
import java.io.InputStream;
20-
import java.nio.file.Files;
21-
import java.nio.file.Paths;
20+
import java.net.URL;
2221
import java.time.Duration;
2322
import java.util.List;
2423

@@ -78,13 +77,37 @@ private static void buildFromDefaultRules(
7877
}
7978
}
8079

81-
private static void buildFromUserRules(
82-
MetricConfiguration conf, ConfigProperties configProperties) {
80+
static void buildFromUserRules(MetricConfiguration conf, ConfigProperties configProperties) {
81+
8382
List<String> configFiles = configProperties.getList("otel.jmx.config");
83+
84+
// current working directory path
85+
String currentWorkingDirectory = System.getProperty("user.dir");
86+
8487
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);
86109
RuleParser parserInstance = RuleParser.get();
87-
try (InputStream inputStream = Files.newInputStream(Paths.get(configFile))) {
110+
try (InputStream inputStream = new URL(configFileUrlString).openStream()) {
88111
parserInstance.addMetricDefsTo(conf, inputStream, configFile);
89112
} catch (Exception e) {
90113
// yaml parsing errors are caught and logged inside of addMetricDefsTo

0 commit comments

Comments
 (0)