using System;
using System.Diagnostics.CodeAnalysis;
using Consul;
using Hangfire;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace MalwareMultiScan.Shared.Extensions
{
///
/// Extensions for IServiceCollection.
///
[ExcludeFromCodeCoverage]
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");
config.WaitTime = TimeSpan.FromSeconds(120);
}));
}
///
/// 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;
});
}
}
}