in src/DotNetWorker.Core/FunctionsApplication.cs [68:109]
public async Task InvokeFunctionAsync(FunctionContext context)
{
Activity? activity = null;
if (Activity.Current is null)
{
// This will act as an internal activity that represents remote Host activity. This cannot be tracked as this is not associate to an ActivitySource.
activity = new Activity(nameof(InvokeFunctionAsync));
activity.Start();
if (ActivityContext.TryParse(context.TraceContext.TraceParent, context.TraceContext.TraceState, true, out ActivityContext activityContext))
{
activity.SetId(context.TraceContext.TraceParent);
activity.SetSpanId(activityContext.SpanId.ToString());
activity.SetTraceId(activityContext.TraceId.ToString());
activity.SetRootId(activityContext.TraceId.ToString());
activity.ActivityTraceFlags = activityContext.TraceFlags;
activity.TraceStateString = activityContext.TraceState;
}
}
var scope = new FunctionInvocationScope(context.FunctionDefinition.Name, context.InvocationId);
using var logScope = _logger.BeginScope(scope);
using Activity? invokeActivity = _functionActivitySourceFactory.StartInvoke(context);
try
{
await _functionExecutionDelegate(context);
}
catch (Exception ex)
{
invokeActivity?.SetStatus(ActivityStatusCode.Error, ex.Message);
Log.InvocationError(_logger, context.FunctionDefinition.Name, context.InvocationId, ex);
throw;
}
invokeActivity?.Stop();
activity?.Stop();
}