Commit 117c9df7 authored by Ahoo Wang's avatar Ahoo Wang Committed by Lemon

fix Span.AddTag null value bug (#184)

1. fix SmartSqlTracingDiagnosticProcessor Span.AddTag null value bug
2. refactor SmartSqlTracingDiagnosticProcessor
parent e20d9a37
using System; using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data.Common;
using System.Text; using System.Text;
using SkyApm.Tracing; using SkyApm.Tracing;
using SkyApm.Tracing.Segments;
using SmartSql; using SmartSql;
using SmartSql.Diagnostics; using SmartSql.Diagnostics;
...@@ -21,23 +23,42 @@ namespace SkyApm.Diagnostics.SmartSql ...@@ -21,23 +23,42 @@ namespace SkyApm.Diagnostics.SmartSql
_tracingContext = tracingContext; _tracingContext = tracingContext;
_localSegmentContextAccessor = localSegmentContextAccessor; _localSegmentContextAccessor = localSegmentContextAccessor;
} }
private void AddConnectionTag(SegmentContext context, DbConnection dbConnection)
{
if (dbConnection == null)
{
return;
}
if (dbConnection.DataSource != null)
{
context.Span.Peer = new Common.StringOrIntValue(dbConnection.DataSource);
}
if (dbConnection.Database != null)
{
context.Span.AddTag(Common.Tags.DB_INSTANCE, dbConnection.Database);
}
}
private SegmentContext CreateSmartSqlLocalSegmentContext(string operation)
{
var context = _tracingContext.CreateLocalSegmentContext(operation);
context.Span.SpanLayer = SpanLayer.DB;
context.Span.Component = Common.Components.SMART_SQL;
context.Span.AddTag(Common.Tags.DB_TYPE, "Sql");
return context;
}
#region BeginTransaction #region BeginTransaction
[DiagnosticName(SmartSqlDiagnosticListenerExtensions.SMART_SQL_BEFORE_DB_SESSION_BEGINTRANSACTION)] [DiagnosticName(SmartSqlDiagnosticListenerExtensions.SMART_SQL_BEFORE_DB_SESSION_BEGINTRANSACTION)]
public void BeforeDbSessionBeginTransaction([Object]DbSessionBeginTransactionBeforeEventData eventData) public void BeforeDbSessionBeginTransaction([Object]DbSessionBeginTransactionBeforeEventData eventData)
{ {
var context = _tracingContext.CreateLocalSegmentContext("BeginTransaction"); CreateSmartSqlLocalSegmentContext("BeginTransaction");
context.Span.SpanLayer = Tracing.Segments.SpanLayer.DB;
context.Span.Component = Common.Components.SMART_SQL;
context.Span.AddTag(Common.Tags.DB_TYPE, "Sql");
} }
[DiagnosticName(SmartSqlDiagnosticListenerExtensions.SMART_SQL_AFTER_DB_SESSION_BEGINTRANSACTION)] [DiagnosticName(SmartSqlDiagnosticListenerExtensions.SMART_SQL_AFTER_DB_SESSION_BEGINTRANSACTION)]
public void AfterDbSessionBeginTransaction([Object]DbSessionBeginTransactionAfterEventData eventData) public void AfterDbSessionBeginTransaction([Object]DbSessionBeginTransactionAfterEventData eventData)
{ {
var context = _localSegmentContextAccessor.Context; var context = _localSegmentContextAccessor.Context;
if (context != null) if (context != null)
{ {
context.Span.Peer = new Common.StringOrIntValue(eventData.DbSession.Connection?.DataSource);
context.Span.AddTag(Common.Tags.DB_INSTANCE, eventData.DbSession.Connection?.Database);
_tracingContext.Release(context); _tracingContext.Release(context);
} }
} }
...@@ -56,13 +77,10 @@ namespace SkyApm.Diagnostics.SmartSql ...@@ -56,13 +77,10 @@ namespace SkyApm.Diagnostics.SmartSql
[DiagnosticName(SmartSqlDiagnosticListenerExtensions.SMART_SQL_BEFORE_DB_SESSION_COMMIT)] [DiagnosticName(SmartSqlDiagnosticListenerExtensions.SMART_SQL_BEFORE_DB_SESSION_COMMIT)]
public void BeforeDbSessionCommit([Object]DbSessionCommitBeforeEventData eventData) public void BeforeDbSessionCommit([Object]DbSessionCommitBeforeEventData eventData)
{ {
var context = _tracingContext.CreateLocalSegmentContext(eventData.Operation); var context = CreateSmartSqlLocalSegmentContext(eventData.Operation);
context.Span.SpanLayer = Tracing.Segments.SpanLayer.DB; AddConnectionTag(context, eventData.DbSession.Connection);
context.Span.Component = Common.Components.SMART_SQL;
context.Span.Peer = new Common.StringOrIntValue(eventData.DbSession.Connection?.DataSource);
context.Span.AddTag(Common.Tags.DB_INSTANCE, eventData.DbSession.Connection?.Database);
context.Span.AddTag(Common.Tags.DB_TYPE, "Sql");
} }
[DiagnosticName(SmartSqlDiagnosticListenerExtensions.SMART_SQL_AFTER_DB_SESSION_COMMIT)] [DiagnosticName(SmartSqlDiagnosticListenerExtensions.SMART_SQL_AFTER_DB_SESSION_COMMIT)]
public void AfterDbSessionCommit([Object]DbSessionCommitAfterEventData eventData) public void AfterDbSessionCommit([Object]DbSessionCommitAfterEventData eventData)
{ {
...@@ -87,12 +105,8 @@ namespace SkyApm.Diagnostics.SmartSql ...@@ -87,12 +105,8 @@ namespace SkyApm.Diagnostics.SmartSql
[DiagnosticName(SmartSqlDiagnosticListenerExtensions.SMART_SQL_BEFORE_DB_SESSION_ROLLBACK)] [DiagnosticName(SmartSqlDiagnosticListenerExtensions.SMART_SQL_BEFORE_DB_SESSION_ROLLBACK)]
public void BeforeDbSessionRollback([Object]DbSessionRollbackBeforeEventData eventData) public void BeforeDbSessionRollback([Object]DbSessionRollbackBeforeEventData eventData)
{ {
var context = _tracingContext.CreateLocalSegmentContext(eventData.Operation); var context = CreateSmartSqlLocalSegmentContext(eventData.Operation);
context.Span.SpanLayer = Tracing.Segments.SpanLayer.DB; AddConnectionTag(context, eventData.DbSession.Connection);
context.Span.Component = Common.Components.SMART_SQL;
context.Span.Peer = new Common.StringOrIntValue(eventData.DbSession.Connection?.DataSource);
context.Span.AddTag(Common.Tags.DB_INSTANCE, eventData.DbSession.Connection?.Database);
context.Span.AddTag(Common.Tags.DB_TYPE, "Sql");
} }
[DiagnosticName(SmartSqlDiagnosticListenerExtensions.SMART_SQL_AFTER_DB_SESSION_ROLLBACK)] [DiagnosticName(SmartSqlDiagnosticListenerExtensions.SMART_SQL_AFTER_DB_SESSION_ROLLBACK)]
public void AfterDbSessionRollback([Object]DbSessionRollbackAfterEventData eventData) public void AfterDbSessionRollback([Object]DbSessionRollbackAfterEventData eventData)
...@@ -118,12 +132,8 @@ namespace SkyApm.Diagnostics.SmartSql ...@@ -118,12 +132,8 @@ namespace SkyApm.Diagnostics.SmartSql
[DiagnosticName(SmartSqlDiagnosticListenerExtensions.SMART_SQL_BEFORE_DB_SESSION_DISPOSE)] [DiagnosticName(SmartSqlDiagnosticListenerExtensions.SMART_SQL_BEFORE_DB_SESSION_DISPOSE)]
public void BeforeDbSessionDispose([Object]DbSessionDisposeBeforeEventData eventData) public void BeforeDbSessionDispose([Object]DbSessionDisposeBeforeEventData eventData)
{ {
var context = _tracingContext.CreateLocalSegmentContext(eventData.Operation); var context = CreateSmartSqlLocalSegmentContext(eventData.Operation);
context.Span.SpanLayer = Tracing.Segments.SpanLayer.DB; AddConnectionTag(context, eventData.DbSession.Connection);
context.Span.Component = Common.Components.SMART_SQL;
context.Span.Peer = new Common.StringOrIntValue(eventData.DbSession.Connection?.DataSource);
context.Span.AddTag(Common.Tags.DB_INSTANCE, eventData.DbSession.Connection?.Database);
context.Span.AddTag(Common.Tags.DB_TYPE, "Sql");
} }
[DiagnosticName(SmartSqlDiagnosticListenerExtensions.SMART_SQL_AFTER_DB_SESSION_DISPOSE)] [DiagnosticName(SmartSqlDiagnosticListenerExtensions.SMART_SQL_AFTER_DB_SESSION_DISPOSE)]
public void AfterDbSessionDispose([Object]DbSessionDisposeAfterEventData eventData) public void AfterDbSessionDispose([Object]DbSessionDisposeAfterEventData eventData)
...@@ -149,10 +159,7 @@ namespace SkyApm.Diagnostics.SmartSql ...@@ -149,10 +159,7 @@ namespace SkyApm.Diagnostics.SmartSql
[DiagnosticName(SmartSqlDiagnosticListenerExtensions.SMART_SQL_BEFORE_DB_SESSION_OPEN)] [DiagnosticName(SmartSqlDiagnosticListenerExtensions.SMART_SQL_BEFORE_DB_SESSION_OPEN)]
public void BeforeDbSessionOpen([Object]DbSessionOpenBeforeEventData eventData) public void BeforeDbSessionOpen([Object]DbSessionOpenBeforeEventData eventData)
{ {
var context = _tracingContext.CreateLocalSegmentContext(eventData.Operation); CreateSmartSqlLocalSegmentContext(eventData.Operation);
context.Span.SpanLayer = Tracing.Segments.SpanLayer.DB;
context.Span.Component = Common.Components.SMART_SQL;
context.Span.AddTag(Common.Tags.DB_TYPE, "Sql");
} }
[DiagnosticName(SmartSqlDiagnosticListenerExtensions.SMART_SQL_AFTER_DB_SESSION_OPEN)] [DiagnosticName(SmartSqlDiagnosticListenerExtensions.SMART_SQL_AFTER_DB_SESSION_OPEN)]
public void AfterDbSessionOpen([Object]DbSessionOpenAfterEventData eventData) public void AfterDbSessionOpen([Object]DbSessionOpenAfterEventData eventData)
...@@ -160,8 +167,7 @@ namespace SkyApm.Diagnostics.SmartSql ...@@ -160,8 +167,7 @@ namespace SkyApm.Diagnostics.SmartSql
var context = _localSegmentContextAccessor.Context; var context = _localSegmentContextAccessor.Context;
if (context != null) if (context != null)
{ {
context.Span.Peer = new Common.StringOrIntValue(eventData.DbSession.Connection?.DataSource); AddConnectionTag(context, eventData.DbSession.Connection);
context.Span.AddTag(Common.Tags.DB_INSTANCE, eventData.DbSession.Connection?.Database);
_tracingContext.Release(context); _tracingContext.Release(context);
} }
} }
...@@ -171,6 +177,7 @@ namespace SkyApm.Diagnostics.SmartSql ...@@ -171,6 +177,7 @@ namespace SkyApm.Diagnostics.SmartSql
var context = _localSegmentContextAccessor.Context; var context = _localSegmentContextAccessor.Context;
if (context != null) if (context != null)
{ {
AddConnectionTag(context, eventData.DbSession.Connection);
context.Span.ErrorOccurred(eventData.Exception); context.Span.ErrorOccurred(eventData.Exception);
_tracingContext.Release(context); _tracingContext.Release(context);
} }
...@@ -185,10 +192,7 @@ namespace SkyApm.Diagnostics.SmartSql ...@@ -185,10 +192,7 @@ namespace SkyApm.Diagnostics.SmartSql
[DiagnosticName(SmartSqlDiagnosticListenerExtensions.SMART_SQL_BEFORE_DB_SESSION_INVOKE)] [DiagnosticName(SmartSqlDiagnosticListenerExtensions.SMART_SQL_BEFORE_DB_SESSION_INVOKE)]
public void BeforeDbSessionInvoke([Object]DbSessionInvokeBeforeEventData eventData) public void BeforeDbSessionInvoke([Object]DbSessionInvokeBeforeEventData eventData)
{ {
var context = _tracingContext.CreateLocalSegmentContext(ResolveOperationName(eventData.ExecutionContext)); CreateSmartSqlLocalSegmentContext(ResolveOperationName(eventData.ExecutionContext));
context.Span.SpanLayer = Tracing.Segments.SpanLayer.DB;
context.Span.Component = Common.Components.SMART_SQL;
context.Span.AddTag(Common.Tags.DB_TYPE, "Sql");
} }
[DiagnosticName(SmartSqlDiagnosticListenerExtensions.SMART_SQL_AFTER_DB_SESSION_INVOKE)] [DiagnosticName(SmartSqlDiagnosticListenerExtensions.SMART_SQL_AFTER_DB_SESSION_INVOKE)]
public void AfterDbSessionInvoke([Object]DbSessionInvokeAfterEventData eventData) public void AfterDbSessionInvoke([Object]DbSessionInvokeAfterEventData eventData)
...@@ -221,10 +225,11 @@ namespace SkyApm.Diagnostics.SmartSql ...@@ -221,10 +225,11 @@ namespace SkyApm.Diagnostics.SmartSql
[DiagnosticName(SmartSqlDiagnosticListenerExtensions.SMART_SQL_BEFORE_COMMAND_EXECUTER_EXECUTE)] [DiagnosticName(SmartSqlDiagnosticListenerExtensions.SMART_SQL_BEFORE_COMMAND_EXECUTER_EXECUTE)]
public void BeforeCommandExecuterExecute([Object]CommandExecuterExecuteBeforeEventData eventData) public void BeforeCommandExecuterExecute([Object]CommandExecuterExecuteBeforeEventData eventData)
{ {
var context = _tracingContext.CreateLocalSegmentContext(eventData.Operation); var context = CreateSmartSqlLocalSegmentContext(eventData.Operation);
context.Span.SpanLayer = Tracing.Segments.SpanLayer.DB; if (eventData.ExecutionContext.Request.RealSql != null)
context.Span.Component = Common.Components.SMART_SQL; {
context.Span.AddTag(Common.Tags.DB_TYPE, "Sql"); context.Span.AddTag(Common.Tags.DB_STATEMENT, eventData.ExecutionContext.Request.RealSql);
}
} }
[DiagnosticName(SmartSqlDiagnosticListenerExtensions.SMART_SQL_AFTER_COMMAND_EXECUTER_EXECUTE)] [DiagnosticName(SmartSqlDiagnosticListenerExtensions.SMART_SQL_AFTER_COMMAND_EXECUTER_EXECUTE)]
public void AfterCommandExecuterExecute([Object]CommandExecuterExecuteAfterEventData eventData) public void AfterCommandExecuterExecute([Object]CommandExecuterExecuteAfterEventData eventData)
...@@ -232,9 +237,7 @@ namespace SkyApm.Diagnostics.SmartSql ...@@ -232,9 +237,7 @@ namespace SkyApm.Diagnostics.SmartSql
var context = _localSegmentContextAccessor.Context; var context = _localSegmentContextAccessor.Context;
if (context != null) if (context != null)
{ {
context.Span.Peer = new Common.StringOrIntValue(eventData.ExecutionContext.DbSession.Connection?.DataSource); AddConnectionTag(context, eventData.ExecutionContext.DbSession.Connection);
context.Span.AddTag(Common.Tags.DB_INSTANCE, eventData.ExecutionContext.DbSession.Connection?.Database);
context.Span.AddTag(Common.Tags.DB_STATEMENT, eventData.ExecutionContext.Request.RealSql);
_tracingContext.Release(context); _tracingContext.Release(context);
} }
} }
...@@ -244,6 +247,7 @@ namespace SkyApm.Diagnostics.SmartSql ...@@ -244,6 +247,7 @@ namespace SkyApm.Diagnostics.SmartSql
var context = _localSegmentContextAccessor.Context; var context = _localSegmentContextAccessor.Context;
if (context != null) if (context != null)
{ {
AddConnectionTag(context, eventData.ExecutionContext.DbSession.Connection);
context.Span.ErrorOccurred(eventData.Exception); context.Span.ErrorOccurred(eventData.Exception);
_tracingContext.Release(context); _tracingContext.Release(context);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment