.Net HealthCheck nedir, nasıl yapılır?

.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.

An error has occurred. This application may no longer respond until reloaded. Reload 🗙