diff --git a/src/NScenario/NScenario.csproj b/src/NScenario/NScenario.csproj index e57dff1..fb19566 100644 --- a/src/NScenario/NScenario.csproj +++ b/src/NScenario/NScenario.csproj @@ -21,6 +21,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/src/NScenario/StepExecutors/InstrumentationScenarioStepExecutor.cs b/src/NScenario/StepExecutors/InstrumentationScenarioStepExecutor.cs new file mode 100644 index 0000000..a0886f3 --- /dev/null +++ b/src/NScenario/StepExecutors/InstrumentationScenarioStepExecutor.cs @@ -0,0 +1,33 @@ +using System; +using System.Diagnostics; +using System.Threading.Tasks; + +namespace NScenario.StepExecutors; + +public static class NScenarioInstrumentation +{ + public static ActivitySource DiagnosticSource = new ActivitySource("NScenario"); +} + +public class InstrumentationScenarioStepExecutor : IScenarioStepExecutor +{ + private readonly IScenarioStepExecutor _scenarioStepExecutorImplementation; + + + public InstrumentationScenarioStepExecutor(IScenarioStepExecutor scenarioStepExecutorImplementation) + { + _scenarioStepExecutorImplementation = scenarioStepExecutorImplementation; + } + + public async Task Step(string scenarioName, string stepDescription, Func action, StepContext stepContext) + { + using var activity = NScenarioInstrumentation.DiagnosticSource.StartActivity(name: stepDescription); + await _scenarioStepExecutorImplementation.Step(scenarioName, stepDescription, action, stepContext); + } + + public async Task Step(string scenarioName, string stepDescription, Action action, StepContext stepContext) + { + using var activity = NScenarioInstrumentation.DiagnosticSource.StartActivity(name: stepDescription); + await _scenarioStepExecutorImplementation.Step(scenarioName, stepDescription, action, stepContext); + } +} \ No newline at end of file diff --git a/src/NScenario/TestScenarioFactory.cs b/src/NScenario/TestScenarioFactory.cs index b52db90..9b3a9af 100644 --- a/src/NScenario/TestScenarioFactory.cs +++ b/src/NScenario/TestScenarioFactory.cs @@ -88,6 +88,7 @@ private static IScenarioStepExecutor BuildScenarioStepExecutor(IScenarioOutputWr stepExecutorBuilder.WrapWith(u => new IndentionScenarioStepExecutor(u)); stepExecutorBuilder.WrapWith(u => new PrefixedScenarioStepExecutor(u, scenarioPrefix, stepPrefix)); stepExecutorBuilder.WrapWith(u => new OrderedScenarioStepExecutor(u)); + stepExecutorBuilder.WrapWith(u => new InstrumentationScenarioStepExecutor (u)); var stepExecutor = stepExecutorBuilder.Build(); return stepExecutor; }