示例#1
0
        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);
        }
示例#2
0
        // 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);
        }
示例#4
0
        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);
        }