public Task InvokeAsync(HttpContext context, IServiceProvider requestServiceProvider) { HttpRequest request = context.Request; if (!_options.Path.HasValue || _options.Path == request.Path) { var startPageProvider = requestServiceProvider.GetService <IStartPageProvider>(); var healthyCheck = requestServiceProvider.GetService <HealthCheckService>(); cachedHealthCheckService = cachedHealthCheckService ?? requestServiceProvider.GetService <CachedHealthCheckService>() ?? new CachedHealthCheckService(new CachedHealthCheckServiceOptions() { CacheDuration = _options.HealtyCheckCacheDuration }); var welcomePage = startPageProvider?.GetStartPage() ?? new StartPage(); return(welcomePage.ExecuteAsync(context, _options, healthyCheck, cachedHealthCheckService)); } return(_next(context)); }
public virtual async Task ExecuteAsync(HttpContext context, StartPageOptions _options, HealthCheckService healthyCheck, CachedHealthCheckService cachedHealthCheckService) { var s = await GetPageStringAsync(); s = s.Replace("{{ServiceName}}", _options.Title); if (_options.HealthCheckEnable && (healthyCheck != null)) { var servicesString = ""; var r = await cachedHealthCheckService.GetOrCheckHealthAsync(healthyCheck, context.RequestAborted); if (r != null) { s = s.Replace("{{Message}}", GetHealthStatusEmojiCode(r.Report.Status) + " " + r.Report.Status + " - " + GetHealthDateTimeString(r.Date)); servicesString = "<table style='width: 100 % '>"; servicesString += "<tr><td> </td><th> Service </th><th> Status </th></tr>"; foreach (var hi in r.Report.Entries) { servicesString += "<tr><td> " + GetHealthStatusEmojiCode(hi.Value.Status) + " </td><td> " + hi.Key + " </td><td> " + hi.Value.Status + " </td></tr>"; } servicesString += "</table>"; } else { s = s.Replace("{{Message}}", "Status: " + "Evaluating..."); } s = s.Replace("{{Services}}", servicesString); } else { s = s.Replace("{{Message}}", _options.Message); s = s.Replace("{{Services}}", ""); } s = s.Replace("{{Version}}", _options.Version); s = s.Replace("{{OrganizationName}}", _options.Organization ?? _options.Title); s = s.Replace("{{Year}}", DateTimeOffset.UtcNow.Year.ToString()); await context.Response.WriteAsync(s); }