.Net HealthCheck nedir, nasıl yapılır?
Öncelikle extension yazımından bahsetmek istiyorum. Dotnet te mevcut herhangi bir object ya da değişken tipine string değişkenlerde olduğu gibi .ToString() benzeri yardımcı methodlarla genişletme yapabilirsiniz. Konuyla alakalı .net extension yazımı nasıl yapılır araştırmanızı tavsiye ediyorum. Bilenler için devam edelim..
Startup.cs'de sürekli olarak yapılandırmalar yapmaktayız. Zamanla farkedecek olursanız Startup.cs de bir kod karmaşası oluşmakta ve göze çok çirkin gelmektedir. Bu yüzden IServiceCollection ve IApplicationBuilder için extension kullanarak konumuzdaki işimize odaklanacağız.
Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore
AspNetCore.HealthChecks.UI
AspNetCore.HealthChecks.UI.InMemory.Storage
AspNetCore.HealthChecks.UI.Client
Paketleri yükledikten sonra aşağıdaki sınıfımızı oluşturalım.
public static class PcHealthCheckExtension
{
public static void PcAddHealthCheck(this IServiceCollection services)
{
services.AddHealthChecks()
.AddDbContextCheck<YourDbContext>();
services.AddHealthChecksUI()
.AddInMemoryStorage();
}
public static IApplicationBuilder PcUseHealthCheck(this IApplicationBuilder app)
{
app.UseHealthChecks("/healthcheck", new HealthCheckOptions
{
Predicate = _ => true,
ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
});
app.UseHealthChecksUI(options =>
{
options.UIPath = "/healthchecks";
options.ApiPath = "/healthchecks-api";
});
return app;
}
}
Extensionlarımızı ve yapılandırmalarımız tamam. Şimdi de bunun projeminize tanıtıp etkinleştirelim. Startup.cs'de aşağıdaki etkinleştirebilirsiniz.
public void ConfigureServices(IServiceCollection services)
{
services.PcAddHealthCheck();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.PcUseHealthCheck();
}
Son olarak kütüphanenenin yapılandırma ayarları için appsettings.json'a aşağıdaki eklemelerimizi yapalım.
{
"HealthChecks-UI": {
"DisableMigrations": true,
"HealthChecks": [
{
"Name": "PollManager",
"Uri": "/healthcheck"
}
],
"Webhooks": [
{
"Name": "",
"Uri": "",
"Payload": "",
"RestoredPayload": ""
}
],
"EvaluationTimeOnSeconds": 10,
"MinimumSecondsBetweenFailureNotifications": 60,
"MaximumExecutionHistoriesPerEndpoint": 15
}
}
Kodumuz temiz ve derli gözüküyor. Projemizi çalıştırıp "/healthchecks" "/healthchecks-api" adreslerine gittiğinizde sonucu göreceksiniz.