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); }
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); }
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); }
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); }