using System; using Consul; using Hangfire; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; namespace MalwareMultiScan.Shared.Extensions { /// /// Extensions for IServiceCollection. /// public static class ServiceCollectionExtensions { /// /// Add consul to the service collection and register the node on start. /// /// Service collection. /// Configuration. public static void AddConsul(this IServiceCollection services, IConfiguration configuration) { services.AddSingleton(new ConsulClient(config => { config.Address = configuration.GetValue("CONSUL_ADDRESS"); })); } /// /// Add Hangfire with Redis storage. /// /// Service collection. /// Configuration. /// Queue names. public static void AddHangfire(this IServiceCollection services, IConfiguration configuration, params string[] queues) { if (queues.Length == 0) queues = new[] {"default"}; services.AddHangfire(options => options.UseRedisStorage(configuration.GetValue("REDIS_ADDRESS"))); services.AddHangfireServer(options => { options.Queues = queues; options.ServerTimeout = TimeSpan.FromSeconds(30); options.HeartbeatInterval = TimeSpan.FromSeconds(5); options.ServerCheckInterval = TimeSpan.FromSeconds(15); var workerCount = configuration.GetValue("WORKER_COUNT"); if (workerCount > 0) options.WorkerCount = workerCount; }); } } }