/// <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(); }
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(); }
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); }
public void Update(ConnectorConfigModel model) { _connectorConfigModel = model; }