public static void UseHealthEndpoint(this IApplicationBuilder app) { app.Use(async(context, next) => { if (context.Request.Path.Value.Equals("/health")) { // Perform IP access check if (MicroserviceConfiguration.AllowedIpAddresses != null && context.Request.HttpContext.Connection.RemoteIpAddress != null && !MicroserviceConfiguration.AllowedIpAddresses.Contains( context.Request.HttpContext.Connection.RemoteIpAddress)) { context.Response.StatusCode = 403; await next(); } var status = HealthCheckRegistry.GetStatus(); if (!status.IsHealthy) { // Return a service unavailable status code if any of the checks fail context.Response.StatusCode = 503; } context.Response.Headers["Content-Type"] = "application/json"; await context.Response.WriteAsync(JsonConvert.SerializeObject(status)); } else { await next(); } }); }
public void HealthCheck_RegistryExecutesCheckOnEachGetStatus() { HealthCheckRegistry registry = new HealthCheckRegistry(); int count = 0; registry.RegisterHealthCheck(new HealthCheck("test", () => { count++; })); count.Should().Be(0); registry.GetStatus(); count.Should().Be(1); registry.GetStatus(); count.Should().Be(2); }
public void HealthCheck_RegistryStatusIsHealthyIfAllChecksAreHealthy() { HealthCheckRegistry registry = new HealthCheckRegistry(); registry.RegisterHealthCheck(new HealthCheck("ok", () => { })); registry.RegisterHealthCheck(new HealthCheck("another", () => HealthCheckResult.Healthy())); var status = registry.GetStatus(); status.IsHealthy.Should().BeTrue(); status.Results.Length.Should().Be(2); }
public void HealthCheck_RegistryStatusIsFailedIfOneCheckFails() { HealthCheckRegistry registry = new HealthCheckRegistry(); registry.RegisterHealthCheck(new HealthCheck("ok", () => { })); registry.RegisterHealthCheck(new HealthCheck("bad", () => HealthCheckResult.Unhealthy())); var status = registry.GetStatus(); status.IsHealthy.Should().BeFalse(); status.Results.Length.Should().Be(2); }
public static void UseHealthEndpoint(this IAppBuilder app) { app.Use(async(context, next) => { if (context.Request.Path.Value.StartsWith("/health")) { HealthCheckRegistry.HealthStatus status = HealthCheckRegistry.GetStatus(); if (!status.IsHealthy) { // Return a service unavailable status code if any of the checks fail context.Response.StatusCode = 503; } context.Response.Headers.Set("Content-Type", "application/json"); await context.Response.WriteAsync(JsonConvert.SerializeObject(status)); } else { await next(); } }); }