Skip to content

Commit f6e411b

Browse files
KarenPoghosyanKarenPoghosyan
authored andcommitted
Merge branch 'development'
2 parents 50e07f5 + 3ce1a18 commit f6e411b

4 files changed

Lines changed: 46 additions & 41 deletions

File tree

CLAUDE.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@ Use `ICommand<T>` / `ICommand` for writes, `IQuery<T>` / `IQuery` for reads. Han
6565

6666
All infrastructure endpoints live under `/above-board/`:
6767
- `GET /above-board/ping` — returns "pong"
68-
- `GET /above-board/health` — full health check JSON
68+
- `GET /above-board/health` — minimal health status (plain text: `Healthy`, `Degraded`, or `Unhealthy`)
69+
- `GET /above-board/health/detailed` — full health check JSON (UI format, exposes per-check details)
6970
- `GET /above-board/prometheus` — metrics scrape
7071
- `PUT /above-board/maintenance` — set maintenance mode
7172

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -495,12 +495,14 @@ Set the following in your environment config or as an environment variable to en
495495
```csharp
496496
builder.AddHealthChecks();
497497

498-
app.MapHealthCheckEndpoints(); // registers /above-board/ping and /above-board/health
498+
app.MapHealthCheckEndpoints(); // registers /above-board/ping, /above-board/health and /above-board/health/detailed
499499
app.EnsureHealthy(); // runs health checks at startup; throws if anything is unhealthy
500500
```
501501

502502
`EnsureHealthy` skips MassTransit bus checks during startup (those take time to connect). The ping endpoint returns
503-
`"pong"` as plain text. The health endpoint returns the full AspNetCore.HealthChecks.UI JSON format.
503+
`"pong"` as plain text. `/above-board/health` returns a minimal plain-text status (`Healthy`, `Degraded`, or
504+
`Unhealthy`) safe to expose publicly to load balancers and uptime probes. `/above-board/health/detailed` returns
505+
the full AspNetCore.HealthChecks.UI JSON format with per-check details and should be kept behind internal access.
504506

505507
Additional health check registrations follow the standard `builder.Services.AddHealthChecks().Add...()` pattern — the
506508
library does not wrap those.

src/SharedKernel/Extensions/HealthCheckExtensions.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,9 @@ public static WebApplication MapHealthCheckEndpoints(this WebApplication app)
4343
.Produces<string>()
4444
.WithTags(EndpointConstants.TagName);
4545

46-
app.MapHealthChecks($"{EndpointConstants.BasePath}/health",
46+
app.MapHealthChecks($"{EndpointConstants.BasePath}/health");
47+
48+
app.MapHealthChecks($"{EndpointConstants.BasePath}/health/detailed",
4749
new HealthCheckOptions
4850
{
4951
ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse

src/SharedKernel/SharedKernel.csproj

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
<PackageIcon>pandatech.png</PackageIcon>
2222
<PackageReadmeFile>README.md</PackageReadmeFile>
2323

24-
<Version>2.2.8</Version>
25-
<PackageReleaseNotes>Restore OpenAPI 3.1 and fix numeric schemas rendered as string union (workaround for dotnet/aspnetcore#58882, #64145)</PackageReleaseNotes>
24+
<Version>2.3.1</Version>
25+
<PackageReleaseNotes>Split health endpoint: /above-board/health now returns a minimal status (Healthy/Degraded/Unhealthy); full JSON moved to /above-board/health/detailed.</PackageReleaseNotes>
2626

2727
<GenerateDocumentationFile>true</GenerateDocumentationFile>
2828
<IncludeSymbols>true</IncludeSymbols>
@@ -35,52 +35,52 @@
3535
</PropertyGroup>
3636

3737
<ItemGroup>
38-
<None Include="..\..\pandatech.png" Pack="true" PackagePath="\"/>
39-
<None Include="..\..\README.md" Pack="true" PackagePath="\"/>
38+
<None Include="..\..\pandatech.png" Pack="true" PackagePath="\" />
39+
<None Include="..\..\README.md" Pack="true" PackagePath="\" />
4040
</ItemGroup>
4141

4242
<ItemGroup>
43-
<EmbeddedResource Include="OpenApi\UiAssets\**\*"/>
43+
<EmbeddedResource Include="OpenApi\UiAssets\**\*" />
4444
</ItemGroup>
4545

4646
<ItemGroup>
47-
<PackageReference Include="AspNetCore.HealthChecks.Prometheus.Metrics" Version="9.0.0"/>
48-
<PackageReference Include="AspNetCore.HealthChecks.UI.Client" Version="9.0.0"/>
49-
<PackageReference Include="Elastic.CommonSchema.Serilog" Version="9.0.0"/>
50-
<PackageReference Include="FluentDateTime" Version="3.0.0"/>
51-
<PackageReference Include="FluentValidation.DependencyInjectionExtensions" Version="12.1.1"/>
52-
<PackageReference Include="HtmlSanitizer" Version="9.0.892"/>
53-
<PackageReference Include="MediatR" Version="[12.5.0]"/>
54-
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="10.0.3"/>
55-
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="10.0.3"/>
56-
<PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.MessagePack" Version="10.0.3"/>
57-
<PackageReference Include="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="10.0.3"/>
58-
<PackageReference Include="Microsoft.Extensions.Http.Resilience" Version="10.4.0" />
59-
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.15.1" />
60-
<PackageReference Include="OpenTelemetry.Exporter.Prometheus.AspNetCore" Version="1.15.0-beta.1"/>
61-
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.15.1" />
62-
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.15.1" />
63-
<PackageReference Include="OpenTelemetry.Instrumentation.EntityFrameworkCore" Version="1.15.0-beta.1"/>
64-
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.15.0"/>
65-
<PackageReference Include="OpenTelemetry.Instrumentation.Runtime" Version="1.15.0"/>
66-
<PackageReference Include="Pandatech.CommissionCalculator" Version="6.0.0"/>
67-
<PackageReference Include="Pandatech.Crypto" Version="8.0.0"/>
68-
<PackageReference Include="Pandatech.DistributedCache" Version="6.0.0"/>
69-
<PackageReference Include="PandaTech.FileExporter" Version="7.0.0"/>
70-
<PackageReference Include="PandaTech.FluentImporter" Version="5.0.0"/>
71-
<PackageReference Include="Pandatech.FluentMinimalApiMapper" Version="4.0.0"/>
72-
<PackageReference Include="Pandatech.PandaVaultClient" Version="6.0.0"/>
73-
<PackageReference Include="Pandatech.ResponseCrafter" Version="7.0.0"/>
74-
<PackageReference Include="Scalar.AspNetCore" Version="2.13.18" />
75-
<PackageReference Include="Serilog.AspNetCore" Version="10.0.0"/>
76-
<PackageReference Include="Serilog.Sinks.Async" Version="2.1.0"/>
77-
<PackageReference Include="Serilog.Sinks.Grafana.Loki" Version="8.3.2"/>
47+
<PackageReference Include="AspNetCore.HealthChecks.Prometheus.Metrics" Version="9.0.0" />
48+
<PackageReference Include="AspNetCore.HealthChecks.UI.Client" Version="9.0.0" />
49+
<PackageReference Include="Elastic.CommonSchema.Serilog" Version="9.0.0" />
50+
<PackageReference Include="FluentDateTime" Version="3.0.0" />
51+
<PackageReference Include="FluentValidation.DependencyInjectionExtensions" Version="12.1.1" />
52+
<PackageReference Include="HtmlSanitizer" Version="9.0.892" />
53+
<PackageReference Include="MediatR" Version="[12.5.0]" />
54+
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="10.0.8" />
55+
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="10.0.8" />
56+
<PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.MessagePack" Version="10.0.8" />
57+
<PackageReference Include="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="10.0.8" />
58+
<PackageReference Include="Microsoft.Extensions.Http.Resilience" Version="10.6.0" />
59+
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.15.3" />
60+
<PackageReference Include="OpenTelemetry.Exporter.Prometheus.AspNetCore" Version="1.15.0-beta.1" />
61+
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.15.3" />
62+
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.15.2" />
63+
<PackageReference Include="OpenTelemetry.Instrumentation.EntityFrameworkCore" Version="1.15.0-beta.1" />
64+
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.15.1" />
65+
<PackageReference Include="OpenTelemetry.Instrumentation.Runtime" Version="1.15.1" />
66+
<PackageReference Include="Pandatech.CommissionCalculator" Version="6.0.0" />
67+
<PackageReference Include="Pandatech.Crypto" Version="8.0.0" />
68+
<PackageReference Include="Pandatech.DistributedCache" Version="6.0.0" />
69+
<PackageReference Include="PandaTech.FileExporter" Version="7.0.0" />
70+
<PackageReference Include="PandaTech.FluentImporter" Version="5.0.0" />
71+
<PackageReference Include="Pandatech.FluentMinimalApiMapper" Version="4.0.0" />
72+
<PackageReference Include="Pandatech.PandaVaultClient" Version="6.0.0" />
73+
<PackageReference Include="Pandatech.ResponseCrafter" Version="7.0.0" />
74+
<PackageReference Include="Scalar.AspNetCore" Version="2.14.14" />
75+
<PackageReference Include="Serilog.AspNetCore" Version="10.0.0" />
76+
<PackageReference Include="Serilog.Sinks.Async" Version="2.1.0" />
77+
<PackageReference Include="Serilog.Sinks.Grafana.Loki" Version="8.3.2" />
7878
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="10.1.7" />
7979
</ItemGroup>
8080

8181
<!-- Analyzers only — never shipped to consumers -->
8282
<ItemGroup>
83-
<PackageReference Include="Pandatech.Analyzers" Version="[2.1.0]" PrivateAssets="all"/>
83+
<PackageReference Include="Pandatech.Analyzers" Version="[2.1.0]" PrivateAssets="all" />
8484
<PackageReference Include="SonarAnalyzer.CSharp" Version="[10.18.0.131500]">
8585
<PrivateAssets>all</PrivateAssets>
8686
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>

0 commit comments

Comments
 (0)