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));
        }
Beispiel #2
0
        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);
        }