Пример #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
        /// <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);
        }
Пример #3
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);
        }
Пример #5
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);
        }