Merge pull request #418 from DataDog/mar-kolya/ignore-empty-tags-in-config
Ignore empty entries in tags config strings
This commit is contained in:
commit
afc16a0dd5
|
@ -1,5 +1,9 @@
|
||||||
package datadog.opentracing;
|
package datadog.opentracing;
|
||||||
|
|
||||||
|
import static datadog.trace.common.DDTraceConfig.HEADER_TAGS;
|
||||||
|
import static datadog.trace.common.DDTraceConfig.SERVICE_MAPPING;
|
||||||
|
import static datadog.trace.common.DDTraceConfig.SERVICE_NAME;
|
||||||
|
import static datadog.trace.common.DDTraceConfig.SPAN_TAGS;
|
||||||
import static datadog.trace.common.util.Config.parseMap;
|
import static datadog.trace.common.util.Config.parseMap;
|
||||||
|
|
||||||
import datadog.opentracing.decorators.AbstractDecorator;
|
import datadog.opentracing.decorators.AbstractDecorator;
|
||||||
|
@ -89,12 +93,12 @@ public class DDTracer implements io.opentracing.Tracer {
|
||||||
|
|
||||||
public DDTracer(final Properties config) {
|
public DDTracer(final Properties config) {
|
||||||
this(
|
this(
|
||||||
config.getProperty(DDTraceConfig.SERVICE_NAME),
|
config.getProperty(SERVICE_NAME),
|
||||||
Writer.Builder.forConfig(config),
|
Writer.Builder.forConfig(config),
|
||||||
Sampler.Builder.forConfig(config),
|
Sampler.Builder.forConfig(config),
|
||||||
parseMap(config.getProperty(DDTraceConfig.SPAN_TAGS)),
|
parseMap(config.getProperty(SPAN_TAGS), SPAN_TAGS),
|
||||||
parseMap(config.getProperty(DDTraceConfig.SERVICE_MAPPING)),
|
parseMap(config.getProperty(SERVICE_MAPPING), SERVICE_MAPPING),
|
||||||
parseMap(config.getProperty(DDTraceConfig.HEADER_TAGS)));
|
parseMap(config.getProperty(HEADER_TAGS), HEADER_TAGS));
|
||||||
log.debug("Using config: {}", config);
|
log.debug("Using config: {}", config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -167,9 +171,9 @@ public class DDTracer implements io.opentracing.Tracer {
|
||||||
UNASSIGNED_DEFAULT_SERVICE_NAME,
|
UNASSIGNED_DEFAULT_SERVICE_NAME,
|
||||||
writer,
|
writer,
|
||||||
new AllSampler(),
|
new AllSampler(),
|
||||||
parseMap(new DDTraceConfig().getProperty(DDTraceConfig.SPAN_TAGS)),
|
parseMap(new DDTraceConfig().getProperty(SPAN_TAGS), SPAN_TAGS),
|
||||||
parseMap(new DDTraceConfig().getProperty(DDTraceConfig.SERVICE_MAPPING)),
|
parseMap(new DDTraceConfig().getProperty(SERVICE_MAPPING), SPAN_TAGS),
|
||||||
parseMap(new DDTraceConfig().getProperty(DDTraceConfig.HEADER_TAGS)));
|
parseMap(new DDTraceConfig().getProperty(HEADER_TAGS), SPAN_TAGS));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -16,12 +16,13 @@ public abstract class Config {
|
||||||
return name.toUpperCase().replace(".", "_");
|
return name.toUpperCase().replace(".", "_");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Map<String, String> parseMap(final String str) {
|
public static Map<String, String> parseMap(final String str, final String settingName) {
|
||||||
if (str == null || str.trim().isEmpty()) {
|
if (str == null || str.trim().isEmpty()) {
|
||||||
return Collections.emptyMap();
|
return Collections.emptyMap();
|
||||||
}
|
}
|
||||||
if (!str.matches("(([^,:]+:[^,:]+,)*([^,:]+:[^,:]+),?)?")) {
|
if (!str.matches("(([^,:]+:[^,:]*,)*([^,:]+:[^,:]*),?)?")) {
|
||||||
log.warn("Invalid config '{}'. Must match 'key1:value1,key2:value2'.", str);
|
log.warn(
|
||||||
|
"Invalid config for {}: '{}'. Must match 'key1:value1,key2:value2'.", settingName, str);
|
||||||
return Collections.emptyMap();
|
return Collections.emptyMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,7 +32,13 @@ public abstract class Config {
|
||||||
for (final String token : tokens) {
|
for (final String token : tokens) {
|
||||||
final String[] keyValue = token.split(":", -1);
|
final String[] keyValue = token.split(":", -1);
|
||||||
if (keyValue.length == 2) {
|
if (keyValue.length == 2) {
|
||||||
map.put(keyValue[0].trim(), keyValue[1].trim());
|
final String key = keyValue[0].trim();
|
||||||
|
final String value = keyValue[1].trim();
|
||||||
|
if (value.length() <= 0) {
|
||||||
|
log.warn("Ignoring empty value for key '{}' in config for {}", key, settingName);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
map.put(key, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Collections.unmodifiableMap(map);
|
return Collections.unmodifiableMap(map);
|
||||||
|
|
|
@ -129,7 +129,7 @@ class DDTraceConfigTest extends Specification {
|
||||||
where:
|
where:
|
||||||
mapString | map
|
mapString | map
|
||||||
"a:1, a:2, a:3" | [a: "3"]
|
"a:1, a:2, a:3" | [a: "3"]
|
||||||
"a:b,c:d" | [a: "b", c: "d"]
|
"a:b,c:d,e:" | [a: "b", c: "d"]
|
||||||
}
|
}
|
||||||
|
|
||||||
def "verify single override on #source for #key"() {
|
def "verify single override on #source for #key"() {
|
||||||
|
@ -151,20 +151,21 @@ class DDTraceConfigTest extends Specification {
|
||||||
|
|
||||||
def "parsing valid string returns a map"() {
|
def "parsing valid string returns a map"() {
|
||||||
expect:
|
expect:
|
||||||
parseMap(str) == map
|
parseMap(str, "test") == map
|
||||||
|
|
||||||
where:
|
where:
|
||||||
str | map
|
str | map
|
||||||
|
"a:" | [:]
|
||||||
"a:a;" | [a: "a;"]
|
"a:a;" | [a: "a;"]
|
||||||
"a:1, a:2, a:3" | [a: "3"]
|
"a:1, a:2, a:3" | [a: "3"]
|
||||||
"a:b,c:d" | [a: "b", c: "d"]
|
"a:b,c:d,e:" | [a: "b", c: "d"]
|
||||||
"key 1!:va|ue_1," | ["key 1!": "va|ue_1"]
|
"key 1!:va|ue_1," | ["key 1!": "va|ue_1"]
|
||||||
" key1 :value1 ,\t key2: value2" | [key1: "value1", key2: "value2"]
|
" key1 :value1 ,\t key2: value2" | [key1: "value1", key2: "value2"]
|
||||||
}
|
}
|
||||||
|
|
||||||
def "parsing an invalid string returns an empty map"() {
|
def "parsing an invalid string returns an empty map"() {
|
||||||
expect:
|
expect:
|
||||||
parseMap(str) == [:]
|
parseMap(str, "test") == [:]
|
||||||
|
|
||||||
where:
|
where:
|
||||||
str | _
|
str | _
|
||||||
|
@ -172,7 +173,6 @@ class DDTraceConfigTest extends Specification {
|
||||||
"" | _
|
"" | _
|
||||||
"1" | _
|
"1" | _
|
||||||
"a" | _
|
"a" | _
|
||||||
"a:" | _
|
|
||||||
"a,1" | _
|
"a,1" | _
|
||||||
"in:val:id" | _
|
"in:val:id" | _
|
||||||
"a:b:c:d" | _
|
"a:b:c:d" | _
|
||||||
|
|
Loading…
Reference in New Issue