59 lines
2.3 KiB
C#
59 lines
2.3 KiB
C#
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using Microsoft.AspNetCore.Builder;
|
|
using Microsoft.AspNetCore.Diagnostics.HealthChecks;
|
|
using Microsoft.AspNetCore.Hosting;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.Diagnostics.HealthChecks;
|
|
using Newtonsoft.Json;
|
|
using Newtonsoft.Json.Linq;
|
|
|
|
namespace HealthChecksSample
|
|
{
|
|
// Pass in `--scenario writer` at the command line to run this sample.
|
|
public class CustomWriterStartup
|
|
{
|
|
public void ConfigureServices(IServiceCollection services)
|
|
{
|
|
// Registers required services for health checks
|
|
services.AddHealthChecks()
|
|
|
|
// Registers a custom health check implementation
|
|
.AddGCInfoCheck("GCInfo");
|
|
}
|
|
|
|
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
|
|
{
|
|
// This will register the health checks middleware at the URL /health
|
|
//
|
|
// This example overrides the HealthCheckResponseWriter to write the health
|
|
// check result in a totally custom way.
|
|
app.UseHealthChecks("/health", new HealthCheckOptions()
|
|
{
|
|
// This custom writer formats the detailed status as JSON.
|
|
ResponseWriter = WriteResponse,
|
|
});
|
|
|
|
app.Run(async (context) =>
|
|
{
|
|
await context.Response.WriteAsync("Go to /health to see the health status");
|
|
});
|
|
}
|
|
|
|
private static Task WriteResponse(HttpContext httpContext, HealthReport result)
|
|
{
|
|
httpContext.Response.ContentType = "application/json";
|
|
|
|
var json = new JObject(
|
|
new JProperty("status", result.Status.ToString()),
|
|
new JProperty("results", new JObject(result.Entries.Select(pair =>
|
|
new JProperty(pair.Key, new JObject(
|
|
new JProperty("status", pair.Value.Status.ToString()),
|
|
new JProperty("description", pair.Value.Description),
|
|
new JProperty("data", new JObject(pair.Value.Data.Select(p => new JProperty(p.Key, p.Value))))))))));
|
|
return httpContext.Response.WriteAsync(json.ToString(Formatting.Indented));
|
|
}
|
|
}
|
|
}
|