|
1 | 1 | package datadog.trace.instrumentation.jdbc;
|
2 | 2 |
|
3 | 3 | import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
|
| 4 | +import static datadog.trace.bootstrap.instrumentation.api.InstrumentationTags.DBM_TRACE_INJECTED; |
4 | 5 | import static datadog.trace.bootstrap.instrumentation.api.Tags.*;
|
5 | 6 |
|
6 | 7 | import datadog.trace.api.Config;
|
@@ -248,6 +249,10 @@ public String traceParent(AgentSpan span, int samplingPriority) {
|
248 | 249 | return sb.toString();
|
249 | 250 | }
|
250 | 251 |
|
| 252 | + public boolean isPostgres(final DBInfo dbInfo) { |
| 253 | + return "postgres".equals(dbInfo.getType()); |
| 254 | + } |
| 255 | + |
251 | 256 | public boolean isSqlServer(final DBInfo dbInfo) {
|
252 | 257 | return "sqlserver".equals(dbInfo.getType());
|
253 | 258 | }
|
@@ -312,6 +317,40 @@ public long setContextInfo(Connection connection, DBInfo dbInfo) {
|
312 | 317 | return spanID;
|
313 | 318 | }
|
314 | 319 |
|
| 320 | + // TODO: add description |
| 321 | + public void setApplicationName(AgentSpan span, Connection connection) { |
| 322 | + // TODO: measure time spent in instrumentation and add it as a tag in span |
| 323 | + try { |
| 324 | + Integer priority = span.forceSamplingDecision(); |
| 325 | + if (priority == null) { |
| 326 | + return; |
| 327 | + } |
| 328 | + final String traceParent = DECORATE.traceParent(span, priority); |
| 329 | + final String traceContext = "_DD_" + traceParent; |
| 330 | + |
| 331 | + // SET doesn't work with parameters |
| 332 | + StringBuilder sql = new StringBuilder(); |
| 333 | + sql.append("SET application_name = '"); |
| 334 | + sql.append(traceContext); |
| 335 | + sql.append("';"); |
| 336 | + |
| 337 | + try (Statement statement = connection.createStatement()) { |
| 338 | + statement.execute(sql.toString()); |
| 339 | + } catch (SQLException e) { |
| 340 | + throw e; |
| 341 | + } |
| 342 | + } catch (Exception e) { |
| 343 | + log.debug( |
| 344 | + "Failed to set extra DBM data in application_name for trace {}. " |
| 345 | + + "To disable this behavior, set trace_prepared_statements to 'false'. " |
| 346 | + + "See https://docs.datadoghq.com/database_monitoring/connect_dbm_and_apm/ for more info.{}", |
| 347 | + span.getTraceId().toHexString(), |
| 348 | + e); |
| 349 | + DECORATE.onError(span, e); |
| 350 | + } |
| 351 | + span.setTag(DBM_TRACE_INJECTED, true); |
| 352 | + } |
| 353 | + |
315 | 354 | @Override
|
316 | 355 | protected void postProcessServiceAndOperationName(
|
317 | 356 | AgentSpan span, DatabaseClientDecorator.NamingEntry namingEntry) {
|
|
0 commit comments