public LanguageWorkerChannel( ScriptHostConfiguration scriptConfig, IScriptEventManager eventManager, IWorkerProcessFactory processFactory, IProcessRegistry processRegistry, IObservable <FunctionRegistrationContext> functionRegistrations, WorkerConfig workerConfig, Uri serverUri, ILoggerFactory loggerFactory) { _workerId = Guid.NewGuid().ToString(); _scriptConfig = scriptConfig; _eventManager = eventManager; _processFactory = processFactory; _processRegistry = processRegistry; _functionRegistrations = functionRegistrations; _workerConfig = workerConfig; _serverUri = serverUri; _logger = loggerFactory.CreateLogger($"Worker.{workerConfig.Language}.{_workerId}"); _inboundWorkerEvents = _eventManager.OfType <InboundEvent>() .Where(msg => msg.WorkerId == _workerId); _eventSubscriptions.Add(_inboundWorkerEvents .Where(msg => msg.MessageType == MsgType.RpcLog) .Subscribe(Log)); if (scriptConfig.LogFilter.Filter("Worker", LogLevel.Trace)) { _eventSubscriptions.Add(_eventManager.OfType <RpcEvent>() .Where(msg => msg.WorkerId == _workerId) .Subscribe(msg => { var jsonMsg = JsonConvert.SerializeObject(msg, _verboseSerializerSettings); _logger.LogTrace(jsonMsg); })); } _eventSubscriptions.Add(_eventManager.OfType <FileEvent>() .Where(msg => Path.GetExtension(msg.FileChangeArguments.FullPath) == Config.Extension) .Throttle(TimeSpan.FromMilliseconds(300)) // debounce .Subscribe(msg => _eventManager.Publish(new HostRestartEvent()))); StartWorker(); }
internal LanguageWorkerChannel( string workerId, string rootScriptPath, IScriptEventManager eventManager, IObservable <FunctionRegistrationContext> functionRegistrations, IWorkerProcessFactory processFactory, IProcessRegistry processRegistry, WorkerConfig workerConfig, Uri serverUri, ILoggerFactory loggerFactory, IMetricsLogger metricsLogger, int attemptCount) { _workerId = workerId; _functionRegistrations = functionRegistrations; _rootScriptPath = rootScriptPath; _eventManager = eventManager; _processFactory = processFactory; _processRegistry = processRegistry; _workerConfig = workerConfig; _serverUri = serverUri; _workerChannelLogger = loggerFactory.CreateLogger($"Worker.{workerConfig.Language}.{_workerId}"); _userLogsConsoleLogger = loggerFactory.CreateLogger(LanguageWorkerConstants.FunctionConsoleLogCategoryName); _inboundWorkerEvents = _eventManager.OfType <InboundEvent>() .Where(msg => msg.WorkerId == _workerId); _eventSubscriptions.Add(_inboundWorkerEvents .Where(msg => msg.MessageType == MsgType.RpcLog) .Subscribe(Log)); _eventSubscriptions.Add(_eventManager.OfType <RpcEvent>() .Where(msg => msg.WorkerId == _workerId) .Subscribe(msg => { var jsonMsg = JsonConvert.SerializeObject(msg, LanguageWorkerChannelUtilities.VerboseSerializerSettings); _userLogsConsoleLogger.LogDebug(jsonMsg); })); _eventSubscriptions.Add(_eventManager.OfType <FileEvent>() .Where(msg => Config.Extensions.Contains(Path.GetExtension(msg.FileChangeArguments.FullPath))) .Throttle(TimeSpan.FromMilliseconds(300)) // debounce .Subscribe(msg => _eventManager.Publish(new HostRestartEvent()))); _startLatencyMetric = metricsLogger?.LatencyEvent(string.Format(MetricEventNames.WorkerInitializeLatency, workerConfig.Language, attemptCount)); }
internal HttpWorkerProcess(string workerId, string rootScriptPath, WorkerProcessArguments workerProcessArguments, IScriptEventManager eventManager, IWorkerProcessFactory processFactory, IProcessRegistry processRegistry, ILogger workerProcessLogger, ILanguageWorkerConsoleLogSource consoleLogSource) : base(eventManager, processRegistry, workerProcessLogger, consoleLogSource) { _processFactory = processFactory; _eventManager = eventManager; _workerProcessLogger = workerProcessLogger; _workerId = workerId; _scriptRootPath = rootScriptPath; _workerProcessArguments = workerProcessArguments; }
public HttpWorkerProcessFactory(IScriptEventManager eventManager, ILoggerFactory loggerFactory, IWorkerProcessFactory defaultWorkerProcessFactory, IProcessRegistry processRegistry, IWorkerConsoleLogSource consoleLogSource, IEnvironment environment, IMetricsLogger metricsLogger, IServiceProvider serviceProvider) { _loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory)); _eventManager = eventManager ?? throw new ArgumentNullException(nameof(eventManager)); _consoleLogSource = consoleLogSource ?? throw new ArgumentNullException(nameof(consoleLogSource)); _workerProcessFactory = defaultWorkerProcessFactory ?? throw new ArgumentNullException(nameof(defaultWorkerProcessFactory)); _processRegistry = processRegistry ?? throw new ArgumentNullException(nameof(processRegistry)); _metricsLogger = metricsLogger ?? throw new ArgumentNullException(nameof(metricsLogger)); _environment = environment; _serviceProvider = serviceProvider; }
public RpcWorkerProcessFactory(IRpcServer rpcServer, IScriptEventManager eventManager, ILoggerFactory loggerFactory, IWorkerProcessFactory defaultWorkerProcessFactory, IProcessRegistry processRegistry, IWorkerConsoleLogSource consoleLogSource, IMetricsLogger metricsLogger, IServiceProvider serviceProvider) { _loggerFactory = loggerFactory; _eventManager = eventManager; _rpcServer = rpcServer; _consoleLogSource = consoleLogSource; _workerProcessFactory = defaultWorkerProcessFactory; _processRegistry = processRegistry; _metricsLogger = metricsLogger; _serviceProvider = serviceProvider; }
internal HttpWorkerProcess(string workerId, string rootScriptPath, HttpWorkerOptions httpWorkerOptions, IScriptEventManager eventManager, IWorkerProcessFactory processFactory, IProcessRegistry processRegistry, ILogger workerProcessLogger, IWorkerConsoleLogSource consoleLogSource, IEnvironment environment, IMetricsLogger metricsLogger) : base(eventManager, processRegistry, workerProcessLogger, consoleLogSource, metricsLogger, httpWorkerOptions.Description.UseStdErrorStreamForErrorsOnly) { _processFactory = processFactory; _eventManager = eventManager; _workerProcessLogger = workerProcessLogger; _workerId = workerId; _scriptRootPath = rootScriptPath; _httpWorkerOptions = httpWorkerOptions; _workerProcessArguments = _httpWorkerOptions.Arguments; _environment = environment; }
internal RpcWorkerProcess(string runtime, string workerId, string rootScriptPath, Uri serverUri, WorkerProcessArguments workerProcessArguments, IScriptEventManager eventManager, IWorkerProcessFactory processFactory, IProcessRegistry processRegistry, ILogger workerProcessLogger, IWorkerConsoleLogSource consoleLogSource) : base(eventManager, processRegistry, workerProcessLogger, consoleLogSource) { _runtime = runtime; _processFactory = processFactory; _eventManager = eventManager; _workerProcessLogger = workerProcessLogger; _workerId = workerId; _serverUri = serverUri; _scriptRootPath = rootScriptPath; _workerProcessArguments = workerProcessArguments; }
internal RpcWorkerProcess(string runtime, string workerId, string rootScriptPath, Uri serverUri, RpcWorkerConfig rpcWorkerConfig, IScriptEventManager eventManager, IWorkerProcessFactory processFactory, IProcessRegistry processRegistry, ILogger workerProcessLogger, IWorkerConsoleLogSource consoleLogSource, IMetricsLogger metricsLogger) : base(eventManager, processRegistry, workerProcessLogger, consoleLogSource, metricsLogger, rpcWorkerConfig.Description.UseStdErrorStreamForErrorsOnly) { _runtime = runtime; _processFactory = processFactory; _eventManager = eventManager; _workerProcessLogger = workerProcessLogger; _workerId = workerId; _serverUri = serverUri; _scriptRootPath = rootScriptPath; _workerProcessArguments = rpcWorkerConfig.Arguments; _workerDirectory = rpcWorkerConfig.Description.WorkerDirectory; }
public LanguageWorkerChannelManager(IScriptEventManager eventManager, IEnvironment environment, IRpcServer rpcServer, ILoggerFactory loggerFactory, IOptions <LanguageWorkerOptions> languageWorkerOptions, IOptionsMonitor <ScriptApplicationHostOptions> applicationHostOptions) { _rpcServer = rpcServer; _environment = environment ?? throw new ArgumentNullException(nameof(environment)); _eventManager = eventManager; _loggerFactory = loggerFactory; _logger = loggerFactory.CreateLogger(ScriptConstants.LanguageWorkerChannelManager); _workerConfigs = languageWorkerOptions.Value.WorkerConfigs; _applicationHostOptions = applicationHostOptions; _processFactory = new DefaultWorkerProcessFactory(); try { _processRegistry = ProcessRegistryFactory.Create(); } catch (Exception e) { _logger.LogWarning(e, "Unable to create process registry"); } _shutdownStandbyWorkerChannels = ScheduleShutdownStandbyChannels; _shutdownStandbyWorkerChannels = _shutdownStandbyWorkerChannels.Debounce(5000); _rpcChannelReadySubscriptions = _eventManager.OfType <RpcChannelReadyEvent>() .Subscribe(AddOrUpdateWorkerChannels); }