Skip to content

Commit c7ceacd

Browse files
authored
Support json config (#131)
* Support json config Signed-off-by: Pavol Loffay <[email protected]> * Simplify Signed-off-by: Pavol Loffay <[email protected]> * simplify test Signed-off-by: Pavol Loffay <[email protected]> * format
1 parent 2942c2d commit c7ceacd

File tree

2 files changed

+37
-6
lines changed

2 files changed

+37
-6
lines changed

javaagent-core/src/main/java/org/hypertrace/agent/core/HypertraceConfig.java

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,13 @@
2323
import com.google.protobuf.Int32Value;
2424
import com.google.protobuf.StringValue;
2525
import com.google.protobuf.util.JsonFormat;
26+
import com.google.protobuf.util.JsonFormat.Parser;
2627
import java.io.File;
2728
import java.io.FileInputStream;
2829
import java.io.IOException;
2930
import java.io.InputStream;
31+
import java.io.InputStreamReader;
32+
import java.io.Reader;
3033
import org.hypertrace.agent.config.Config.AgentConfig;
3134
import org.hypertrace.agent.config.Config.DataCapture;
3235
import org.hypertrace.agent.config.Config.Message;
@@ -100,13 +103,18 @@ static AgentConfig load(String filename) throws IOException {
100103
String.format("Config file %s either does not exist or cannot be read", configFile));
101104
}
102105

103-
InputStream fileInputStream = new FileInputStream(configFile);
104-
String json = convertYamlToJson(fileInputStream);
105-
106106
AgentConfig.Builder configBuilder = AgentConfig.newBuilder();
107-
JsonFormat.parser().ignoringUnknownFields().merge(json, configBuilder);
108-
109-
return EnvironmentConfig.applyPropertiesAndEnvVars(applyDefaults(configBuilder)).build();
107+
Parser jsonParser = JsonFormat.parser().ignoringUnknownFields();
108+
try (InputStream fileInputStream = new FileInputStream(configFile)) {
109+
if (filename.toLowerCase().endsWith("json")) {
110+
Reader targetReader = new InputStreamReader(fileInputStream);
111+
jsonParser.merge(targetReader, configBuilder);
112+
} else {
113+
String json = convertYamlToJson(fileInputStream);
114+
jsonParser.merge(json, configBuilder);
115+
}
116+
return EnvironmentConfig.applyPropertiesAndEnvVars(applyDefaults(configBuilder)).build();
117+
}
110118
}
111119

112120
private static AgentConfig.Builder applyDefaults(AgentConfig.Builder configBuilder) {

javaagent-core/src/test/java/org/hypertrace/agent/core/HypertraceConfigTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,17 @@
1616

1717
package org.hypertrace.agent.core;
1818

19+
import com.google.protobuf.util.JsonFormat;
20+
import java.io.File;
21+
import java.io.FileOutputStream;
1922
import java.io.IOException;
2023
import java.net.URL;
2124
import java.util.Arrays;
2225
import org.hypertrace.agent.config.Config.AgentConfig;
2326
import org.hypertrace.agent.config.Config.PropagationFormat;
2427
import org.junit.jupiter.api.Assertions;
2528
import org.junit.jupiter.api.Test;
29+
import org.junit.jupiter.api.io.TempDir;
2630
import org.junitpioneer.jupiter.ClearSystemProperty;
2731

2832
public class HypertraceConfigTest {
@@ -66,6 +70,25 @@ public void defaultValues() throws IOException {
6670
public void config() throws IOException {
6771
URL resource = getClass().getClassLoader().getResource("config.yaml");
6872
AgentConfig agentConfig = HypertraceConfig.load(resource.getPath());
73+
assertConfig(agentConfig);
74+
}
75+
76+
@Test
77+
public void jsonConfig(@TempDir File tempFolder) throws IOException {
78+
URL resource = getClass().getClassLoader().getResource("config.yaml");
79+
AgentConfig agentConfig = HypertraceConfig.load(resource.getPath());
80+
81+
String jsonConfig = JsonFormat.printer().print(agentConfig);
82+
Assertions.assertTrue(!jsonConfig.contains("value"));
83+
File jsonFile = new File(tempFolder, "config.jSon");
84+
FileOutputStream fileOutputStream = new FileOutputStream(jsonFile);
85+
fileOutputStream.write(jsonConfig.getBytes());
86+
87+
agentConfig = HypertraceConfig.load(jsonFile.getAbsolutePath());
88+
assertConfig(agentConfig);
89+
}
90+
91+
private void assertConfig(AgentConfig agentConfig) {
6992
Assertions.assertEquals("service", agentConfig.getServiceName().getValue());
7093
Assertions.assertEquals(
7194
Arrays.asList(PropagationFormat.B3), agentConfig.getPropagationFormatsList());

0 commit comments

Comments
 (0)