public StreamProcessor(IBusFactory busFactory, IAwsClientFactory awsClientFactory, IAwsKinesisFactory awsKinesisFactory, IOptions <AwsSettings> awsOptions, IOptions <ServerSettings> serverOptions, IMapper mapper, ILogger <StreamProcessor> logger, IMembershipService membershipService, ICheckpointRepository checkpointRepository) { if (busFactory == null) { throw new ArgumentNullException(nameof(busFactory)); } if (awsClientFactory == null) { throw new ArgumentNullException("awsClientFactory"); } if (awsOptions == null) { throw new ArgumentNullException(nameof(awsOptions)); } if (serverOptions == null) { throw new ArgumentNullException(nameof(serverOptions)); } if (mapper == null) { throw new ArgumentNullException(nameof(mapper)); } _eventBus = busFactory.CreateEventsBus(); _kinesisFactory = awsKinesisFactory; _mapper = mapper; _logger = logger; _membershipService = membershipService; _serverSettings = serverOptions.Value; _checkpointRepository = checkpointRepository; var processedMeasurementStreamWriter = _kinesisFactory.CreateWriter(); var recordProcessingFactory = new RecordProcessorFactory(membershipService, logger); _rawMeasurementsStreamReader = _kinesisFactory.CreateReader( recordProcessingFactory, _checkpointRepository, processedMeasurementStreamWriter); // Handle processed measurements. // Read from the processed measurements stream and publish out to // EasyNetQ/RabbitQ. This should be removed once // all other services (Web/MQTT/Notifier/Membership) are getting measurements // from the processed stream rather than the queue _processedMeasurementsStreamReader = _kinesisFactory.CreateProcesssedMeasurementsReader( _checkpointRepository, _eventBus); }
/// <summary> /// Получение подробного списка файлов на FTP-сервере. /// </summary> /// <param name="path">Каталог на FTP-сервере</param> /// <returns>Подробный список файлов указанного каталога</returns> public async Task <IReadOnlyCollection <FtpRecord> > ListDirectoryFiles(string path) { path.AssertArgumentNotNull(nameof(path)); using var ftpResponse = await InvokeFtpRequest(WebRequestMethods.Ftp.ListDirectoryDetails, path); using var ftpStream = ftpResponse.GetResponseStream(); using var reader = new StreamReader(ftpStream ?? throw new InvalidOperationException("Не удалось получить ответ сервера")); var list = reader.ReadToEnd(); var serverType = GetFtpServerType(list); var processor = RecordProcessorFactory.Create(serverType, _regexFactory); var parser = DirectoryListParserFactory.Create(processor); parser.Parse(list); return(parser.FullListing?.ToImmutableArray()); }