diff --git a/dd-java-agent/dependency-reduced-pom.xml b/dd-java-agent/dependency-reduced-pom.xml
index cf64aaf30c..a71706c4b4 100644
--- a/dd-java-agent/dependency-reduced-pom.xml
+++ b/dd-java-agent/dependency-reduced-pom.xml
@@ -23,10 +23,17 @@
maven-surefire-plugin
2.20
- -javaagent:${M2_REPO}/com/datadoghq/dd-java-agent/${project.version}/dd-java-agent-${project.version}.jar
*Test.java
+
+ ElasticSearchInstrumentationTest.java
+
+ 3
+ false
+ -Xmx500m -Xms500m -XX:MaxPermSize=256m
+ -javaagent:${M2_REPO}/com/datadoghq/dd-java-agent/${project.version}/dd-java-agent-${project.version}.jar
+ target/FORK_DIRECTORY_${surefire.forkNumber}
@@ -63,26 +70,6 @@
-
- org.apache.httpcomponents
- httpclient
- 4.5.3
- test
-
-
- httpcore
- org.apache.httpcomponents
-
-
- commons-logging
- commons-logging
-
-
- commons-codec
- commons-codec
-
-
-
io.opentracing
opentracing-mock
@@ -113,18 +100,6 @@
3.4.2
test
-
- com.squareup.okhttp3
- okhttp
- 3.6.0
- test
-
-
- okio
- com.squareup.okio
-
-
-
org.eclipse.jetty
jetty-server
@@ -185,6 +160,10 @@
1.11.132
test
+
+ httpclient
+ org.apache.httpcomponents
+
aws-java-sdk-athena
com.amazonaws
@@ -571,6 +550,82 @@
+
+ com.squareup.okhttp3
+ okhttp
+ 3.6.0
+ test
+
+
+ okio
+ com.squareup.okio
+
+
+
+
+ org.apache.httpcomponents
+ httpclient
+ 4.5.3
+ test
+
+
+ httpcore
+ org.apache.httpcomponents
+
+
+ commons-logging
+ commons-logging
+
+
+ commons-codec
+ commons-codec
+
+
+
+
+ org.elasticsearch.client
+ transport
+ 5.4.0
+ test
+
+
+ elasticsearch
+ org.elasticsearch
+
+
+ transport-netty3-client
+ org.elasticsearch.plugin
+
+
+ transport-netty4-client
+ org.elasticsearch.plugin
+
+
+ reindex-client
+ org.elasticsearch.plugin
+
+
+ lang-mustache-client
+ org.elasticsearch.plugin
+
+
+ percolator-client
+ org.elasticsearch.plugin
+
+
+
+
+ org.apache.logging.log4j
+ log4j-api
+ 2.7
+ test
+
+
+ org.apache.logging.log4j
+ log4j-core
+ 2.7
+ test
+
0.22.0
diff --git a/dd-java-agent/pom.xml b/dd-java-agent/pom.xml
index 0042e959c4..66070cd43a 100644
--- a/dd-java-agent/pom.xml
+++ b/dd-java-agent/pom.xml
@@ -90,7 +90,10 @@
opentracing-okhttp3
${ot.contrib.okhttp.version}
-
+
+ com.squareup.okhttp3
+ okhttp
+
@@ -112,12 +115,33 @@
io.opentracing.contrib
opentracing-apache-httpclient
0.0.1
+
+
+ org.apache.httpcomponents
+ httpclient
+
+
+
+
- org.apache.httpcomponents
- httpclient
- 4.5.3
- test
+ io.opentracing.contrib
+ opentracing-elasticsearch-client
+ 0.0.1
+
+
+ org.apache.logging.log4j
+ log4j-core
+
+
+ org.elasticsearch.client
+ transport
+
+
+ org.apache.logging.log4j
+ log4j-api
+
+
@@ -147,13 +171,7 @@
3.4.2
test
-
-
- com.squareup.okhttp3
- okhttp
- 3.6.0
- test
-
+
org.eclipse.jetty
@@ -188,6 +206,48 @@
aws-java-sdk
1.11.132
test
+
+
+ org.apache.httpcomponents
+ httpclient
+
+
+
+
+
+
+ com.squareup.okhttp3
+ okhttp
+ 3.6.0
+ test
+
+
+
+
+ org.apache.httpcomponents
+ httpclient
+ 4.5.3
+ test
+
+
+
+
+ org.elasticsearch.client
+ transport
+ 5.4.0
+ test
+
+
+ org.apache.logging.log4j
+ log4j-api
+ 2.7
+ test
+
+
+ org.apache.logging.log4j
+ log4j-core
+ 2.7
+ test
@@ -208,10 +268,17 @@
maven-surefire-plugin
2.20
- -javaagent:${M2_REPO}/com/datadoghq/dd-java-agent/${project.version}/dd-java-agent-${project.version}.jar
*Test.java
+
+ ElasticSearchInstrumentationTest.java
+
+ 3
+ false
+ -Xmx500m -Xms500m -XX:MaxPermSize=256m
+ -javaagent:${M2_REPO}/com/datadoghq/dd-java-agent/${project.version}/dd-java-agent-${project.version}.jar
+ target/FORK_DIRECTORY_${surefire.forkNumber}
diff --git a/dd-java-agent/src/main/java/io/opentracing/contrib/agent/TraceAnnotationsManager.java b/dd-java-agent/src/main/java/io/opentracing/contrib/agent/TraceAnnotationsManager.java
index d7dee776ca..f1bb4cac50 100644
--- a/dd-java-agent/src/main/java/io/opentracing/contrib/agent/TraceAnnotationsManager.java
+++ b/dd-java-agent/src/main/java/io/opentracing/contrib/agent/TraceAnnotationsManager.java
@@ -41,7 +41,12 @@ public class TraceAnnotationsManager extends OpenTracingManager{
public static void initialize(Retransformer trans) throws Exception {
transformer = trans;
OpenTracingManager.initialize(trans);
- loadRules(ClassLoader.getSystemClassLoader());
+ OpenTracingManager.loadRules(ClassLoader.getSystemClassLoader());
+
+ String value = System.getProperty("javaagent.enableAnnotations","false");
+ if("true".equalsIgnoreCase(value)){
+ loadRules(ClassLoader.getSystemClassLoader());
+ }
}
/**
@@ -50,8 +55,6 @@ public class TraceAnnotationsManager extends OpenTracingManager{
* @param classLoader
*/
public static void loadRules(ClassLoader classLoader) {
- OpenTracingManager.loadRules(classLoader);
-
Reflections reflections = new Reflections(new ConfigurationBuilder()
.forPackages("/")
.filterInputsBy(new FilterBuilder().include(".*\\.class"))
diff --git a/dd-java-agent/src/main/resources/logback.xml b/dd-java-agent/src/main/resources/logback.xml
new file mode 100644
index 0000000000..f8fbe556c0
--- /dev/null
+++ b/dd-java-agent/src/main/resources/logback.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/dd-java-agent/src/main/resources/otarules.btm b/dd-java-agent/src/main/resources/otarules.btm
index e812100043..949e1706ed 100644
--- a/dd-java-agent/src/main/resources/otarules.btm
+++ b/dd-java-agent/src/main/resources/otarules.btm
@@ -14,7 +14,6 @@ DO
ENDRULE
# --------------------------------------------------------
-
# Instrument AWS client
RULE AWS SDK Client instrumentation 1
CLASS ^com.amazonaws.client.builder.AwsClientBuilder
@@ -39,8 +38,8 @@ IF $this.requestHandlers != null AND $this.requestHandlers.get(0).getClass().get
DO
$this.requestHandlers.add(0, requestTracerHandler);
ENDRULE
-# --------------------------------------------------------
+# --------------------------------------------------------
# Instrument Apache HTTP Client
RULE Apache HTTP Client instrumentation
CLASS org.apache.http.impl.client.HttpClientBuilder
@@ -56,3 +55,55 @@ IF TRUE
DO
return tracingClientExec;
ENDRULE
+
+# --------------------------------------------------------
+# Instrument Elasticsearch client
+RULE Elasticsearch Client instrumentation 1
+CLASS org.elasticsearch.client.RestClientBuilder
+METHOD build()
+BIND
+ callback:io.opentracing.contrib.elasticsearch.TracingHttpClientConfigCallback = new io.opentracing.contrib.elasticsearch.TracingHttpClientConfigCallback();
+AT ENTRY
+IF TRUE
+DO
+ $this.setHttpClientConfigCallback(callback);
+ENDRULE
+
+
+RULE Elasticsearch Client instrumentation 2
+CLASS org.elasticsearch.client.transport.TransportClient
+METHOD doExecute
+HELPER io.opentracing.contrib.agent.OpenTracingHelper
+BIND
+ span:io.opentracing.Span = null;
+# decorator:io.opentracing.contrib.elasticsearch.SpanDecorator = io.opentracing.contrib.elasticsearch.SpanDecorator;
+AT ENTRY
+IF currentSpan() == null
+DO
+ span = getTracer().buildSpan($2.getClass().getSimpleName())
+ .asChildOf()
+ .withTag(io.opentracing.tag.Tags.SPAN_KIND.getKey(), io.opentracing.tag.Tags.SPAN_KIND_CLIENT)
+ .start();
+# decorator.onRequest(span);
+ $3 = new io.opentracing.contrib.elasticsearch.TracingResponseListener($3, span);
+ENDRULE
+
+
+RULE Elasticsearch Client instrumentation 3
+CLASS org.elasticsearch.client.transport.TransportClient
+METHOD doExecute
+HELPER io.opentracing.contrib.agent.OpenTracingHelper
+BIND
+ span:io.opentracing.Span = null;
+# decorator:io.opentracing.contrib.elasticsearch.SpanDecorator = io.opentracing.contrib.elasticsearch.SpanDecorator;
+AT ENTRY
+IF currentSpan() != null
+DO
+ span = getTracer().buildSpan($2.getClass().getSimpleName())
+ .asChildOf(currentSpan())
+ .withTag(io.opentracing.tag.Tags.SPAN_KIND.getKey(), io.opentracing.tag.Tags.SPAN_KIND_CLIENT)
+ .start();
+# decorator.onRequest(span);
+ $3 = new io.opentracing.contrib.elasticsearch.TracingResponseListener($3, span);
+ENDRULE
+# --------------------------------------------------------
diff --git a/dd-java-agent/src/test/java/com/datadoghq/trace/instrument/ApacheHTTPClientTest.java b/dd-java-agent/src/test/java/com/datadoghq/trace/instrument/ApacheHTTPClientTest.java
index 48e28875bc..b99f6057d5 100644
--- a/dd-java-agent/src/test/java/com/datadoghq/trace/instrument/ApacheHTTPClientTest.java
+++ b/dd-java-agent/src/test/java/com/datadoghq/trace/instrument/ApacheHTTPClientTest.java
@@ -43,7 +43,6 @@ public class ApacheHTTPClientTest {
while ((line = rd.readLine()) != null) {
result.append(line);
}
- System.out.println(result);
assertThat(tracer.finishedSpans().size()).isEqualTo(2);
}
diff --git a/dd-java-agent/src/test/java/com/datadoghq/trace/instrument/ElasticSearchInstrumentationTest.java b/dd-java-agent/src/test/java/com/datadoghq/trace/instrument/ElasticSearchInstrumentationTest.java
new file mode 100644
index 0000000000..92015579ba
--- /dev/null
+++ b/dd-java-agent/src/test/java/com/datadoghq/trace/instrument/ElasticSearchInstrumentationTest.java
@@ -0,0 +1,116 @@
+//package com.datadoghq.trace.instrument;
+//
+//import io.opentracing.Tracer;
+//import io.opentracing.contrib.spanmanager.DefaultSpanManager;
+//import io.opentracing.mock.MockTracer;
+//import io.opentracing.util.GlobalTracer;
+//import org.elasticsearch.action.index.IndexRequest;
+//import org.elasticsearch.action.index.IndexResponse;
+//import org.elasticsearch.client.transport.TransportClient;
+//import org.elasticsearch.common.settings.Settings;
+//import org.elasticsearch.common.transport.InetSocketTransportAddress;
+//import org.elasticsearch.node.InternalSettingsPreparer;
+//import org.elasticsearch.node.Node;
+//import org.elasticsearch.plugins.Plugin;
+//import org.elasticsearch.transport.Netty3Plugin;
+//import org.elasticsearch.transport.client.PreBuiltTransportClient;
+//import org.junit.*;
+//
+//import java.io.IOException;
+//import java.net.InetAddress;
+//import java.util.Collection;
+//import java.util.Collections;
+//import java.util.Date;
+//
+//import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat;
+//import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
+//
+///**
+// * Created by gpolaert on 5/23/17.
+// */
+//public class ElasticSearchInstrumentationTest {
+//
+//
+// private static final int HTTP_PORT = 9205;
+// private static final String HTTP_TRANSPORT_PORT = "9305";
+// private static final String ES_WORKING_DIR = "target/es";
+// private static String clusterName = "cluster-name";
+// private static Node node;
+// private static MockTracer tracer;
+//
+// @BeforeClass
+// public static void startElasticsearch() throws Exception {
+//
+// tracer = new MockTracer();
+// GlobalTracer.register(tracer);
+//
+//
+// Settings settings = Settings.builder()
+// .put("path.home", ES_WORKING_DIR)
+// .put("path.data", ES_WORKING_DIR + "/data")
+// .put("path.logs", ES_WORKING_DIR + "/logs")
+// .put("transport.type", "netty3")
+// .put("http.type", "netty3")
+// .put("cluster.name", clusterName)
+// .put("http.port", HTTP_PORT)
+// .put("transport.tcp.port", HTTP_TRANSPORT_PORT)
+// .put("network.host", "127.0.0.1")
+// .build();
+// Collection plugins = Collections.singletonList(Netty3Plugin.class);
+// node = new PluginConfigurableNode(settings, plugins);
+// node.start();
+//
+// }
+//
+// @AfterClass
+// public static void stopElasticsearch() throws Exception {
+// node.close();
+// }
+//
+// @Before
+// public void setUp() {
+// DefaultSpanManager.getInstance().activate(tracer.buildSpan("parent").start());
+// }
+//
+//
+// @After
+// public void tearDown() {
+// DefaultSpanManager.getInstance().current().close();
+// }
+//
+// @Test
+// public void Test() throws IOException {
+//
+// Settings settings = Settings.builder()
+// .put("cluster.name", clusterName).build();
+//
+//
+// TransportClient client = new PreBuiltTransportClient(settings)
+// .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"),
+// Integer.parseInt(HTTP_TRANSPORT_PORT)));
+//
+// IndexRequest indexRequest = new IndexRequest("twitter").type("tweet").id("1").
+// source(jsonBuilder()
+// .startObject()
+// .field("user", "kimchy")
+// .field("postDate", new Date())
+// .field("message", "trying out Elasticsearch")
+// .endObject()
+// );
+//
+// IndexResponse indexResponse = client.index(indexRequest).actionGet();
+//
+//
+// client.close();
+// DefaultSpanManager.getInstance().current().close();
+// assertThat(tracer.finishedSpans().size()).isEqualTo(2);
+// }
+//
+//
+// private static class PluginConfigurableNode extends Node {
+// public PluginConfigurableNode(Settings settings, Collection> classpathPlugins) {
+// super(InternalSettingsPreparer.prepareEnvironment(settings, null), classpathPlugins);
+// }
+// }
+//
+//}
diff --git a/dd-java-agent/src/test/java/io/opentracing/contrib/agent/TraceAnnotationsManagerTest.java b/dd-java-agent/src/test/java/io/opentracing/contrib/agent/TraceAnnotationsManagerTest.java
index 296cfdbfce..a6d367bf82 100644
--- a/dd-java-agent/src/test/java/io/opentracing/contrib/agent/TraceAnnotationsManagerTest.java
+++ b/dd-java-agent/src/test/java/io/opentracing/contrib/agent/TraceAnnotationsManagerTest.java
@@ -15,6 +15,7 @@ public class TraceAnnotationsManagerTest {
@Before
public void beforeTest() throws Exception {
GlobalTracer.register(tracer);
+ TraceAnnotationsManager.loadRules(ClassLoader.getSystemClassLoader());
}
@Test
diff --git a/dd-trace/src/test/resources/logback.xml b/dd-trace/src/test/resources/logback.xml
new file mode 100644
index 0000000000..f8fbe556c0
--- /dev/null
+++ b/dd-trace/src/test/resources/logback.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+
+
\ No newline at end of file