Exemple #1
0
        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();
            }
        }
Exemple #2
0
        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();
            }
        }
Exemple #3
0
        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();
            }
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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();
        }
Exemple #6
0
        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();
            }
        }
Exemple #7
0
        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();
            }
        }
Exemple #8
0
 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();
 }
Exemple #9
0
        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"));
        }
Exemple #10
0
        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();
            }
        }
Exemple #11
0
 public void TestInit()
 {
     ActivityFormatHelper.EnableW3CFormatInActivity();
 }
Exemple #12
0
 public void Initialize()
 {
     ActivityFormatHelper.EnableW3CFormatInActivity();
 }