public static IMetricsHostBuilder AddHealthChecks(this IMetricsHostBuilder builder, Action <IHealthCheckFactory> setupAction) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } builder.Services.TryAddSingleton <HealthCheckMarkerService, HealthCheckMarkerService>(); HealthChecksAsServices.AddHealthChecksAsServices(builder.Services, DefaultMetricsAssemblyDiscoveryProvider.DiscoverAssemblies(builder.Environment.ApplicationName)); builder.Services.Replace(ServiceDescriptor.Singleton <IHealthCheckFactory>(provider => { var logFactory = provider.GetRequiredService <ILoggerFactory>(); var logger = logFactory.CreateLogger <HealthCheckFactory>(); var autoScannedHealthChecks = Enumerable.Empty <HealthCheck>(); try { autoScannedHealthChecks = provider.GetRequiredService <IEnumerable <HealthCheck> >(); } catch (Exception ex) { logger.LogError(new EventId(5000), ex, "Failed to load autoscanned health checks, health checks won't be registered"); } var factory = new HealthCheckFactory(logger, autoScannedHealthChecks); setupAction?.Invoke(factory); return(factory); })); return(builder); }
/// <summary> /// Scan the executing assembly and it's refererenced assemblies for health checks and automatically register them. /// </summary> /// <param name="healthCheckBuilder">The <see cref="IHealthBuilder" /> to add any found health checks.</param> /// <param name="services">The <see cref="IServiceCollection" /> where found health checks should be registered.</param> /// <param name="dependencyContext"> /// The dependency context from which health checks can be located. If not supplied, the platform /// default will be used. /// </param> /// <returns> /// An <see cref="IHealthBuilder" /> that can be used to further configure App Metrics Health. /// </returns> public static IHealthBuilder RegisterFromAssembly( this IHealthCheckBuilder healthCheckBuilder, IServiceCollection services, DependencyContext dependencyContext = null) { HealthChecksAsServices.AddHealthChecksAsServices(services, HealthAssemblyDiscoveryProvider.DiscoverAssemblies(dependencyContext)); return(healthCheckBuilder.Builder); }
// ReSharper disable UnusedMethodReturnValue.Global // ReSharper disable MemberCanBePrivate.Global internal static IAppMetricsHealthChecksBuilder AddCoreServices(this IAppMetricsHealthChecksBuilder checksBuilder) // ReSharper restore MemberCanBePrivate.Global // ReSharper restore UnusedMethodReturnValue.Global { HealthChecksAsServices.AddHealthChecksAsServices( checksBuilder.Services, DefaultMetricsAssemblyDiscoveryProvider.DiscoverAssemblies(checksBuilder.Environment.ApplicationName)); checksBuilder.Services.TryAddSingleton <IProvideHealth, DefaultHealthProvider>(); return(checksBuilder); }
public static IMetricsBuilder AddHealthChecks(this IMetricsBuilder builder) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } var environment = GetServiceFromCollection <IHostingEnvironment>(builder.Services); if (environment == null) { return(builder); } HealthChecksAsServices.AddHealthChecksAsServices(builder.Services, DefaultMetricsAssemblyDiscoveryProvider.DiscoverAssemblies(environment.ApplicationName)); return(builder); }
public static IMetricsHostBuilder AddHealthChecks(this IMetricsHostBuilder builder, Action <IHealthCheckFactory> setupAction) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } builder.Services.TryAddSingleton <HealthCheckMarkerService, HealthCheckMarkerService>(); HealthChecksAsServices.AddHealthChecksAsServices(builder.Services, DefaultMetricsAssemblyDiscoveryProvider.DiscoverAssemblies(builder.Environment.ApplicationName)); builder.Services.TryAddTransient <IHealthCheckFactory>(provider => { var autoScannedHealthChecks = provider.GetRequiredService <IEnumerable <HealthCheck> >(); var logFactory = provider.GetRequiredService <ILoggerFactory>(); var logger = logFactory.CreateLogger <HealthCheckFactory>(); var factory = new HealthCheckFactory(logger, autoScannedHealthChecks); setupAction?.Invoke(factory); return(factory); }); return(builder); }