using System.Net; using Data.Models.Configuration.General; using Data.Models.Arr; using Infrastructure.Health; using Infrastructure.Http; using Infrastructure.Http.DynamicHttpClientSystem; using Infrastructure.Verticals.DownloadClient.Deluge; using Infrastructure.Verticals.DownloadClient.QBittorrent; using Infrastructure.Verticals.DownloadClient.Transmission; using Infrastructure.Verticals.DownloadRemover.Consumers; using Infrastructure.Verticals.Notifications.Consumers; using Infrastructure.Verticals.Notifications.Models; using MassTransit; using Polly; using Polly.Extensions.Http; namespace Executable.DependencyInjection; public static class MainDI { public static IServiceCollection AddInfrastructure(this IServiceCollection services, IConfiguration configuration) => services .AddLogging(builder => builder.ClearProviders().AddConsole()) .AddHttpClients(configuration) .AddMemoryCache(options => { options.ExpirationScanFrequency = TimeSpan.FromMinutes(1); }) .AddServices() .AddHealthServices() .AddQuartzServices(configuration) .AddNotifications(configuration) .AddMassTransit(config => { config.AddConsumer>(); config.AddConsumer>(); config.AddConsumer>(); config.AddConsumer>(); config.AddConsumer>(); config.AddConsumer>(); config.AddConsumer>(); config.AddConsumer>(); config.UsingInMemory((context, cfg) => { cfg.ReceiveEndpoint("download-remover-queue", e => { e.ConfigureConsumer>(context); e.ConfigureConsumer>(context); e.ConcurrentMessageLimit = 1; e.PrefetchCount = 1; }); cfg.ReceiveEndpoint("notification-queue", e => { e.ConfigureConsumer>(context); e.ConfigureConsumer>(context); e.ConfigureConsumer>(context); e.ConfigureConsumer>(context); e.ConfigureConsumer>(context); e.ConfigureConsumer>(context); e.ConcurrentMessageLimit = 1; e.PrefetchCount = 1; }); }); }); private static IServiceCollection AddHttpClients(this IServiceCollection services, IConfiguration configuration) { // Add the dynamic HTTP client system - this replaces all the previous static configurations services.AddDynamicHttpClients(); // Add the dynamic HTTP client provider that uses the new system services.AddSingleton(); return services; } /// /// Adds health check services to the service collection /// private static IServiceCollection AddHealthServices(this IServiceCollection services) => services // Register the health check service .AddSingleton() // Register the background service for periodic health checks .AddHostedService(); }