Ejemplo n.º 1
0
        private void DoFlushingStartupSequence(IExecutionPerformanceMonitorWriter writer)
        {
            mStatsWriter = writer;
            mStatsProcessingStopTokenSource =
                new CancellationTokenSource();

            mStatsProcessingTask = Task.Run(async()
                                            => await RunFlushLoopAsync());
        }
        public IExecutionPerformanceMonitorWriterSetup UseWriter(IExecutionPerformanceMonitorWriter writer)
        {
            if (writer == null)
            {
                throw new ArgumentNullException(nameof(writer));
            }

            return(UseWriterFactory(() => writer));
        }
Ejemplo n.º 3
0
        private async Task DoFlushingShutdownSequenceAsync()
        {
            mStatsProcessingQueue.CompleteAdding();
            mStatsProcessingStopTokenSource.Cancel();
            await mStatsProcessingTask;

            mStatsProcessingTask.Dispose();
            mStatsProcessingStopTokenSource.Dispose();
            mStatsProcessingQueue.Dispose();

            mStatsProcessingTask            = null;
            mStatsProcessingQueue           = null;
            mStatsProcessingStopTokenSource = null;
            mStatsWriter = null;
        }
Ejemplo n.º 4
0
        public Task StartFlushingAsync(IExecutionPerformanceMonitorWriter writer)
        {
            CheckNotDisposedOrThrow();

            if (mStateController.IsStopped)
            {
                mStateController.TryRequestStart(()
                                                 => DoFlushingStartupSequence(writer));
            }
            else
            {
                mLogger.Debug("Flushing is already started. Nothing to be done.");
            }

            return(Task.CompletedTask);
        }
Ejemplo n.º 5
0
        public StandardTaskEngine(TaskEngineOptions engineOptions,
                                  TaskQueueOptions producerAndResultOptions,
                                  TaskQueueConsumerOptions consumerOptions,
                                  ITaskExecutorRegistry executorRegistry,
                                  IExecutionPerformanceMonitorWriter executionPerfMonWriter,
                                  ITimestampProvider timestampProvider)
        {
            if (engineOptions == null)
            {
                throw new ArgumentNullException(nameof(engineOptions));
            }

            if (consumerOptions == null)
            {
                throw new ArgumentNullException(nameof(consumerOptions));
            }

            if (producerAndResultOptions == null)
            {
                throw new ArgumentNullException(nameof(producerAndResultOptions));
            }

            mExecutorRegistry = executorRegistry
                                ?? throw new ArgumentNullException(nameof(executorRegistry));

            mExecutionPerfMonWriter = executionPerfMonWriter
                                      ?? throw new ArgumentNullException(nameof(executionPerfMonWriter));

            mExecutionPerfMon  = new StandardExecutionPerformanceMonitor();
            mTaskQueueConsumer = new PostgreSqlTaskQueueConsumer(consumerOptions,
                                                                 timestampProvider);
            mTaskQueueProducer = new PostgreSqlTaskQueueProducer(producerAndResultOptions,
                                                                 timestampProvider);

            mTaskResultQueue = new PostgreSqlTaskResultQueue(producerAndResultOptions);

            mTaskBuffer = new StandardTaskBuffer(engineOptions.WorkerCount);
            mTaskPoller = new StandardTaskPoller(engineOptions.TaskProcessingOptions,
                                                 mTaskQueueConsumer,
                                                 mTaskBuffer);

            mOptions = engineOptions;
        }
Ejemplo n.º 6
0
        public ITaskEngine BuildTaskEngine()
        {
            ITaskExecutorRegistry executorRegistry = mTaskExecutorRegistrySetup
                                                     .BuildTaskExecutorRegistry();

            IExecutionPerformanceMonitorWriter executionPerfMonWriter = mPerformanceMonitorWriterSetup
                                                                        .BuildWriter();

            ITimestampProvider timestampProvider =
                new UtcNowTimestampProvider();

            TaskQueueConsumerOptions consumerOptions = mTaskQueueConsumerSetup
                                                       .BuildOptions();

            TaskQueueOptions producerOptions = mTaskQueueProducerSetup
                                               .BuildOptions();

            StakhanoviseLogManager.Provider = mLoggingProvider
                                              ?? new NoOpLoggingProvider();

            ITaskQueueProducer taskQueueProducer = new PostgreSqlTaskQueueProducer(producerOptions,
                                                                                   timestampProvider);

            ITaskQueueInfo taskQueueInfo = new PostgreSqlTaskQueueInfo(mTaskQueueInfoSetup.BuildOptions(),
                                                                       timestampProvider);

            if (mRegisterOwnDependencies)
            {
                executorRegistry.LoadDependencies(new Dictionary <Type, object>()
                {
                    { typeof(ITaskQueueProducer),
                      taskQueueProducer },
                    { typeof(ITaskQueueInfo),
                      taskQueueInfo }
                });
            }

            return(mTaskEngineSetup.BuildTaskEngine(consumerOptions,
                                                    producerOptions,
                                                    executorRegistry,
                                                    executionPerfMonWriter,
                                                    timestampProvider));
        }
        public ITaskEngine BuildTaskEngine(TaskQueueConsumerOptions consumerOptions,
                                           TaskQueueOptions producerAndResultOptions,
                                           ITaskExecutorRegistry executorRegistry,
                                           IExecutionPerformanceMonitorWriter executionPerfMonWriter,
                                           ITimestampProvider timestampProvider)
        {
            if (consumerOptions == null)
            {
                throw new ArgumentNullException(nameof(consumerOptions));
            }

            if (producerAndResultOptions == null)
            {
                throw new ArgumentNullException(nameof(producerAndResultOptions));
            }

            if (executorRegistry == null)
            {
                throw new ArgumentNullException(nameof(executorRegistry));
            }

            if (executionPerfMonWriter == null)
            {
                throw new ArgumentNullException(nameof(executionPerfMonWriter));
            }

            StandardTaskEngine taskEngine = new StandardTaskEngine(BuildOptions(),
                                                                   producerAndResultOptions,
                                                                   consumerOptions,
                                                                   executorRegistry,
                                                                   executionPerfMonWriter,
                                                                   timestampProvider);

            taskEngine.ScanAssemblies(mExecutorAssemblies);
            return(taskEngine);
        }