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); }
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); }
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); }
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); }
/// <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); }
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); }
/// <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); }
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; } }
/// <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); }
public void DeserializeNullScenario() { TraceContextBase context = TraceContextBase.Restore(null); Assert.AreEqual(typeof(NullObjectTraceContext), context.GetType()); }
public override void SetParentAndStart(TraceContextBase parentTraceContext) { throw new NotImplementedException(); }