diff --git a/src/Squidex/Config/Orleans/EnvironmentWrapper.cs b/src/Squidex/Config/Orleans/EnvironmentWrapper.cs deleted file mode 100644 index 3e462ac92..000000000 --- a/src/Squidex/Config/Orleans/EnvironmentWrapper.cs +++ /dev/null @@ -1,47 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschraenkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using Microsoft.Extensions.FileProviders; -using Microsoft.Extensions.Hosting; -using IWebHostEnvironment = Microsoft.AspNetCore.Hosting.IHostingEnvironment; - -namespace Squidex.Config.Orleans -{ - public sealed class EnvironmentWrapper : IHostingEnvironment - { - private readonly IWebHostEnvironment nested; - - public string EnvironmentName - { - get => nested.EnvironmentName; - set => nested.EnvironmentName = value; - } - - public string ApplicationName - { - get => nested.ApplicationName; - set => nested.ApplicationName = value; - } - - public string ContentRootPath - { - get => nested.ContentRootPath; - set => nested.ContentRootPath = value; - } - - public IFileProvider ContentRootFileProvider - { - get => nested.ContentRootFileProvider; - set => nested.ContentRootFileProvider = value; - } - - public EnvironmentWrapper(IWebHostEnvironment nested) - { - this.nested = nested; - } - } -} diff --git a/src/Squidex/Config/Orleans/OrleansServices.cs b/src/Squidex/Config/Orleans/OrleansServices.cs index 7c0cf278f..aacb5fbdb 100644 --- a/src/Squidex/Config/Orleans/OrleansServices.cs +++ b/src/Squidex/Config/Orleans/OrleansServices.cs @@ -8,9 +8,11 @@ using System.Net; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; using Orleans; using Orleans.Configuration; using Orleans.Hosting; +using OrleansDashboard; using Squidex.Domain.Apps.Entities; using Squidex.Infrastructure; using Squidex.Infrastructure.Orleans; @@ -22,81 +24,83 @@ namespace Squidex.Config.Orleans { public static IServiceCollection AddOrleans(this IServiceCollection services, IConfiguration config, IWebHostEnvironment environment) { - services.Configure(options => + services.AddOrleans(config, environment, builder => { - options.Configure(); - }); - - services.Configure(options => - { - options.FastKillOnProcessExit = false; - }); + builder.ConfigureServices(siloServices => + { + siloServices.Configure(options => + { + options.Configure(); + }); - services.AddServicesForSelfHostedDashboard(null, options => - { - options.HideTrace = true; - }); + siloServices.Configure(options => + { + options.FastKillOnProcessExit = false; + }); - services.AddSingleton(); + siloServices.Configure(options => + { + options.HideTrace = true; + }); - var hostBuilder = new SiloServiceBuilder(config, environment); + siloServices.AddSingleton(); + }); - hostBuilder.UseDashboard(options => - { - options.HostSelf = false; - }); + builder.ConfigureApplicationParts(parts => + { + parts.AddApplicationPart(SquidexEntities.Assembly); + parts.AddApplicationPart(SquidexInfrastructure.Assembly); + }); - hostBuilder.ConfigureApplicationParts(builder => - { - builder.AddApplicationPart(SquidexEntities.Assembly); - builder.AddApplicationPart(SquidexInfrastructure.Assembly); - }); + builder.UseDashboard(options => + { + options.HostSelf = false; + }); - var gatewayPort = config.GetOptionalValue("orleans:gatewayPort", 40000); + var gatewayPort = config.GetOptionalValue("orleans:gatewayPort", 40000); - var siloPort = config.GetOptionalValue("orleans:siloPort", 11111); + var siloPort = config.GetOptionalValue("orleans:siloPort", 11111); - config.ConfigureByOption("orleans:clustering", new Alternatives - { - ["MongoDB"] = () => + config.ConfigureByOption("orleans:clustering", new Alternatives { - hostBuilder.ConfigureEndpoints(Dns.GetHostName(), siloPort, gatewayPort, listenOnAnyHostAddress: true); - - var mongoConfiguration = config.GetRequiredValue("store:mongoDb:configuration"); - var mongoDatabaseName = config.GetRequiredValue("store:mongoDb:database"); - - hostBuilder.UseMongoDBClustering(options => + ["MongoDB"] = () => { - options.ConnectionString = mongoConfiguration; - options.CollectionPrefix = "Orleans_"; - options.DatabaseName = mongoDatabaseName; - }); - }, - ["Development"] = () => - { - hostBuilder.UseLocalhostClustering(siloPort, gatewayPort, null, Constants.OrleansClusterId, Constants.OrleansClusterId); - hostBuilder.Configure(options => options.ExpectedClusterSize = 1); - } - }); + builder.ConfigureEndpoints(Dns.GetHostName(), siloPort, gatewayPort, listenOnAnyHostAddress: true); + + var mongoConfiguration = config.GetRequiredValue("store:mongoDb:configuration"); + var mongoDatabaseName = config.GetRequiredValue("store:mongoDb:database"); + + builder.UseMongoDBClustering(options => + { + options.ConnectionString = mongoConfiguration; + options.CollectionPrefix = "Orleans_"; + options.DatabaseName = mongoDatabaseName; + }); + }, + ["Development"] = () => + { + builder.UseLocalhostClustering(siloPort, gatewayPort, null, Constants.OrleansClusterId, Constants.OrleansClusterId); + builder.Configure(options => options.ExpectedClusterSize = 1); + } + }); - config.ConfigureByOption("store:type", new Alternatives - { - ["MongoDB"] = () => + config.ConfigureByOption("store:type", new Alternatives { - var mongoConfiguration = config.GetRequiredValue("store:mongoDb:configuration"); - var mongoDatabaseName = config.GetRequiredValue("store:mongoDb:database"); - - hostBuilder.UseMongoDBReminders(options => + ["MongoDB"] = () => { - options.ConnectionString = mongoConfiguration; - options.CollectionPrefix = "Orleans_"; - options.DatabaseName = mongoDatabaseName; - }); - } + var mongoConfiguration = config.GetRequiredValue("store:mongoDb:configuration"); + var mongoDatabaseName = config.GetRequiredValue("store:mongoDb:database"); + + builder.UseMongoDBReminders(options => + { + options.ConnectionString = mongoConfiguration; + options.CollectionPrefix = "Orleans_"; + options.DatabaseName = mongoDatabaseName; + }); + } + }); }); - hostBuilder.Build(services); - return services; } diff --git a/src/Squidex/Config/Orleans/SiloHost.cs b/src/Squidex/Config/Orleans/SiloHost.cs deleted file mode 100644 index 1817dfa12..000000000 --- a/src/Squidex/Config/Orleans/SiloHost.cs +++ /dev/null @@ -1,51 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschraenkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.Logging; -using Orleans.Hosting; -using Squidex.Config.Startup; -using Squidex.Infrastructure; -using Squidex.Infrastructure.Log; - -namespace Squidex.Config.Orleans -{ - public sealed class SiloHost : SafeHostedService - { - private readonly ISiloHost silo; - - public SiloHost(ISiloHost silo, ISemanticLog log, IApplicationLifetime lifetime) - : base(lifetime, log) - { - this.silo = silo; - } - - protected override async Task StartAsync(ISemanticLog log, CancellationToken ct) - { - var watch = ValueStopwatch.StartNew(); - try - { - await silo.StartAsync(ct); - } - finally - { - var elapsedMs = watch.Stop(); - - log.LogInformation(w => w - .WriteProperty("message", "Silo started") - .WriteProperty("elapsedMs", elapsedMs)); - } - } - - protected override async Task StopAsync(ISemanticLog log, CancellationToken ct) - { - await silo.StopAsync(); - } - } -} diff --git a/src/Squidex/Config/Orleans/SiloServiceBuilder.cs b/src/Squidex/Config/Orleans/SiloServiceBuilder.cs deleted file mode 100644 index 081c0ea6d..000000000 --- a/src/Squidex/Config/Orleans/SiloServiceBuilder.cs +++ /dev/null @@ -1,73 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschraenkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.Collections.Generic; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Orleans; -using Orleans.Hosting; -using Squidex.Infrastructure; -using HostingBuilderContext = Microsoft.Extensions.Hosting.HostBuilderContext; -using WebHostEnvironment = Microsoft.AspNetCore.Hosting.IHostingEnvironment; - -namespace Squidex.Config.Orleans -{ - public sealed class SiloServiceBuilder : ISiloBuilder - { - private readonly HostingBuilderContext context = new HostingBuilderContext(new Dictionary()); - private readonly List> configureSiloDelegates = new List>(); - private readonly List> configureServicesDelegates = new List>(); - - public IDictionary Properties - { - get { return context.Properties; } - } - - public SiloServiceBuilder(IConfiguration config, WebHostEnvironment environment) - { - context.Configuration = config; - context.HostingEnvironment = new EnvironmentWrapper(environment); - } - - public void Build(IServiceCollection serviceCollection) - { - foreach (var configurationDelegate in configureSiloDelegates) - { - configurationDelegate(context, this); - } - - serviceCollection.AddHostedService(); - - this.ConfigureDefaults(); - this.ConfigureApplicationParts(parts => parts.ConfigureDefaults()); - - foreach (var configurationDelegate in configureServicesDelegates) - { - configurationDelegate(context, serviceCollection); - } - } - - public ISiloBuilder ConfigureSilo(Action configureDelegate) - { - Guard.NotNull(configureDelegate, nameof(configureDelegate)); - - configureSiloDelegates.Add(configureDelegate); - - return this; - } - - public ISiloBuilder ConfigureServices(Action configureDelegate) - { - Guard.NotNull(configureDelegate, nameof(configureDelegate)); - - configureServicesDelegates.Add(configureDelegate); - - return this; - } - } -}