@@ -156,17 +156,61 @@ public void EventCountersEnabled()
156
156
}
157
157
158
158
[ Fact ]
159
- public void MetricsEnabled ( )
159
+ public void Metrics_RequestDuration_RecordedWithHttpActivity ( )
160
160
{
161
161
// Arrange
162
- var hostingEventSource = new HostingEventSource ( Guid . NewGuid ( ) . ToString ( ) ) ;
162
+ using var activityListener = new ActivityListener
163
+ {
164
+ ShouldListenTo = activitySource => activitySource . Name == "Microsoft.AspNetCore" ,
165
+ Sample = ( ref ActivityCreationOptions < ActivityContext > _ ) => ActivitySamplingResult . AllData
166
+ } ;
167
+ ActivitySource . AddActivityListener ( activityListener ) ;
163
168
169
+ var testMeterFactory = new TestMeterFactory ( ) ;
170
+
171
+ var meterListener = new MeterListener ( ) ;
172
+ meterListener . InstrumentPublished = ( i , l ) =>
173
+ {
174
+ if ( i . Meter . Scope == testMeterFactory && i . Meter . Name == HostingMetrics . MeterName && i . Name == "http.server.request.duration" )
175
+ {
176
+ l . EnableMeasurementEvents ( i ) ;
177
+ }
178
+ } ;
179
+
180
+ Activity measurementActivity = null ;
181
+ var measureCount = 0 ;
182
+ meterListener . SetMeasurementEventCallback < double > ( ( i , m , t , s ) =>
183
+ {
184
+ if ( Interlocked . Increment ( ref measureCount ) > 1 )
185
+ {
186
+ throw new Exception ( "Unexpected measurement count." ) ;
187
+ }
188
+
189
+ measurementActivity = Activity . Current ;
190
+ } ) ;
191
+ meterListener . Start ( ) ;
192
+
193
+ // Act
194
+ var hostingApplication = CreateApplication ( out var features , meterFactory : testMeterFactory ) ;
195
+ var context = hostingApplication . CreateContext ( features ) ;
196
+ hostingApplication . DisposeContext ( context , null ) ;
197
+
198
+ // Assert
199
+ Assert . Equal ( 1 , measureCount ) ;
200
+ Assert . NotNull ( measurementActivity ) ;
201
+ Assert . Equal ( HostingApplicationDiagnostics . ActivityName , measurementActivity . OperationName ) ;
202
+ }
203
+
204
+ [ Fact ]
205
+ public void MetricsEnabled ( )
206
+ {
207
+ // Arrange
164
208
var testMeterFactory = new TestMeterFactory ( ) ;
165
209
using var activeRequestsCollector = new MetricCollector < long > ( testMeterFactory , HostingMetrics . MeterName , "http.server.active_requests" ) ;
166
210
using var requestDurationCollector = new MetricCollector < double > ( testMeterFactory , HostingMetrics . MeterName , "http.server.request.duration" ) ;
167
211
168
212
// Act
169
- var hostingApplication = CreateApplication ( out var features , eventSource : hostingEventSource , meterFactory : testMeterFactory ) ;
213
+ var hostingApplication = CreateApplication ( out var features , meterFactory : testMeterFactory ) ;
170
214
var context = hostingApplication . CreateContext ( features ) ;
171
215
172
216
// Assert
0 commit comments