Read index names from appsettings

This commit is contained in:
Gürkan Güran 2023-01-06 13:05:03 +01:00
parent 5a7231f5a2
commit fcfd187b05
6 changed files with 14 additions and 20 deletions

View file

@ -29,7 +29,7 @@ public abstract class ElasticFeatureBase : FeatureBase
{
return new ConnectionSettings(new Uri(Options.Endpoint))
.ConfigureAuthentication(Options)
.ConfigureMapping();
.ConfigureMapping(Options);
}
protected void AddStore<TModel, TStore>() where TModel : class where TStore : class

View file

@ -21,7 +21,7 @@ public static class ConnectionSettingsExtensions
return settings;
}
public static ConnectionSettings ConfigureMapping(this ConnectionSettings settings)
public static ConnectionSettings ConfigureMapping(this ConnectionSettings settings, ElasticsearchOptions options)
{
var configs = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(s => s.GetTypes())
@ -30,7 +30,7 @@ public static class ConnectionSettingsExtensions
foreach (var config in configs)
{
var configInstance = (IElasticConfiguration)Activator.CreateInstance(config)!;
configInstance.Apply(settings);
configInstance.Apply(settings, options);
}
return settings;

View file

@ -1,3 +1,4 @@
using Elsa.Elasticsearch.Options;
using Elsa.Elasticsearch.Services;
using Elsa.Workflows.Management.Entities;
using Nest;
@ -8,9 +9,9 @@ public class WorkflowInstanceConfiguration : IElasticConfiguration
{
public const string IndexName = "workflow-instance";
public void Apply(ConnectionSettings connectionSettings)
public void Apply(ConnectionSettings connectionSettings, ElasticsearchOptions options)
{
connectionSettings.DefaultMappingFor<WorkflowInstance>(m =>
m.IndexName(IElasticConfiguration.ResolveIndexName<WorkflowInstance>(IndexName)));
m.IndexName(IElasticConfiguration.ResolveIndexName<WorkflowInstance>(options, IndexName)));
}
}

View file

@ -1,3 +1,4 @@
using Elsa.Elasticsearch.Options;
using Elsa.Elasticsearch.Services;
using Elsa.Workflows.Runtime.Entities;
using Nest;
@ -8,9 +9,9 @@ public class ExecutionLogConfiguration : IElasticConfiguration
{
private const string IndexName = "workflow-execution-log";
public void Apply(ConnectionSettings connectionSettings)
public void Apply(ConnectionSettings connectionSettings, ElasticsearchOptions options)
{
connectionSettings.DefaultMappingFor<WorkflowExecutionLogRecord>(m =>
m.IndexName(IElasticConfiguration.ResolveIndexName<WorkflowExecutionLogRecord>(IndexName)));
m.IndexName(IElasticConfiguration.ResolveIndexName<WorkflowExecutionLogRecord>(options, IndexName)));
}
}

View file

@ -1,18 +1,10 @@
using Elsa.Workflows.Management.Entities;
using Elsa.Workflows.Runtime.Entities;
namespace Elsa.Elasticsearch.Options;
public class ElasticsearchOptions
{
public const string Elasticsearch = "Elasticsearch";
public static readonly Dictionary<Type, string> Indices = new()
{
{typeof(WorkflowInstance),"workflow-instances"},
{typeof(WorkflowExecutionLogRecord),"execution-log-records"}
};
public Dictionary<string, string> Indices { get; set; }
public string Endpoint { get; set; }
public string Username { get; set; }
public string Password { get; set; }

View file

@ -5,11 +5,11 @@ namespace Elsa.Elasticsearch.Services;
public interface IElasticConfiguration
{
void Apply(ConnectionSettings connectionSettings);
void Apply(ConnectionSettings connectionSettings, ElasticsearchOptions options);
public static string ResolveIndexName<T>(string indexName)
public static string ResolveIndexName<T>(ElasticsearchOptions options, string indexName)
{
var indexNameFromConfig = ElasticsearchOptions.Indices[typeof(T)];
return string.IsNullOrWhiteSpace(indexName) ? indexNameFromConfig : indexName;
var indexNameFromConfig = options.Indices[typeof(T).Name];
return string.IsNullOrWhiteSpace(indexNameFromConfig) ? indexName : indexNameFromConfig;
}
}