Skip to content

Commit 4c225af

Browse files
authored
Auto detect ConnectInfo from underlying DataSource (#94)
1 parent c3160d7 commit 4c225af

2 files changed

Lines changed: 36 additions & 3 deletions

File tree

src/main/java/io/opentracing/contrib/jdbc/TracingDataSource.java

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
import io.opentracing.Span;
2020
import io.opentracing.Tracer;
2121
import io.opentracing.contrib.common.WrapperProxy;
22+
import io.opentracing.contrib.jdbc.parser.URLParser;
2223
import java.io.PrintWriter;
24+
import java.lang.reflect.Method;
2325
import java.sql.Connection;
2426
import java.sql.SQLException;
2527
import java.sql.SQLFeatureNotSupportedException;
@@ -40,7 +42,7 @@ public class TracingDataSource implements DataSource, AutoCloseable {
4042

4143
public TracingDataSource(final Tracer tracer,
4244
final DataSource underlying) {
43-
this(tracer, underlying, ConnectionInfo.UNKNOWN_CONNECTION_INFO, DEFAULT_WITH_ACTIVE_SPAN_ONLY,
45+
this(tracer, underlying, null, DEFAULT_WITH_ACTIVE_SPAN_ONLY,
4446
DEFAULT_IGNORED_STATEMENTS);
4547
}
4648

@@ -51,7 +53,25 @@ public TracingDataSource(final Tracer tracer,
5153
final Set<String> ignoreStatements) {
5254
this.tracer = tracer;
5355
this.underlying = underlying;
54-
this.connectionInfo = connectionInfo;
56+
ConnectionInfo info = connectionInfo;
57+
if (info == null) {
58+
try {
59+
Method method;
60+
try {
61+
method = underlying.getClass().getMethod("getJdbcUrl");
62+
} catch (NoSuchMethodException e) {
63+
try {
64+
method = underlying.getClass().getMethod("getUrl");
65+
} catch (NoSuchMethodException nsme) {
66+
method = null;
67+
}
68+
}
69+
info = URLParser.parse((String) method.invoke(underlying));
70+
} catch (Exception ignored) {
71+
info = ConnectionInfo.UNKNOWN_CONNECTION_INFO;
72+
}
73+
}
74+
this.connectionInfo = info;
5575
this.withActiveSpanOnly = withActiveSpanOnly;
5676
this.ignoreStatements = ignoreStatements;
5777
}
@@ -140,4 +160,4 @@ public void close() throws Exception {
140160
((AutoCloseable) underlying).close();
141161
}
142162
}
143-
}
163+
}

src/test/java/io/opentracing/contrib/jdbc/TracingDataSourceTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
*/
1414
package io.opentracing.contrib.jdbc;
1515

16+
import static org.junit.Assert.assertEquals;
1617
import static org.junit.Assert.assertFalse;
1718
import static org.junit.Assert.assertNull;
1819
import static org.junit.Assert.assertTrue;
@@ -62,6 +63,18 @@ public void rethrows_any_error() throws Exception {
6263
}
6364
}
6465

66+
@Test
67+
public void detect_connection_info() throws Exception {
68+
final BasicDataSource dataSource = getDataSource();
69+
final MockTracer mockTracer = new MockTracer();
70+
try (final TracingDataSource tracingDataSource = new TracingDataSource(mockTracer, dataSource)) {
71+
tracingDataSource.getConnection();
72+
}
73+
assertFalse(mockTracer.finishedSpans().isEmpty());
74+
MockSpan finishedSpan = mockTracer.finishedSpans().get(0);
75+
assertEquals("Span contains tag db.type=h2", "h2", finishedSpan.tags().get(Tags.DB_TYPE.getKey()));
76+
}
77+
6578
private static BasicDataSource getDataSource() {
6679
BasicDataSource dataSource = new BasicDataSource();
6780
dataSource.setUrl("jdbc:h2:mem:dataSourceTest");

0 commit comments

Comments
 (0)