Esempio n. 1
0
        public IActionResult DrainStatus([FromServices] IScriptHostManager scriptHostManager)
        {
            if (Utility.TryGetHostService(scriptHostManager, out IFunctionActivityStatusProvider functionActivityStatusProvider) &&
                Utility.TryGetHostService(scriptHostManager, out IDrainModeManager drainModeManager))
            {
                var            functionActivityStatus = functionActivityStatusProvider.GetStatus();
                DrainModeState state = DrainModeState.Disabled;
                if (drainModeManager.IsDrainModeEnabled)
                {
                    state = (functionActivityStatus.OutstandingInvocations == 0 && functionActivityStatus.OutstandingRetries == 0)
                            ? DrainModeState.Completed : DrainModeState.InProgress;
                }

                DrainModeStatus status = new DrainModeStatus()
                {
                    State = state
                };

                string message = $"Drain Status: {JsonConvert.SerializeObject(state, Formatting.Indented)}, Activity Status: {JsonConvert.SerializeObject(functionActivityStatus, Formatting.Indented)}";
                _logger.LogDebug(message);

                return(Ok(status));
            }
            else
            {
                return(StatusCode(StatusCodes.Status503ServiceUnavailable));
            }
        }
Esempio n. 2
0
        public void GetDrainStatus_HostRunning_ReturnsExpected(int outstandingRetries, int outstandingInvocations, DrainModeState expectedState)
        {
            var scriptHostManagerMock          = new Mock <IScriptHostManager>(MockBehavior.Strict);
            var functionActivityStatusProvider = new Mock <IFunctionActivityStatusProvider>(MockBehavior.Strict);
            var drainModeManager = new Mock <IDrainModeManager>(MockBehavior.Strict);

            functionActivityStatusProvider.Setup(x => x.GetStatus()).Returns(new FunctionActivityStatus()
            {
                OutstandingRetries     = outstandingRetries,
                OutstandingInvocations = outstandingInvocations
            });
            var serviceProviderMock = scriptHostManagerMock.As <IServiceProvider>();

            serviceProviderMock.Setup(x => x.GetService(typeof(IFunctionActivityStatusProvider))).Returns(functionActivityStatusProvider.Object);
            serviceProviderMock.Setup(x => x.GetService(typeof(IDrainModeManager))).Returns(drainModeManager.Object);
            drainModeManager.Setup(x => x.IsDrainModeEnabled).Returns(expectedState != DrainModeState.Disabled);

            var result = (OkObjectResult)_hostController.DrainStatus(scriptHostManagerMock.Object);

            Assert.Equal(expectedState, (result.Value as DrainModeStatus).State);
        }