@@ -74,78 +74,51 @@ public void SqlClientCallsAreCollectedSuccessfully(
7474 string commandText ,
7575 bool captureTextCommandContent ,
7676 bool emitOldAttributes = true ,
77- bool emitNewAttributes = false ,
78- bool tracingEnabled = true ,
79- bool metricsEnabled = true )
77+ bool emitNewAttributes = false )
8078 {
8179 var activities = new List < Activity > ( ) ;
8280 var metrics = new List < Metric > ( ) ;
8381
84- var traceProviderBuilder = Sdk . CreateTracerProviderBuilder ( ) ;
85-
86- if ( tracingEnabled )
87- {
88- traceProviderBuilder . AddSqlClientInstrumentation (
89- ( opt ) =>
82+ using var traceProvider = Sdk . CreateTracerProviderBuilder ( )
83+ . AddSqlClientInstrumentation ( options =>
9084 {
91- opt . SetDbStatementForText = captureTextCommandContent ;
92- opt . EmitOldAttributes = emitOldAttributes ;
93- opt . EmitNewAttributes = emitNewAttributes ;
94- } ) ;
95- traceProviderBuilder . AddInMemoryExporter ( activities ) ;
96- }
97-
98- var meterProviderBuilder = Sdk . CreateMeterProviderBuilder ( ) ;
85+ options . SetDbStatementForText = captureTextCommandContent ;
86+ options . EmitOldAttributes = emitOldAttributes ;
87+ options . EmitNewAttributes = emitNewAttributes ;
88+ } )
89+ . AddInMemoryExporter ( activities )
90+ . Build ( ) ;
9991
100- if ( metricsEnabled )
101- {
102- meterProviderBuilder . AddSqlClientInstrumentation ( ) ;
103- meterProviderBuilder . AddInMemoryExporter ( metrics ) ;
104- }
92+ using var meterProvider = Sdk . CreateMeterProviderBuilder ( )
93+ . AddSqlClientInstrumentation ( )
94+ . AddInMemoryExporter ( metrics )
95+ . Build ( ) ;
10596
106- var traceProvider = traceProviderBuilder . Build ( ) ;
107- var meterProvider = meterProviderBuilder . Build ( ) ;
97+ this . ExecuteCommand ( commandType , commandText , false , beforeCommand ) ;
10898
109- try
110- {
111- this . ExecuteCommand ( commandType , commandText , false , beforeCommand ) ;
112- }
113- finally
114- {
115- traceProvider . Dispose ( ) ;
116- meterProvider . Dispose ( ) ;
117- }
99+ traceProvider . ForceFlush ( ) ;
100+ meterProvider . ForceFlush ( ) ;
118101
119102 Activity ? activity = null ;
120103
121- if ( tracingEnabled )
122- {
123- activity = Assert . Single ( activities ) ;
124- VerifyActivityData (
125- commandType ,
126- commandText ,
127- captureTextCommandContent ,
128- false ,
129- false ,
130- false ,
131- activity ,
132- emitOldAttributes ,
133- emitNewAttributes ) ;
134- }
104+ activity = Assert . Single ( activities ) ;
105+ VerifyActivityData (
106+ commandType ,
107+ commandText ,
108+ captureTextCommandContent ,
109+ false ,
110+ false ,
111+ false ,
112+ activity ,
113+ emitOldAttributes ,
114+ emitNewAttributes ) ;
135115
136116 var dbClientOperationDurationMetrics = metrics
137117 . Where ( metric => metric . Name == "db.client.operation.duration" )
138118 . ToArray ( ) ;
139119
140- if ( metricsEnabled )
141- {
142- var metric = Assert . Single ( dbClientOperationDurationMetrics ) ;
143- VerifyDurationMetricData ( metric , activity ) ;
144- }
145- else
146- {
147- Assert . Empty ( dbClientOperationDurationMetrics ) ;
148- }
120+ var metric = Assert . Single ( dbClientOperationDurationMetrics ) ;
121+ VerifyDurationMetricData ( metric , activity ) ;
149122 }
150123
151124 [ Theory ]
@@ -200,78 +173,47 @@ public void SqlClientAddsConnectionLevelAttributes(
200173 [ MemberData ( nameof ( SqlTestData . SqlClientErrorsAreCollectedSuccessfullyCases ) , MemberType = typeof ( SqlTestData ) ) ]
201174 public void SqlClientErrorsAreCollectedSuccessfully (
202175 string beforeCommand ,
203- bool recordException = false ,
204- bool tracingEnabled = true ,
205- bool metricsEnabled = true )
176+ bool recordException = false )
206177 {
207178 var activities = new List < Activity > ( ) ;
208179 var metrics = new List < Metric > ( ) ;
209- var traceProviderBuilder = Sdk . CreateTracerProviderBuilder ( ) ;
210180
211- if ( tracingEnabled )
212- {
213- traceProviderBuilder . AddSqlClientInstrumentation ( options =>
181+ using var traceProvider = Sdk . CreateTracerProviderBuilder ( )
182+ . AddSqlClientInstrumentation ( options =>
214183 {
215184 options . RecordException = recordException ;
216185 } )
217- . AddInMemoryExporter ( activities ) ;
218- }
219-
220- var traceProvider = traceProviderBuilder . Build ( ) ;
221-
222- var meterProviderBuilder = Sdk . CreateMeterProviderBuilder ( ) ;
186+ . AddInMemoryExporter ( activities )
187+ . Build ( ) ;
223188
224- if ( metricsEnabled )
225- {
226- meterProviderBuilder
227- . AddSqlClientInstrumentation ( )
228- . AddInMemoryExporter ( metrics ) ;
229- }
189+ using var meterProvider = Sdk . CreateMeterProviderBuilder ( )
190+ . AddSqlClientInstrumentation ( )
191+ . AddInMemoryExporter ( metrics )
192+ . Build ( ) ;
230193
231- var meterProvider = meterProviderBuilder . Build ( ) ;
194+ this . ExecuteCommand ( CommandType . StoredProcedure , "SP_GetOrders" , true , beforeCommand ) ;
232195
233- try
234- {
235- this . ExecuteCommand ( CommandType . StoredProcedure , "SP_GetOrders" , true , beforeCommand ) ;
236- }
237- finally
238- {
239- traceProvider . Dispose ( ) ;
240- meterProvider . Dispose ( ) ;
241- }
196+ traceProvider . ForceFlush ( ) ;
197+ meterProvider . ForceFlush ( ) ;
242198
243199 Activity ? activity = null ;
244200
245- if ( tracingEnabled )
246- {
247- activity = Assert . Single ( activities ) ;
248- VerifyActivityData (
249- CommandType . StoredProcedure ,
250- "SP_GetOrders" ,
251- false ,
252- true ,
253- recordException ,
254- false ,
255- activity ) ;
256- }
257- else
258- {
259- Assert . Empty ( activities ) ;
260- }
201+ activity = Assert . Single ( activities ) ;
202+ VerifyActivityData (
203+ CommandType . StoredProcedure ,
204+ "SP_GetOrders" ,
205+ false ,
206+ true ,
207+ recordException ,
208+ false ,
209+ activity ) ;
261210
262211 var dbClientOperationDurationMetrics = metrics
263212 . Where ( metric => metric . Name == "db.client.operation.duration" )
264213 . ToArray ( ) ;
265214
266- if ( metricsEnabled )
267- {
268- var metric = Assert . Single ( dbClientOperationDurationMetrics ) ;
269- VerifyDurationMetricData ( metric , activity ) ;
270- }
271- else
272- {
273- Assert . Empty ( dbClientOperationDurationMetrics ) ;
274- }
215+ var metric = Assert . Single ( dbClientOperationDurationMetrics ) ;
216+ VerifyDurationMetricData ( metric , activity ) ;
275217 }
276218
277219 [ Theory ]
@@ -288,6 +230,66 @@ public void MicrosoftDataStartsActivityWithExpectedAttributes(SqlClientTestCase
288230 this . RunSqlClientTestCase ( testCase , SqlClientDiagnosticListener . SqlMicrosoftBeforeExecuteCommand , SqlClientDiagnosticListener . SqlMicrosoftAfterExecuteCommand ) ;
289231 }
290232
233+ [ Theory ]
234+ [ InlineData ( true , false ) ]
235+ [ InlineData ( false , false ) ]
236+ [ InlineData ( true , true ) ]
237+ [ InlineData ( false , true ) ]
238+ public void SpansAndMetricsGeneratedOnlyWhenEnabled ( bool tracesEnabled , bool metricsEnabled )
239+ {
240+ var activities = new List < Activity > ( ) ;
241+ var metrics = new List < Metric > ( ) ;
242+
243+ var tracerProviderBuilder = Sdk . CreateTracerProviderBuilder ( ) ;
244+ if ( tracesEnabled )
245+ {
246+ tracerProviderBuilder
247+ . AddSqlClientInstrumentation ( options =>
248+ {
249+ options . SetDbStatementForText = true ;
250+ options . RecordException = true ;
251+ } )
252+ . AddInMemoryExporter ( activities ) ;
253+ }
254+
255+ var meterProviderBuilder = Sdk . CreateMeterProviderBuilder ( ) ;
256+ if ( metricsEnabled )
257+ {
258+ meterProviderBuilder = Sdk . CreateMeterProviderBuilder ( )
259+ . AddSqlClientInstrumentation ( )
260+ . AddInMemoryExporter ( metrics ) ;
261+ }
262+
263+ using var tracerProvider = tracerProviderBuilder . Build ( ) ;
264+ using var meterProvider = meterProviderBuilder . Build ( ) ;
265+
266+ this . ExecuteCommand ( CommandType . StoredProcedure , "SP_GetOrders" , false , SqlClientDiagnosticListener . SqlDataBeforeExecuteCommand ) ;
267+ this . ExecuteCommand ( CommandType . StoredProcedure , "SP_GetOrders" , false , SqlClientDiagnosticListener . SqlMicrosoftBeforeExecuteCommand ) ;
268+
269+ tracerProvider . ForceFlush ( ) ;
270+ meterProvider . ForceFlush ( ) ;
271+
272+ Assert . Equal ( tracesEnabled ? 2 : 0 , activities . Count ) ;
273+
274+ if ( metricsEnabled )
275+ {
276+ var metric = Assert . Single ( metrics , m => m . Name == "db.client.operation.duration" ) ;
277+ var metricPoints = new List < MetricPoint > ( ) ;
278+ foreach ( var p in metric . GetMetricPoints ( ) )
279+ {
280+ metricPoints . Add ( p ) ;
281+ }
282+
283+ var metricPoint = Assert . Single ( metricPoints ) ;
284+ var measurementCount = metricPoint . GetHistogramCount ( ) ;
285+ Assert . Equal ( 2 , measurementCount ) ;
286+ }
287+ else
288+ {
289+ Assert . Empty ( metrics ) ;
290+ }
291+ }
292+
291293 [ Theory ]
292294 [ InlineData ( true , false ) ]
293295 [ InlineData ( false , false ) ]
0 commit comments