Skip to content

Commit d748720

Browse files
adding health check support (#245)
1 parent 8432444 commit d748720

File tree

4 files changed

+43
-7
lines changed

4 files changed

+43
-7
lines changed

Directory.Packages.props

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
<Project>
22
<PropertyGroup Label="SharedVersions">
33
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
4-
<AkkaVersion>1.5.41</AkkaVersion>
5-
<AkkaHostingVersion>1.5.40</AkkaHostingVersion>
6-
<AkkaManagementVersion>1.5.37</AkkaManagementVersion>
7-
<PetabridgeCmdVersion>1.4.4</PetabridgeCmdVersion>
4+
<AkkaVersion>1.5.51</AkkaVersion>
5+
<AkkaHostingVersion>1.5.51</AkkaHostingVersion>
6+
<AkkaManagementVersion>1.5.50</AkkaManagementVersion>
7+
<PetabridgeCmdVersion>1.4.5</PetabridgeCmdVersion>
88
<AspireVersion>9.3.0</AspireVersion>
99
<PlaywrightVersion>1.52.0</PlaywrightVersion>
1010
</PropertyGroup>
@@ -16,7 +16,7 @@
1616
<PackageVersion Include="Akka.Discovery.KubernetesApi" Version="$(AkkaManagementVersion)" />
1717
<PackageVersion Include="Akka.Hosting" Version="$(AkkaHostingVersion)" />
1818
<PackageVersion Include="Akka.Management" Version="$(AkkaManagementVersion)" />
19-
<PackageVersion Include="Akka.Persistence.Sql.Hosting" Version="1.5.40.1" />
19+
<PackageVersion Include="Akka.Persistence.Sql.Hosting" Version="1.5.51" />
2020
<PackageVersion Include="Akka.Streams" Version="$(AkkaVersion)" />
2121
<PackageVersion Include="Akka.Streams.TestKit" Version="$(AkkaVersion)" />
2222
<PackageVersion Include="Aspire.Hosting.Azure.Storage" Version="$(AspireVersion)" />

global.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"sdk": {
33
"rollForward": "latestMinor",
4-
"version": "9.0.305"
4+
"version": "9.0.302"
55
}
66
}

src/DrawTogether/Config/AkkaConfiguration.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,19 @@ public static IServiceCollection ConfigureAkka(this IServiceCollection services,
3333
{
3434
builder.ConfigureNetwork(provider)
3535
.AddDrawingProtocolSerializer()
36+
.WithAkkaClusterReadinessCheck()
37+
.WithActorSystemLivenessCheck()
3638
.WithSqlPersistence(
3739
connectionString: connectionString,
3840
providerName: ProviderName.SqlServer2022,
3941
databaseMapping: DatabaseMapping.SqlServer,
4042
tagStorageMode: TagMode.TagTable,
4143
deleteCompatibilityMode: true,
4244
useWriterUuidColumn: true,
43-
autoInitialize: true)
45+
autoInitialize: true, journalBuilder: journalBuilder =>
46+
{
47+
journalBuilder.WithHealthCheck();
48+
})
4449
.AddAllDrawingsIndexActor(roleName)
4550
.AddDrawingSessionActor(roleName)
4651
.AddLocalDrawingSessionActor();

src/DrawTogether/Program.cs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Text.Json;
12
using Microsoft.AspNetCore.Components.Authorization;
23
using Microsoft.AspNetCore.Identity;
34
using Microsoft.EntityFrameworkCore;
@@ -6,6 +7,7 @@
67
using DrawTogether.Config;
78
using DrawTogether.Data;
89
using DrawTogether.Email;
10+
using Microsoft.AspNetCore.Diagnostics.HealthChecks;
911
using Microsoft.AspNetCore.ResponseCompression;
1012
using MudBlazor.Services;
1113
using Petabridge.Cmd.Cluster;
@@ -25,6 +27,8 @@
2527
builder.Services.AddRazorComponents()
2628
.AddInteractiveServerComponents();
2729

30+
builder.Services.AddHealthChecks();
31+
2832
// If you also want WebAssembly SSR, include this line:
2933
builder.Services.AddServerSideBlazor();
3034
builder.Services.AddMudServices();
@@ -99,6 +103,33 @@
99103
app.UseResponseCompression();
100104
app.UseAntiforgery();
101105

106+
app.MapHealthChecks("/healthz", new HealthCheckOptions
107+
{
108+
Predicate = _ => true, // include all checks
109+
ResponseWriter = async (ctx, report) =>
110+
{
111+
ctx.Response.ContentType = "application/json; charset=utf-8";
112+
113+
var payload = new
114+
{
115+
status = report.Status.ToString(),
116+
totalDuration = report.TotalDuration,
117+
checks = report.Entries.Select(e => new
118+
{
119+
name = e.Key,
120+
status = e.Value.Status.ToString(),
121+
duration = e.Value.Duration,
122+
description = e.Value.Description,
123+
tags = e.Value.Tags,
124+
data = e.Value.Data // anything you added via context.Registration
125+
})
126+
};
127+
128+
await ctx.Response.WriteAsync(JsonSerializer.Serialize(payload, new JsonSerializerOptions { WriteIndented = true }));
129+
// or in .NET 8+: await ctx.Response.WriteAsJsonAsync(payload);
130+
}
131+
});
132+
102133
app.MapRazorComponents<App>()
103134
.AddInteractiveServerRenderMode();
104135

0 commit comments

Comments
 (0)