public static TraceContext CreateTraceContext(this Activity activity) { var context = new TraceContext() { Traceparent = activity.GetTraceparent(), Tracestate = activity.GetTracestate(), ParentSpanId = activity.GetParentSpanId() }; return(context); }
public static async Task ActivityFunction([QueueTrigger("work-item-queue-ai", Connection = "ConnectionString")] TraceContext traceContext, [Queue("control-queue-ai", Connection = "ConnectionString")] IAsyncCollector <TraceContext> contexts, ILogger log) { log.LogInformation($"W3CActivity Functions Started."); var requestActivity = new Activity("W3CActivity Spike: Activity Function Request"); requestActivity.SetParentAndStart(traceContext); var requestTelemetry = new RequestTelemetry { Name = "W3CActivity Spike: Activity Function Request" }; requestTelemetry.SetActivity(requestActivity); requestTelemetry.Start(); var dependencyActivity = new Activity("W3CActivity FUnction Dependency"); dependencyActivity.SetParentAndStart(requestActivity); var dependencyTelemetry = new DependencyTelemetry { Name = "W3CActivity Spike: Activity Function Dependency" }; dependencyTelemetry.SetActivity(dependencyActivity); dependencyTelemetry.Start(); var c = dependencyActivity.CreateTraceContext(); c.OrchestrationContexts = traceContext.OrchestrationContexts; c.Completed = true; await contexts.AddAsync(c); dependencyActivity.Stop(); dependencyTelemetry.Stop(); client.Track(dependencyTelemetry); requestActivity.Stop(); requestTelemetry.Stop(); client.Track(requestTelemetry); }
public static async Task Orchestrator([QueueTrigger("control-queue-ai", Connection = "ConnectionString")] TraceContext traceContext, [Queue("work-item-queue-ai", Connection = "ConnectionString")] IAsyncCollector <TraceContext> contexts, ILogger log) { log.LogInformation($"Orchestration Started."); Activity requestActivity = null; var isReplay = traceContext.OrchestrationContexts.Count != 0; if (!isReplay) { requestActivity = new Activity("W3CActivity Spike: Orchestration Request"); requestActivity.SetParentAndStart(traceContext); var requestTelemetry = new RequestTelemetry { Name = "W3CActivity Spike: Orchestration Request" }; requestTelemetry.SetActivity(requestActivity); requestTelemetry.Start(); requestActivity.Stop(); requestTelemetry.Stop(); client.Track(requestTelemetry); } TraceContext c = null; if (!isReplay) { c = requestActivity.CreateTraceContext(); c.OrchestrationContexts = traceContext.OrchestrationContexts; c.OrchestrationContexts.Push(requestActivity.CreateTraceContext()); } else { c = traceContext.OrchestrationContexts.Peek(); // if necessary. This program doesn't need it. } if (traceContext.Completed) { var dependencyActivity = new Activity("W3CActivity Spike: Orchestration Dependency"); dependencyActivity.SetParentAndStart(traceContext.OrchestrationContexts.Peek()); var dependencyTelemetry = new DependencyTelemetry { Name = "W3CActivity Spike: Orchestration Dependency" }; dependencyTelemetry.SetActivity(dependencyActivity); dependencyTelemetry.Start(); dependencyActivity.Stop(); dependencyTelemetry.Stop(); client.Track(dependencyTelemetry); } else { await contexts.AddAsync(c); // We don't need to emit telemetry for intermediate execution. } }