Skip to content

Commit

Permalink
Added ready-healthcheck for message-publisher to game-service
Browse files Browse the repository at this point in the history
  • Loading branch information
szv committed Jun 29, 2023
1 parent c15d494 commit d53d828
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using CodeBreaker.Services.Games.Messaging.Services;
using Microsoft.Extensions.Diagnostics.HealthChecks;

namespace CodeBreaker.Services.Games.HealthChecks;

internal class MessagePublisherReadyCheck(IMessagePublisher messagePublisher) : IHealthCheck
{
public Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default) =>
messagePublisher.IsClosed
? Task.FromResult(HealthCheckResult.Unhealthy())
: Task.FromResult(HealthCheckResult.Healthy());
}
11 changes: 8 additions & 3 deletions src/Services/Game/src/GameService/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using CodeBreaker.Services.Games.Data.Repositories;
using CodeBreaker.Services.Games.Endpoints;
using CodeBreaker.Services.Games.Extensions;
using CodeBreaker.Services.Games.HealthChecks;
using CodeBreaker.Services.Games.Messaging.Services;
using CodeBreaker.Services.Games.Services;
using GameService.Serialization;
Expand Down Expand Up @@ -36,15 +37,19 @@
#endif
});

var serviceBusNamespace = builder.Configuration.GetRequired("GameService:ServiceBus:Namespace");
builder.Services.AddAzureClients(clientBuilder =>
{
var serviceBusNamespace = builder.Configuration.GetRequired("GameService:ServiceBus:Namespace");
clientBuilder.AddServiceBusClientWithNamespace(serviceBusNamespace);
clientBuilder.UseCredential(azureCredential);
});

builder.Services.AddSingleton<IMessagePublisher, MessagePublisher>(); builder.Services.AddHealthChecks()
.AddDbContextCheck<GamesDbContext>("Ready", tags: new[] { "ready" });
builder.Services.AddSingleton<IMessagePublisher, MessagePublisher>();

string[] readyHealthCheckTags = { "ready" };
builder.Services.AddHealthChecks()
.AddDbContextCheck<GamesDbContext>("DbReady", tags: readyHealthCheckTags)
.AddCheck<MessagePublisherReadyCheck>("MessagePublisherReady", tags: readyHealthCheckTags);

builder.Services.ConfigureHttpJsonOptions(options =>
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace CodeBreaker.Services.Games.Messaging.Services;
public interface IMessagePublisher
{
bool IsClosed { get; }
Task PublishGameCreatedAsync(GameCreatedPayload payload, CancellationToken cancellationToken);
Task PublishGameEndedAsync(GameEndedPayload payload, CancellationToken cancellationToken);
Task PublishMoveCreatedAsync(MoveCreatedPayload payload, CancellationToken cancellationToken);
Expand Down
5 changes: 5 additions & 0 deletions src/Services/Game/src/Messaging/Services/MessagePublisher.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,11 @@ public class MessagePublisher(ServiceBusClient serviceBusClient) : IMessagePubli

private readonly ServiceBusSender _gameEndedSender = serviceBusClient.CreateSender(MessagingTopics.Game_Ended);

public bool IsClosed =>
_gameCreatedSender.IsClosed ||
_moveCreatedSender.IsClosed ||
_gameEndedSender.IsClosed;

public async Task PublishGameCreatedAsync(GameCreatedPayload payload, CancellationToken cancellationToken) =>
await Publish(_gameCreatedSender, payload, cancellationToken);

Expand Down

0 comments on commit d53d828

Please sign in to comment.