diff --git a/src/Services/Basket/Basket.API/Basket.API.csproj b/src/Services/Basket/Basket.API/Basket.API.csproj index 850660fdc..5c4a66df3 100644 --- a/src/Services/Basket/Basket.API/Basket.API.csproj +++ b/src/Services/Basket/Basket.API/Basket.API.csproj @@ -7,6 +7,7 @@ + diff --git a/src/Services/Basket/Basket.API/CustomExtensionMethods.cs b/src/Services/Basket/Basket.API/CustomExtensionMethods.cs index 67ee876b0..d92432521 100644 --- a/src/Services/Basket/Basket.API/CustomExtensionMethods.cs +++ b/src/Services/Basket/Basket.API/CustomExtensionMethods.cs @@ -4,6 +4,13 @@ public static class CustomExtensionMethods { public static IServiceCollection AddRedis(this IServiceCollection services, IConfiguration configuration) { + services.AddHealthChecks() + .AddRedis(_ => + { + return configuration.GetConnectionString("redis"); + }, + "redis", tags: new[] { "ready", "liveness" }); + return services.AddSingleton(sp => { var redisConfig = ConfigurationOptions.Parse(configuration.GetConnectionString("redis"), true); diff --git a/src/Services/Basket/Basket.API/Program.cs b/src/Services/Basket/Basket.API/Program.cs index 0563867fb..664a152fb 100644 --- a/src/Services/Basket/Basket.API/Program.cs +++ b/src/Services/Basket/Basket.API/Program.cs @@ -1,4 +1,6 @@ -var builder = WebApplication.CreateBuilder(args); +using Microsoft.Extensions.Diagnostics.HealthChecks; + +var builder = WebApplication.CreateBuilder(args); builder.AddServiceDefaults(); @@ -23,20 +25,38 @@ builder.Services.AddTransient(); var app = builder.Build(); -app.UseServiceDefaults(); +try +{ + app.Logger.LogInformation("Running health checks..."); -app.MapGet("/", () => Results.Redirect("/swagger")); + // Do a health check on startup, this will throw an exception if any of the checks fail + var report = await app.Services.GetRequiredService().CheckHealthAsync(); -app.MapGrpcService(); -app.MapControllers(); + if (report.Status == HealthStatus.Unhealthy) + { + app.Logger.LogCritical("Health checks failed!"); + foreach (var entry in report.Entries) + { + if (entry.Value.Status == HealthStatus.Unhealthy) + { + app.Logger.LogCritical("{Check}: {Status}", entry.Key, entry.Value.Status); + } + } + return 1; + } -var eventBus = app.Services.GetRequiredService(); + app.UseServiceDefaults(); -eventBus.Subscribe(); -eventBus.Subscribe(); + app.MapGet("/", () => Results.Redirect("/swagger")); + + app.MapGrpcService(); + app.MapControllers(); + + var eventBus = app.Services.GetRequiredService(); + + eventBus.Subscribe(); + eventBus.Subscribe(); -try -{ await app.RunAsync(); return 0; diff --git a/src/Services/Basket/Basket.API/Properties/serviceDependencies.json b/src/Services/Basket/Basket.API/Properties/serviceDependencies.json index 696e09f1b..adb08c8f2 100644 --- a/src/Services/Basket/Basket.API/Properties/serviceDependencies.json +++ b/src/Services/Basket/Basket.API/Properties/serviceDependencies.json @@ -7,6 +7,11 @@ "type": "rabbitmq", "connectionId": "eventbus", "dynamicId": null + }, + "redis1": { + "type": "redis", + "connectionId": "ConnectionStrings:Redis", + "dynamicId": null } } } \ No newline at end of file diff --git a/src/Services/Basket/Basket.API/Properties/serviceDependencies.local.json b/src/Services/Basket/Basket.API/Properties/serviceDependencies.local.json index 81f47080f..8fb5df48a 100644 --- a/src/Services/Basket/Basket.API/Properties/serviceDependencies.local.json +++ b/src/Services/Basket/Basket.API/Properties/serviceDependencies.local.json @@ -11,6 +11,16 @@ "type": "rabbitmq.container", "connectionId": "eventbus", "dynamicId": null + }, + "redis1": { + "serviceConnectorResourceId": "", + "containerPorts": "6379:6379", + "secretStore": "LocalSecretsFile", + "containerName": "basket-redis", + "containerImage": "redis:alpine", + "type": "redis.container", + "connectionId": "ConnectionStrings:Redis", + "dynamicId": null } } } \ No newline at end of file diff --git a/src/Services/Services.Common/CommonExtensions.cs b/src/Services/Services.Common/CommonExtensions.cs index bd1297682..7971b11a3 100644 --- a/src/Services/Services.Common/CommonExtensions.cs +++ b/src/Services/Services.Common/CommonExtensions.cs @@ -283,13 +283,13 @@ public static class CommonExtensions "servicebus" => hcBuilder.AddAzureServiceBusTopic( eventBusConnectionString, topicName: "eshop_event_bus", - name: "servicebus-check", - tags: new string[] { "servicebus" }), + name: "servicebus", + tags: new string[] { "ready" }), _ => hcBuilder.AddRabbitMQ( $"amqp://{eventBusConnectionString}", - name: "rabbitmqbus-check", - tags: new string[] { "rabbitmqbus" }) + name: "rabbitmq", + tags: new string[] { "ready" }) }; }