Skip to content

Commit 5e92d19

Browse files
committed
Merge remote-tracking branch 'origin/dev' into dev
2 parents b152036 + b91420c commit 5e92d19

7 files changed

Lines changed: 150 additions & 101 deletions

File tree

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.datadoghq.trace.resolver;
2+
3+
/**
4+
* Configuration POJO for the agent
5+
*/
6+
public class AgentTracerConfig extends TracerConfig {
7+
8+
private boolean enableCustomTracing = false;
9+
10+
public boolean isEnableCustomTracing() {
11+
return enableCustomTracing;
12+
}
13+
14+
public void setEnableCustomTracing(boolean enableCustomTracing) {
15+
this.enableCustomTracing = enableCustomTracing;
16+
}
17+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package com.datadoghq.trace.resolver;
2+
3+
import java.util.List;
4+
import java.util.ServiceLoader;
5+
6+
import org.slf4j.Logger;
7+
import org.slf4j.LoggerFactory;
8+
9+
import com.datadoghq.trace.DDTracer;
10+
import com.datadoghq.trace.integration.DDSpanContextDecorator;
11+
import com.google.auto.service.AutoService;
12+
13+
import io.opentracing.NoopTracerFactory;
14+
import io.opentracing.Tracer;
15+
import io.opentracing.contrib.tracerresolver.TracerResolver;
16+
import io.opentracing.util.GlobalTracer;
17+
18+
19+
@AutoService(TracerResolver.class)
20+
public class DDTracerResolver extends TracerResolver {
21+
22+
private final static Logger logger = LoggerFactory.getLogger(DDTracerResolver.class);
23+
24+
@Override
25+
protected Tracer resolve() {
26+
logger.info("Creating the Datadog tracer");
27+
28+
//Find a resource file named dd-trace.yml
29+
DDTracer tracer = null;
30+
//Create tracer from resource files
31+
tracer = DDTracerFactory.createFromResources();
32+
33+
//Create decorators from resource files
34+
List<DDSpanContextDecorator> decorators = DDDecoratorsFactory.createFromResources();
35+
for(DDSpanContextDecorator decorator : decorators){
36+
tracer.addDecorator(decorator);
37+
}
38+
39+
return tracer;
40+
}
41+
42+
@SuppressWarnings("static-access")
43+
public static Tracer registerTracer() {
44+
45+
ServiceLoader<TracerResolver> RESOLVERS = ServiceLoader.load(TracerResolver.class);
46+
47+
Tracer tracer = null;
48+
for (TracerResolver value : RESOLVERS) {
49+
tracer = value.resolveTracer();
50+
if (tracer != null) {
51+
break;
52+
}
53+
}
54+
55+
if (tracer == null) {
56+
tracer = NoopTracerFactory.create();
57+
}
58+
59+
GlobalTracer.register(tracer);
60+
return tracer;
61+
}
62+
}

dd-trace/src/test/java/com/datadoghq/trace/resolver/TracerResolverTest.java renamed to dd-java-agent/src/test/java/com/datadoghq/trace/resolver/TracerResolverTest.java

File renamed without changes.

dd-trace/src/main/java/com/datadoghq/trace/resolver/DDDecoratorsFactory.java

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
package com.datadoghq.trace.resolver;
22

3+
import java.io.IOException;
4+
import java.net.URL;
35
import java.util.ArrayList;
6+
import java.util.Enumeration;
47
import java.util.List;
58

69
import org.slf4j.Logger;
710
import org.slf4j.LoggerFactory;
811

912
import com.datadoghq.trace.integration.DDSpanContextDecorator;
13+
import com.fasterxml.jackson.databind.ObjectMapper;
14+
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
1015

1116
/**
1217
* Create DDSpaDecorators from a valid configuration
@@ -17,6 +22,10 @@ public class DDDecoratorsFactory {
1722

1823
public static String DECORATORS_PACKAGE = "com.datadoghq.trace.integration.";
1924

25+
public static final String CONFIG_PATH = "dd-trace-decorators.yaml";
26+
27+
private static final ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
28+
2029
/**
2130
* Create decorators from configuration
2231
*
@@ -39,15 +48,15 @@ public static List<DDSpanContextDecorator> create(List<DDSpanDecoratorConfig> de
3948
logger.warn("Cannot create decorator as the class {} is not defined. Provided configuration {}",decoratorConfig);
4049
continue;
4150
}
42-
51+
4352
DDSpanContextDecorator decorator = null;
4453
try{
4554
decorator = (DDSpanContextDecorator) decoratorClass.getConstructor().newInstance();
4655
}catch(Exception e){
4756
logger.warn("Cannot create decorator as we could not invoke the default constructor. Provided configuration {}",decoratorConfig);
4857
continue;
4958
}
50-
59+
5160
//Fill with config values
5261
if(decoratorConfig.getMatchingTag()!=null){
5362
decorator.setMatchingTag(decoratorConfig.getMatchingTag());
@@ -61,9 +70,29 @@ public static List<DDSpanContextDecorator> create(List<DDSpanDecoratorConfig> de
6170
if(decoratorConfig.getSetValue()!=null){
6271
decorator.setSetValue(decoratorConfig.getSetValue());
6372
}
64-
73+
6574
decorators.add(decorator);
6675
}
6776
return decorators;
6877
}
78+
79+
public static List<DDSpanContextDecorator> createFromResources(){
80+
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
81+
82+
List<DDSpanContextDecorator> result = new ArrayList<DDSpanContextDecorator>();
83+
try{
84+
Enumeration<URL> iter = classLoader.getResources(CONFIG_PATH);
85+
while (iter.hasMoreElements()) {
86+
TracerConfig config = objectMapper.readValue(iter.nextElement().openStream(), TracerConfig.class);
87+
result = DDDecoratorsFactory.create(config.getDecorators());
88+
89+
break; // ONLY the closest resource file is taken into account
90+
}
91+
}catch(IOException e){
92+
logger.error("Could not load decorators configuration file.", e);
93+
}
94+
95+
96+
return result;
97+
}
6998
}

dd-trace/src/main/java/com/datadoghq/trace/resolver/DDSpanDecoratorConfig.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,6 @@
44
import com.fasterxml.jackson.databind.ObjectMapper;
55
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
66

7-
/**
8-
*
9-
*/
107
public class DDSpanDecoratorConfig {
118

129
private String type;

dd-trace/src/main/java/com/datadoghq/trace/resolver/DDTracerFactory.java

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
package com.datadoghq.trace.resolver;
22

3+
import java.io.IOException;
4+
import java.net.URL;
5+
import java.util.Enumeration;
6+
7+
import org.slf4j.Logger;
8+
import org.slf4j.LoggerFactory;
9+
310
import com.datadoghq.trace.DDTracer;
411
import com.datadoghq.trace.sampling.AllSampler;
512
import com.datadoghq.trace.sampling.RateSampler;
@@ -8,12 +15,20 @@
815
import com.datadoghq.trace.writer.DDApi;
916
import com.datadoghq.trace.writer.LoggingWritter;
1017
import com.datadoghq.trace.writer.Writer;
18+
import com.fasterxml.jackson.databind.ObjectMapper;
19+
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
1120

1221
/**
1322
* Create a tracer from a configuration file
1423
*/
1524
public class DDTracerFactory {
16-
25+
26+
private final static Logger logger = LoggerFactory.getLogger(DDTracerFactory.class);
27+
28+
public static final String CONFIG_PATH = "dd-trace.yaml";
29+
private static final ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
30+
31+
1732
/**
1833
* Create a tracer from a TracerConfig object
1934
*
@@ -52,4 +67,27 @@ public static DDTracer create(TracerConfig config){
5267
return new DDTracer(defaultServiceName, writer, rateSampler);
5368
}
5469

70+
public static DDTracer createFromResources(){
71+
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
72+
DDTracer tracer = null;
73+
try {
74+
Enumeration<URL> iter = classLoader.getResources(CONFIG_PATH);
75+
while (iter.hasMoreElements()) {
76+
TracerConfig config = objectMapper.readValue(iter.nextElement().openStream(), TracerConfig.class);
77+
78+
tracer = DDTracerFactory.create(config);
79+
80+
break; // ONLY the closest resource file is taken into account
81+
}
82+
} catch (IOException e) {
83+
logger.error("Could not load tracer configuration file.", e);
84+
}
85+
86+
if (tracer == null) {
87+
logger.info("No valid configuration file {} found. Loading default tracer.",CONFIG_PATH);
88+
tracer = new DDTracer();
89+
}
90+
return tracer;
91+
}
92+
5593
}

dd-trace/src/main/java/com/datadoghq/trace/resolver/DDTracerResolver.java

Lines changed: 0 additions & 94 deletions
This file was deleted.

0 commit comments

Comments
 (0)