feat(archival): add Hangfire scheduling

This commit is contained in:
Collin M. Barrett 2020-09-09 20:13:33 -05:00
parent 12d4b2f0ad
commit b187c33d77
7 changed files with 47 additions and 4 deletions

1
.env
View file

@ -1,3 +1,4 @@
ARCHIVAL_SCHEDULING_CONNECTION_STRING=localhost
ARCHIVAL_GIT_REPOSITORY_DIRECTORY=archives
ARCHIVAL_GIT_USER_NAME=FilterLists Archival
ARCHIVAL_GIT_USER_EMAIL=noreply@filterlists.com

View file

@ -25,6 +25,7 @@ public static void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
app.UseDeveloperExceptionPage();
app.UseApplication();
}
}
}

View file

@ -1,5 +1,6 @@
using FilterLists.Archival.Infrastructure;
using MediatR;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
@ -12,5 +13,10 @@ public static void AddApplicationServices(this IServiceCollection services, ICon
services.AddMediatR(typeof(ServiceCollectionExtension).Assembly);
services.AddInfrastructureServices(configuration);
}
public static void UseApplication(this IApplicationBuilder app)
{
app.UseInfrastructure();
}
}
}

View file

@ -25,7 +25,10 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Hangfire.AspNetCore" Version="1.7.12" />
<PackageReference Include="HangFire.Redis.StackExchange" Version="1.8.4" />
<PackageReference Include="LibGit2Sharp" Version="0.26.2" />
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="3.3.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>

View file

@ -5,9 +5,9 @@
namespace FilterLists.Archival.Infrastructure.Persistence
{
public static class ServiceCollectionExtension
internal static class ServiceCollectionExtension
{
internal static void AddGitServices(this IServiceCollection services, IConfiguration configuration)
public static void AddPersistenceServices(this IServiceCollection services, IConfiguration configuration)
{
services.Configure<GitOptions>(configuration.GetSection(GitOptions.Key));
services.AddTransient<IRepository, Repository>(_ =>
@ -20,6 +20,7 @@ internal static void AddGitServices(this IServiceCollection services, IConfigura
return new Repository(gitOptions.RepositoryDirectory);
});
services.AddTransient<IArchiveFile, GitFileArchiver>();
}
}
}

View file

@ -0,0 +1,24 @@
using Hangfire;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using StackExchange.Redis;
namespace FilterLists.Archival.Infrastructure.Scheduling
{
internal static class ServiceCollectionExtension
{
private static ConnectionMultiplexer _redis = null!;
public static void AddSchedulingServices(this IServiceCollection services, IConfiguration configuration)
{
_redis = ConnectionMultiplexer.Connect(configuration.GetConnectionString("SchedulingConnection"));
services.AddHangfire(c => c.UseRedisStorage(_redis));
}
public static void UseScheduling(this IApplicationBuilder app)
{
app.UseHangfireServer();
}
}
}

View file

@ -1,5 +1,7 @@
using System;
using FilterLists.Archival.Infrastructure.Persistence;
using FilterLists.Archival.Infrastructure.Scheduling;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
@ -11,8 +13,13 @@ public static void AddInfrastructureServices(this IServiceCollection services, I
{
_ = configuration ?? throw new ArgumentNullException(nameof(configuration));
services.AddGitServices(configuration);
services.AddTransient<IArchiveFile, GitFileArchiver>();
services.AddPersistenceServices(configuration);
services.AddSchedulingServices(configuration);
}
public static void UseInfrastructure(this IApplicationBuilder app)
{
app.UseScheduling();
}
}
}