示例#1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="PullConnectorsService"/> class.
 /// </summary>
 /// <param name="pullConnectors">Actual <see cref="IPullConnectors"/>.</param>
 /// <param name="timers"><see cref="ITimers"/> for scheduling work.</param>
 /// <param name="tagDataPointCoordinator"><see cref="ITagDataPointCoordinator"/> for coordinator datapoints.</param>
 /// <param name="logger"><see cref="ILogger"/> for logging.</param>
 public PullConnectorsService(
     IPullConnectors pullConnectors,
     ITimers timers,
     ITagDataPointCoordinator tagDataPointCoordinator,
     ILogger logger)
 {
     _pullConnectors          = pullConnectors;
     _timers                  = timers;
     _tagDataPointCoordinator = tagDataPointCoordinator;
     _logger                  = logger;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="DataPointsStatePullers"/> class.
 /// </summary>
 /// <param name="configuration">The <see cref="DataPointsStatePullersConfiguration"/>.</param>
 /// <param name="processors"><see cref="IDataPointProcessors"/> for processing.</param>
 /// <param name="timers"><see cref="ITimers"/> for scheduling.</param>
 /// <param name="logger"><see cref="ILogger"/> for logging.</param>
 public DataPointsStatePullers(
     DataPointsStatePullersConfiguration configuration,
     IDataPointProcessors processors,
     ITimers timers,
     ILogger logger)
 {
     _timers        = timers;
     _configuration = configuration;
     _processors    = processors;
     _logger        = logger;
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="DataPointsStatePuller"/> class.
        /// </summary>
        /// <param name="endPoint"><see cref="DataPointsStateEndPoint"/> to pull from.</param>
        /// <param name="processors"><see cref="IDataPointProcessors"/> to involve when <see cref="DataPoint">data points</see> are pulled.</param>
        /// <param name="timers"><see cref="ITimers"/> for scheduling.</param>
        /// <param name="logger"><see cref="ILogger"/> for logging.</param>
        public DataPointsStatePuller(
            DataPointsStateEndPoint endPoint,
            IDataPointProcessors processors,
            ITimers timers,
            ILogger logger)
        {
            var channel = new Channel(endPoint.Target, ChannelCredentials.Insecure);

            _client = new DataPointsStateClient(channel);

            timers.Every(endPoint.Interval, async() => await Pull().ConfigureAwait(false));
            _processors = processors;
            _logger     = logger;
            _endPoint   = endPoint;
        }
示例#4
0
        public Processor(
            IList <IFileParser> fileParsers,
            IProcessors processorsConfig,
            ITimers timersConfig,
            IMaintenance maintenanceConfig,
            IParser parser,
            IPersister persister,
            ILogger logger,
            IDirectory directory,
            IPerformance performance
            )
        {
            // save the logger
            _logger = logger ?? throw new ArgumentNullException(nameof(logger));

            const string directoryCounterName = "Processor: Average time processing Directories";
            const string fileCounterName      = "Processor: Average time processing Files";
            const string parserCounterName    = "Processor: Average time parsing files/folders";

            // Create the various processors, they will not start doing anything just yet
            // or at least, they shouldn't
            var directoriesCounter = new ProcessorPerformanceCounter(performance, directoryCounterName, logger);
            var filesCounter       = new ProcessorPerformanceCounter(performance, fileCounterName, logger);
            var parserCounter      = new ProcessorPerformanceCounter(performance, parserCounterName, logger);

            _eventTimer = new ProcessorTimer(
                new List <IProcessor>
            {
                new Folders(directoriesCounter, processorsConfig.UpdatesFolderPerEvent, persister, logger, directory, timersConfig.EventsMaxWaitTransactionMs),
                new Files(filesCounter, processorsConfig.UpdatesFilesPerEvent, fileParsers, processorsConfig.IgnoreFiles, persister, logger, directory, timersConfig.EventsMaxWaitTransactionMs)
            },
                _logger, processorsConfig.EventsProcessorMs);

            _maintenanceTimer = new ProcessorTimer(
                new List <IProcessor>
            {
                new Maintenance(maintenanceConfig.Active, parser, persister, logger)
            },
                _logger, (int)TimeSpan.FromMinutes(processorsConfig.MaintenanceProcessorMinutes).TotalMilliseconds);

            _parserTimer = new ProcessorTimer(
                new List <IProcessor>
            {
                new Parser(parserCounter, parser, logger)
            },
                _logger, (int)TimeSpan.FromMinutes(processorsConfig.ParserProcessorMinutes).TotalMilliseconds);
        }
示例#5
0
        public static IPromise <T> AddTimeout <T>(IPromise <T> promise, ITimers timers, float timeout)
        {
            var result = new Deferred <T>();
            var status = EStatus.Pending;

            var timeoutPromise = timers.Wait(timeout);

            promise.Done(r =>
            {
                if (status == EStatus.Pending)
                {
                    status = EStatus.Resolved;
                    result.Resolve(r);
                }
            });

            promise.Fail(() =>
            {
                if (status == EStatus.Pending)
                {
                    status = EStatus.Rejected;
                    result.Reject();
                }
            });

            timeoutPromise.Done(() =>
            {
                if (status == EStatus.Pending)
                {
                    status = EStatus.Rejected;
                    result.Reject();
                }
            });

            return(result);
        }
示例#6
0
 private void Awake()
 {
     Instance = this;
 }