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); }
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); } }
public async Task <IActionResult> GetInstanceStatus([FromQuery] int timeout = int.MaxValue) { return(await _scriptHostManager.DelayUntilHostReady(timeoutSeconds : timeout) ? Ok() : StatusCode(StatusCodes.Status503ServiceUnavailable)); }