public void NestedActivitiesSuppressionConfiguration(bool suppressOuter, bool suppressNested, bool expectSuppression) { using var _ = SetAppConfigSwitch(); using var activityListener = new TestActivitySourceListener("Azure.Clients.ClientName"); DiagnosticScopeFactory clientDiagnostics = new DiagnosticScopeFactory("Azure.Clients", "Microsoft.Azure.Core.Cool.Tests", true, suppressOuter); DiagnosticScope scope = clientDiagnostics.CreateScope("ClientName.ActivityName"); scope.Start(); using var activityListener2 = new TestActivitySourceListener("Azure.Clients2.ClientName"); DiagnosticScopeFactory clientDiagnostics2 = new DiagnosticScopeFactory("Azure.Clients2", "Microsoft.Azure.Core.Cool.Tests", true, suppressNested); DiagnosticScope nestedScope = clientDiagnostics2.CreateScope("ClientName.NestedActivityName"); nestedScope.Start(); if (expectSuppression) { Assert.IsFalse(nestedScope.IsEnabled); Assert.AreEqual("ClientName.ActivityName", Activity.Current.OperationName); } else { Assert.IsTrue(nestedScope.IsEnabled); Assert.AreEqual("ClientName.NestedActivityName", Activity.Current.OperationName); } nestedScope.Dispose(); Assert.AreEqual("ClientName.ActivityName", Activity.Current.OperationName); scope.Dispose(); }
public async Task HttpActivityNeverSuppressed() { using var _ = SetAppConfigSwitch(); ActivityIdFormat previousFormat = Activity.DefaultIdFormat; Activity.DefaultIdFormat = ActivityIdFormat.W3C; using var clientListener = new TestActivitySourceListener("Azure.Clients.ClientName"); DiagnosticScopeFactory clientDiagnostics = new DiagnosticScopeFactory("Azure.Clients", "Microsoft.Azure.Core.Cool.Tests", true, true); using DiagnosticScope outerScope = clientDiagnostics.CreateScope("ClientName.ActivityName", DiagnosticScope.ActivityKind.Internal); outerScope.Start(); try { using var testListener = new TestActivitySourceListener("Azure.Core.Http"); MockTransport mockTransport = CreateMockTransport(_ => new MockResponse(201)); Task <Response> requestTask = SendRequestAsync(mockTransport, request => { request.Method = RequestMethod.Get; }, s_enabledPolicy); await requestTask; Assert.AreEqual(1, testListener.Activities.Count); CollectionAssert.Contains(testListener.Activities.Single().Tags, new KeyValuePair <string, string>("http.status_code", "201")); } finally { Activity.DefaultIdFormat = previousFormat; } }
private DiagnosticScope CreateScope(string method) { DiagnosticScopeFactory clientDiagnostics = new DiagnosticScopeFactory("Azure.Core.Tests", "random", true); string activityName = $"{typeof(InvalidDiagnosticScopeTestClient).Name}.{method}"; DiagnosticScope scope = clientDiagnostics.CreateScope(activityName); return(scope); }
private void FireScope(string method) { DiagnosticScopeFactory clientDiagnostics = new DiagnosticScopeFactory("Azure.Core.Tests", "random", true); string activityName = $"{typeof(InvalidDiagnosticScopeTestClient).Name}.{method}"; DiagnosticScope scope = clientDiagnostics.CreateScope(activityName); scope.Start(); scope.Dispose(); }
public void NoopsWhenDisabled() { DiagnosticScopeFactory clientDiagnostics = new DiagnosticScopeFactory("Azure.Clients", "Microsoft.Azure.Core.Cool.Tests", false); DiagnosticScope scope = clientDiagnostics.CreateScope(""); scope.AddAttribute("Attribute1", "Value1"); scope.AddAttribute("Attribute2", 2, i => i.ToString()); scope.Failed(new Exception()); scope.Dispose(); }
// for end to end testing internal EventGridExtensionConfigProvider( Func <EventGridAttribute, IAsyncCollector <object> > converter, HttpRequestProcessor httpRequestProcessor, ILoggerFactory loggerFactory) { _converter = converter; _httpRequestProcessor = httpRequestProcessor; _loggerFactory = loggerFactory; _diagnosticScopeFactory = new DiagnosticScopeFactory(DiagnosticScopeNamespace, ResourceProviderNamespace, true); }
public void CreatesASingleListenerPerNamespace() { using var testListener = new TestDiagnosticListener(l => l.Name.StartsWith("Azure.Clients.")); _ = new DiagnosticScopeFactory("Azure.Clients.1", "Microsoft.Azure.Core.Cool.Tests", true); _ = new DiagnosticScopeFactory("Azure.Clients.1", "Microsoft.Azure.Core.Cool.Tests", true); _ = new DiagnosticScopeFactory("Azure.Clients.2", "Microsoft.Azure.Core.Cool.Tests", true); Assert.AreEqual(2, testListener.Sources.Count); }
public void StartsActivitySourceActivity() { using var _ = SetAppConfigSwitch(); // Bug: there is no way to set activity type to W3C // https://github.com/dotnet/runtime/issues/43853 var oldDefault = Activity.DefaultIdFormat; Activity.DefaultIdFormat = ActivityIdFormat.W3C; try { using var activityListener = new TestActivitySourceListener("Azure.Clients.ClientName"); DiagnosticScopeFactory clientDiagnostics = new DiagnosticScopeFactory("Azure.Clients", "Microsoft.Azure.Core.Cool.Tests", true); DiagnosticScope scope = clientDiagnostics.CreateScope("ClientName.ActivityName"); scope.AddAttribute("Attribute1", "Value1"); scope.AddAttribute("Attribute2", 2, i => i.ToString()); scope.AddAttribute("Attribute3", 3); scope.AddLink("00-6e76af18746bae4eadc3581338bbe8b1-2899ebfdbdce904b-00"); scope.AddLink("00-6e76af18746bae4eadc3581338bbe8b2-2899ebfdbdce904b-00", new Dictionary <string, string>() { { "linkAttribute", "linkAttributeValue" } }); Assert.IsTrue(scope.IsEnabled); scope.Start(); scope.Dispose(); Assert.AreEqual(1, activityListener.Activities.Count); var activity = activityListener.Activities.Dequeue(); Assert.AreEqual("ClientName.ActivityName", activity.DisplayName); Assert.AreEqual("Value1", activity.TagObjects.Single(o => o.Key == "Attribute1").Value); Assert.AreEqual("2", activity.TagObjects.Single(o => o.Key == "Attribute2").Value); Assert.AreEqual("3", activity.TagObjects.Single(o => o.Key == "Attribute3").Value); var links = activity.Links.ToArray(); Assert.AreEqual(2, links.Length); Assert.AreEqual(ActivityContext.Parse("00-6e76af18746bae4eadc3581338bbe8b1-2899ebfdbdce904b-00", null), links[0].Context); Assert.AreEqual(ActivityContext.Parse("00-6e76af18746bae4eadc3581338bbe8b2-2899ebfdbdce904b-00", null), links[1].Context); Assert.AreEqual(ActivityIdFormat.W3C, activity.IdFormat); } finally { Activity.DefaultIdFormat = oldDefault; } }
public void StartActivityNoOpsWithoutSwitch() { using var activityListener = new TestActivitySourceListener("Azure.Clients.ClientName"); DiagnosticScopeFactory clientDiagnostics = new DiagnosticScopeFactory("Azure.Clients", "Microsoft.Azure.Core.Cool.Tests", true); DiagnosticScope scope = clientDiagnostics.CreateScope("ClientName.ActivityName"); scope.Start(); scope.Dispose(); Assert.AreEqual(0, activityListener.Activities.Count); }
public void NestedClientActivitiesNotSuppressed(int kind) { using var testListener = new TestDiagnosticListener("Azure.Clients"); DiagnosticScopeFactory clientDiagnostics = new DiagnosticScopeFactory("Azure.Clients", "Microsoft.Azure.Core.Cool.Tests", true, false); using DiagnosticScope scope = clientDiagnostics.CreateScope("ClientName.ActivityName", (DiagnosticScope.ActivityKind)kind); scope.Start(); DiagnosticScope nestedScope = clientDiagnostics.CreateScope("ClientName.NestedActivityName", (DiagnosticScope.ActivityKind)kind); nestedScope.Start(); Assert.IsTrue(nestedScope.IsEnabled); Assert.AreEqual("ClientName.NestedActivityName", Activity.Current.OperationName); nestedScope.Dispose(); Assert.AreEqual("ClientName.ActivityName", Activity.Current.OperationName); }
public void SequentialActivitiesNoSuppression() { using var activityListener2 = new TestDiagnosticListener("Azure.Clients"); DiagnosticScopeFactory clientDiagnostics = new DiagnosticScopeFactory("Azure.Clients", "Microsoft.Azure.Core.Cool.Tests", true, false); DiagnosticScope scope = clientDiagnostics.CreateScope("ClientName.ActivityName"); scope.Start(); scope.Dispose(); DiagnosticScope nextScope = clientDiagnostics.CreateScope("ClientName.ActivityName"); nextScope.Start(); Assert.IsTrue(nextScope.IsEnabled); Assert.AreEqual("ClientName.ActivityName", Activity.Current.OperationName); nextScope.Dispose(); Assert.IsNull(Activity.Current); }
public void StartActivitySourceActivityIgnoresInvalidLinkParent() { using var _ = SetAppConfigSwitch(); using var activityListener = new TestActivitySourceListener("Azure.Clients.ClientName"); DiagnosticScopeFactory clientDiagnostics = new DiagnosticScopeFactory("Azure.Clients", "Microsoft.Azure.Core.Cool.Tests", true); DiagnosticScope scope = clientDiagnostics.CreateScope("ClientName.ActivityName"); scope.AddLink("test"); scope.Start(); scope.Dispose(); Assert.AreEqual(0, activityListener.Activities.Single().Links.Count()); }
public void AddLinkCallsPassesLinksAsPartOfStartPayload() { using var testListener = new TestDiagnosticListener("Azure.Clients"); DiagnosticScopeFactory clientDiagnostics = new DiagnosticScopeFactory("Azure.Clients", "Microsoft.Azure.Core.Cool.Tests", true); DiagnosticScope scope = clientDiagnostics.CreateScope("ActivityName"); scope.AddLink("00-6e76af18746bae4eadc3581338bbe8b1-2899ebfdbdce904b-00", "foo=bar"); scope.AddLink("00-6e76af18746bae4eadc3581338bbe8b2-2899ebfdbdce904b-00", null); scope.Start(); (string Key, object Value, DiagnosticListener)startEvent = testListener.Events.Dequeue(); Activity activity = Activity.Current; scope.Dispose(); (string Key, object Value, DiagnosticListener)stopEvent = testListener.Events.Dequeue(); var isEnabledCall = testListener.IsEnabledCalls.Dequeue(); Assert.NotNull(activity); Assert.Null(Activity.Current); Assert.AreEqual("ActivityName.Start", startEvent.Key); Assert.AreEqual("ActivityName.Stop", stopEvent.Key); Assert.AreEqual("ActivityName", isEnabledCall.Name); var activities = (IEnumerable <Activity>)startEvent.Value.GetType().GetTypeInfo().GetDeclaredProperty("Links").GetValue(startEvent.Value); Activity[] activitiesArray = activities.ToArray(); Assert.AreEqual(activitiesArray.Length, 2); Activity linkedActivity1 = activitiesArray[0]; Activity linkedActivity2 = activitiesArray[1]; Assert.AreEqual(ActivityIdFormat.W3C, linkedActivity1.IdFormat); Assert.AreEqual("00-6e76af18746bae4eadc3581338bbe8b1-2899ebfdbdce904b-00", linkedActivity1.ParentId); Assert.AreEqual("foo=bar", linkedActivity1.TraceStateString); Assert.AreEqual(ActivityIdFormat.W3C, linkedActivity2.IdFormat); Assert.AreEqual("00-6e76af18746bae4eadc3581338bbe8b2-2899ebfdbdce904b-00", linkedActivity2.ParentId); Assert.Null(linkedActivity2.TraceStateString); Assert.AreEqual(0, testListener.Events.Count); }
public void CanSetActivitySourceAndDiagnosticSourceActivitiesTogether() { using var _ = SetAppConfigSwitch(); using var testListener = new TestDiagnosticListener("Azure.Clients"); using var activityListener = new TestActivitySourceListener("Azure.Clients.ClientName"); DiagnosticScopeFactory clientDiagnostics = new DiagnosticScopeFactory("Azure.Clients", "Microsoft.Azure.Core.Cool.Tests", true); DiagnosticScope scope = clientDiagnostics.CreateScope("ClientName.ActivityName"); scope.Start(); (string Key, object Value, DiagnosticListener)startEvent = testListener.Events.Dequeue(); Activity activityAfterStart = Activity.Current; scope.AddAttribute("Attribute1", "Value1"); scope.AddAttribute("Attribute2", 2, i => i.ToString()); scope.AddAttribute("Attribute3", 3); scope.Dispose(); (string Key, object Value, DiagnosticListener)stopEvent = testListener.Events.Dequeue(); Assert.AreEqual(1, activityListener.Activities.Count); var activitySourceActivity = activityListener.Activities.Dequeue(); Assert.AreEqual("Value1", activitySourceActivity.TagObjects.Single(o => o.Key == "Attribute1").Value); Assert.AreEqual("2", activitySourceActivity.TagObjects.Single(o => o.Key == "Attribute2").Value); Assert.AreEqual("3", activitySourceActivity.TagObjects.Single(o => o.Key == "Attribute3").Value); Assert.Null(Activity.Current); Assert.AreEqual("ClientName.ActivityName.Start", startEvent.Key); Assert.AreEqual("ClientName.ActivityName.Stop", stopEvent.Key); var diagnosticSourceActivity = (Activity)startEvent.Value; Assert.AreEqual(ActivityIdFormat.W3C, diagnosticSourceActivity.IdFormat); CollectionAssert.Contains(diagnosticSourceActivity.Tags, new KeyValuePair <string, string>("Attribute1", "Value1")); CollectionAssert.Contains(diagnosticSourceActivity.Tags, new KeyValuePair <string, string>("Attribute2", "2")); CollectionAssert.Contains(diagnosticSourceActivity.Tags, new KeyValuePair <string, string>("Attribute3", "3")); Assert.AreEqual(activityAfterStart, diagnosticSourceActivity); }
public void NestedClientActivitiesSuppressionByDefault() { using var _ = SetAppConfigSwitch(); using var activityListener = new TestActivitySourceListener("Azure.Clients.ClientName"); DiagnosticScopeFactory clientDiagnostics = new DiagnosticScopeFactory("Azure.Clients", "Microsoft.Azure.Core.Cool.Tests", true); using DiagnosticScope scope = clientDiagnostics.CreateScope("ClientName.ActivityName", DiagnosticScope.ActivityKind.Client); scope.Start(); DiagnosticScope nestedScope = clientDiagnostics.CreateScope("ClientName.NestedActivityName", DiagnosticScope.ActivityKind.Internal); nestedScope.Start(); Assert.IsFalse(nestedScope.IsEnabled); Assert.AreEqual("ClientName.ActivityName", Activity.Current.OperationName); nestedScope.Dispose(); Assert.AreEqual("ClientName.ActivityName", Activity.Current.OperationName); }
public void ActivityDurationIsNotZeroWhenStoping() { TimeSpan? duration = null; using var testListener = new TestDiagnosticListener("Azure.Clients"); testListener.EventCallback = _ => { duration = Activity.Current?.Duration; }; DiagnosticScopeFactory clientDiagnostics = new DiagnosticScopeFactory("Azure.Clients", "Microsoft.Azure.Core.Cool.Tests", true, false); DiagnosticScope scope = clientDiagnostics.CreateScope("ActivityName"); scope.Start(); Thread.Sleep(50); scope.Dispose(); Assert.True(duration > TimeSpan.Zero); }
public static OpenTelemetryCoreRecorder CreateRecorder(string operationName, bool isFeatureEnabled) { if (isFeatureEnabled) { ScopeFactory = new DiagnosticScopeFactory(clientNamespace: OpenTelemetryAttributeKeys.DiagnosticNamespace, resourceProviderNamespace: OpenTelemetryAttributeKeys.ResourceProviderNamespace, isActivityEnabled: true); DiagnosticScope scope = OpenTelemetryRecorderFactory .ScopeFactory .CreateScope($"{OpenTelemetryAttributeKeys.OperationPrefix}.{operationName}"); if (scope.IsEnabled) { return(new OpenTelemetryCoreRecorder(scope)); } } return(default);
public void NestedActivitiesNoSuppressionDifferentSourcesServerClient() { using var testListener = new TestDiagnosticListener("Azure.Clients"); DiagnosticScopeFactory clientDiagnostics = new DiagnosticScopeFactory("Azure.Clients", "Microsoft.Azure.Core.Cool.Tests", true, false); ; DiagnosticScope scope = clientDiagnostics.CreateScope("ClientName.ActivityName", DiagnosticScope.ActivityKind.Server); scope.Start(); using var activityListener2 = new TestDiagnosticListener("Azure.Clients2"); DiagnosticScopeFactory clientDiagnostics2 = new DiagnosticScopeFactory("Azure.Clients2", "Microsoft.Azure.Core.Cool.Tests", true, false); DiagnosticScope nestedScope = clientDiagnostics2.CreateScope("ClientName.NestedActivityName"); nestedScope.Start(); Assert.IsTrue(nestedScope.IsEnabled); Assert.AreEqual("ClientName.NestedActivityName", Activity.Current.OperationName); nestedScope.Dispose(); Assert.AreEqual("ClientName.ActivityName", Activity.Current.OperationName); scope.Dispose(); }
public void ActivityStartTimeCanBeSet() { DateTime?actualStartTimeUtc = null; using var testListener = new TestDiagnosticListener("Azure.Clients"); testListener.EventCallback = _ => { actualStartTimeUtc = Activity.Current?.StartTimeUtc; }; DiagnosticScopeFactory clientDiagnostics = new DiagnosticScopeFactory("Azure.Clients", "Microsoft.Azure.Core.Cool.Tests", true, false); DiagnosticScope scope = clientDiagnostics.CreateScope("ActivityName"); DateTime expectedStartTimeUtc = DateTime.UtcNow - TimeSpan.FromSeconds(10); scope.SetStartTime(expectedStartTimeUtc); scope.Start(); scope.Dispose(); Assert.AreEqual(expectedStartTimeUtc, actualStartTimeUtc); }
public void CanSetActivitySourceAttributesAfterStarting() { using var _ = SetAppConfigSwitch(); using var activityListener = new TestActivitySourceListener("Azure.Clients.ClientName"); DiagnosticScopeFactory clientDiagnostics = new DiagnosticScopeFactory("Azure.Clients", "Microsoft.Azure.Core.Cool.Tests", true); DiagnosticScope scope = clientDiagnostics.CreateScope("ClientName.ActivityName"); scope.Start(); scope.AddAttribute("name", "value"); scope.Dispose(); Assert.AreEqual(1, activityListener.Activities.Count); var activity = activityListener.Activities.Dequeue(); Assert.AreEqual("value", activity.TagObjects.Single(o => o.Key == "name").Value); }
public void AddLinkCallsPassesLinksAsPartOfStartPayload() { using var testListener = new TestDiagnosticListener("Azure.Clients"); DiagnosticScopeFactory clientDiagnostics = new DiagnosticScopeFactory("Azure.Clients", "Microsoft.Azure.Core.Cool.Tests", true); DiagnosticScope scope = clientDiagnostics.CreateScope("ActivityName"); scope.AddLink("id"); scope.AddLink("id2"); scope.Start(); (string Key, object Value, DiagnosticListener)startEvent = testListener.Events.Dequeue(); Activity activity = Activity.Current; scope.Dispose(); (string Key, object Value, DiagnosticListener)stopEvent = testListener.Events.Dequeue(); Assert.Null(Activity.Current); Assert.AreEqual("ActivityName.Start", startEvent.Key); Assert.AreEqual("ActivityName.Stop", stopEvent.Key); var activities = (IEnumerable <Activity>)startEvent.Value.GetType().GetTypeInfo().GetDeclaredProperty("Links").GetValue(startEvent.Value); Activity[] activitiesArray = activities.ToArray(); Assert.AreEqual(activitiesArray.Length, 2); Activity linkedActivity1 = activitiesArray[0]; Activity linkedActivity2 = activitiesArray[1]; Assert.AreEqual(ActivityIdFormat.W3C, linkedActivity1.IdFormat); Assert.AreEqual("id", linkedActivity1.ParentId); Assert.AreEqual(ActivityIdFormat.W3C, linkedActivity2.IdFormat); Assert.AreEqual("id2", linkedActivity2.ParentId); Assert.AreEqual(0, testListener.Events.Count); }
public void ResourceNameIsOptional() { using var testListener = new TestDiagnosticListener("Azure.Clients"); DiagnosticScopeFactory clientDiagnostics = new DiagnosticScopeFactory("Azure.Clients", null, true, false); DiagnosticScope scope = clientDiagnostics.CreateScope("ActivityName"); scope.Start(); (string Key, object Value, DiagnosticListener) startEvent = testListener.Events.Dequeue(); Activity activity = Activity.Current; scope.Dispose(); (string Key, object Value, DiagnosticListener) stopEvent = testListener.Events.Dequeue(); Assert.Null(Activity.Current); Assert.AreEqual("ActivityName.Start", startEvent.Key); Assert.AreEqual("ActivityName.Stop", stopEvent.Key); Assert.AreEqual(ActivityIdFormat.W3C, activity.IdFormat); }
public void NestedActivitiesOuterSampledOut() { using var _ = SetAppConfigSwitch(); using var activityListener = new TestActivitySourceListener("Azure.Clients.ClientName"); DiagnosticScopeFactory clientDiagnostics = new DiagnosticScopeFactory("Azure.Clients", "Microsoft.Azure.Core.Cool.Tests", true, true); DiagnosticScope scope = clientDiagnostics.CreateScope("ClientName.ActivityName"); scope.AddAttribute("sampled-out", true); scope.Start(); Assert.IsNull(Activity.Current); using var activityListener2 = new TestActivitySourceListener("Azure.Clients2.ClientName"); DiagnosticScopeFactory clientDiagnostics2 = new DiagnosticScopeFactory("Azure.Clients2", "Microsoft.Azure.Core.Cool.Tests", true, true); DiagnosticScope nestedScope = clientDiagnostics2.CreateScope("ClientName.NestedActivityName"); nestedScope.Start(); Assert.IsTrue(nestedScope.IsEnabled); Assert.AreEqual("ClientName.NestedActivityName", Activity.Current.OperationName); nestedScope.Dispose(); Assert.IsNull(Activity.Current); }