Exemple #1
0
        public MetricsFixture()
        {
            var healthFactoryLogger = _loggerFactory.CreateLogger <HealthCheckFactory>();
            var clock   = new TestClock();
            var options = new AppMetricsOptions();
            Func <string, IMetricContextRegistry> newContextRegistry = name => new DefaultMetricContextRegistry(name);
            var registry             = new DefaultMetricsRegistry(_loggerFactory, options, clock, new EnvironmentInfoProvider(), newContextRegistry);
            var healthCheckFactory   = new HealthCheckFactory(healthFactoryLogger);
            var metricBuilderFactory = new DefaultMetricsBuilderFactory();
            var filter                        = new DefaultMetricsFilter();
            var dataManager                   = new DefaultMetricValuesProvider(filter, registry);
            var healthStatusProvider          = new DefaultHealthProvider(_loggerFactory.CreateLogger <DefaultHealthProvider>(), healthCheckFactory);
            var metricsManagerFactory         = new DefaultMeasureMetricsProvider(registry, metricBuilderFactory, clock);
            var metricsManagerAdvancedFactory = new DefaultMetricsProvider(registry, metricBuilderFactory, clock);
            var metricsManager                = new DefaultMetricsManager(registry, _loggerFactory.CreateLogger <DefaultMetricsManager>());

            Metrics = new DefaultMetrics(
                clock,
                filter,
                metricsManagerFactory,
                metricBuilderFactory,
                metricsManagerAdvancedFactory,
                dataManager,
                metricsManager,
                healthStatusProvider);
        }
Exemple #2
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);
        }
Exemple #3
0
        public MetricsReportingFixture()
        {
            var healthFactoryLogger = _loggerFactory.CreateLogger <HealthCheckFactory>();
            var options             = new AppMetricsOptions();
            var clock = new TestClock();

            IMetricContextRegistry NewContextRegistry(string name) => new DefaultMetricContextRegistry(name);

            var registry             = new DefaultMetricsRegistry(_loggerFactory, options, clock, new EnvironmentInfoProvider(), NewContextRegistry);
            var healthCheckFactory   = new HealthCheckFactory(healthFactoryLogger);
            var metricBuilderFactory = new DefaultMetricsBuilderFactory();
            var filter        = new DefaultMetricsFilter();
            var healthManager = new DefaultHealthProvider(new Lazy <IMetrics>(() => Metrics), _loggerFactory.CreateLogger <DefaultHealthProvider>(), healthCheckFactory);
            var dataManager   = new DefaultMetricValuesProvider(
                filter,
                registry);

            var metricsManagerFactory         = new DefaultMeasureMetricsProvider(registry, metricBuilderFactory, clock);
            var metricsManagerAdvancedFactory = new DefaultMetricsProvider(registry, metricBuilderFactory, clock);
            var metricsManager = new DefaultMetricsManager(registry, _loggerFactory.CreateLogger <DefaultMetricsManager>());

            Metrics = new DefaultMetrics(
                clock,
                filter,
                metricsManagerFactory,
                metricBuilderFactory,
                metricsManagerAdvancedFactory,
                dataManager,
                metricsManager,
                healthManager);

            RecordSomeMetrics();
        }
        public void can_register_process_virtual_memory_check()
        {
            var healthChecks = Enumerable.Empty <HealthCheck>();
            var name         = "virtual memory";

            var factory = new HealthCheckFactory(_logger, healthChecks);

            factory.RegisterProcessVirtualMemorySizeHealthCheck(name, 100);

            factory.Checks.Should().NotBeEmpty();
            factory.Checks.Single().Value.Name.Should().Be(name);
        }
        public void can_register_process_private_memory_check()
        {
            var healthChecks = Enumerable.Empty <HealthCheck>();
            var name         = "private memory";

            var factory = new HealthCheckFactory(_logger, new Lazy <IMetrics>(), healthChecks);

            factory.RegisterProcessPrivateMemorySizeHealthCheck(name, 100);

            factory.Checks.Should().NotBeEmpty();
            factory.Checks.Single().Value.Name.Should().Be(name);
        }
        public async Task can_execute_process_virtual_memory_check()
        {
            var healthChecks = Enumerable.Empty <HealthCheck>();
            var name         = "virtual memory";

            var factory = new HealthCheckFactory(_logger, healthChecks);

            factory.RegisterProcessVirtualMemorySizeHealthCheck(name, long.MaxValue);

            var check  = factory.Checks.FirstOrDefault();
            var result = await check.Value.ExecuteAsync().ConfigureAwait(false);

            result.Check.Status.Should().Be(HealthCheckStatus.Healthy);
        }
        public async Task can_execute_ping_check()
        {
            var healthChecks = Enumerable.Empty <HealthCheck>();
            var name         = "github ping";

            var factory = new HealthCheckFactory(_logger, healthChecks);

            factory.RegisterPingHealthCheck(name, "github.com", TimeSpan.FromSeconds(10));

            var check  = factory.Checks.FirstOrDefault();
            var result = await check.Value.ExecuteAsync().ConfigureAwait(false);

            result.Check.Status.Should().Be(HealthCheckStatus.Healthy);
        }
        public async Task can_execute_process_private_memory_check()
        {
            var healthChecks = Enumerable.Empty <HealthCheck>();
            var name         = "private memory";

            var factory = new HealthCheckFactory(_logger, new Lazy <IMetrics>(), healthChecks);

            factory.RegisterProcessPrivateMemorySizeHealthCheck(name, int.MaxValue);

            var check  = factory.Checks.FirstOrDefault();
            var result = await check.Value.ExecuteAsync().ConfigureAwait(false);

            result.Check.Status.Should().Be(HealthCheckStatus.Healthy);
        }
        public async Task can_execute_http_get_check()
        {
            var healthChecks = Enumerable.Empty <HealthCheck>();
            var name         = "github home";

            var factory = new HealthCheckFactory(_logger, new Lazy <IMetrics>(), healthChecks);

            factory.RegisterHttpGetHealthCheck(name, new Uri("https://github.com"), TimeSpan.FromSeconds(10));

            var check  = factory.Checks.FirstOrDefault();
            var result = await check.Value.ExecuteAsync().ConfigureAwait(false);

            result.Check.Status.Should().Be(HealthCheckStatus.Healthy);
        }
        public async Task can_execute_process_private_memory_check(HealthCheckStatus expectedResult, long thresholdBytes, bool degradedOnError = false)
        {
            var healthChecks = Enumerable.Empty <HealthCheck>();
            var name         = "private memory";

            var factory = new HealthCheckFactory(_logger, new Lazy <IMetrics>(), healthChecks);

            factory.RegisterProcessPrivateMemorySizeHealthCheck(name, thresholdBytes, degradedOnError);

            var check  = factory.Checks.FirstOrDefault();
            var result = await check.Value.ExecuteAsync().ConfigureAwait(false);

            result.Check.Status.Should().Be(expectedResult);
        }
        public async Task can_execute_ping_check(HealthCheckStatus expectedResult, string host, bool degradedOnError = false)
        {
            var healthChecks = Enumerable.Empty <HealthCheck>();
            var name         = "github ping";

            var factory = new HealthCheckFactory(_logger, new Lazy <IMetrics>(), healthChecks);

            factory.RegisterPingHealthCheck(name, host, TimeSpan.FromSeconds(5), degradedOnError: degradedOnError);

            var check  = factory.Checks.FirstOrDefault();
            var result = await check.Value.ExecuteAsync().ConfigureAwait(false);

            result.Check.Status.Should().Be(expectedResult);
        }
        public MetricsFixture()
        {
            var metricsLogger       = _loggerFactory.CreateLogger <DefaultAdvancedMetrics>();
            var healthFactoryLogger = _loggerFactory.CreateLogger <HealthCheckFactory>();
            var clock   = new TestClock();
            var options = new AppMetricsOptions {
                DefaultSamplingType = SamplingType.LongTerm
            };
            Func <string, IMetricContextRegistry> newContextRegistry = name => new DefaultMetricContextRegistry(name);
            var registry           = new DefaultMetricsRegistry(_loggerFactory, options, clock, new EnvironmentInfoProvider(), newContextRegistry);
            var healthCheckFactory = new HealthCheckFactory(healthFactoryLogger);
            var advancedContext    = new DefaultAdvancedMetrics(metricsLogger, options, clock, new DefaultMetricsFilter(), registry, healthCheckFactory);

            Metrics = new DefaultMetrics(options, registry, advancedContext);
        }
Exemple #13
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);
        }
 public void Setup()
 {
     _mockDataBaseCheck  = new Mock <IDatabaseCheck>();
     _healthCheckFactory = new HealthCheckFactory(_mockDataBaseCheck.Object);
 }