/// <summary> /// Poll the persistence store for workflows ready to run. /// Poll the persistence store for stashed unpublished events /// </summary> private void PollRunnables(object target) { try { if (LockProvider.AcquireLock("poll runnables").Result) { try { Logger.LogInformation("Polling for runnable workflows"); IPersistenceProvider persistenceStore = _serviceProvider.GetService <IPersistenceProvider>(); var runnables = persistenceStore.GetRunnableInstances().Result; foreach (var item in runnables) { Logger.LogDebug("Got runnable instance {0}", item); QueueProvider.QueueForProcessing(item); } } finally { LockProvider.ReleaseLock("poll runnables").Wait(); } } } catch (Exception ex) { Logger.LogError(ex.Message); } try { if (LockProvider.AcquireLock("unpublished events").Result) { try { Logger.LogInformation("Polling for unpublished events"); IPersistenceProvider persistenceStore = _serviceProvider.GetService <IPersistenceProvider>(); var events = persistenceStore.GetUnpublishedEvents().Result.ToList(); foreach (var item in events) { Logger.LogDebug("Got unpublished event {0} {1}", item.EventName, item.EventKey); QueueProvider.QueueForPublishing(item).Wait(); persistenceStore.RemoveUnpublishedEvent(item.Id).Wait(); } } finally { LockProvider.ReleaseLock("unpublished events").Wait(); } } } catch (Exception ex) { Logger.LogError(ex.Message); } }
/// <summary> /// Poll the persistence store for workflows ready to run. /// Poll the persistence store for stashed unpublished events /// </summary> private async void PollRunnables(object target) { try { if (await _lockProvider.AcquireLock("poll runnables", new CancellationToken())) { try { _logger.LogInformation("Polling for runnable workflows"); var runnables = await _persistenceStore.GetRunnableInstances(DateTime.Now); foreach (var item in runnables) { _logger.LogDebug("Got runnable instance {0}", item); await _queueProvider.QueueWork(item, QueueType.Workflow); } } finally { await _lockProvider.ReleaseLock("poll runnables"); } } } catch (Exception ex) { _logger.LogError(ex, ex.Message); } try { if (await _lockProvider.AcquireLock("unprocessed events", new CancellationToken())) { try { _logger.LogInformation("Polling for unprocessed events"); var events = await _persistenceStore.GetRunnableEvents(DateTime.Now); foreach (var item in events.ToList()) { _logger.LogDebug($"Got unprocessed event {item}"); await _queueProvider.QueueWork(item, QueueType.Event); } } finally { await _lockProvider.ReleaseLock("unprocessed events"); } } } catch (Exception ex) { _logger.LogError(ex, ex.Message); } }
private async Task PollWorkflows() { try { if (await _lockProvider.AcquireLock("poll runnables", new CancellationToken())) { try { _logger.LogDebug("Polling for runnable workflows"); var runnables = await _persistenceStore.GetRunnableInstances(_dateTimeProvider.Now); foreach (var item in runnables) { if (_persistenceStore.SupportsScheduledCommands) { try { await _persistenceStore.ScheduleCommand(new ScheduledCommand() { CommandName = ScheduledCommand.ProcessWorkflow, Data = item, ExecuteTime = _dateTimeProvider.UtcNow.Ticks }); continue; } catch (Exception ex) { _logger.LogError(ex, ex.Message); } } if (_greylist.Contains($"wf:{item}")) { _logger.LogDebug($"Got greylisted workflow {item}"); continue; } _logger.LogDebug("Got runnable instance {0}", item); _greylist.Add($"wf:{item}"); await _queueProvider.QueueWork(item, QueueType.Workflow); } } finally { await _lockProvider.ReleaseLock("poll runnables"); } } } catch (Exception ex) { _logger.LogError(ex, ex.Message); } }
private static void PrintPersistance(IPersistenceProvider efProvider) { var instances = efProvider.GetRunnableInstances(DateTime.Now).Result; foreach (var i in instances) { Console.WriteLine($"instance: {i}"); } Console.WriteLine("--- Current Workflow ----"); var items = efProvider.GetWorkflowInstances(instances).Result; foreach (var item in items) { var data = item.Data as Approval; Console.WriteLine($"{item.Id}, users: {string.Join(',', data.UserList.Select(u => u.Id))}"); Console.WriteLine($"create date: {item.CreateTime}, complete date: {item.CompleteTime}"); Console.WriteLine($"next execution: {item.NextExecution}, reference : {item.Reference}"); Console.WriteLine($"WorkflowDefinitionId: {item.WorkflowDefinitionId}, Status : {Enum.GetName(typeof(WorkflowStatus), item.Status)}"); } }
/// <summary> /// Poll the persistence store for workflows ready to run. /// Poll the persistence store for stashed unpublished events /// </summary> private async void PollRunnables(object target) { try { if (await _lockProvider.AcquireLock("poll runnables", new CancellationToken())) { try { _logger.LogInformation("Polling for runnable workflows"); var runnables = (await _persistenceStore.GetRunnableInstances(DateTime.Now)).ToArray(); _logger.LogInformation($"Polled {runnables.Length} runnable workflows"); foreach (var item in runnables) { if (_greylist.Contains($"wf:{item}")) { _logger.LogDebug($"Got greylisted workflow {item}"); continue; } _logger.LogDebug("Got runnable instance {0}", item); _greylist.Add($"wf:{item}"); await _queueProvider.QueueWork(item, QueueType.Workflow); } } finally { await _lockProvider.ReleaseLock("poll runnables"); } } } catch (Exception ex) { _logger.LogError(ex, ex.Message); } try { if (await _lockProvider.AcquireLock("unprocessed events", new CancellationToken())) { try { _logger.LogInformation("Polling for unprocessed events"); var events = (await _persistenceStore.GetRunnableEvents(DateTime.Now)).ToArray(); _logger.LogInformation($"Polled {events.Length} unprocessed events"); foreach (var item in events) { if (_greylist.Contains($"evt:{item}")) { _logger.LogDebug($"Got greylisted event {item}"); _greylist.Add($"evt:{item}"); continue; } _logger.LogDebug($"Got unprocessed event {item}"); _greylist.Add($"evt:{item}"); await _queueProvider.QueueWork(item, QueueType.Event); } } finally { await _lockProvider.ReleaseLock("unprocessed events"); } } } catch (Exception ex) { _logger.LogError(ex, ex.Message); } }