Esempio n. 1
0
        public async Task Invoke(HttpContext httpContext, WebScriptHostManager manager)
        {
            // in standby mode, we don't want to wait for host start
            bool bypassHostCheck = WebScriptHostManager.InStandbyMode;

            if (!bypassHostCheck)
            {
                bool hostReady = await manager.DelayUntilHostReady();

                if (!hostReady)
                {
                    httpContext.Response.StatusCode = StatusCodes.Status503ServiceUnavailable;
                    await httpContext.Response.WriteAsync("Function host is not running.");

                    return;
                }
            }

            if (StandbyManager.IsWarmUpRequest(httpContext.Request))
            {
                await StandbyManager.WarmUp(httpContext.Request, _scriptHostManager);
            }

            await _next.Invoke(httpContext);
        }
Esempio n. 2
0
        public async Task DelayUntilHostReady_HostNotRunning_Returns503()
        {
            var settingsManager = ScriptSettingsManager.Instance;
            var eventManager    = new Mock <IScriptEventManager>();
            var managerMock     = new Mock <WebScriptHostManager>(MockBehavior.Strict, new ScriptHostConfiguration(),
                                                                  new TestSecretManagerFactory(), eventManager.Object, settingsManager, new WebHostSettings {
                SecretsPath = _secretsDirectory.Path
            },
                                                                  null, NullLoggerFactory.Instance, null, null, null, null, null, 1, 50);

            managerMock.SetupGet(p => p.State).Returns(ScriptHostState.Default);
            managerMock.SetupGet(p => p.LastError).Returns((Exception)null);

            var ex = await Assert.ThrowsAsync <HttpException>(async() => await WebScriptHostManager.DelayUntilHostReady(managerMock.Object, 1, 50));

            Assert.Equal(HttpStatusCode.ServiceUnavailable, (HttpStatusCode)ex.StatusCode);
        }
        public async Task Invoke(HttpContext httpContext, WebScriptHostManager manager)
        {
            using (Logger.VerifyingHostAvailabilityScope(_logger, httpContext.TraceIdentifier))
            {
                Logger.InitiatingHostAvailabilityCheck(_logger);

                bool hostReady = await manager.DelayUntilHostReady(throwOnFailure : false);

                if (!hostReady)
                {
                    Logger.HostUnavailableAfterCheck(_logger);

                    httpContext.Response.StatusCode = StatusCodes.Status503ServiceUnavailable;
                    await httpContext.Response.WriteAsync("Function host is not running.");

                    return;
                }

                Logger.HostAvailabilityCheckSucceeded(_logger);

                await _next.Invoke(httpContext);
            }
        }
Esempio n. 4
0
 public async Task <IActionResult> GetInstanceStatus([FromQuery] int timeout = int.MaxValue)
 {
     return(await _scriptHostManager.DelayUntilHostReady(timeoutSeconds : timeout)
         ? Ok()
         : StatusCode(StatusCodes.Status503ServiceUnavailable));
 }