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);
            }
        }
Exemple #2
0
        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));
        }