Example #1
0
        /// <summary>
        /// Adds or updates a ConnectorConfigModel.
        /// Notifications will be polled and processed For all Enabled ConnectorConfigModels added.
        /// </summary>
        /// <param name="connectorConfig"></param>
        public void UpsertConnectorConfigModel(ConnectorConfigModel connectorConfig)
        {
            ValidationHelper.ArgumentNotNull(connectorConfig, nameof(connectorConfig));
            var shouldRefresh = false;

            _connectors.AddOrUpdate(connectorConfig.IdAsGuid,
                                    // Added a new Connector
                                    (key) =>
            {
                // Only need to refresh the tasks if the new Connector is enabled
                shouldRefresh = connectorConfig.Status == ConnectorConfigStatus.Enabled;
                return(connectorConfig);
            },
                                    // Updating an existing connector
                                    (key, value) =>
            {
                // Always refresh in case the connector has changed
                shouldRefresh = true;
                return(connectorConfig);
            });

            if (shouldRefresh)
            {
                Refresh();
            }
        }
        /// <summary>
        /// Runs the notification task.
        /// The task will continue to run indefinitely until the cancellationToken is canceled.
        /// </summary>
        /// <param name="connectorConfig"></param>
        /// <param name="logPrefix"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task RunAsync(ConnectorConfigModel connectorConfig, string logPrefix, CancellationToken cancellationToken)
        {
            // Set up properties that will be used consistently by multiple methods
            _connectorConfig              = connectorConfig;
            _cancellationToken            = cancellationToken;
            _logPrefix                    = logPrefix;
            _authenticationHelperSettings = AuthenticationHelperSettingsFactory(connectorConfig);

            while (!cancellationToken.IsCancellationRequested)
            {
                // Get all pending notifications
                var notifications = await NotificationPullManager.GetAllPendingConnectorNotifications(
                    ApiClientFactorySettings,
                    _authenticationHelperSettings,
                    _connectorConfig.Id,
                    _cancellationToken).ConfigureAwait(false);

                // Process all pending notifications
                foreach (var notification in notifications)
                {
                    if (cancellationToken.IsCancellationRequested)
                    {
                        break;
                    }

                    await ProcessNotification(notification).ConfigureAwait(false);
                }

                // Wait the prescribed period of time before polling for more new Notifications
                await Task.Delay(TimeSpan.FromSeconds(NotificationRunnerSettings?.NotificationPollIntervalSeconds ?? NotificationRunnerSettings.DefaultNotificationPollIntervalSeconds)).ConfigureAwait(false);
            }
        }
        private async Task RunSUT(NotificationTask sut, ConnectorConfigModel model, Func <Task, Task> code)
        {
            var source = new CancellationTokenSource();
            var task   = Task.Run(() => sut.RunAsync(model, string.Empty, source.Token));
            // Give it a second to get started
            await Task.Delay(TimeSpan.FromSeconds(1));

            await code(task);

            source.Cancel();
            await task.AwaitCompleteOrCancel();
        }
Example #4
0
 public ConnectorTask(ConnectorConfigModel connectorConfigModel,
                      ISubmission itemSubmitPipeline,
                      ISubmission aggregationSubmitPipeline,
                      ISubmission auditEventSubmitPipeline,
                      ISubmission binarySubmitPipeline,
                      CancellationToken cancellationToken)
 {
     _connectorConfigModel      = connectorConfigModel;
     _itemSubmitPipeline        = itemSubmitPipeline;
     _aggregationSubmitPipeline = aggregationSubmitPipeline;
     _auditEventSubmitPipeline  = auditEventSubmitPipeline;
     _binarySubmitPipeline      = binarySubmitPipeline;
     _outerCancellationToken    = cancellationToken;
     _syncRoot = new object();
 }
Example #5
0
        public Task UpsertConnectorConfig(ConnectorConfigModel connectorConfig)
        {
            if (_serviceFabricCancellationToken.IsCancellationRequested)
            {
                return(Task.CompletedTask);
            }

            var connectorTask = _connectors.AddOrUpdate(connectorConfig.Id,
                                                        new ConnectorTask(connectorConfig,
                                                                          _itemSubmitPipeline,
                                                                          _aggregationSubmitPipeline,
                                                                          _auditEventSubmitPipeline,
                                                                          _binarySubmitPipeline,
                                                                          _serviceFabricCancellationToken),
                                                        (x, y) => { y.Update(connectorConfig); return(y); });

            connectorTask.StartIfNecessary();

            return(Task.CompletedTask);
        }
Example #6
0
 public void Update(ConnectorConfigModel model)
 {
     _connectorConfigModel = model;
 }