feat(worker): configure Hangfire worker startup

This commit is contained in:
2024-12-31 12:00:00 -05:00
parent 06db4231cf
commit 8cac9b4377

View File

@@ -0,0 +1,50 @@
using Hangfire;
using Hangfire.Redis.StackExchange;
using IncidentOps.Infrastructure;
using IncidentOps.Infrastructure.Auth;
using IncidentOps.Infrastructure.Jobs;
using IncidentOps.Worker.Jobs;
using StackExchange.Redis;
var builder = Host.CreateApplicationBuilder(args);
// Configure Infrastructure
var connectionString = builder.Configuration.GetConnectionString("Postgres")
?? throw new InvalidOperationException("Postgres connection string not configured");
var jwtSettings = new JwtSettings
{
Issuer = builder.Configuration["Jwt:Issuer"] ?? "incidentops",
Audience = builder.Configuration["Jwt:Audience"] ?? "incidentops",
SigningKey = builder.Configuration["Jwt:SigningKey"] ?? "not-needed-for-worker",
AccessTokenExpirationMinutes = 15,
RefreshTokenExpirationDays = 7
};
builder.Services.AddInfrastructure(connectionString, jwtSettings);
// Configure Hangfire
var redisConnectionString = builder.Configuration["Redis:ConnectionString"]
?? throw new InvalidOperationException("Redis connection string not configured");
builder.Services.AddHangfire(configuration => configuration
.SetDataCompatibilityLevel(CompatibilityLevel.Version_180)
.UseSimpleAssemblyNameTypeSerializer()
.UseRecommendedSerializerSettings()
.UseRedisStorage(ConnectionMultiplexer.Connect(redisConnectionString)));
builder.Services.AddHangfireServer(options =>
{
options.Queues = ["critical", "default", "low"];
options.WorkerCount = Environment.ProcessorCount * 2;
});
// Register job implementations
builder.Services.AddScoped<IIncidentTriggeredJob, IncidentTriggeredJob>();
builder.Services.AddScoped<ISendWebhookNotificationJob, SendWebhookNotificationJob>();
builder.Services.AddScoped<IEscalateIfUnackedJob, EscalateIfUnackedJob>();
builder.Services.AddHttpClient();
var host = builder.Build();
host.Run();