@@ -74,78 +74,51 @@ public void SqlClientCallsAreCollectedSuccessfully(
74
74
string commandText ,
75
75
bool captureTextCommandContent ,
76
76
bool emitOldAttributes = true ,
77
- bool emitNewAttributes = false ,
78
- bool tracingEnabled = true ,
79
- bool metricsEnabled = true )
77
+ bool emitNewAttributes = false )
80
78
{
81
79
var activities = new List < Activity > ( ) ;
82
80
var metrics = new List < Metric > ( ) ;
83
81
84
- var traceProviderBuilder = Sdk . CreateTracerProviderBuilder ( ) ;
85
-
86
- if ( tracingEnabled )
87
- {
88
- traceProviderBuilder . AddSqlClientInstrumentation (
89
- ( opt ) =>
82
+ using var traceProvider = Sdk . CreateTracerProviderBuilder ( )
83
+ . AddSqlClientInstrumentation ( options =>
90
84
{
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 ( ) ;
99
91
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 ( ) ;
105
96
106
- var traceProvider = traceProviderBuilder . Build ( ) ;
107
- var meterProvider = meterProviderBuilder . Build ( ) ;
97
+ this . ExecuteCommand ( commandType , commandText , false , beforeCommand ) ;
108
98
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 ( ) ;
118
101
119
102
Activity ? activity = null ;
120
103
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 ) ;
135
115
136
116
var dbClientOperationDurationMetrics = metrics
137
117
. Where ( metric => metric . Name == "db.client.operation.duration" )
138
118
. ToArray ( ) ;
139
119
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 ) ;
149
122
}
150
123
151
124
[ Theory ]
@@ -200,78 +173,47 @@ public void SqlClientAddsConnectionLevelAttributes(
200
173
[ MemberData ( nameof ( SqlTestData . SqlClientErrorsAreCollectedSuccessfullyCases ) , MemberType = typeof ( SqlTestData ) ) ]
201
174
public void SqlClientErrorsAreCollectedSuccessfully (
202
175
string beforeCommand ,
203
- bool recordException = false ,
204
- bool tracingEnabled = true ,
205
- bool metricsEnabled = true )
176
+ bool recordException = false )
206
177
{
207
178
var activities = new List < Activity > ( ) ;
208
179
var metrics = new List < Metric > ( ) ;
209
- var traceProviderBuilder = Sdk . CreateTracerProviderBuilder ( ) ;
210
180
211
- if ( tracingEnabled )
212
- {
213
- traceProviderBuilder . AddSqlClientInstrumentation ( options =>
181
+ using var traceProvider = Sdk . CreateTracerProviderBuilder ( )
182
+ . AddSqlClientInstrumentation ( options =>
214
183
{
215
184
options . RecordException = recordException ;
216
185
} )
217
- . AddInMemoryExporter ( activities ) ;
218
- }
219
-
220
- var traceProvider = traceProviderBuilder . Build ( ) ;
221
-
222
- var meterProviderBuilder = Sdk . CreateMeterProviderBuilder ( ) ;
186
+ . AddInMemoryExporter ( activities )
187
+ . Build ( ) ;
223
188
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 ( ) ;
230
193
231
- var meterProvider = meterProviderBuilder . Build ( ) ;
194
+ this . ExecuteCommand ( CommandType . StoredProcedure , "SP_GetOrders" , true , beforeCommand ) ;
232
195
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 ( ) ;
242
198
243
199
Activity ? activity = null ;
244
200
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 ) ;
261
210
262
211
var dbClientOperationDurationMetrics = metrics
263
212
. Where ( metric => metric . Name == "db.client.operation.duration" )
264
213
. ToArray ( ) ;
265
214
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 ) ;
275
217
}
276
218
277
219
[ Theory ]
@@ -288,6 +230,66 @@ public void MicrosoftDataStartsActivityWithExpectedAttributes(SqlClientTestCase
288
230
this . RunSqlClientTestCase ( testCase , SqlClientDiagnosticListener . SqlMicrosoftBeforeExecuteCommand , SqlClientDiagnosticListener . SqlMicrosoftAfterExecuteCommand ) ;
289
231
}
290
232
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
+
291
293
[ Theory ]
292
294
[ InlineData ( true , false ) ]
293
295
[ InlineData ( false , false ) ]
0 commit comments