Skip to content

Commit 0f4353d

Browse files
committed
Postpone config rendering as string until reporting phase
1 parent 8f579b2 commit 0f4353d

File tree

6 files changed

+39
-36
lines changed

6 files changed

+39
-36
lines changed

internal-api/src/main/java/datadog/trace/api/ConfigSetting.java

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,31 @@ public final class ConfigSetting {
1717
Arrays.asList("DD_API_KEY", "dd.api-key", "dd.profiling.api-key", "dd.profiling.apikey"));
1818

1919
public static ConfigSetting of(String key, Object value, ConfigOrigin origin) {
20-
if (CONFIG_FILTER_LIST.contains(key)) {
21-
value = "<hidden>";
20+
return new ConfigSetting(key, value, origin);
21+
}
22+
23+
private ConfigSetting(String key, Object value, ConfigOrigin origin) {
24+
this.key = key;
25+
this.value = CONFIG_FILTER_LIST.contains(key) ? "<hidden>" : value;
26+
this.origin = origin;
27+
}
28+
29+
public String normalizedKey() {
30+
return key.toLowerCase().replace(".", "_");
31+
}
32+
33+
public String stringValue() {
34+
if (value == null) {
35+
return null;
2236
} else if (value instanceof BitSet) {
23-
value = renderIntegerRange((BitSet) value);
37+
return renderIntegerRange((BitSet) value);
2438
} else if (value instanceof Map) {
25-
value = renderMap((Map) value);
39+
return renderMap((Map<Object, Object>) value);
2640
} else if (value instanceof Iterable) {
27-
value = renderIterable((Iterable) value);
28-
} else if (value != null) {
29-
value = value.toString();
41+
return renderIterable((Iterable) value);
42+
} else {
43+
return value.toString();
3044
}
31-
return new ConfigSetting(key, value, origin);
3245
}
3346

3447
private static String renderIntegerRange(BitSet bitset) {
@@ -81,16 +94,6 @@ private static String renderIterable(Iterable iterable) {
8194
return result.toString();
8295
}
8396

84-
private ConfigSetting(String key, Object value, ConfigOrigin origin) {
85-
this.key = key;
86-
this.value = value;
87-
this.origin = origin;
88-
}
89-
90-
public String normalizedKey() {
91-
return key.toLowerCase().replace(".", "_");
92-
}
93-
9497
@Override
9598
public boolean equals(Object o) {
9699
if (this == o) return true;
@@ -108,10 +111,10 @@ public int hashCode() {
108111
public String toString() {
109112
return "ConfigSetting{"
110113
+ "key='"
111-
+ key
114+
+ normalizedKey()
112115
+ '\''
113116
+ ", value="
114-
+ value
117+
+ stringValue()
115118
+ ", origin="
116119
+ origin
117120
+ '}';

internal-api/src/test/groovy/datadog/trace/api/ConfigCollectorTest.groovy

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class ConfigCollectorTest extends DDSpecification {
2424

2525
expect:
2626
def setting = ConfigCollector.get().collect().get(configKey)
27-
setting.value == configValue
27+
setting.stringValue() == configValue
2828
setting.origin == ConfigOrigin.ENV
2929

3030
where:
@@ -70,7 +70,7 @@ class ConfigCollectorTest extends DDSpecification {
7070

7171
expect:
7272
def setting = ConfigCollector.get().collect().get(configKey)
73-
setting.value == expectedValue
73+
setting.stringValue() == expectedValue
7474
setting.origin == ConfigOrigin.JVM_PROP
7575

7676
where:
@@ -87,7 +87,7 @@ class ConfigCollectorTest extends DDSpecification {
8787
expect:
8888
def setting = ConfigCollector.get().collect().get(configKey)
8989
setting.origin == ConfigOrigin.DEFAULT
90-
setting.value == defaultValue
90+
setting.stringValue() == defaultValue
9191

9292
where:
9393
configKey | defaultValue
@@ -106,7 +106,7 @@ class ConfigCollectorTest extends DDSpecification {
106106

107107
then:
108108
cs.key == configKey
109-
cs.value == null
109+
cs.stringValue() == null
110110
cs.origin == ConfigOrigin.DEFAULT
111111

112112
where:
@@ -127,7 +127,7 @@ class ConfigCollectorTest extends DDSpecification {
127127

128128
then:
129129
cs.key == configKey
130-
cs.value == ""
130+
cs.stringValue() == ""
131131
cs.origin == ConfigOrigin.DEFAULT
132132

133133
where:
@@ -165,7 +165,7 @@ class ConfigCollectorTest extends DDSpecification {
165165
ConfigCollector.get().put('DD_API_KEY', 'sensitive data', ConfigOrigin.ENV)
166166

167167
then:
168-
ConfigCollector.get().collect().get('DD_API_KEY').value == '<hidden>'
168+
ConfigCollector.get().collect().get('DD_API_KEY').stringValue() == '<hidden>'
169169
}
170170

171171
def "collects common setting default values"() {
@@ -176,7 +176,7 @@ class ConfigCollectorTest extends DDSpecification {
176176
def setting = settings.get(key)
177177

178178
setting.key == key
179-
setting.value == value
179+
setting.stringValue() == value
180180
setting.origin == ConfigOrigin.DEFAULT
181181

182182
where:
@@ -209,7 +209,7 @@ class ConfigCollectorTest extends DDSpecification {
209209
def setting = settings.get(key)
210210

211211
setting.key == key
212-
setting.value == value
212+
setting.stringValue() == value
213213
setting.origin == ConfigOrigin.ENV
214214

215215
where:

internal-api/src/test/groovy/datadog/trace/api/ConfigSettingTest.groovy

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class ConfigSettingTest extends Specification {
3232

3333
def "filters key values"() {
3434
expect:
35-
ConfigSetting.of(key, value, ConfigOrigin.DEFAULT).value == filteredValue
35+
ConfigSetting.of(key, value, ConfigOrigin.DEFAULT).stringValue() == filteredValue
3636

3737
where:
3838
key | value | filteredValue
@@ -45,7 +45,7 @@ class ConfigSettingTest extends Specification {
4545

4646
def "support basic types"() {
4747
expect:
48-
ConfigSetting.of("key", value, ConfigOrigin.DEFAULT).value == rendered
48+
ConfigSetting.of("key", value, ConfigOrigin.DEFAULT).stringValue() == rendered
4949

5050
where:
5151
value | rendered
@@ -60,7 +60,7 @@ class ConfigSettingTest extends Specification {
6060

6161
def "convert Iterable, Map, and BitSet to String"() {
6262
expect:
63-
ConfigSetting.of("key", value, ConfigOrigin.DEFAULT).value == rendered
63+
ConfigSetting.of("key", value, ConfigOrigin.DEFAULT).stringValue() == rendered
6464

6565
where:
6666
value | rendered

telemetry/src/main/java/datadog/telemetry/TelemetryRequestBody.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,9 +218,9 @@ public void writeConfiguration(ConfigSetting configSetting) throws IOException {
218218
bodyWriter.beginObject();
219219
bodyWriter.name("name").value(configSetting.normalizedKey());
220220
bodyWriter.setSerializeNulls(true);
221-
bodyWriter.name("value").jsonValue(configSetting.value);
221+
bodyWriter.name("value").value(configSetting.stringValue());
222222
bodyWriter.setSerializeNulls(false);
223-
bodyWriter.name("origin").jsonValue(configSetting.origin.value);
223+
bodyWriter.name("origin").value(configSetting.origin.value);
224224
bodyWriter.endObject();
225225
}
226226

telemetry/src/test/groovy/datadog/telemetry/TelemetryRequestBodySpecification.groovy

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ class TelemetryRequestBodySpecification extends Specification {
7070
then:
7171
drainToString(req) == ',"configuration":[' +
7272
'{"name":"string","value":"bar","origin":"remote_config"},' +
73-
'{"name":"int","value":2342,"origin":"default"},' +
74-
'{"name":"double","value":123.456,"origin":"env_var"},' +
73+
'{"name":"int","value":"2342","origin":"default"},' +
74+
'{"name":"double","value":"123.456","origin":"env_var"},' +
7575
'{"name":"map","value":"key1:value1,key2:432.32,key3:324","origin":"jvm_prop"},' +
7676
'{"name":"list","value":"1,2,3","origin":"default"},' +
7777
'{"name":"null","value":null,"origin":"default"}]'

telemetry/src/test/groovy/datadog/telemetry/TestTelemetryRouter.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ class TestTelemetryRouter extends TelemetryRouter {
235235
def expected = configuration == null ? null : []
236236
if (configuration != null) {
237237
for (ConfigSetting cs : configuration) {
238-
expected.add([name: cs.key, value: cs.value, origin: cs.origin.value])
238+
expected.add([name: cs.normalizedKey(), value: cs.stringValue(), origin: cs.origin.value])
239239
}
240240
}
241241
assert this.payload['configuration'] == expected

0 commit comments

Comments
 (0)