diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 1a06bce74..ed087417c 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,5 +1,11 @@ version: 2 updates: +- package-ecosystem: nuget + directory: "/services/sharedKernel/src/FilterLists.SharedKernel.Logging" + schedule: + interval: daily + time: "11:00" + open-pull-requests-limit: 99 - package-ecosystem: docker directory: "/services/archival/src/FilterLists.Archival.Api" schedule: diff --git a/services/FilterLists.sln b/services/FilterLists.sln index 1d570313e..268043db3 100644 --- a/services/FilterLists.sln +++ b/services/FilterLists.sln @@ -54,9 +54,13 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Archival", "Archival", "{5E EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FilterLists.Archival.Api", "archival\src\FilterLists.Archival.Api\FilterLists.Archival.Api.csproj", "{F625C241-0501-4AEB-8B82-609C93EE6B7D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FilterLists.Archival.Application", "archival\src\FilterLists.Archival.Application\FilterLists.Archival.Application.csproj", "{11669839-E666-477B-A1B6-276041AD3768}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FilterLists.Archival.Application", "archival\src\FilterLists.Archival.Application\FilterLists.Archival.Application.csproj", "{11669839-E666-477B-A1B6-276041AD3768}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FilterLists.Archival.Infrastructure", "archival\src\FilterLists.Archival.Infrastructure\FilterLists.Archival.Infrastructure.csproj", "{A0B77015-E8C4-41D3-B63D-BF818026298C}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FilterLists.Archival.Infrastructure", "archival\src\FilterLists.Archival.Infrastructure\FilterLists.Archival.Infrastructure.csproj", "{A0B77015-E8C4-41D3-B63D-BF818026298C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SharedKernel", "SharedKernel", "{59197818-6C72-4A3C-A595-49F3D7D2EB18}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FilterLists.SharedKernel.Logging", "sharedKernel\src\FilterLists.SharedKernel.Logging\FilterLists.SharedKernel.Logging.csproj", "{5485F55E-DFED-4DA0-8A00-220B081FAC96}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -104,6 +108,10 @@ Global {A0B77015-E8C4-41D3-B63D-BF818026298C}.Debug|Any CPU.Build.0 = Debug|Any CPU {A0B77015-E8C4-41D3-B63D-BF818026298C}.Release|Any CPU.ActiveCfg = Release|Any CPU {A0B77015-E8C4-41D3-B63D-BF818026298C}.Release|Any CPU.Build.0 = Release|Any CPU + {5485F55E-DFED-4DA0-8A00-220B081FAC96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5485F55E-DFED-4DA0-8A00-220B081FAC96}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5485F55E-DFED-4DA0-8A00-220B081FAC96}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5485F55E-DFED-4DA0-8A00-220B081FAC96}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -119,6 +127,7 @@ Global {F625C241-0501-4AEB-8B82-609C93EE6B7D} = {5E52FEF9-9605-4ACB-8A42-A20E06331599} {11669839-E666-477B-A1B6-276041AD3768} = {5E52FEF9-9605-4ACB-8A42-A20E06331599} {A0B77015-E8C4-41D3-B63D-BF818026298C} = {5E52FEF9-9605-4ACB-8A42-A20E06331599} + {5485F55E-DFED-4DA0-8A00-220B081FAC96} = {59197818-6C72-4A3C-A595-49F3D7D2EB18} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {758B57EF-7505-4BE2-90A2-E2DE2EC32909} diff --git a/services/archival/src/FilterLists.Archival.Api/Dockerfile b/services/archival/src/FilterLists.Archival.Api/Dockerfile index 8125dec37..43e7b5bfe 100644 --- a/services/archival/src/FilterLists.Archival.Api/Dockerfile +++ b/services/archival/src/FilterLists.Archival.Api/Dockerfile @@ -6,18 +6,20 @@ WORKDIR /app FROM mcr.microsoft.com/dotnet/core/sdk:3.1.401-alpine AS build # restore API -WORKDIR /src -COPY archival/src/FilterLists.Archival.Infrastructure/FilterLists.Archival.Infrastructure.csproj FilterLists.Archival.Infrastructure/ -COPY archival/src/FilterLists.Archival.Application/FilterLists.Archival.Application.csproj FilterLists.Archival.Application/ -WORKDIR /src/FilterLists.Archival.Api +WORKDIR /app +COPY sharedKernel/src/FilterLists.SharedKernel.Logging/FilterLists.SharedKernel.Logging.csproj sharedKernel/src/FilterLists.SharedKernel.Logging/ +COPY archival/src/FilterLists.Archival.Infrastructure/FilterLists.Archival.Infrastructure.csproj archival/src/FilterLists.Archival.Infrastructure/ +COPY archival/src/FilterLists.Archival.Application/FilterLists.Archival.Application.csproj archival/src/FilterLists.Archival.Application/ +WORKDIR /app/archival/src/FilterLists.Archival.Api COPY archival/src/FilterLists.Archival.Api/FilterLists.Archival.Api.csproj . RUN dotnet restore # build API -WORKDIR /src -COPY archival/src/FilterLists.Archival.Infrastructure/. FilterLists.Archival.Infrastructure/ -COPY archival/src/FilterLists.Archival.Application/. FilterLists.Archival.Application/ -WORKDIR /src/FilterLists.Archival.Api +WORKDIR /app +COPY sharedKernel/src/FilterLists.SharedKernel.Logging/. sharedKernel/src/FilterLists.SharedKernel.Logging/ +COPY archival/src/FilterLists.Archival.Infrastructure/. archival/src/FilterLists.Archival.Infrastructure/ +COPY archival/src/FilterLists.Archival.Application/. archival/src/FilterLists.Archival.Application/ +WORKDIR /app/archival/src/FilterLists.Archival.Api COPY archival/src/FilterLists.Archival.Api/. . RUN dotnet publish -c Release --no-restore -o /app/publish -p:PublishReadyToRun=true -p:PublishSingleFile=true -p:PublishTrimmed=true -r linux-musl-x64 diff --git a/services/archival/src/FilterLists.Archival.Api/Dockerfile.dev b/services/archival/src/FilterLists.Archival.Api/Dockerfile.dev index fdf0e65be..8420b23fb 100644 --- a/services/archival/src/FilterLists.Archival.Api/Dockerfile.dev +++ b/services/archival/src/FilterLists.Archival.Api/Dockerfile.dev @@ -6,18 +6,20 @@ WORKDIR /app FROM mcr.microsoft.com/dotnet/core/sdk:3.1.401-alpine AS build # restore API -WORKDIR /src -COPY archival/src/FilterLists.Archival.Infrastructure/FilterLists.Archival.Infrastructure.csproj FilterLists.Archival.Infrastructure/ -COPY archival/src/FilterLists.Archival.Application/FilterLists.Archival.Application.csproj FilterLists.Archival.Application/ -WORKDIR /src/FilterLists.Archival.Api +WORKDIR /app +COPY sharedKernel/src/FilterLists.SharedKernel.Logging/FilterLists.SharedKernel.Logging.csproj sharedKernel/src/FilterLists.SharedKernel.Logging/ +COPY archival/src/FilterLists.Archival.Infrastructure/FilterLists.Archival.Infrastructure.csproj archival/src/FilterLists.Archival.Infrastructure/ +COPY archival/src/FilterLists.Archival.Application/FilterLists.Archival.Application.csproj archival/src/FilterLists.Archival.Application/ +WORKDIR /app/archival/src/FilterLists.Archival.Api COPY archival/src/FilterLists.Archival.Api/FilterLists.Archival.Api.csproj . RUN dotnet restore # build API -WORKDIR /src -COPY archival/src/FilterLists.Archival.Infrastructure/. FilterLists.Archival.Infrastructure/ -COPY archival/src/FilterLists.Archival.Application/. FilterLists.Archival.Application/ -WORKDIR /src/FilterLists.Archival.Api +WORKDIR /app +COPY sharedKernel/src/FilterLists.SharedKernel.Logging/. sharedKernel/src/FilterLists.SharedKernel.Logging/ +COPY archival/src/FilterLists.Archival.Infrastructure/. archival/src/FilterLists.Archival.Infrastructure/ +COPY archival/src/FilterLists.Archival.Application/. archival/src/FilterLists.Archival.Application/ +WORKDIR /app/archival/src/FilterLists.Archival.Api COPY archival/src/FilterLists.Archival.Api/. . RUN dotnet publish --no-restore -o /app/publish -r linux-musl-x64 diff --git a/services/archival/src/FilterLists.Archival.Api/Program.cs b/services/archival/src/FilterLists.Archival.Api/Program.cs index db8d57878..d9b787ee9 100644 --- a/services/archival/src/FilterLists.Archival.Api/Program.cs +++ b/services/archival/src/FilterLists.Archival.Api/Program.cs @@ -1,6 +1,8 @@ using System.Threading.Tasks; +using FilterLists.Archival.Application; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; +using static FilterLists.SharedKernel.Logging.HostRunner; namespace FilterLists.Archival.Api { @@ -8,13 +10,17 @@ public static class Program { public static async Task Main(string[] args) { - var host = CreateHostBuilder(args).Build(); - await host.RunAsync(); + await TryRunWithLoggingAsync(async () => + { + var host = CreateHostBuilder(args).Build(); + await host.RunAsync(); + }); } public static IHostBuilder CreateHostBuilder(string[] args) { return Host.CreateDefaultBuilder(args) + .UseApplication() .ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup()); } } diff --git a/services/archival/src/FilterLists.Archival.Application/ServiceCollectionExtension.cs b/services/archival/src/FilterLists.Archival.Application/ConfigurationExtensions.cs similarity index 64% rename from services/archival/src/FilterLists.Archival.Application/ServiceCollectionExtension.cs rename to services/archival/src/FilterLists.Archival.Application/ConfigurationExtensions.cs index 951374300..d7fe3632e 100644 --- a/services/archival/src/FilterLists.Archival.Application/ServiceCollectionExtension.cs +++ b/services/archival/src/FilterLists.Archival.Application/ConfigurationExtensions.cs @@ -3,14 +3,20 @@ using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; namespace FilterLists.Archival.Application { - public static class ServiceCollectionExtension + public static class ConfigurationExtensions { + public static IHostBuilder UseApplication(this IHostBuilder hostBuilder) + { + return hostBuilder.UseInfrastructure(); + } + public static void AddApplicationServices(this IServiceCollection services, IConfiguration configuration) { - services.AddMediatR(typeof(ServiceCollectionExtension).Assembly); + services.AddMediatR(typeof(ConfigurationExtensions).Assembly); services.AddInfrastructureServices(configuration); } diff --git a/services/archival/src/FilterLists.Archival.Infrastructure/ServiceCollectionExtension.cs b/services/archival/src/FilterLists.Archival.Infrastructure/ConfigurationExtensions.cs similarity index 74% rename from services/archival/src/FilterLists.Archival.Infrastructure/ServiceCollectionExtension.cs rename to services/archival/src/FilterLists.Archival.Infrastructure/ConfigurationExtensions.cs index bdc6e6a21..55f0a3092 100644 --- a/services/archival/src/FilterLists.Archival.Infrastructure/ServiceCollectionExtension.cs +++ b/services/archival/src/FilterLists.Archival.Infrastructure/ConfigurationExtensions.cs @@ -1,14 +1,21 @@ using System; using FilterLists.Archival.Infrastructure.Persistence; using FilterLists.Archival.Infrastructure.Scheduling; +using FilterLists.SharedKernel.Logging; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; namespace FilterLists.Archival.Infrastructure { - public static class ServiceCollectionExtension + public static class ConfigurationExtensions { + public static IHostBuilder UseInfrastructure(this IHostBuilder hostBuilder) + { + return hostBuilder.UseLogging(); + } + public static void AddInfrastructureServices(this IServiceCollection services, IConfiguration configuration) { _ = configuration ?? throw new ArgumentNullException(nameof(configuration)); diff --git a/services/archival/src/FilterLists.Archival.Infrastructure/FilterLists.Archival.Infrastructure.csproj b/services/archival/src/FilterLists.Archival.Infrastructure/FilterLists.Archival.Infrastructure.csproj index 353cc498d..14436114d 100644 --- a/services/archival/src/FilterLists.Archival.Infrastructure/FilterLists.Archival.Infrastructure.csproj +++ b/services/archival/src/FilterLists.Archival.Infrastructure/FilterLists.Archival.Infrastructure.csproj @@ -38,4 +38,8 @@ + + + + diff --git a/services/archival/src/FilterLists.Archival.Infrastructure/Persistence/ServiceCollectionExtension.cs b/services/archival/src/FilterLists.Archival.Infrastructure/Persistence/ConfigurationExtensions.cs similarity index 94% rename from services/archival/src/FilterLists.Archival.Infrastructure/Persistence/ServiceCollectionExtension.cs rename to services/archival/src/FilterLists.Archival.Infrastructure/Persistence/ConfigurationExtensions.cs index 64316d5bb..03aaeb98c 100644 --- a/services/archival/src/FilterLists.Archival.Infrastructure/Persistence/ServiceCollectionExtension.cs +++ b/services/archival/src/FilterLists.Archival.Infrastructure/Persistence/ConfigurationExtensions.cs @@ -5,7 +5,7 @@ namespace FilterLists.Archival.Infrastructure.Persistence { - internal static class ServiceCollectionExtension + internal static class ConfigurationExtensions { public static void AddPersistenceServices(this IServiceCollection services, IConfiguration configuration) { diff --git a/services/archival/src/FilterLists.Archival.Infrastructure/Scheduling/ServiceCollectionExtension.cs b/services/archival/src/FilterLists.Archival.Infrastructure/Scheduling/ConfigurationExtensions.cs similarity index 93% rename from services/archival/src/FilterLists.Archival.Infrastructure/Scheduling/ServiceCollectionExtension.cs rename to services/archival/src/FilterLists.Archival.Infrastructure/Scheduling/ConfigurationExtensions.cs index 82ab1a1cd..b4db08fc7 100644 --- a/services/archival/src/FilterLists.Archival.Infrastructure/Scheduling/ServiceCollectionExtension.cs +++ b/services/archival/src/FilterLists.Archival.Infrastructure/Scheduling/ConfigurationExtensions.cs @@ -6,7 +6,7 @@ namespace FilterLists.Archival.Infrastructure.Scheduling { - internal static class ServiceCollectionExtension + internal static class ConfigurationExtensions { private static ConnectionMultiplexer _redis = null!; diff --git a/services/directory/src/FilterLists.Directory.Api/Dockerfile b/services/directory/src/FilterLists.Directory.Api/Dockerfile index d4a499007..bdc4476b5 100644 --- a/services/directory/src/FilterLists.Directory.Api/Dockerfile +++ b/services/directory/src/FilterLists.Directory.Api/Dockerfile @@ -7,22 +7,24 @@ EXPOSE 80 FROM mcr.microsoft.com/dotnet/core/sdk:3.1.401-alpine AS build # restore API -WORKDIR /src -COPY directory/src/FilterLists.Directory.Domain/FilterLists.Directory.Domain.csproj FilterLists.Directory.Domain/ -COPY directory/src/FilterLists.Directory.Infrastructure/FilterLists.Directory.Infrastructure.csproj FilterLists.Directory.Infrastructure/ -COPY directory/src/FilterLists.Directory.Infrastructure.Migrations/FilterLists.Directory.Infrastructure.Migrations.csproj FilterLists.Directory.Infrastructure.Migrations/ -COPY directory/src/FilterLists.Directory.Application/FilterLists.Directory.Application.csproj FilterLists.Directory.Application/ -WORKDIR /src/FilterLists.Directory.Api +WORKDIR /app +COPY sharedKernel/src/FilterLists.SharedKernel.Logging/FilterLists.SharedKernel.Logging.csproj sharedKernel/src/FilterLists.SharedKernel.Logging/ +COPY directory/src/FilterLists.Directory.Domain/FilterLists.Directory.Domain.csproj directory/src/FilterLists.Directory.Domain/ +COPY directory/src/FilterLists.Directory.Infrastructure/FilterLists.Directory.Infrastructure.csproj directory/src/FilterLists.Directory.Infrastructure/ +COPY directory/src/FilterLists.Directory.Infrastructure.Migrations/FilterLists.Directory.Infrastructure.Migrations.csproj directory/src/FilterLists.Directory.Infrastructure.Migrations/ +COPY directory/src/FilterLists.Directory.Application/FilterLists.Directory.Application.csproj directory/src/FilterLists.Directory.Application/ +WORKDIR /app/directory/src/FilterLists.Directory.Api COPY directory/src/FilterLists.Directory.Api/FilterLists.Directory.Api.csproj . RUN dotnet restore # build API -WORKDIR /src -COPY directory/src/FilterLists.Directory.Domain/. FilterLists.Directory.Domain/ -COPY directory/src/FilterLists.Directory.Infrastructure/. FilterLists.Directory.Infrastructure/ -COPY directory/src/FilterLists.Directory.Infrastructure.Migrations/. FilterLists.Directory.Infrastructure.Migrations/ -COPY directory/src/FilterLists.Directory.Application/. FilterLists.Directory.Application/ -WORKDIR /src/FilterLists.Directory.Api +WORKDIR /app +COPY sharedKernel/src/FilterLists.SharedKernel.Logging/. sharedKernel/src/FilterLists.SharedKernel.Logging/ +COPY directory/src/FilterLists.Directory.Domain/. directory/src/FilterLists.Directory.Domain/ +COPY directory/src/FilterLists.Directory.Infrastructure/. directory/src/FilterLists.Directory.Infrastructure/ +COPY directory/src/FilterLists.Directory.Infrastructure.Migrations/. directory/src/FilterLists.Directory.Infrastructure.Migrations/ +COPY directory/src/FilterLists.Directory.Application/. directory/src/FilterLists.Directory.Application/ +WORKDIR /app/directory/src/FilterLists.Directory.Api COPY directory/src/FilterLists.Directory.Api/. . RUN dotnet publish -c Release --no-restore -o /app/publish -p:PublishReadyToRun=true -p:PublishSingleFile=true -p:PublishTrimmed=true -r linux-musl-x64 diff --git a/services/directory/src/FilterLists.Directory.Api/Dockerfile.dev b/services/directory/src/FilterLists.Directory.Api/Dockerfile.dev index 4f415a217..9a703b76e 100644 --- a/services/directory/src/FilterLists.Directory.Api/Dockerfile.dev +++ b/services/directory/src/FilterLists.Directory.Api/Dockerfile.dev @@ -7,22 +7,24 @@ EXPOSE 80 FROM mcr.microsoft.com/dotnet/core/sdk:3.1.401-alpine AS build # restore API -WORKDIR /src -COPY directory/src/FilterLists.Directory.Domain/FilterLists.Directory.Domain.csproj FilterLists.Directory.Domain/ -COPY directory/src/FilterLists.Directory.Infrastructure/FilterLists.Directory.Infrastructure.csproj FilterLists.Directory.Infrastructure/ -COPY directory/src/FilterLists.Directory.Infrastructure.Migrations/FilterLists.Directory.Infrastructure.Migrations.csproj FilterLists.Directory.Infrastructure.Migrations/ -COPY directory/src/FilterLists.Directory.Application/FilterLists.Directory.Application.csproj FilterLists.Directory.Application/ -WORKDIR /src/FilterLists.Directory.Api +WORKDIR /app +COPY sharedKernel/src/FilterLists.SharedKernel.Logging/FilterLists.SharedKernel.Logging.csproj sharedKernel/src/FilterLists.SharedKernel.Logging/ +COPY directory/src/FilterLists.Directory.Domain/FilterLists.Directory.Domain.csproj directory/src/FilterLists.Directory.Domain/ +COPY directory/src/FilterLists.Directory.Infrastructure/FilterLists.Directory.Infrastructure.csproj directory/src/FilterLists.Directory.Infrastructure/ +COPY directory/src/FilterLists.Directory.Infrastructure.Migrations/FilterLists.Directory.Infrastructure.Migrations.csproj directory/src/FilterLists.Directory.Infrastructure.Migrations/ +COPY directory/src/FilterLists.Directory.Application/FilterLists.Directory.Application.csproj directory/src/FilterLists.Directory.Application/ +WORKDIR /app/directory/src/FilterLists.Directory.Api COPY directory/src/FilterLists.Directory.Api/FilterLists.Directory.Api.csproj . RUN dotnet restore # build API -WORKDIR /src -COPY directory/src/FilterLists.Directory.Domain/. FilterLists.Directory.Domain/ -COPY directory/src/FilterLists.Directory.Infrastructure/. FilterLists.Directory.Infrastructure/ -COPY directory/src/FilterLists.Directory.Infrastructure.Migrations/. FilterLists.Directory.Infrastructure.Migrations/ -COPY directory/src/FilterLists.Directory.Application/. FilterLists.Directory.Application/ -WORKDIR /src/FilterLists.Directory.Api +WORKDIR /app +COPY sharedKernel/src/FilterLists.SharedKernel.Logging/. sharedKernel/src/FilterLists.SharedKernel.Logging/ +COPY directory/src/FilterLists.Directory.Domain/. directory/src/FilterLists.Directory.Domain/ +COPY directory/src/FilterLists.Directory.Infrastructure/. directory/src/FilterLists.Directory.Infrastructure/ +COPY directory/src/FilterLists.Directory.Infrastructure.Migrations/. directory/src/FilterLists.Directory.Infrastructure.Migrations/ +COPY directory/src/FilterLists.Directory.Application/. directory/src/FilterLists.Directory.Application/ +WORKDIR /app/directory/src/FilterLists.Directory.Api COPY directory/src/FilterLists.Directory.Api/. . RUN dotnet publish --no-restore -o /app/publish -r linux-musl-x64 diff --git a/services/directory/src/FilterLists.Directory.Api/Dockerfile.migrate b/services/directory/src/FilterLists.Directory.Api/Dockerfile.migrate index dc2ae1293..7a59c8b21 100644 --- a/services/directory/src/FilterLists.Directory.Api/Dockerfile.migrate +++ b/services/directory/src/FilterLists.Directory.Api/Dockerfile.migrate @@ -3,23 +3,25 @@ FROM mcr.microsoft.com/dotnet/core/sdk:3.1.401-alpine AS test-migrations ENTRYPOINT ["dotnet", "test", "--logger:trx"] # restore -WORKDIR /src -COPY directory/src/FilterLists.Directory.Domain/FilterLists.Directory.Domain.csproj FilterLists.Directory.Domain/ -COPY directory/src/FilterLists.Directory.Infrastructure/FilterLists.Directory.Infrastructure.csproj FilterLists.Directory.Infrastructure/ -COPY directory/src/FilterLists.Directory.Infrastructure.Migrations/FilterLists.Directory.Infrastructure.Migrations.csproj FilterLists.Directory.Infrastructure.Migrations/ -COPY directory/src/FilterLists.Directory.Application/FilterLists.Directory.Application.csproj FilterLists.Directory.Application/ -COPY directory/src/FilterLists.Directory.Api/FilterLists.Directory.Api.csproj FilterLists.Directory.Api/ -WORKDIR /tests/FilterLists.Directory.Infrastructure.Migrations.Tests +WORKDIR /app +COPY sharedKernel/src/FilterLists.SharedKernel.Logging/FilterLists.SharedKernel.Logging.csproj sharedKernel/src/FilterLists.SharedKernel.Logging/ +COPY directory/src/FilterLists.Directory.Domain/FilterLists.Directory.Domain.csproj directory/src/FilterLists.Directory.Domain/ +COPY directory/src/FilterLists.Directory.Infrastructure/FilterLists.Directory.Infrastructure.csproj directory/src/FilterLists.Directory.Infrastructure/ +COPY directory/src/FilterLists.Directory.Infrastructure.Migrations/FilterLists.Directory.Infrastructure.Migrations.csproj directory/src/FilterLists.Directory.Infrastructure.Migrations/ +COPY directory/src/FilterLists.Directory.Application/FilterLists.Directory.Application.csproj directory/src/FilterLists.Directory.Application/ +COPY directory/src/FilterLists.Directory.Api/FilterLists.Directory.Api.csproj directory/src/FilterLists.Directory.Api/ +WORKDIR /app/directory/tests/FilterLists.Directory.Infrastructure.Migrations.Tests COPY directory/tests/FilterLists.Directory.Infrastructure.Migrations.Tests/FilterLists.Directory.Infrastructure.Migrations.Tests.csproj . RUN dotnet restore # build -WORKDIR /src -COPY directory/src/FilterLists.Directory.Domain/. FilterLists.Directory.Domain/ -COPY directory/src/FilterLists.Directory.Infrastructure/. FilterLists.Directory.Infrastructure/ -COPY directory/src/FilterLists.Directory.Infrastructure.Migrations/. FilterLists.Directory.Infrastructure.Migrations/ -COPY directory/src/FilterLists.Directory.Application/. FilterLists.Directory.Application/ -COPY directory/src/FilterLists.Directory.Api/. FilterLists.Directory.Api/ -WORKDIR /tests/FilterLists.Directory.Infrastructure.Migrations.Tests +WORKDIR /app +COPY sharedKernel/src/FilterLists.SharedKernel.Logging/. sharedKernel/src/FilterLists.SharedKernel.Logging/ +COPY directory/src/FilterLists.Directory.Domain/. directory/src/FilterLists.Directory.Domain/ +COPY directory/src/FilterLists.Directory.Infrastructure/. directory/src/FilterLists.Directory.Infrastructure/ +COPY directory/src/FilterLists.Directory.Infrastructure.Migrations/. directory/src/FilterLists.Directory.Infrastructure.Migrations/ +COPY directory/src/FilterLists.Directory.Application/. directory/src/FilterLists.Directory.Application/ +COPY directory/src/FilterLists.Directory.Api/. directory/src/FilterLists.Directory.Api/ +WORKDIR /app/directory/tests/FilterLists.Directory.Infrastructure.Migrations.Tests COPY directory/tests/FilterLists.Directory.Infrastructure.Migrations.Tests/. . RUN dotnet build -c Release --no-restore -r linux-musl-x64 \ No newline at end of file diff --git a/services/directory/src/FilterLists.Directory.Api/Program.cs b/services/directory/src/FilterLists.Directory.Api/Program.cs index c61f142ea..48360f51e 100644 --- a/services/directory/src/FilterLists.Directory.Api/Program.cs +++ b/services/directory/src/FilterLists.Directory.Api/Program.cs @@ -1,7 +1,9 @@ using System.Threading.Tasks; +using FilterLists.Directory.Application; using FilterLists.Directory.Infrastructure.Persistence; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; +using static FilterLists.SharedKernel.Logging.HostRunner; namespace FilterLists.Directory.Api { @@ -9,14 +11,18 @@ public static class Program { public static async Task Main(string[] args) { - var host = CreateHostBuilder(args).Build(); - await host.MigrateAsync(); - await host.RunAsync(); + await TryRunWithLoggingAsync(async () => + { + var host = CreateHostBuilder(args).Build(); + await host.MigrateAsync(); + await host.RunAsync(); + }); } public static IHostBuilder CreateHostBuilder(string[] args) { return Host.CreateDefaultBuilder(args) + .UseApplication() .ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup()); } } diff --git a/services/directory/src/FilterLists.Directory.Application/ServiceCollectionExtension.cs b/services/directory/src/FilterLists.Directory.Application/ConfigurationExtensions.cs similarity index 52% rename from services/directory/src/FilterLists.Directory.Application/ServiceCollectionExtension.cs rename to services/directory/src/FilterLists.Directory.Application/ConfigurationExtensions.cs index 0cfa92a17..dcaa17be3 100644 --- a/services/directory/src/FilterLists.Directory.Application/ServiceCollectionExtension.cs +++ b/services/directory/src/FilterLists.Directory.Application/ConfigurationExtensions.cs @@ -3,15 +3,21 @@ using MediatR; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; namespace FilterLists.Directory.Application { - public static class ServiceCollectionExtension + public static class ConfigurationExtensions { + public static IHostBuilder UseApplication(this IHostBuilder hostBuilder) + { + return hostBuilder.UseInfrastructure(); + } + public static void AddApplicationServices(this IServiceCollection services, IConfiguration configuration) { - services.AddMediatR(typeof(ServiceCollectionExtension).Assembly); - services.AddAutoMapper(typeof(ServiceCollectionExtension)); + services.AddMediatR(typeof(ConfigurationExtensions).Assembly); + services.AddAutoMapper(typeof(ConfigurationExtensions)); services.AddInfrastructureServices(configuration); } } diff --git a/services/directory/src/FilterLists.Directory.Infrastructure/ServiceCollectionExtension.cs b/services/directory/src/FilterLists.Directory.Infrastructure/ConfigurationExtensions.cs similarity index 73% rename from services/directory/src/FilterLists.Directory.Infrastructure/ServiceCollectionExtension.cs rename to services/directory/src/FilterLists.Directory.Infrastructure/ConfigurationExtensions.cs index 89d34c270..101e99bbc 100644 --- a/services/directory/src/FilterLists.Directory.Infrastructure/ServiceCollectionExtension.cs +++ b/services/directory/src/FilterLists.Directory.Infrastructure/ConfigurationExtensions.cs @@ -1,12 +1,19 @@ using FilterLists.Directory.Infrastructure.Persistence.Queries.Context; +using FilterLists.SharedKernel.Logging; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; namespace FilterLists.Directory.Infrastructure { - public static class ServiceCollectionExtension + public static class ConfigurationExtensions { + public static IHostBuilder UseInfrastructure(this IHostBuilder hostBuilder) + { + return hostBuilder.UseLogging(); + } + public static void AddInfrastructureServices(this IServiceCollection services, IConfiguration configuration) { services.AddDbContextPool(o => diff --git a/services/directory/src/FilterLists.Directory.Infrastructure/FilterLists.Directory.Infrastructure.csproj b/services/directory/src/FilterLists.Directory.Infrastructure/FilterLists.Directory.Infrastructure.csproj index d381688d3..518350b53 100644 --- a/services/directory/src/FilterLists.Directory.Infrastructure/FilterLists.Directory.Infrastructure.csproj +++ b/services/directory/src/FilterLists.Directory.Infrastructure/FilterLists.Directory.Infrastructure.csproj @@ -34,6 +34,7 @@ + diff --git a/services/sharedKernel/src/FilterLists.SharedKernel.Logging/ConfigurationExtensions.cs b/services/sharedKernel/src/FilterLists.SharedKernel.Logging/ConfigurationExtensions.cs new file mode 100644 index 000000000..a0faaeab3 --- /dev/null +++ b/services/sharedKernel/src/FilterLists.SharedKernel.Logging/ConfigurationExtensions.cs @@ -0,0 +1,13 @@ +using Microsoft.Extensions.Hosting; +using Serilog; + +namespace FilterLists.SharedKernel.Logging +{ + public static class ConfigurationExtensions + { + public static IHostBuilder UseLogging(this IHostBuilder hostBuilder) + { + return hostBuilder.UseSerilog(); + } + } +} \ No newline at end of file diff --git a/services/sharedKernel/src/FilterLists.SharedKernel.Logging/FilterLists.SharedKernel.Logging.csproj b/services/sharedKernel/src/FilterLists.SharedKernel.Logging/FilterLists.SharedKernel.Logging.csproj new file mode 100644 index 000000000..afaf394b1 --- /dev/null +++ b/services/sharedKernel/src/FilterLists.SharedKernel.Logging/FilterLists.SharedKernel.Logging.csproj @@ -0,0 +1,35 @@ + + + + netstandard2.1 + latest + enable + + + + Collin M. Barrett + FilterLists + FilterLists Shared Kernel Logging + The independent, comprehensive directory of filter and host lists for advertisements, trackers, malware, and annoyances. + Copyright (c) 2020 Collin M. Barrett + https://github.com/collinbarrett/FilterLists + https://filterlists.com + + + + 1701;1702;CA2007 + + + + CA2007 + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + diff --git a/services/sharedKernel/src/FilterLists.SharedKernel.Logging/HostRunner.cs b/services/sharedKernel/src/FilterLists.SharedKernel.Logging/HostRunner.cs new file mode 100644 index 000000000..240d27705 --- /dev/null +++ b/services/sharedKernel/src/FilterLists.SharedKernel.Logging/HostRunner.cs @@ -0,0 +1,36 @@ +using System; +using System.Threading.Tasks; +using Serilog; +using Serilog.Events; + +namespace FilterLists.SharedKernel.Logging +{ + public static class HostRunner + { + public static async Task TryRunWithLoggingAsync(Func runHostAsync) + { + Log.Logger = new LoggerConfiguration() + .MinimumLevel.Debug() + .MinimumLevel.Override("Microsoft", LogEventLevel.Information) + .Enrich.FromLogContext() + .WriteTo.Console() + .CreateLogger(); + + try + { + Log.Information("Starting host"); + await runHostAsync(); + return 0; + } + catch (Exception ex) + { + Log.Fatal(ex, "Host terminated unexpectedly"); + return 1; + } + finally + { + Log.CloseAndFlush(); + } + } + } +} \ No newline at end of file