Esempio n. 1
0
        public void DeserializeScenario()
        {
            var json = "{ \"$id\":\"1\",\"$type\":\"DurableTask.Core.W3CTraceContext, DurableTask.Core\",\"Traceparent\":\"00-a422532de19d3e4f8f67af06f8f880c7-81354b086ec6fb41-02\",\"Tracestate\":null,\"ParentSpanId\":\"b69bc0f95af84240\",\"StartTime\":\"2019-05-03T23:43:27.6728211+00:00\",\"OrchestrationTraceContexts\":[{\"$id\":\"2\",\"$type\":\"DurableTask.Core.W3CTraceContext, DurableTask.Core\",\"Traceparent\":\"00-a422532de19d3e4f8f67af06f8f880c7-f86a8711d7226d42-02\",\"Tracestate\":null,\"ParentSpanId\":\"2ec2a64f22dbb143\",\"StartTime\":\"2019-05-03T23:43:12.7553182+00:00\",\"OrchestrationTraceContexts\":[{\"$ref\":\"2\"}]}]}";
            TraceContextBase context = TraceContextBase.Restore(json);

            Assert.AreEqual(DateTimeOffset.Parse("2019-05-03T23:43:27.6728211+00:00"), context.StartTime);
        }
Esempio n. 2
0
        static string?GetSerializableTraceContext(TaskMessage taskMessage)
        {
            TraceContextBase traceContext = CorrelationTraceContext.Current;

            if (traceContext != null)
            {
                if (CorrelationTraceContext.GenerateDependencyTracking)
                {
                    PropertyInfo nameProperty = taskMessage.Event.GetType().GetProperty("Name");
                    string       name         = (nameProperty == null) ? TraceConstants.DependencyDefault : (string)nameProperty.GetValue(taskMessage.Event);

                    var dependencyTraceContext = TraceContextFactory.Create($"{TraceConstants.Orchestrator} {name}");
                    dependencyTraceContext.TelemetryType = TelemetryType.Dependency;
                    dependencyTraceContext.SetParentAndStart(traceContext);
                    dependencyTraceContext.OrchestrationTraceContexts.Push(dependencyTraceContext);
                    return(dependencyTraceContext.SerializableTraceContext);
                }
                else
                {
                    return(traceContext.SerializableTraceContext);
                }
            }

            // TODO this might not happen, however, in case happen, introduce NullObjectTraceContext.
            return(null);
        }
Esempio n. 3
0
        public void SerializeAndDeserializeTraceContextWithMultipleOrchestrationTraceContexts()
        {
            TraceContextBase one = new Foo()
            {
                Comment = "one"
            };
            TraceContextBase two = new Foo()
            {
                Comment = "two"
            };
            TraceContextBase three = new Foo()
            {
                Comment = "three"
            };

            one.OrchestrationTraceContexts.Push(one);
            one.OrchestrationTraceContexts.Push(two);
            one.OrchestrationTraceContexts.Push(three);
            var json     = one.SerializableTraceContext;
            var restored = TraceContextBase.Restore(json);

            Assert.AreEqual("three", ((Foo)restored.OrchestrationTraceContexts.Pop()).Comment);
            Assert.AreEqual("two", ((Foo)restored.OrchestrationTraceContexts.Pop()).Comment);
            Assert.AreEqual("one", ((Foo)restored.OrchestrationTraceContexts.Pop()).Comment);
        }
Esempio n. 4
0
        public void SerializeAndDeserializeTraceContextWithParent()
        {
            TraceContextBase context = new Foo();

            context.StartAsNew();
            var expectedStartTime = context.StartTime;

            context.OrchestrationTraceContexts.Push(context); // Adding Orchestration Context it might include $type
            var json   = context.SerializableTraceContext;
            var result = TraceContextBase.Restore(json);

            Assert.AreEqual(expectedStartTime, result.StartTime);
        }
Esempio n. 5
0
        /// <summary>
        /// Create RequestTelemetry from the TraceContext.
        /// </summary>
        /// <param name="context">TraceContext.</param>
        /// <returns>RequestTelemetry.</returns>
        public static RequestTelemetry CreateRequestTelemetry(this TraceContextBase context)
        {
            var telemetry = new RequestTelemetry {
                Name = context.OperationName
            };

            telemetry.Duration                   = context.Duration;
            telemetry.Timestamp                  = context.StartTime;
            telemetry.Id                         = context.TelemetryId;
            telemetry.Context.Operation.Id       = context.TelemetryContextOperationId;
            telemetry.Context.Operation.ParentId = context.TelemetryContextOperationParentId;

            return(telemetry);
        }
Esempio n. 6
0
        public void SerializeTraceContextBase()
        {
            Foo context = new Foo();

            context.StartAsNew();
            var expectedStartTime = context.StartTime;

            context.Comment = "hello";
            var json   = context.SerializableTraceContext;
            var result = TraceContextBase.Restore(json);

            Assert.AreEqual(expectedStartTime, result.StartTime);
            Assert.AreEqual(context.Comment, ((Foo)result).Comment);
        }
Esempio n. 7
0
        /// <summary>
        /// Create DependencyTelemetry from the Activity.
        /// </summary>
        /// <param name="context">TraceContext.</param>
        /// <returns>DependencyTelemetry.</returns>
        public static DependencyTelemetry CreateDependencyTelemetry(this TraceContextBase context)
        {
            var telemetry = new DependencyTelemetry {
                Name = context.OperationName
            };

            telemetry.Start();
            telemetry.Duration                   = context.Duration;
            telemetry.Timestamp                  = context.StartTime; // TimeStamp is the time of ending the Activity.
            telemetry.Id                         = context.TelemetryId;
            telemetry.Context.Operation.Id       = context.TelemetryContextOperationId;
            telemetry.Context.Operation.ParentId = context.TelemetryContextOperationParentId;

            return(telemetry);
        }
Esempio n. 8
0
        internal static void UpdateTelemetry(ITelemetry telemetry, TraceContextBase contextBase)
        {
            switch (contextBase)
            {
            case NullObjectTraceContext nullObjectContext:
                return;

            case W3CTraceContext w3cContext:
                UpdateTelemetryW3C(telemetry, w3cContext);
                break;

            case HttpCorrelationProtocolTraceContext httpCorrelationProtocolTraceContext:
                UpdateTelemetryHttpCorrelationProtocol(telemetry, httpCorrelationProtocolTraceContext);
                break;

            default:
                return;
            }
        }
Esempio n. 9
0
        /// <summary>
        /// Create RequestTelemetry from the TraceContext.
        /// </summary>
        /// <param name="context">TraceContext.</param>
        /// <param name="siteName">Site name.</param>
        /// <returns>RequestTelemetry.</returns>
        public static RequestTelemetry CreateRequestTelemetry(this TraceContextBase context, string siteName)
        {
            var telemetry = new RequestTelemetry {
                Name = context.OperationName
            };

            telemetry.Duration             = context.Duration;
            telemetry.Timestamp            = context.StartTime;
            telemetry.Id                   = context.TelemetryId;
            telemetry.Context.Operation.Id = context.TelemetryContextOperationId;

            // Operation Name is set as "DtActivity FunctionName" and we only want the "FunctionName" as the operationName
            string[] operationNameArray = context.OperationName.Split(' ');
            bool     isActivityRequest  = operationNameArray.Length == 2 && string.Equals(operationNameArray[0], TraceConstants.Activity);

            telemetry.Context.Operation.Name = isActivityRequest ? operationNameArray[1] : context.OperationName;

            telemetry.Context.Operation.ParentId = context.TelemetryContextOperationParentId;

            telemetry.Context.Cloud.RoleName = siteName;

            return(telemetry);
        }
Esempio n. 10
0
        public void DeserializeNullScenario()
        {
            TraceContextBase context = TraceContextBase.Restore(null);

            Assert.AreEqual(typeof(NullObjectTraceContext), context.GetType());
        }
Esempio n. 11
0
 public override void SetParentAndStart(TraceContextBase parentTraceContext)
 {
     throw new NotImplementedException();
 }