mirror of
https://github.com/bitwarden/server.git
synced 2026-02-04 08:03:29 +08:00
61 lines
2.1 KiB
C#
61 lines
2.1 KiB
C#
|
|
using System.Text;
|
|||
|
|
using System.Text.Json;
|
|||
|
|
using Bit.Core.Settings;
|
|||
|
|
using Microsoft.AspNetCore.Http;
|
|||
|
|
using Microsoft.Extensions.DependencyInjection;
|
|||
|
|
using Microsoft.Extensions.Diagnostics.HealthChecks;
|
|||
|
|
|
|||
|
|
namespace Bit.SharedWeb.Health;
|
|||
|
|
|
|||
|
|
public static class HealthCheckServiceExtensions
|
|||
|
|
{
|
|||
|
|
public static void AddHealthCheckServices(this IServiceCollection services, GlobalSettings globalSettings,
|
|||
|
|
Action<IHealthChecksBuilder> addBuilder = null)
|
|||
|
|
{
|
|||
|
|
var builder = services.AddHealthChecks();
|
|||
|
|
addBuilder?.Invoke(builder);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static Task WriteResponse(HttpContext context, HealthReport healthReport)
|
|||
|
|
{
|
|||
|
|
context.Response.ContentType = "application/json; charset=utf-8";
|
|||
|
|
|
|||
|
|
var options = new JsonWriterOptions { Indented = true };
|
|||
|
|
|
|||
|
|
using var memoryStream = new MemoryStream();
|
|||
|
|
using (var jsonWriter = new Utf8JsonWriter(memoryStream, options))
|
|||
|
|
{
|
|||
|
|
jsonWriter.WriteStartObject();
|
|||
|
|
jsonWriter.WriteString("status", healthReport.Status.ToString());
|
|||
|
|
jsonWriter.WriteStartObject("results");
|
|||
|
|
|
|||
|
|
foreach (var healthReportEntry in healthReport.Entries)
|
|||
|
|
{
|
|||
|
|
jsonWriter.WriteStartObject(healthReportEntry.Key);
|
|||
|
|
jsonWriter.WriteString("status",
|
|||
|
|
healthReportEntry.Value.Status.ToString());
|
|||
|
|
jsonWriter.WriteString("description",
|
|||
|
|
healthReportEntry.Value.Description ?? healthReportEntry.Value.Exception?.Message);
|
|||
|
|
jsonWriter.WriteStartObject("data");
|
|||
|
|
|
|||
|
|
foreach (var item in healthReportEntry.Value.Data)
|
|||
|
|
{
|
|||
|
|
jsonWriter.WritePropertyName(item.Key);
|
|||
|
|
|
|||
|
|
JsonSerializer.Serialize(jsonWriter, item.Value,
|
|||
|
|
item.Value?.GetType() ?? typeof(object));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
jsonWriter.WriteEndObject();
|
|||
|
|
jsonWriter.WriteEndObject();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
jsonWriter.WriteEndObject();
|
|||
|
|
jsonWriter.WriteEndObject();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return context.Response.WriteAsync(
|
|||
|
|
Encoding.UTF8.GetString(memoryStream.ToArray()));
|
|||
|
|
}
|
|||
|
|
}
|