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);
        }
Beispiel #2
0
        /// <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());
        }