Esempio n. 1
0
        public WebHostLanguageWorkerChannelManagerTests()
        {
            _eventManager    = new ScriptEventManager();
            _rpcServer       = new TestRpcServer();
            _loggerProvider  = new TestLoggerProvider();
            _loggerFactory   = new LoggerFactory();
            _testEnvironment = new TestEnvironment();
            _loggerFactory.AddProvider(_loggerProvider);
            _languageWorkerProcess = new Mock <ILanguageWorkerProcess>();
            _languageWorkerOptions = new LanguageWorkerOptions
            {
                WorkerConfigs = TestHelpers.GetTestWorkerConfigs()
            };
            var applicationHostOptions = new ScriptApplicationHostOptions
            {
                IsSelfHost = true,
                ScriptPath = @"c:\testing\FUNCTIONS-TEST\test$#"
            };

            _optionsMonitor = TestHelpers.CreateOptionsMonitor(applicationHostOptions);

            _languageWorkerProcessFactory = new Mock <ILanguageWorkerProcessFactory>();
            _languageWorkerProcessFactory.Setup(m => m.CreateLanguageWorkerProcess(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>())).Returns(_languageWorkerProcess.Object);

            _languageWorkerChannelFactory = new TestLanguageWorkerChannelFactory(_eventManager, null, _scriptRootPath);
            _languageWorkerChannelManager = new WebHostLanguageWorkerChannelManager(_eventManager, _testEnvironment, _loggerFactory, _languageWorkerChannelFactory, _optionsMonitor);
        }
 public TestLanguageWorkerChannelManager(IScriptEventManager eventManager, ILogger testLogger, string scriptRootPath, ILanguageWorkerChannelFactory testLanguageWorkerChannelFactory)
 {
     _eventManager   = eventManager;
     _testLogger     = testLogger;
     _scriptRootPath = scriptRootPath;
     _testLanguageWorkerChannelFactory = testLanguageWorkerChannelFactory;
 }
Esempio n. 3
0
        public WebHostLanguageWorkerChannelManager(IScriptEventManager eventManager, IEnvironment environment, ILoggerFactory loggerFactory, ILanguageWorkerChannelFactory languageWorkerChannelFactory, IOptionsMonitor <ScriptApplicationHostOptions> applicationHostOptions)
        {
            _environment   = environment ?? throw new ArgumentNullException(nameof(environment));
            _eventManager  = eventManager;
            _loggerFactory = loggerFactory;
            _languageWorkerChannelFactory = languageWorkerChannelFactory;
            _logger = loggerFactory.CreateLogger <WebHostLanguageWorkerChannelManager>();
            _applicationHostOptions = applicationHostOptions;

            _shutdownStandbyWorkerChannels = ScheduleShutdownStandbyChannels;
            _shutdownStandbyWorkerChannels = _shutdownStandbyWorkerChannels.Debounce(milliseconds: 5000);
        }
        public FunctionDispatcher(IOptions <ScriptJobHostOptions> scriptHostOptions,
                                  IMetricsLogger metricsLogger,
                                  IEnvironment environment,
                                  IScriptJobHostEnvironment scriptJobHostEnvironment,
                                  IScriptEventManager eventManager,
                                  ILoggerFactory loggerFactory,
                                  ILanguageWorkerChannelFactory languageWorkerChannelFactory,
                                  IOptions <LanguageWorkerOptions> languageWorkerOptions,
                                  IWebHostLanguageWorkerChannelManager webHostLanguageWorkerChannelManager,
                                  IJobHostLanguageWorkerChannelManager jobHostLanguageWorkerChannelManager,
                                  IOptions <ManagedDependencyOptions> managedDependencyOptions,
                                  IFunctionDispatcherLoadBalancer functionDispatcherLoadBalancer)
        {
            _metricsLogger                       = metricsLogger;
            _scriptOptions                       = scriptHostOptions.Value;
            _environment                         = environment;
            _scriptJobHostEnvironment            = scriptJobHostEnvironment;
            _webHostLanguageWorkerChannelManager = webHostLanguageWorkerChannelManager;
            _jobHostLanguageWorkerChannelManager = jobHostLanguageWorkerChannelManager;
            _eventManager                        = eventManager;
            _workerConfigs                       = languageWorkerOptions.Value.WorkerConfigs;
            _managedDependencyOptions            = managedDependencyOptions;
            _logger = loggerFactory.CreateLogger <FunctionDispatcher>();
            _languageWorkerChannelFactory = languageWorkerChannelFactory;
            _workerRuntime = _environment.GetEnvironmentVariable(LanguageWorkerConstants.FunctionWorkerRuntimeSettingName);

            var processCount = _environment.GetEnvironmentVariable(LanguageWorkerConstants.FunctionsWorkerProcessCountSettingName);

            _maxProcessCount = (processCount != null && int.Parse(processCount) > 1) ? int.Parse(processCount) : 1;
            _maxProcessCount = _maxProcessCount > _maxAllowedProcessCount ? _maxAllowedProcessCount : _maxProcessCount;
            _functionDispatcherLoadBalancer = functionDispatcherLoadBalancer;

            State = FunctionDispatcherState.Default;

            _workerErrorSubscription = _eventManager.OfType <WorkerErrorEvent>()
                                       .Subscribe(WorkerError);

            _rpcChannelReadySubscriptions = _eventManager.OfType <RpcJobHostChannelReadyEvent>()
                                            .ObserveOn(NewThreadScheduler.Default)
                                            .Subscribe(AddOrUpdateWorkerChannels);

            _shutdownStandbyWorkerChannels = ShutdownWebhostLanguageWorkerChannels;
            _shutdownStandbyWorkerChannels = _shutdownStandbyWorkerChannels.Debounce(5000);
        }