public void StartOperationPopulatesContextCorrectlyWithAnyOverridingParentIdNonW3C() { ActivityFormatHelper.DisableW3CFormatInActivity(); try { // Act - start an operation, supply ANY parent operation ID, and generate a telemetry inside it. using (this.telemetryClient.StartOperation <RequestTelemetry>("Request", operationId: AnyRootId, parentOperationId: AnyParentId)) { this.telemetryClient.TrackTrace("child trace"); this.telemetryClient.TrackEvent("child event"); } Assert.AreEqual(3, this.sendItems.Count); // The RequestTelemetry is the root operation here. // The user provided parent operationid will be used as is. var requestTelemetry = (RequestTelemetry)this.sendItems.Single(t => t is RequestTelemetry); ValidateRootTelemetry(requestTelemetry, expectedOperationParentId: AnyParentId, isW3C: false); // The generated TraceTelemetry should become the child of the root RequestTelemetry var traceTelemetry = (TraceTelemetry)this.sendItems.Single(t => t is TraceTelemetry); ValidateChildTelemetry(requestTelemetry, traceTelemetry); // The generated EventTelemetry should become the child of the root RequestTelemetry var eventTelemetry = (TraceTelemetry)this.sendItems.Single(t => t is TraceTelemetry); ValidateChildTelemetry(requestTelemetry, eventTelemetry); } finally { ActivityFormatHelper.EnableW3CFormatInActivity(); } }
public void StartOperationCanOverrideRootAndParentOperationIdNotW3CCompatible() { ActivityFormatHelper.DisableW3CFormatInActivity(); try { using (this.telemetryClient.StartOperation <RequestTelemetry>("Request", operationId: "ROOT", parentOperationId: "PARENT")) { this.telemetryClient.TrackTrace("child trace"); } Assert.AreEqual(2, this.sendItems.Count); var requestTelemetry = (RequestTelemetry)this.sendItems.Single(t => t is RequestTelemetry); Assert.AreEqual("PARENT", requestTelemetry.Context.Operation.ParentId); Assert.AreEqual("ROOT", requestTelemetry.Context.Operation.Id); var traceTelemetry = (TraceTelemetry)this.sendItems.Single(t => t is TraceTelemetry); Assert.AreEqual(requestTelemetry.Id, traceTelemetry.Context.Operation.ParentId); Assert.AreEqual("ROOT", traceTelemetry.Context.Operation.Id); } finally { ActivityFormatHelper.EnableW3CFormatInActivity(); } }
public void StartOperationPopulatesContextCorrectlyNonW3C() { ActivityFormatHelper.DisableW3CFormatInActivity(); try { // Act - start an operation, and generate telemetry inside it. using (this.telemetryClient.StartOperation <RequestTelemetry>("Request")) { this.telemetryClient.TrackTrace("child trace"); this.telemetryClient.TrackEvent("child event"); } Assert.AreEqual(3, this.sendItems.Count); // The RequestTelemetry is the root operation here. var requestTelemetry = (RequestTelemetry)this.sendItems.Single(t => t is RequestTelemetry); ValidateRootTelemetry(requestTelemetry, isW3C: false); // The generated TraceTelemetry should become the child of the root RequestTelemetry var traceTelemetry = (TraceTelemetry)this.sendItems.Single(t => t is TraceTelemetry); ValidateChildTelemetry(requestTelemetry, traceTelemetry); // The generated EventTelemetry should become the child of the root RequestTelemetry var eventTelemetry = (TraceTelemetry)this.sendItems.Single(t => t is TraceTelemetry); ValidateChildTelemetry(requestTelemetry, eventTelemetry); } finally { ActivityFormatHelper.EnableW3CFormatInActivity(); } }
public void StartStopRespectsUserProvidedIdsInScopeOfAnotherActivityExplicitIdsW3COff() { ActivityFormatHelper.DisableW3CFormatInActivity(); var activity = new Activity("foo").Start(); var customOperationId = ActivityTraceId.CreateRandom().ToHexString(); var customParentId = ActivitySpanId.CreateRandom().ToHexString(); using (var operation = this.telemetryClient.StartOperation <DependencyTelemetry>("name", customOperationId, customParentId)) { Assert.IsNotNull(Activity.Current); Assert.AreNotEqual(activity, Activity.Current.Parent); Assert.AreEqual(customOperationId, Activity.Current.RootId); Assert.AreEqual(customOperationId, operation.Telemetry.Context.Operation.Id); Assert.AreEqual(customParentId, operation.Telemetry.Context.Operation.ParentId); } Assert.AreEqual(activity, Activity.Current); Assert.AreEqual(1, this.sendItems.Count); Assert.IsTrue(this.sendItems.Single() is DependencyTelemetry); var dependency = this.sendItems.Single() as DependencyTelemetry; Assert.AreEqual(customOperationId, dependency.Context.Operation.Id); Assert.AreEqual(customParentId, dependency.Context.Operation.ParentId); }
public void StartDependencyTrackingHandlesMultipleContextStoresInCurrentActivityNonW3C() { ActivityFormatHelper.DisableW3CFormatInActivity(); var operation = this.telemetryClient.StartOperation <DependencyTelemetry>("OperationName") as OperationHolder <DependencyTelemetry>; var currentActivity = Activity.Current; Assert.AreEqual(operation.Telemetry.Id, currentActivity.Id); Assert.AreEqual(operation.Telemetry.Context.Operation.Name, this.GetOperationName(currentActivity)); var childOperation = this.telemetryClient.StartOperation <DependencyTelemetry>("OperationName") as OperationHolder <DependencyTelemetry>; var childActivity = Activity.Current; Assert.AreEqual(childOperation.Telemetry.Id, childActivity.Id); Assert.AreEqual(childOperation.Telemetry.Context.Operation.Name, this.GetOperationName(currentActivity)); Assert.IsNull(currentActivity.Parent); Assert.AreEqual(currentActivity, childActivity.Parent); this.telemetryClient.StopOperation(childOperation); Assert.AreEqual(currentActivity, Activity.Current); this.telemetryClient.StopOperation(operation); Assert.IsNull(Activity.Current); ActivityFormatHelper.EnableW3CFormatInActivity(); }
public void ContextPropagatesThroughNestedOperationsNonW3C() { ActivityFormatHelper.DisableW3CFormatInActivity(); try { using (this.telemetryClient.StartOperation <RequestTelemetry>("OuterRequest")) { using (this.telemetryClient.StartOperation <DependencyTelemetry>("DependentCall")) { } } Assert.AreEqual(2, this.sendItems.Count); var requestTelemetry = (RequestTelemetry)this.sendItems[1]; var dependentTelemetry = (DependencyTelemetry)this.sendItems[0]; Assert.IsNull(requestTelemetry.Context.Operation.ParentId); Assert.AreEqual(requestTelemetry.Id, dependentTelemetry.Context.Operation.ParentId); Assert.AreEqual(requestTelemetry.Context.Operation.Id, dependentTelemetry.Context.Operation.Id); Assert.AreEqual(requestTelemetry.Context.Operation.Name, dependentTelemetry.Context.Operation.Name); } finally { ActivityFormatHelper.EnableW3CFormatInActivity(); } }
public void InitializePopulatesOperationContextFromActivityWhenW3CIsDisabled() { // Arrange ActivityFormatHelper.DisableW3CFormatInActivity(); try { Activity parent = new Activity("parent"); // Setting parentid like this forces Activity to use Hierarchical ID Format parent.SetParentId("parent"); parent.Start(); var telemetry = new DependencyTelemetry(); var initializer = new OperationCorrelationTelemetryInitializer(); // Act initializer.Initialize(telemetry); // Validate Assert.AreEqual("parent", telemetry.Context.Operation.Id); Assert.AreEqual(parent.Id, telemetry.Context.Operation.ParentId); parent.Stop(); } finally { ActivityFormatHelper.EnableW3CFormatInActivity(); } }
public void TestInitialize() { this.telemetryConfiguration = new TelemetryConfiguration(); this.sendItems = new List <ITelemetry>(); telemetryConfiguration.TelemetryChannel = new StubTelemetryChannel { OnSend = item => this.sendItems.Add(item) }; telemetryConfiguration.InstrumentationKey = Guid.NewGuid().ToString(); telemetryConfiguration.TelemetryInitializers.Add(new OperationCorrelationTelemetryInitializer()); this.telemetryClient = new TelemetryClient(telemetryConfiguration); CallContextHelpers.RestoreOperationContext(null); ActivityFormatHelper.EnableW3CFormatInActivity(); }
public void InitializeOnActivityWithTracestateW3COff() { ActivityFormatHelper.DisableW3CFormatInActivity(); Activity parent = new Activity("parent") { TraceStateString = "some=state" }; parent.Start(); var telemetry = new DependencyTelemetry(); (new OperationCorrelationTelemetryInitializer()).Initialize(telemetry); Assert.IsFalse(telemetry.Properties.ContainsKey("tracestate")); }
public void StartOperationCanOverrideOperationIdNonW3C() { ActivityFormatHelper.DisableW3CFormatInActivity(); try { using (this.telemetryClient.StartOperation <RequestTelemetry>("Request", "HOME")) { } Assert.AreEqual(1, this.sendItems.Count); var requestTelemetry = (RequestTelemetry)this.sendItems[0]; Assert.IsNull(requestTelemetry.Context.Operation.ParentId); Assert.AreEqual("HOME", requestTelemetry.Context.Operation.Id); } finally { ActivityFormatHelper.EnableW3CFormatInActivity(); } }
public void TestInit() { ActivityFormatHelper.EnableW3CFormatInActivity(); }
public void Initialize() { ActivityFormatHelper.EnableW3CFormatInActivity(); }