public async Task InvokeAsync(HttpContext context, RequestDelegate next) { if (context.Request.Path == "/healthcheck") { OverallHealth overallHealth = new OverallHealth { OverallHealthOk = true, BuildNumber = FileVersionInfo.GetVersionInfo(Assembly.GetEntryAssembly().Location).FileVersion }; if (_healthCheckers != null) { foreach (var item in _healthCheckers) { try { ServiceHealth health = await item.IsHealthOk(); overallHealth.OverallHealthOk = overallHealth.OverallHealthOk && health.Dependencies.Min(x => x.HealthOk); overallHealth.Services.Add(health); }catch (Exception ex) { ServiceHealth failure = new ServiceHealth { Name = item.GetType().GetFriendlyName() }; failure.Dependencies.Add(new DependencyHealth { DependencyName = "IoC Failure", HealthOk = false, Message = ex.Message }); overallHealth.OverallHealthOk = false; overallHealth.Services.Add(failure); } } } string overallHealthJson = Newtonsoft.Json.JsonConvert.SerializeObject(overallHealth); context.Response.StatusCode = 200; context.Response.ContentType = "application/json"; await context.Response.WriteAsync(overallHealthJson); } else { await next.Invoke(context); } }
public async Task <IActionResult> Get() { if (!this.Request.Headers.ContainsKey(HealthCheckHeaderName)) { _logger.Warning("Request didn't contain health check header"); return(StatusCode(StatusCodes.Status403Forbidden)); } else { string healthCheckHeaderValue = this.Request.Headers[HealthCheckHeaderName]; if (healthCheckHeaderValue != _options.ApiKey) { _logger.Warning("Health Check Request didn't contain correct health check header value '{healthCheckHeaderValue}'", healthCheckHeaderValue); return(StatusCode(StatusCodes.Status403Forbidden)); } } OverallHealth overallHealth = new OverallHealth(); overallHealth.Services.Add(TryResolveService(typeof(ICalculationSearchService))); overallHealth.Services.Add(TryResolveService(typeof(IDatasetSearchService))); overallHealth.Services.Add(TryResolveService(typeof(IDatasetDefinitionSearchService))); overallHealth.Services.Add(TryResolveService(typeof(IProviderSearchService))); overallHealth.Services.Add(TryResolveService(typeof(IDatasetRelationshipsSearchService))); overallHealth.Services.Add(TryResolveService(typeof(IScenarioSearchService))); overallHealth.Services.Add(TryResolveService(typeof(ITestScenarioSearchService))); overallHealth.Services.Add(TryResolveService(typeof(ITestResultsSearchService))); overallHealth.Services.Add(TryResolveService(typeof(ITestScenarioResultsService))); overallHealth.Services.Add(TryResolveService(typeof(ICalculationProviderResultsSearchService))); overallHealth.Services.Add(TryResolveService(typeof(ISpecificationSearchService))); overallHealth.Services.Add(TryResolveService(typeof(IUserProfileService))); await AddAdditionalServiceHealths(overallHealth.Services); overallHealth.OverallHealthOk = overallHealth.Services.Min(x => x.HealthOk); return(new JsonResult(overallHealth)); }