< Summary

Information
Class: Elsa.Workflows.ActivityInvoker
Assembly: Elsa.Workflows.Core
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Core/Services/ActivityInvoker.cs
Line coverage
100%
Covered lines: 26
Uncovered lines: 0
Coverable lines: 26
Total lines: 66
Line coverage: 100%
Branch coverage
83%
Covered branches: 5
Total branches: 6
Branch coverage: 83.3%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
InvokeAsync()83.33%66100%
InvokeAsync()100%11100%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Core/Services/ActivityInvoker.cs

#LineLine coverage
 1using Elsa.Workflows.Options;
 2using Elsa.Workflows.Telemetry;
 3using Microsoft.Extensions.Logging;
 4
 5namespace Elsa.Workflows;
 6
 7/// <inheritdoc />
 4968public class ActivityInvoker(
 4969    IActivityExecutionPipeline pipeline,
 49610    ILoggerStateGenerator<ActivityExecutionContext> loggerStateGenerator,
 49611    ILogger<ActivityInvoker> logger)
 12    : IActivityInvoker
 13{
 14
 15    /// <inheritdoc />
 16    public async Task<ActivityExecutionContext> InvokeAsync(WorkflowExecutionContext workflowExecutionContext, IActivity
 17    {
 18        // Setup an activity execution context, potentially reusing an existing one if requested.
 330019        var existingActivityExecutionContext = options?.ExistingActivityExecutionContext;
 20
 21        // Perform a lookup to make sure the activity execution context is part of the workflow execution context.
 330022        var activityExecutionContext = existingActivityExecutionContext != null
 4523            ? workflowExecutionContext.ActivityExecutionContexts.FirstOrDefault(x => x.Id == existingActivityExecutionCo
 330024            : null;
 25
 330026        if (activityExecutionContext == null)
 27        {
 28            // Create a new activity execution context.
 326529            activityExecutionContext = await workflowExecutionContext.CreateActivityExecutionContextAsync(activity, opti
 326530            activityExecutionContext.Taint();
 31
 32            // Add the activity context to the workflow context.
 326533            workflowExecutionContext.AddActivityExecutionContext(activityExecutionContext);
 34        }
 35
 36        // Execute the activity execution pipeline.
 330037        await InvokeAsync(activityExecutionContext);
 38
 330039        return activityExecutionContext;
 330040    }
 41
 42    /// <inheritdoc />
 43    public async Task InvokeAsync(ActivityExecutionContext activityExecutionContext)
 44    {
 330645        var telemetryScope = WorkflowInstrumentation.StartActivity(activityExecutionContext);
 330646        Exception? exception = null;
 47
 48        try
 49        {
 330650            var loggerState = loggerStateGenerator.GenerateLoggerState(activityExecutionContext);
 330651            using var loggingScope = logger.BeginScope(loggerState);
 52
 53            // Execute the activity execution pipeline.
 330654            await pipeline.ExecuteAsync(activityExecutionContext);
 330255        }
 456        catch (Exception e)
 57        {
 458            exception = e;
 459            throw;
 60        }
 61        finally
 62        {
 330663            WorkflowInstrumentation.StopActivity(telemetryScope, activityExecutionContext, exception);
 64        }
 330265    }
 66}