@@ -22,6 +22,8 @@ public class MetricEventSourceTests
22
22
const double IntervalSecs = 10 ;
23
23
static readonly TimeSpan s_waitForEventTimeout = TimeSpan . FromSeconds ( 60 ) ;
24
24
25
+ private const string RuntimeMeterName = "System.Runtime" ;
26
+
25
27
public MetricEventSourceTests ( ITestOutputHelper output )
26
28
{
27
29
_output = output ;
@@ -35,7 +37,7 @@ public void GetInstanceMethodIsReflectable()
35
37
// Even though the the type isn't public this test ensures the GetInstance() API isn't removed or renamed.
36
38
Type ? metricsEventSourceType = Type . GetType ( "System.Diagnostics.Metrics.MetricsEventSource, System.Diagnostics.DiagnosticSource" , throwOnError : false ) ;
37
39
Assert . True ( metricsEventSourceType != null , "Unable to get MetricsEventSource type via reflection" ) ;
38
-
40
+
39
41
MethodInfo ? getInstanceMethod = metricsEventSourceType . GetMethod ( "GetInstance" , BindingFlags . NonPublic | BindingFlags . Public | BindingFlags . Static , null , Type . EmptyTypes , null ) ;
40
42
Assert . True ( getInstanceMethod != null , "Unable to get MetricsEventSource.GetInstance method via reflection" ) ;
41
43
@@ -247,7 +249,7 @@ public void SingleListener_Wildcard()
247
249
Counter < int > c3 = meter3 . CreateCounter < int > ( "counter3" ) ;
248
250
249
251
EventWrittenEventArgs [ ] events ;
250
- using ( MetricsEventListener listener = new MetricsEventListener ( _output , MetricsEventListener . TimeSeriesValues , isShared : true , IntervalSecs , "* " ) )
252
+ using ( MetricsEventListener listener = new MetricsEventListener ( _output , MetricsEventListener . TimeSeriesValues , isShared : true , IntervalSecs , "" ) )
251
253
{
252
254
listener . WaitForCollectionStop ( s_waitForEventTimeout , 1 ) ;
253
255
c . Add ( 5 ) ;
@@ -1227,7 +1229,7 @@ public void EventSourcePublishesMissingDataPoints()
1227
1229
AssertBeginInstrumentReportingEventsPresent ( events , c , oc , og , h , udc , oudc , g ) ;
1228
1230
AssertInitialEnumerationCompleteEventPresent ( events ) ;
1229
1231
AssertCounterEventsPresent ( events , meter . Name , c . Name , "" , "" , ( "5" , "5" ) , ( "0" , "5" ) , ( "12" , "17" ) ) ;
1230
- AssertGaugeEventsPresent ( events , meter . Name , g . Name , "" , "" , "-123" , "" , "123" , "" ) ;
1232
+ AssertGaugeEventsPresent ( events , meter . Name , g . Name , "" , "" , "-123" , "-123 " , "123" , "123 " ) ;
1231
1233
AssertCounterEventsPresent ( events , meter . Name , oc . Name , "" , "" , ( "" , "17" ) , ( "0" , "17" ) , ( "14" , "31" ) , ( "0" , "31" ) ) ;
1232
1234
AssertGaugeEventsPresent ( events , meter . Name , og . Name , "" , "" , "18" , "" , "36" , "" ) ;
1233
1235
AssertHistogramEventsPresent ( events , meter . Name , h . Name , "" , "" , ( "0.5=19;0.95=19;0.99=19" , "1" , "19" ) , ( "" , "0" , "0" ) , ( "0.5=26;0.95=26;0.99=26" , "1" , "26" ) , ( "" , "0" , "0" ) ) ;
@@ -1290,36 +1292,40 @@ public void EventSourcePublishesEndEventsOnMeterDispose()
1290
1292
AssertEndInstrumentReportingEventsPresent ( events , c , oc , og , udc , oudc , g ) ;
1291
1293
}
1292
1294
1293
- [ ConditionalFact ( typeof ( PlatformDetection ) , nameof ( PlatformDetection . IsNotBrowser ) ) ]
1295
+ [ ConditionalFact ( typeof ( MetricEventSourceTests ) , nameof ( IsNotBrowserAndRemoteExecuteSupported ) ) ]
1294
1296
[ OuterLoop ( "Slow and has lots of console spew" ) ]
1295
1297
public void EventSourcePublishesInstruments ( )
1296
1298
{
1297
- object scope = new object ( ) ;
1299
+ RemoteExecutor . Invoke ( static ( ) =>
1300
+ {
1298
1301
1299
- using Meter meterA = new Meter ( "TestMeter10" , null , null , scope ) ;
1300
- using Meter meterB = new Meter ( "TestMeter11" , null , new TagList ( ) { { "Mk1" , "Mv1" } , { "Mk2" , null } } , scope ) ;
1301
- Counter < int > c = meterA . CreateCounter < int > ( "counter1" , "hat" , "Fooz!!" ) ;
1302
- Gauge < int > g = meterA . CreateGauge < int > ( "gauge1" , "C" , "Temperature" ) ;
1303
- int counterState = 3 ;
1304
- ObservableCounter < int > oc = meterA . CreateObservableCounter < int > ( "observableCounter1" , ( ) => { counterState += 7 ; return counterState ; } , "MB" , "Size of universe" ,
1305
- new TagList ( ) { { "ock1" , "ocv1" } , { "ock2" , "ocv2" } , { "ock3" , "ocv3" } } ) ;
1306
- int gaugeState = 0 ;
1307
- ObservableGauge < int > og = meterA . CreateObservableGauge < int > ( "observableGauge1" , ( ) => { gaugeState += 9 ; return gaugeState ; } , "12394923 asd [],;/" , "junk!" ,
1308
- new TagList ( ) { { "ogk1" , "ogv1" } } ) ;
1309
- Histogram < int > h = meterB . CreateHistogram < int > ( "histogram1" , "a unit" , "the description" , new TagList ( ) { { "hk1" , "hv1" } , { "hk2" , "" } , { "hk3" , null } } ) ;
1310
- UpDownCounter < int > udc = meterA . CreateUpDownCounter < int > ( "upDownCounter1" , "udc unit" , "udc description" , new TagList ( ) { { "udk1" , "udv1" } } ) ;
1311
- int upDownCounterState = 0 ;
1312
- ObservableUpDownCounter < int > oudc = meterA . CreateObservableUpDownCounter < int > ( "observableUpDownCounter1" , ( ) => { upDownCounterState += 11 ; return upDownCounterState ; } , "oudc unit" , "oudc description" ) ;
1302
+ object scope = new object ( ) ;
1313
1303
1314
- EventWrittenEventArgs [ ] events ;
1315
- using ( MetricsEventListener listener = new MetricsEventListener ( _output , MetricsEventListener . InstrumentPublishing , null , "" ) )
1316
- {
1317
- listener . WaitForEnumerationComplete ( s_waitForEventTimeout ) ;
1318
- events = listener . Events . ToArray ( ) ;
1319
- }
1304
+ using Meter meterA = new Meter ( "TestMeter10" , null , null , scope ) ;
1305
+ using Meter meterB = new Meter ( "TestMeter11" , null , new TagList ( ) { { "Mk1" , "Mv1" } , { "Mk2" , null } } , scope ) ;
1306
+ Counter < int > c = meterA . CreateCounter < int > ( "counter1" , "hat" , "Fooz!!" ) ;
1307
+ Gauge < int > g = meterA . CreateGauge < int > ( "gauge1" , "C" , "Temperature" ) ;
1308
+ int counterState = 3 ;
1309
+ ObservableCounter < int > oc = meterA . CreateObservableCounter < int > ( "observableCounter1" , ( ) => { counterState += 7 ; return counterState ; } , "MB" , "Size of universe" ,
1310
+ new TagList ( ) { { "ock1" , "ocv1" } , { "ock2" , "ocv2" } , { "ock3" , "ocv3" } } ) ;
1311
+ int gaugeState = 0 ;
1312
+ ObservableGauge < int > og = meterA . CreateObservableGauge < int > ( "observableGauge1" , ( ) => { gaugeState += 9 ; return gaugeState ; } , "12394923 asd [],;/" , "junk!" ,
1313
+ new TagList ( ) { { "ogk1" , "ogv1" } } ) ;
1314
+ Histogram < int > h = meterB . CreateHistogram < int > ( "histogram1" , "a unit" , "the description" , new TagList ( ) { { "hk1" , "hv1" } , { "hk2" , "" } , { "hk3" , null } } ) ;
1315
+ UpDownCounter < int > udc = meterA . CreateUpDownCounter < int > ( "upDownCounter1" , "udc unit" , "udc description" , new TagList ( ) { { "udk1" , "udv1" } } ) ;
1316
+ int upDownCounterState = 0 ;
1317
+ ObservableUpDownCounter < int > oudc = meterA . CreateObservableUpDownCounter < int > ( "observableUpDownCounter1" , ( ) => { upDownCounterState += 11 ; return upDownCounterState ; } , "oudc unit" , "oudc description" ) ;
1320
1318
1321
- AssertInstrumentPublishingEventsPresent ( events , c , oc , og , h , udc , oudc , g ) ;
1322
- AssertInitialEnumerationCompleteEventPresent ( events ) ;
1319
+ EventWrittenEventArgs [ ] events ;
1320
+ using ( MetricsEventListener listener = new MetricsEventListener ( NullTestOutputHelper . Instance , MetricsEventListener . InstrumentPublishing , null , "" ) )
1321
+ {
1322
+ listener . WaitForEnumerationComplete ( s_waitForEventTimeout ) ;
1323
+ events = listener . Events . ToArray ( ) ;
1324
+ }
1325
+
1326
+ AssertInstrumentPublishingEventsPresent ( events , c , oc , og , h , udc , oudc , g ) ;
1327
+ AssertInitialEnumerationCompleteEventPresent ( events ) ;
1328
+ } ) . Dispose ( ) ;
1323
1329
}
1324
1330
1325
1331
[ ConditionalFact ( typeof ( PlatformDetection ) , nameof ( PlatformDetection . IsNotBrowser ) ) ]
@@ -1604,25 +1610,25 @@ public void EventSourceEnforcesHistogramLimitAndNotMaxTimeSeries()
1604
1610
1605
1611
public static IEnumerable < object [ ] > DifferentMetersAndInstrumentsData ( )
1606
1612
{
1607
- yield return new object [ ] { new Meter ( "M1" ) . CreateCounter < int > ( "C1" ) , new Meter ( "M1 " ) . CreateCounter < int > ( "C1 " ) , false } ;
1613
+ yield return new object [ ] { new Meter ( "M1" ) . CreateCounter < int > ( "C1" ) , new Meter ( "M2 " ) . CreateCounter < int > ( "C2 " ) , false } ;
1608
1614
1609
- var counter = new Meter ( "M1 " ) . CreateCounter < int > ( "C1 " ) ;
1610
- yield return new object [ ] { counter , counter . Meter . CreateCounter < int > ( "C1 " ) , false } ;
1615
+ var counter = new Meter ( "M2 " ) . CreateCounter < int > ( "C3 " ) ;
1616
+ yield return new object [ ] { counter , counter . Meter . CreateCounter < int > ( "C4 " ) , false } ;
1611
1617
1612
1618
// Same counters
1613
- counter = new Meter ( "M1 " ) . CreateCounter < int > ( "C1 " ) ;
1619
+ counter = new Meter ( "M3 " ) . CreateCounter < int > ( "C5 " ) ;
1614
1620
yield return new object [ ] { counter , counter , true } ;
1615
1621
1616
1622
var scope = new object ( ) ;
1617
1623
yield return new object [ ]
1618
1624
{
1619
- new Meter ( "M1 " , "v1" , new TagList { { "k1" , "v1" } } , scope ) . CreateCounter < int > ( "C1 " , "u1" , "d1" , new TagList { { "k2" , "v2" } } ) ,
1620
- new Meter ( "M1 " , "v1" , new TagList { { "k1" , "v1" } } , scope ) . CreateCounter < int > ( "C1 " , "u1" , "d1" , new TagList { { "k2" , "v2" } } ) ,
1625
+ new Meter ( "M4 " , "v1" , new TagList { { "k1" , "v1" } } , scope ) . CreateCounter < int > ( "C6 " , "u1" , "d1" , new TagList { { "k2" , "v2" } } ) ,
1626
+ new Meter ( "M5 " , "v1" , new TagList { { "k1" , "v1" } } , scope ) . CreateCounter < int > ( "C7 " , "u1" , "d1" , new TagList { { "k2" , "v2" } } ) ,
1621
1627
false , // Same Instrument
1622
1628
} ;
1623
1629
1624
- Meter meter = new Meter ( "M1 " , "v1" , new TagList { { "k1" , "v1" } } , scope ) ;
1625
- yield return new object [ ] { meter . CreateCounter < int > ( "C1 " , "u1" , "d1" , new TagList { { "k2" , "v2" } } ) , meter . CreateCounter < int > ( "C1 " , "u1" , "d1" , new TagList { { "k2" , "v2" } } ) , false } ;
1630
+ Meter meter = new Meter ( "M6 " , "v1" , new TagList { { "k1" , "v1" } } , scope ) ;
1631
+ yield return new object [ ] { meter . CreateCounter < int > ( "C8 " , "u1" , "d1" , new TagList { { "k2" , "v2" } } ) , meter . CreateCounter < int > ( "C9 " , "u1" , "d1" , new TagList { { "k2" , "v2" } } ) , false } ;
1626
1632
}
1627
1633
1628
1634
[ ConditionalTheory ( typeof ( PlatformDetection ) , nameof ( PlatformDetection . IsNotBrowser ) ) ]
@@ -1756,7 +1762,7 @@ private static void AssertHistogramLimitPresent(EventWrittenEventArgs[] events)
1756
1762
1757
1763
private static void AssertInstrumentPublishingEventsPresent ( EventWrittenEventArgs [ ] events , params Instrument [ ] expectedInstruments )
1758
1764
{
1759
- var publishEvents = events . Where ( e => e . EventName == "InstrumentPublished" ) . Select ( e =>
1765
+ var publishEvents = events . Where ( e => e . EventName == "InstrumentPublished" && e . Payload [ 1 ] . ToString ( ) != RuntimeMeterName ) . Select ( e =>
1760
1766
new
1761
1767
{
1762
1768
MeterName = e . Payload [ 1 ] . ToString ( ) ,
0 commit comments