diff --git a/src/Services/Catalog/Catalog.API/Startup.cs b/src/Services/Catalog/Catalog.API/Startup.cs index 9eb195674..65fb26515 100644 --- a/src/Services/Catalog/Catalog.API/Startup.cs +++ b/src/Services/Catalog/Catalog.API/Startup.cs @@ -50,7 +50,12 @@ services.AddHealthChecks(checks => { - checks.AddSqlCheck("CatalogDb", Configuration["ConnectionString"]); + var minutes = 1; + if (int.TryParse(Configuration["HealthCheck:Timeout"], out var minutesParsed)) + { + minutes = minutesParsed; + } + checks.AddSqlCheck("CatalogDb", Configuration["ConnectionString"], TimeSpan.FromMinutes(minutes)); }); services.AddMvc(options => diff --git a/src/Services/Identity/Identity.API/Startup.cs b/src/Services/Identity/Identity.API/Startup.cs index b47f0535d..981e305c8 100644 --- a/src/Services/Identity/Identity.API/Startup.cs +++ b/src/Services/Identity/Identity.API/Startup.cs @@ -66,7 +66,12 @@ namespace eShopOnContainers.Identity services.AddHealthChecks(checks => { - checks.AddSqlCheck("Identity_Db", Configuration.GetConnectionString("DefaultConnection")); + var minutes = 1; + if (int.TryParse(Configuration["HealthCheck:Timeout"], out var minutesParsed)) + { + minutes = minutesParsed; + } + checks.AddSqlCheck("Identity_Db", Configuration.GetConnectionString("DefaultConnection"), TimeSpan.FromMinutes(minutes)); }); services.AddTransient(); diff --git a/src/Services/Ordering/Ordering.API/Startup.cs b/src/Services/Ordering/Ordering.API/Startup.cs index 58d8f1cbe..f5b1261d5 100644 --- a/src/Services/Ordering/Ordering.API/Startup.cs +++ b/src/Services/Ordering/Ordering.API/Startup.cs @@ -61,7 +61,12 @@ services.AddHealthChecks(checks => { - checks.AddSqlCheck("OrderingDb", Configuration["ConnectionString"]); + var minutes = 1; + if (int.TryParse(Configuration["HealthCheck:Timeout"], out var minutesParsed)) + { + minutes = minutesParsed; + } + checks.AddSqlCheck("OrderingDb", Configuration["ConnectionString"], TimeSpan.FromMinutes(minutes)); }); services.AddEntityFrameworkSqlServer() diff --git a/src/Web/WebMVC/Startup.cs b/src/Web/WebMVC/Startup.cs index afc266051..c299165b4 100644 --- a/src/Web/WebMVC/Startup.cs +++ b/src/Web/WebMVC/Startup.cs @@ -54,16 +54,21 @@ namespace Microsoft.eShopOnContainers.WebMVC services.AddHealthChecks(checks => { - checks.AddUrlCheck(Configuration["CatalogUrl"]); - checks.AddUrlCheck(Configuration["OrderingUrl"]); - checks.AddUrlCheck(Configuration["BasketUrl"]); - checks.AddUrlCheck(Configuration["IdentityUrl"]); + var minutes = 1; + if (int.TryParse(Configuration["HealthCheck:Timeout"], out var minutesParsed)) + { + minutes = minutesParsed; + } + checks.AddUrlCheck(Configuration["CatalogUrl"], TimeSpan.FromMinutes(minutes)); + checks.AddUrlCheck(Configuration["OrderingUrl"], TimeSpan.FromMinutes(minutes)); + checks.AddUrlCheck(Configuration["BasketUrl"], TimeSpan.FromMinutes(minutes)); + checks.AddUrlCheck(Configuration["IdentityUrl"], TimeSpan.FromMinutes(minutes)); }); // Add application services. - services.AddSingleton(); - services.AddTransient(); - services.AddTransient(); + services.AddSingleton(); + services.AddTransient(); + services.AddTransient(); services.AddTransient(); services.AddTransient, IdentityParser>(); @@ -76,7 +81,7 @@ namespace Microsoft.eShopOnContainers.WebMVC { services.AddSingleton(); } - } + } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) @@ -113,10 +118,10 @@ namespace Microsoft.eShopOnContainers.WebMVC AuthenticationScheme = "oidc", SignInScheme = "Cookies", Authority = identityUrl.ToString(), - PostLogoutRedirectUri = callBackUrl.ToString(), + PostLogoutRedirectUri = callBackUrl.ToString(), ClientId = "mvc", ClientSecret = "secret", - ResponseType = "code id_token", + ResponseType = "code id_token", SaveTokens = true, GetClaimsFromUserInfoEndpoint = true, RequireHttpsMetadata = false, diff --git a/src/Web/WebSPA/Startup.cs b/src/Web/WebSPA/Startup.cs index ee932f476..e834c1977 100644 --- a/src/Web/WebSPA/Startup.cs +++ b/src/Web/WebSPA/Startup.cs @@ -45,10 +45,16 @@ namespace eShopConContainers.WebSPA { services.AddHealthChecks(checks => { - checks.AddUrlCheck(Configuration["CatalogUrl"]); - checks.AddUrlCheck(Configuration["OrderingUrl"]); - checks.AddUrlCheck(Configuration["BasketUrl"]); - checks.AddUrlCheck(Configuration["IdentityUrl"]); + var minutes = 1; + if (int.TryParse(Configuration["HealthCheck:Timeout"], out var minutesParsed)) + { + minutes = minutesParsed; + } + + checks.AddUrlCheck(Configuration["CatalogUrl"], TimeSpan.FromMinutes(minutes)); + checks.AddUrlCheck(Configuration["OrderingUrl"], TimeSpan.FromMinutes(minutes)); + checks.AddUrlCheck(Configuration["BasketUrl"], TimeSpan.FromMinutes(minutes)); + checks.AddUrlCheck(Configuration["IdentityUrl"], TimeSpan.FromMinutes(minutes)); }); services.Configure(Configuration); diff --git a/src/Web/WebStatus/Controllers/HomeController.cs b/src/Web/WebStatus/Controllers/HomeController.cs index 34a31f1f5..cd59c44d2 100644 --- a/src/Web/WebStatus/Controllers/HomeController.cs +++ b/src/Web/WebStatus/Controllers/HomeController.cs @@ -28,6 +28,7 @@ namespace WebStatus.Controllers data.AddResult(checkResult.Key, checkResult.Value); } + ViewBag.RefreshSeconds = 60; return View(data); } diff --git a/src/Web/WebStatus/Extensions/HealthCheckBuilderExtensions.cs b/src/Web/WebStatus/Extensions/HealthCheckBuilderExtensions.cs index 369f59722..c0655b753 100644 --- a/src/Web/WebStatus/Extensions/HealthCheckBuilderExtensions.cs +++ b/src/Web/WebStatus/Extensions/HealthCheckBuilderExtensions.cs @@ -8,11 +8,11 @@ namespace WebStatus.Extensions { public static class HealthCheckBuilderExtensions { - public static HealthCheckBuilder AddUrlCheckIfNotNull(this HealthCheckBuilder builder, string url) + public static HealthCheckBuilder AddUrlCheckIfNotNull(this HealthCheckBuilder builder, string url, TimeSpan cacheDuration) { if (!string.IsNullOrEmpty(url)) { - builder.AddUrlCheck(url); + builder.AddUrlCheck(url, cacheDuration); } return builder; diff --git a/src/Web/WebStatus/Startup.cs b/src/Web/WebStatus/Startup.cs index 06416940c..0b9ecb937 100644 --- a/src/Web/WebStatus/Startup.cs +++ b/src/Web/WebStatus/Startup.cs @@ -32,12 +32,18 @@ namespace WebStatus // Add framework services. services.AddHealthChecks(checks => { - checks.AddUrlCheckIfNotNull(Configuration["OrderingUrl"]); - checks.AddUrlCheckIfNotNull(Configuration["BasketUrl"]); - checks.AddUrlCheckIfNotNull(Configuration["CatalogUrl"]); - checks.AddUrlCheckIfNotNull(Configuration["IdentityUrl"]); - checks.AddUrlCheckIfNotNull(Configuration["mvc"]); - checks.AddUrlCheckIfNotNull(Configuration["spa"]); + var minutes = 1; + if (int.TryParse(Configuration["HealthCheck:Timeout"], out var minutesParsed)) + { + minutes = minutesParsed; + } + + checks.AddUrlCheckIfNotNull(Configuration["OrderingUrl"], TimeSpan.FromMinutes(minutes)); + checks.AddUrlCheckIfNotNull(Configuration["BasketUrl"], TimeSpan.FromMinutes(minutes)); + checks.AddUrlCheckIfNotNull(Configuration["CatalogUrl"], TimeSpan.FromMinutes(minutes)); + checks.AddUrlCheckIfNotNull(Configuration["IdentityUrl"], TimeSpan.FromMinutes(minutes)); + checks.AddUrlCheckIfNotNull(Configuration["mvc"], TimeSpan.FromMinutes(minutes)); + checks.AddUrlCheckIfNotNull(Configuration["spa"], TimeSpan.FromMinutes(minutes)); }); services.AddMvc(); } diff --git a/src/Web/WebStatus/Views/Shared/_Layout.cshtml b/src/Web/WebStatus/Views/Shared/_Layout.cshtml index a7eb2e3b6..b7a4d7698 100644 --- a/src/Web/WebStatus/Views/Shared/_Layout.cshtml +++ b/src/Web/WebStatus/Views/Shared/_Layout.cshtml @@ -16,6 +16,12 @@ asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" /> + + @if (ViewBag.RefreshSeconds != null && ViewBag.RefreshSeconds > 0) + { + + } + @Html.Raw(JavaScriptSnippet.FullScript)