Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Elastic updates #3623

Merged
merged 11 commits into from
Jan 13, 2023
Prev Previous commit
Next Next commit
Incremental work
  • Loading branch information
sfmskywalker committed Jan 12, 2023
commit a851b0e37d0bd826cf00ea184a4c0e67a97c7a39
7 changes: 1 addition & 6 deletions src/bundles/Elsa.WorkflowServer.Web/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,18 +29,13 @@
identity.TokenOptions = identityTokenOptions;
})
.UseDefaultAuthentication()
.UseWorkflowManagement(management =>
{
management.UseDefaultManagement(m => m.UseEntityFrameworkCore(ef => ef.UseSqlite(sqliteConnectionString)));
management.UseWorkflowInstances(w => w.UseEntityFrameworkCore(ef => ef.UseSqlite(sqliteConnectionString)));
})
.UseWorkflowManagement(management => management.UseEntityFrameworkCore(m => m.UseSqlite(sqliteConnectionString)))
.UseWorkflowRuntime(runtime =>
{
runtime.UseProtoActor(proto =>
{
proto.PersistenceProvider = _ => new SqliteProvider(new SqliteConnectionStringBuilder(sqliteConnectionString));
});
runtime.UseDefaultRuntime(df => df.UseEntityFrameworkCore(ef => ef.UseSqlite(sqliteConnectionString)));
runtime.UseExecutionLogRecords(e => e.UseEntityFrameworkCore(ef => ef.UseSqlite(sqliteConnectionString)));
runtime.UseAsyncWorkflowStateExporter();
runtime.UseMassTransitDispatcher();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
using Elsa.Elasticsearch.Services;
using Elsa.Features.Abstractions;
using Elsa.Features.Services;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;

Expand Down Expand Up @@ -53,8 +54,10 @@ public override void Apply()
private static ElasticsearchClientSettings GetSettings(IServiceProvider serviceProvider)
{
var options = serviceProvider.GetRequiredService<IOptions<ElasticsearchOptions>>().Value;
var configuration = serviceProvider.GetRequiredService<IConfiguration>();
var configs = serviceProvider.GetServices<IElasticConfiguration>();
var settings = new ElasticsearchClientSettings(options.Endpoint).ConfigureAuthentication(options);
var url = configuration.GetConnectionString(options.Endpoint) ?? options.Endpoint;
var settings = new ElasticsearchClientSettings(new Uri(url)).ConfigureAuthentication(options);

foreach (var config in configs)
config.ConfigureClientSettings(settings);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
namespace Elsa.Elasticsearch.Modules.Management;

/// <summary>
/// Configures the <see cref="WorkflowInstanceFeature"/> feature with Elasticsearch.
/// Configures the <see cref="WorkflowInstancesFeature"/> feature with Elasticsearch.
/// </summary>
[DependsOn(typeof(WorkflowManagementFeature))]
[DependsOn(typeof(ElasticsearchFeature))]
Expand All @@ -23,7 +23,7 @@ public ElasticWorkflowInstanceFeature(IModule module) : base(module)
/// <inheritdoc />
public override void Configure()
{
Module.Configure<WorkflowInstanceFeature>(feature =>
Module.Configure<WorkflowInstancesFeature>(feature =>
{
feature.WorkflowInstanceStore = sp => sp.GetRequiredService<ElasticWorkflowInstanceStore>();
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@
namespace Elsa.Elasticsearch.Modules.Management;

/// <summary>
/// Extends the <see cref="WorkflowInstanceFeature"/> feature.
/// Extends the <see cref="WorkflowInstancesFeature"/> feature.
/// </summary>
[PublicAPI]
public static class Extensions
{
/// <summary>
/// Configures the <see cref="WorkflowInstanceFeature"/> to use the <see cref="ElasticWorkflowInstanceFeature"/>.
/// Configures the <see cref="WorkflowInstancesFeature"/> to use the <see cref="ElasticWorkflowInstanceFeature"/>.
/// </summary>
public static WorkflowInstanceFeature UseElasticsearch(this WorkflowInstanceFeature feature, Action<ElasticWorkflowInstanceFeature>? configure = default)
public static WorkflowInstancesFeature UseElasticsearch(this WorkflowInstancesFeature feature, Action<ElasticWorkflowInstanceFeature>? configure = default)
{
feature.Module.Configure(configure);
return feature;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
using Humanizer;
using JetBrains.Annotations;

namespace Elsa.Elasticsearch.Options;

/// <summary>
/// Contains Elasticsearch settings.
/// </summary>
[PublicAPI]
public class ElasticsearchOptions
{
/// <summary>
/// The URL of the Elasticsearch server.
/// The URL of the Elasticsearch server or the name of a connection string that in turn stores the URL.
/// </summary>
public Uri Endpoint { get; set; } = default!;
public string Endpoint { get; set; } = default!;

/// <summary>
/// The username to use when connecting with the Elasticsearch server.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
using Elsa.EntityFrameworkCore.Modules.Management;
using Elsa.EntityFrameworkCore.Modules.Runtime;
using JetBrains.Annotations;

// ReSharper disable once CheckNamespace
namespace Elsa.EntityFrameworkCore.Extensions;

/// <summary>
/// Extends EF Core features.
/// </summary>
[PublicAPI]
public static partial class Extensions
{
public static EFCoreDefaultManagementPersistenceFeature UsePostgreSql(this EFCoreDefaultManagementPersistenceFeature feature, string connectionString)
public static EFCoreWorkflowDefinitionPersistenceFeature UsePostgreSql(this EFCoreWorkflowDefinitionPersistenceFeature feature, string connectionString)
{
feature.DbContextOptionsBuilder = (_, db) => db.UseElsaPostgreSql(connectionString);
return feature;
Expand All @@ -17,4 +22,10 @@ public static EFCoreWorkflowInstancePersistenceFeature UsePostgreSql(this EFCore
feature.DbContextOptionsBuilder = (_, db) => db.UseElsaPostgreSql(connectionString);
return feature;
}

public static EFCoreWorkflowManagementPersistenceFeature UsePostgreSql(this EFCoreWorkflowManagementPersistenceFeature feature, string connectionString)
{
feature.DbContextOptionsBuilder = (_, db) => db.UseElsaPostgreSql(connectionString);
return feature;
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,25 @@
using Elsa.EntityFrameworkCore.Modules.Management;
using JetBrains.Annotations;

// ReSharper disable once CheckNamespace
namespace Elsa.EntityFrameworkCore.Extensions;

[PublicAPI]
public static partial class Extensions
{
public static EFCoreDefaultManagementPersistenceFeature UseSqlServer(this EFCoreDefaultManagementPersistenceFeature feature, string connectionString)
public static EFCoreWorkflowDefinitionPersistenceFeature UseSqlServer(this EFCoreWorkflowDefinitionPersistenceFeature feature, string connectionString)
{
feature.DbContextOptionsBuilder = (_, db) => db.UseElsaSqlServer(connectionString);
return feature;
}

public static EFCoreWorkflowInstancePersistenceFeature UseSqlServer(this EFCoreWorkflowInstancePersistenceFeature feature, string connectionString)
{
feature.DbContextOptionsBuilder = (_, db) => db.UseElsaSqlServer(connectionString);
return feature;
}

public static EFCoreWorkflowManagementPersistenceFeature UseSqlServer(this EFCoreWorkflowManagementPersistenceFeature feature, string connectionString)
{
feature.DbContextOptionsBuilder = (_, db) => db.UseElsaSqlServer(connectionString);
return feature;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
using Elsa.EntityFrameworkCore.Modules.Management;
using Elsa.EntityFrameworkCore.Sqlite;
using JetBrains.Annotations;

// ReSharper disable once CheckNamespace
namespace Elsa.EntityFrameworkCore.Extensions;

[PublicAPI]
public static partial class Extensions
{
public static EFCoreDefaultManagementPersistenceFeature UseSqlite(this EFCoreDefaultManagementPersistenceFeature feature, string connectionString = Constants.DefaultConnectionString)
public static EFCoreWorkflowDefinitionPersistenceFeature UseSqlite(this EFCoreWorkflowDefinitionPersistenceFeature feature, string connectionString = Constants.DefaultConnectionString)
{
feature.DbContextOptionsBuilder = (_, db) => db.UseElsaSqlite(connectionString);
return feature;
Expand All @@ -17,4 +19,10 @@ public static EFCoreWorkflowInstancePersistenceFeature UseSqlite(this EFCoreWork
feature.DbContextOptionsBuilder = (_, db) => db.UseElsaSqlite(connectionString);
return feature;
}

public static EFCoreWorkflowManagementPersistenceFeature UseSqlite(this EFCoreWorkflowManagementPersistenceFeature feature, string connectionString = Constants.DefaultConnectionString)
{
feature.DbContextOptionsBuilder = (_, db) => db.UseElsaSqlite(connectionString);
return feature;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
using Elsa.EntityFrameworkCore.Common;
using Elsa.Features.Attributes;
using Elsa.Features.Services;
using Elsa.Workflows.Management.Entities;
using Elsa.Workflows.Management.Features;
using JetBrains.Annotations;
using Microsoft.Extensions.DependencyInjection;

namespace Elsa.EntityFrameworkCore.Modules.Management;

/// <summary>
/// Configures the <see cref="WorkflowInstancesFeature"/> and <see cref="WorkflowDefinitionsFeature"/> features with an Entity Framework Core persistence provider.
/// </summary>
[DependsOn(typeof(WorkflowManagementFeature))]
[PublicAPI]
public class EFCoreWorkflowManagementPersistenceFeature : PersistenceFeatureBase<ManagementElsaDbContext>
{
/// <inheritdoc />
public EFCoreWorkflowManagementPersistenceFeature(IModule module) : base(module)
{
}

/// <inheritdoc />
public override void Configure()
{
Module.Configure<WorkflowInstancesFeature>(feature => feature.WorkflowInstanceStore = sp => sp.GetRequiredService<EFCoreWorkflowInstanceStore>());
Module.Configure<WorkflowDefinitionsFeature>(feature => feature.WorkflowDefinitionStore = sp => sp.GetRequiredService<EFCoreWorkflowDefinitionStore>());
}

/// <inheritdoc />
public override void Apply()
{
base.Apply();

AddStore<WorkflowInstance, EFCoreWorkflowInstanceStore>();
AddStore<WorkflowInstance, EFCoreWorkflowInstanceStore>();
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Elsa.Workflows.Management.Features;
using Elsa.Extensions;
using Elsa.Workflows.Management.Features;

namespace Elsa.EntityFrameworkCore.Modules.Management;

Expand All @@ -10,8 +11,7 @@ public static class WorkflowManagementFeatureExtensions
/// <summary>
/// Sets up the EF Core persistence provider.
/// </summary>
public static DefaultManagementFeature UseEntityFrameworkCore(this DefaultManagementFeature feature,
Action<EFCoreDefaultManagementPersistenceFeature>? configure = default)
public static WorkflowDefinitionsFeature UseEntityFrameworkCore(this WorkflowDefinitionsFeature feature, Action<EFCoreWorkflowDefinitionPersistenceFeature>? configure = default)
{
feature.Module.Configure(configure);
return feature;
Expand All @@ -20,7 +20,16 @@ public static class WorkflowManagementFeatureExtensions
/// <summary>
/// Sets up the EF Core persistence provider.
/// </summary>
public static WorkflowInstanceFeature UseEntityFrameworkCore(this WorkflowInstanceFeature feature, Action<EFCoreWorkflowInstancePersistenceFeature>? configure = default)
public static WorkflowInstancesFeature UseEntityFrameworkCore(this WorkflowInstancesFeature feature, Action<EFCoreWorkflowInstancePersistenceFeature>? configure = default)
{
feature.Module.Configure(configure);
return feature;
}

/// <summary>
/// Sets up the EF Core persistence provider.
/// </summary>
public static WorkflowManagementFeature UseEntityFrameworkCore(this WorkflowManagementFeature feature, Action<EFCoreWorkflowManagementPersistenceFeature>? configure = default)
{
feature.Module.Configure(configure);
return feature;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,27 @@

namespace Elsa.EntityFrameworkCore.Modules.Management;

/// <summary>
/// Configures the <see cref="WorkflowDefinitionsFeature"/> with EF Core.
/// </summary>
[DependsOn(typeof(WorkflowManagementFeature))]
public class EFCoreManagementPersistenceFeature : PersistenceFeatureBase<ManagementElsaDbContext>
public class EFCoreWorkflowDefinitionPersistenceFeature : PersistenceFeatureBase<ManagementElsaDbContext>
{
public EFCoreManagementPersistenceFeature(IModule module) : base(module)
/// <inheritdoc />
public EFCoreWorkflowDefinitionPersistenceFeature(IModule module) : base(module)
{
}

/// <inheritdoc />
public override void Configure()
{
Module.Configure<WorkflowManagementFeature>(feature =>
Module.Configure<WorkflowDefinitionsFeature>(feature =>
{
feature.WorkflowDefinitionStore = sp => sp.GetRequiredService<EFCoreWorkflowDefinitionStore>();
});
}

/// <inheritdoc />
public override void Apply()
{
base.Apply();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
namespace Elsa.EntityFrameworkCore.Modules.Management;

/// <summary>
/// Configures the <see cref="WorkflowInstanceFeature"/> feature with an Entity Framework Core persistence provider.
/// Configures the <see cref="WorkflowInstancesFeature"/> feature with an Entity Framework Core persistence provider.
/// </summary>
[DependsOn(typeof(WorkflowManagementFeature))]
public class EFCoreWorkflowInstancePersistenceFeature : PersistenceFeatureBase<ManagementElsaDbContext>
Expand All @@ -21,7 +21,7 @@ public EFCoreWorkflowInstancePersistenceFeature(IModule module) : base(module)
/// <inheritdoc />
public override void Configure()
{
Module.Configure<WorkflowInstanceFeature>(feature =>
Module.Configure<WorkflowInstancesFeature>(feature =>
{
feature.WorkflowInstanceStore = sp => sp.GetRequiredService<EFCoreWorkflowInstanceStore>();
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public static IModule UseWorkflowManagement(this IModule module, Action<Workflow
/// <summary>
/// Adds the default workflow management feature to the specified module.
/// </summary>
public static WorkflowManagementFeature UseDefaultManagement(this WorkflowManagementFeature feature, Action<DefaultManagementFeature>? configure = default)
public static WorkflowManagementFeature UseWorkflowDefinitions(this WorkflowManagementFeature feature, Action<WorkflowDefinitionsFeature>? configure = default)
{
feature.Module.Configure(configure);
return feature;
Expand All @@ -36,7 +36,7 @@ public static WorkflowManagementFeature UseDefaultManagement(this WorkflowManage
/// <summary>
/// Adds the workflow instance feature to workflow management module.
/// </summary>
public static WorkflowManagementFeature UseWorkflowInstances(this WorkflowManagementFeature feature, Action<WorkflowInstanceFeature>? configure = default)
public static WorkflowManagementFeature UseWorkflowInstances(this WorkflowManagementFeature feature, Action<WorkflowInstancesFeature>? configure = default)
{
feature.Module.Configure(configure);
return feature;
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
using Elsa.Features.Abstractions;
using Elsa.Features.Services;
using Elsa.Workflows.Management.Implementations;
using Elsa.Workflows.Management.Services;
using Microsoft.Extensions.DependencyInjection;

namespace Elsa.Workflows.Management.Features;

/// <summary>
/// Configures workflow definition storage.
/// </summary>
public class WorkflowDefinitionsFeature : FeatureBase
{
/// <inheritdoc />
public WorkflowDefinitionsFeature(IModule module) : base(module)
{
}

/// <summary>
/// The factory to create new instances of <see cref="IWorkflowDefinitionStore"/>.
/// </summary>
public Func<IServiceProvider, IWorkflowDefinitionStore> WorkflowDefinitionStore { get; set; } = sp => sp.GetRequiredService<MemoryWorkflowDefinitionStore>();

/// <inheritdoc />
public override void Apply()
{
Services.AddSingleton(WorkflowDefinitionStore);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ namespace Elsa.Workflows.Management.Features;
/// <summary>
/// Enables storage of workflow instances.
/// </summary>
public class WorkflowInstanceFeature : FeatureBase
public class WorkflowInstancesFeature : FeatureBase
{
/// <inheritdoc />
public WorkflowInstanceFeature(IModule module) : base(module)
public WorkflowInstancesFeature(IModule module) : base(module)
{
}

Expand Down
Loading