Skip to content

Commit

Permalink
Merge pull request #17 from DEFRA/Add-Service-Bus-Details
Browse files Browse the repository at this point in the history
added service bus details, and health checks and diagnostics to test …
  • Loading branch information
t11omas authored Dec 13, 2024
2 parents 33cf6d3 + 4b2f36a commit f214701
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 6 deletions.
3 changes: 2 additions & 1 deletion Btms.Backend/Btms.Backend.csproj
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
Expand All @@ -16,6 +16,7 @@

<ItemGroup>
<PackageReference Include="AspNetCore.HealthChecks.Azure.Storage.Blobs" Version="8.0.1" />
<PackageReference Include="AspNetCore.HealthChecks.AzureServiceBus" Version="8.0.1" />
<PackageReference Include="AspNetCore.HealthChecks.UI.Client" Version="8.0.1" />
<PackageReference Include="Elastic.CommonSchema.Serilog" Version="8.11.1" />
<PackageReference Include="FluentValidation.DependencyInjectionExtensions" Version="11.9.2" />
Expand Down
17 changes: 17 additions & 0 deletions Btms.Backend/Config/ServiceBusOptions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using System.ComponentModel.DataAnnotations;

namespace Btms.Backend.Config;

public class ServiceBusOptions
{
public static readonly string SectionName = nameof(ServiceBusOptions);

[Required]
public required string ConnectionString { get; set; }

[Required]
public required string Topic { get; set; }

[Required]
public required string Subscription { get; set; }
}
25 changes: 22 additions & 3 deletions Btms.Backend/Endpoints/DiagnosticEndpoints.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
using Btms.Backend.Config;
using Btms.BlobService;
using Btms.Common.Extensions;
using HealthChecks.AzureServiceBus;
using HealthChecks.AzureServiceBus.Configuration;
using Microsoft.Extensions.Diagnostics.HealthChecks;
using Microsoft.Extensions.Options;

namespace Btms.Backend.Endpoints;
Expand All @@ -15,18 +18,34 @@ public static void UseDiagnosticEndpoints(this IEndpointRouteBuilder app, IOptio
if (options.Value.EnableManagement)
{
app.MapGet(BaseRoute + "/blob", GetBlobDiagnosticAsync).AllowAnonymous();
app.MapGet(BaseRoute + "/asb", GetAzureServiceBusDiagnosticAsync).AllowAnonymous();
}
}

private static async Task<IResult> GetBlobDiagnosticAsync(IBlobService service
)
private static async Task<IResult> GetBlobDiagnosticAsync(IBlobService service)
{
var result = await service.CheckBlobAsync(5, 1);
Console.WriteLine(result.ToJson());
if (result.Success)
{
return Results.Ok(result);
}
return Results.Conflict(result);
}

private static async Task<IResult> GetAzureServiceBusDiagnosticAsync(IOptions<ServiceBusOptions> serviceBusOptions)
{
var options = new AzureServiceBusSubscriptionHealthCheckHealthCheckOptions(serviceBusOptions.Value.Topic, serviceBusOptions.Value.Subscription)
{
ConnectionString = serviceBusOptions.Value.ConnectionString
};

var healthCheck = new AzureServiceBusSubscriptionHealthCheck(options);
var result = await healthCheck.CheckHealthAsync(new HealthCheckContext());

if (result.Status == HealthStatus.Healthy)
{
return Results.Ok(result);
}
return Results.Conflict(result);
}
}
14 changes: 12 additions & 2 deletions Btms.Backend/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,11 @@ static void ConfigureWebApplication(WebApplicationBuilder builder)
.AddIniFile($"Properties/local.{builder.Environment.EnvironmentName}.env", true);
}

builder.Services.BtmsAddOptions<ApiOptions, ApiOptions.Validator>(builder.Configuration, ApiOptions.SectionName)
builder.Services
.AddOptions<ServiceBusOptions>()
.Bind(builder.Configuration.GetSection(ServiceBusOptions.SectionName));

builder.Services.BtmsAddOptions<ApiOptions, ApiOptions.Validator>(builder.Configuration, ApiOptions.SectionName)
.PostConfigure(options =>
{
builder.Configuration.Bind(options);
Expand Down Expand Up @@ -214,7 +218,13 @@ static void ConfigureEndpoints(WebApplicationBuilder builder)
{
builder.Services.AddHealthChecks()
.AddAzureBlobStorage(sp => sp.GetService<IBlobServiceClientFactory>()!.CreateBlobServiceClient(5, 1), timeout: TimeSpan.FromSeconds(15))
.AddMongoDb(timeout: TimeSpan.FromSeconds(15));
.AddMongoDb(timeout: TimeSpan.FromSeconds(15))
.AddAzureServiceBusSubscription(
sp => sp.GetRequiredService<IOptions<ServiceBusOptions>>().Value.ConnectionString,
sp => sp.GetRequiredService<IOptions<ServiceBusOptions>>().Value.Topic,
sp => sp.GetRequiredService<IOptions<ServiceBusOptions>>().Value.Subscription,
configure: options => options.UsePeekMode = true,
timeout: TimeSpan.FromSeconds(15));
}

[ExcludeFromCodeCoverage]
Expand Down

0 comments on commit f214701

Please sign in to comment.