committed by
GitHub
4 changed files with 117 additions and 2 deletions
@ -0,0 +1,32 @@ |
|||
using System; |
|||
using System.Threading; |
|||
using System.Threading.Tasks; |
|||
using Microsoft.Extensions.Diagnostics.HealthChecks; |
|||
using Volo.Abp.DependencyInjection; |
|||
using Volo.Abp.Identity; |
|||
|
|||
namespace EShopOnAbp.PublicWeb.HealthChecks; |
|||
|
|||
public class EShopOnAbpHealthCheck : IHealthCheck, ITransientDependency |
|||
{ |
|||
protected readonly IIdentityUserAppService IdentityUserAppService; |
|||
|
|||
public EShopOnAbpHealthCheck(IIdentityUserAppService identityUserAppService) |
|||
{ |
|||
IdentityUserAppService = identityUserAppService; |
|||
} |
|||
|
|||
public async Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default) |
|||
{ |
|||
try |
|||
{ |
|||
await IdentityUserAppService.GetListAsync(new GetIdentityUsersInput { MaxResultCount = 1 }); |
|||
|
|||
return HealthCheckResult.Healthy($"Could connect to database and get record."); |
|||
} |
|||
catch (Exception e) |
|||
{ |
|||
return HealthCheckResult.Unhealthy($"Error when trying to get database record. ", e); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,77 @@ |
|||
using System; |
|||
using HealthChecks.UI.Client; |
|||
using Microsoft.AspNetCore.Builder; |
|||
using Microsoft.AspNetCore.Diagnostics.HealthChecks; |
|||
using Microsoft.AspNetCore.Http; |
|||
using Microsoft.AspNetCore.Routing; |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
|
|||
namespace EShopOnAbp.PublicWeb.HealthChecks; |
|||
|
|||
public static class HealthChecksBuilderExtensions |
|||
{ |
|||
public static void AddEShopOnAbpHealthChecks(this IServiceCollection services) |
|||
{ |
|||
// Add your health checks here
|
|||
var healthChecksBuilder = services.AddHealthChecks(); |
|||
healthChecksBuilder.AddCheck<EShopOnAbpHealthCheck>("EShopOnAbp Health Check"); |
|||
|
|||
services.ConfigureHealthCheckEndpoint("/health-status"); |
|||
|
|||
// If you don't want to add HealthChecksUI, remove following configurations.
|
|||
var configuration = services.GetConfiguration(); |
|||
var healthCheckUrl = configuration["App:HealthCheckUrl"]; |
|||
|
|||
if (string.IsNullOrEmpty(healthCheckUrl)) |
|||
{ |
|||
healthCheckUrl = "/health-status"; |
|||
} |
|||
|
|||
var healthChecksUiBuilder = services.AddHealthChecksUI(settings => |
|||
{ |
|||
settings.AddHealthCheckEndpoint("EShopOnAbp Health Status", healthCheckUrl); |
|||
}); |
|||
|
|||
// Set your HealthCheck UI Storage here
|
|||
healthChecksUiBuilder.AddInMemoryStorage(); |
|||
|
|||
services.MapHealthChecksUiEndpoints(options => |
|||
{ |
|||
options.UIPath = "/health-ui"; |
|||
options.ApiPath = "/health-api"; |
|||
}); |
|||
} |
|||
|
|||
private static IServiceCollection ConfigureHealthCheckEndpoint(this IServiceCollection services, string path) |
|||
{ |
|||
services.Configure<AbpEndpointRouterOptions>(options => |
|||
{ |
|||
options.EndpointConfigureActions.Add(endpointContext => |
|||
{ |
|||
endpointContext.Endpoints.MapHealthChecks( |
|||
new PathString(path.EnsureStartsWith('/')), |
|||
new HealthCheckOptions |
|||
{ |
|||
Predicate = _ => true, |
|||
ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse, |
|||
AllowCachingResponses = false, |
|||
}); |
|||
}); |
|||
}); |
|||
|
|||
return services; |
|||
} |
|||
|
|||
private static IServiceCollection MapHealthChecksUiEndpoints(this IServiceCollection services, Action<global::HealthChecks.UI.Configuration.Options>? setupOption = null) |
|||
{ |
|||
services.Configure<AbpEndpointRouterOptions>(routerOptions => |
|||
{ |
|||
routerOptions.EndpointConfigureActions.Add(endpointContext => |
|||
{ |
|||
endpointContext.Endpoints.MapHealthChecksUI(setupOption); |
|||
}); |
|||
}); |
|||
|
|||
return services; |
|||
} |
|||
} |
|||
Loading…
Reference in new issue