diff --git a/instrumentation/http/src/main/java/brave/http/aws/XRayHttpClientParser.java b/instrumentation/http/src/main/java/brave/http/aws/XRayHttpClientParser.java new file mode 100644 index 0000000000..fc94b184d1 --- /dev/null +++ b/instrumentation/http/src/main/java/brave/http/aws/XRayHttpClientParser.java @@ -0,0 +1,27 @@ +package brave.http.aws; + +import brave.SpanCustomizer; +import brave.http.HttpAdapter; +import brave.http.HttpServerParser; +import zipkin.TraceKeys; + +public class XRayHttpClientParser extends HttpServerParser { + + private boolean usePath = false; + + public XRayHttpClientParser(boolean usePath) { + this.usePath = usePath; + } + + public XRayHttpClientParser() { + this(false); + } + + @Override + public void request(HttpAdapter adapter, Req req, SpanCustomizer customizer) { + String url = usePath ? adapter.path(req) : adapter.url(req); + if (url != null) customizer.tag(TraceKeys.HTTP_URL, url); + super.request(adapter, req, customizer); + } + +} diff --git a/instrumentation/http/src/main/java/brave/http/aws/XRayHttpServerParser.java b/instrumentation/http/src/main/java/brave/http/aws/XRayHttpServerParser.java new file mode 100644 index 0000000000..5cf93d3d88 --- /dev/null +++ b/instrumentation/http/src/main/java/brave/http/aws/XRayHttpServerParser.java @@ -0,0 +1,27 @@ +package brave.http.aws; + +import brave.SpanCustomizer; +import brave.http.HttpAdapter; +import brave.http.HttpServerParser; +import zipkin.TraceKeys; + +public class XRayHttpServerParser extends HttpServerParser { + + private boolean usePath = false; + + public XRayHttpServerParser(boolean usePath) { + this.usePath = usePath; + } + + public XRayHttpServerParser() { + this(false); + } + + @Override + public void request(HttpAdapter adapter, Req req, SpanCustomizer customizer) { + String url = usePath ? adapter.path(req) : adapter.url(req); + if (url != null) customizer.tag(TraceKeys.HTTP_URL, url); + super.request(adapter, req, customizer); + } + +} diff --git a/instrumentation/mysql/src/main/java/brave/mysql/TracingStatementInterceptor.java b/instrumentation/mysql/src/main/java/brave/mysql/TracingStatementInterceptor.java index 0a0d4cb814..7a5e06971d 100644 --- a/instrumentation/mysql/src/main/java/brave/mysql/TracingStatementInterceptor.java +++ b/instrumentation/mysql/src/main/java/brave/mysql/TracingStatementInterceptor.java @@ -36,7 +36,7 @@ public ResultSetInternalMethods preProcess(String sql, Statement interceptedStat } int spaceIndex = sql.indexOf(' '); // Allow span names of single-word statements like COMMIT span.kind(Span.Kind.CLIENT).name(spaceIndex == -1 ? sql : sql.substring(0, spaceIndex)); - span.tag("sql.query", sql); + doPreProcessTag(connection, sql, span); parseServerAddress(connection, span); span.start(); } @@ -46,6 +46,10 @@ public ResultSetInternalMethods preProcess(String sql, Statement interceptedStat return null; } + protected void doPreProcessTag(Connection connection, String sql, Span span) { + span.tag("sql.query", sql); + } + /** * There's no attribute namespace shared across request and response. Hence, we need to save off * a reference to the span in scope, so that we can close it in the response. diff --git a/instrumentation/mysql/src/main/java/brave/mysql/aws/XRayTracingStatementInterceptor.java b/instrumentation/mysql/src/main/java/brave/mysql/aws/XRayTracingStatementInterceptor.java new file mode 100644 index 0000000000..c23220238c --- /dev/null +++ b/instrumentation/mysql/src/main/java/brave/mysql/aws/XRayTracingStatementInterceptor.java @@ -0,0 +1,42 @@ +package brave.mysql.aws; + +import brave.Span; +import brave.mysql.TracingStatementInterceptor; +import com.mysql.jdbc.Connection; +import java.sql.DatabaseMetaData; +import java.sql.SQLException; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class XRayTracingStatementInterceptor extends TracingStatementInterceptor { + + private final static Logger LOGGER = Logger.getLogger(XRayTracingStatementInterceptor.class.getName()); + + private final boolean useQueryForUrl; + + public XRayTracingStatementInterceptor() { + this(false); + } + + public XRayTracingStatementInterceptor(boolean useQueryForUrl) { + this.useQueryForUrl = useQueryForUrl; + } + + @Override + protected void doPreProcessTag(Connection connection, String sql, Span span) { + super.doPreProcessTag(connection, sql, span); + DatabaseMetaData m; + try { + m = connection.getMetaData(); + span.tag("sql.url", useQueryForUrl ? sql : m.getURL()); + span.tag("sql.database_type", m.getDatabaseProductName()); + span.tag("sql.database_version", m.getDatabaseProductVersion()); + span.tag("sql.driver_version", m.getDriverVersion()); + span.tag("sql.user", m.getUserName()); + span.tag("sql.query", sql); + } catch (SQLException e) { + LOGGER.log(Level.WARNING, "DatabaseMetaData could not be get."); + } + + } +} \ No newline at end of file