diff --git a/src/bundles/Elsa.Server.Web/Program.cs b/src/bundles/Elsa.Server.Web/Program.cs index e7db8f0d3..ef688eeb9 100644 --- a/src/bundles/Elsa.Server.Web/Program.cs +++ b/src/bundles/Elsa.Server.Web/Program.cs @@ -18,6 +18,7 @@ using Elsa.MongoDb.Modules.Identity; using Elsa.MongoDb.Modules.Management; using Elsa.MongoDb.Modules.Runtime; using Elsa.Server.Web; +using Elsa.Workflows.Enums; using Elsa.Workflows.Management.Compression; using Elsa.Workflows.Management.Stores; using Elsa.Workflows.Runtime.Stores; @@ -154,6 +155,8 @@ services if (useCachingStores) management.UseCachingStores(); + + management.SetDefaultLogPersistenceMode(LogPersistenceMode.Default); }) .UseWorkflowRuntime(runtime => { diff --git a/src/modules/Elsa.Workflows.Runtime/Services/DefaultActivityExecutionMapper.cs b/src/modules/Elsa.Workflows.Runtime/Services/DefaultActivityExecutionMapper.cs index bf012ab59..b81f20368 100644 --- a/src/modules/Elsa.Workflows.Runtime/Services/DefaultActivityExecutionMapper.cs +++ b/src/modules/Elsa.Workflows.Runtime/Services/DefaultActivityExecutionMapper.cs @@ -11,39 +11,27 @@ using Microsoft.Extensions.Options; namespace Elsa.Workflows.Runtime.Services; /// -public class DefaultActivityExecutionMapper : IActivityExecutionMapper -{ - private LogPersistenceMode _serverLogPersistenceMode; - private const string LogPersistenceModeKey = "logPersistenceMode"; - - public DefaultActivityExecutionMapper(IOptions options) - { - _serverLogPersistenceMode = options.Value.LogPersistenceMode; - } - +public class DefaultActivityExecutionMapper(IOptions options) : IActivityExecutionMapper +{ + private const string LogPersistenceModeKey = "logPersistenceMode"; + /// public ActivityExecutionRecord Map(ActivityExecutionContext source) - { - /* - * { - * "logPersistenceMode": { - * "default": "default", - * "inputs": { k : v }, - * "outputs": { k: v } - * } - * } - */ - - var workflowPersistenceProperty = - GetDefaultPersistenceMode(source.WorkflowExecutionContext.Workflow.CustomProperties, () => _serverLogPersistenceMode); - - - var activityPersistenceProperties = source.Activity.CustomProperties - .GetValueOrDefault>(LogPersistenceModeKey, () => new Dictionary()); - var activityPersistencePropertyDefault = - GetDefaultPersistenceMode(source.Activity.CustomProperties, () => workflowPersistenceProperty); - - + { + /* + * { + * "logPersistenceMode": { + * "default": "default", + * "inputs": { k : v }, + * "outputs": { k: v } + * } + * } + */ + + var workflowPersistenceProperty = GetDefaultPersistenceMode(source.WorkflowExecutionContext.Workflow.CustomProperties, () => options.Value.LogPersistenceMode); + var activityPersistenceProperties = source.Activity.CustomProperties.GetValueOrDefault>(LogPersistenceModeKey, () => new Dictionary()); + var activityPersistencePropertyDefault = GetDefaultPersistenceMode(source.Activity.CustomProperties, () => workflowPersistenceProperty); + // Get any outcomes that were added to the activity execution context. var outcomes = source.JournalData.TryGetValue("Outcomes", out var resultValue) ? resultValue as string[] : default; var payload = new Dictionary(); @@ -72,10 +60,10 @@ public class DefaultActivityExecutionMapper : IActivityExecutionMapper return default; }); - - outputs = StorePropertyUsingPersistanceMode(outputs, activityPersistenceProperties!.GetValueOrDefault("outputs", () => new Dictionary())!, activityPersistencePropertyDefault); - var activityState = StorePropertyUsingPersistanceMode(source.ActivityState, activityPersistenceProperties!.GetValueOrDefault("inputs", () => new Dictionary())!, activityPersistencePropertyDefault ); - + + outputs = StorePropertyUsingPersistenceMode(outputs, activityPersistenceProperties!.GetValueOrDefault("outputs", () => new Dictionary())!, activityPersistencePropertyDefault); + var activityState = StorePropertyUsingPersistenceMode(source.ActivityState, activityPersistenceProperties!.GetValueOrDefault("inputs", () => new Dictionary())!, activityPersistencePropertyDefault); + return new ActivityExecutionRecord { Id = source.Id, @@ -95,39 +83,35 @@ public class DefaultActivityExecutionMapper : IActivityExecutionMapper Status = GetAggregateStatus(source), CompletedAt = source.CompletedAt }; - } - - private static LogPersistenceMode GetDefaultPersistenceMode(IDictionary customProperties,Func defaultFactory) - { - var properties = customProperties - .GetValueOrDefault>(LogPersistenceModeKey, () => new Dictionary()); - var persistencePropertyDefault = properties! - .GetValueOrDefault("default", defaultFactory); - - if(persistencePropertyDefault == LogPersistenceMode.Default) - return defaultFactory(); - return persistencePropertyDefault; - } - - private static Dictionary StorePropertyUsingPersistanceMode(IDictionary inputs - , IDictionary persistenceModeConfiguration - , LogPersistenceMode defaultLogPersistenceMode = LogPersistenceMode.Exclude) - { - var result = new Dictionary(); - - foreach (var input in inputs) - { - var persistence = persistenceModeConfiguration.GetValueOrDefault(input.Key.Camelize(), () => defaultLogPersistenceMode); - if (persistence.Equals(LogPersistenceMode.Include) - || (persistence.Equals(LogPersistenceMode.Default) && defaultLogPersistenceMode == LogPersistenceMode.Include) - ) - result.Add(input.Key, input.Value); - - } - - return result; - } - + } + + private static LogPersistenceMode GetDefaultPersistenceMode(IDictionary customProperties, Func defaultFactory) + { + var properties = customProperties.GetValueOrDefault>(LogPersistenceModeKey, () => new Dictionary()); + var persistencePropertyDefault = properties!.GetValueOrDefault("default", defaultFactory); + + if (persistencePropertyDefault == LogPersistenceMode.Default) + return defaultFactory(); + return persistencePropertyDefault; + } + + private static Dictionary StorePropertyUsingPersistenceMode(IDictionary inputs, + IDictionary persistenceModeConfiguration, + LogPersistenceMode defaultLogPersistenceMode) + { + var result = new Dictionary(); + + foreach (var input in inputs) + { + var persistence = persistenceModeConfiguration.GetValueOrDefault(input.Key.Camelize(), () => defaultLogPersistenceMode); + if (persistence.Equals(LogPersistenceMode.Include) + || (persistence.Equals(LogPersistenceMode.Default) && defaultLogPersistenceMode is LogPersistenceMode.Include or LogPersistenceMode.Default)) + result.Add(input.Key, input.Value); + } + + return result; + } + private ActivityStatus GetAggregateStatus(ActivityExecutionContext context) { // If any child activity is faulted, the aggregate status is faulted.