IPsQueue.cs 5.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using qdr.fnd.core.pqueue.Enums;
  2. using Quadarax.Foundation.Core.Data;
  3. namespace qdr.fnd.core.pqueue
  4. {
  5. public interface IPsQueue : IDisposable
  6. {
  7. #region *** Properties ***
  8. /// <summary>
  9. /// Flag determines if the queue is running. Means if <see cref="Start"/> was called and <see cref="Stop"/> was not called.
  10. /// </summary>
  11. bool IsRunning { get; }
  12. #endregion
  13. #region *** Operations ***
  14. /// <summary>
  15. /// Starts the queue engine to processing queue items. If the queue is already running, the method throws an exception.
  16. /// <exception cref="CodeExeption"></exception>
  17. /// </summary>
  18. void Start();
  19. void Stop();
  20. /// <summary>
  21. /// Add new item to queue described by <paramref name="item"/>
  22. /// </summary>
  23. /// <param name="item">Queue item decriptor</param>
  24. /// <returns>If succeed returns item identifier (itemId)</returns>
  25. string EnQueueItem(IPsQueueItemDescriptor item);
  26. /// <summary>
  27. /// Get specific queue item (full) by its identifier <paramref name="itemId"/> no matter what <see cref="IPsQueueItem.Status"/> set.
  28. /// Item must exists, otherwise throws exception.
  29. /// </summary>
  30. /// <param name="itemId">process item identifier.</param>
  31. /// <returns>Full queue item (incl. status history).</returns>
  32. IPsQueueItem GetQueueItem(string itemId);
  33. /// <summary>
  34. /// Schedules item to start immediately. Ignores ValidFrom and status exept <see cref="PsStatusEnum.Started"/>,<see cref="PsStatusEnum.Stopped"/>,<see cref="PsStatusEnum.Expired"/>.
  35. /// Operation resets <see cref="IPsQueueItem.Status"/>, <see cref="IPsQueueItem.AttemptsLeft"/>, <see cref="IPsQueueItemDescriptor.ValidFrom"/>, <see cref="IPsQueueItemDescriptor.ValidTo"/>, <see cref="IPsQueueItemDescriptor.Priority"/>, <see cref="IPsQueueItem.Started"/>, <see cref="IPsQueueItem.Finished"/>
  36. /// </summary>
  37. /// <param name="itemId">process item identifier.</param>
  38. /// <param name="emitter">Sign who emmits request.</param>
  39. void ForceStartQueueItem(string itemId, string emitter);
  40. /// <summary>
  41. /// Schedules item to stops immediately and set <see cref="IPsQueueItem.Status"/> to <see cref="PsStatusEnum.Stopped"/>.
  42. /// If item currently processing, kill process and left (skip decrement) attempt counter.
  43. /// Ignores ValidFrom and status exept <see cref="PsStatusEnum.Expired"/>,<see cref="PsStatusEnum.DoneOk"/>,<see cref="PsStatusEnum.DoneFail"/>.
  44. /// </summary>
  45. /// <param name="itemId">process item identifier.</param>
  46. /// <param name="emitter">Sign who emmits request.</param>
  47. void ForceStopQueueItem(string itemId, string emitter);
  48. /// <summary>
  49. /// Schedules item to pause immediately and set <see cref="IPsQueueItem.Status"/> to <see cref="PsStatusEnum.Paused"/> and can be resumed by use <see cref="IPsQueue.Start"/>.
  50. /// If item currently processing, waits to next attempt, then set to paused.
  51. /// Ignores ValidFrom and status exept <see cref="PsStatusEnum.Expired"/>,<see cref="PsStatusEnum.DoneOk"/>,<see cref="PsStatusEnum.DoneFail"/>,<see cref="PsStatusEnum.Stopped"/>.
  52. /// </summary>
  53. /// <param name="itemId">process item identifier.</param>
  54. /// <param name="emitter">Sign who emmits request.</param>
  55. void PauseQueueItem(string itemId, string emmiter);
  56. /// <summary>
  57. /// Schedules item to start or resume and set <see cref="IPsQueueItem.Status"/> to <see cref="PsStatusEnum.Started"/>.
  58. /// </summary>
  59. /// <param name="itemId">process item identifier.</param>
  60. /// <param name="emitter">Sign who emmits request.</param>
  61. /// <param name="isImmediate">If set to true, reshedule item to run immediately (change <see cref="IPsQueueItemDescriptor.ValidFrom"/>, <see cref="IPsQueueItemDescriptor.ValidTo"/>, <see cref="IPsQueueItemDescriptor.Priority"/></param>
  62. void StartQueueItem(string itemId, string emmiter, bool isImmediate);
  63. /// <summary>
  64. /// Returns query (queryable) in process queue by custom specification.
  65. /// </summary>
  66. /// <param name="paging">Paging specification for query.</param>
  67. /// <param name="owner">Owner identifier. If null then condition is skipped.</param>
  68. /// <param name="ownerRef">Owner reference identifier. If null then condition is skipped.</param>
  69. /// <param name="includeTransient">If set includes transient states. Default set to False.</param>
  70. /// <param name="statuses">Collection of requested complex statuses.</param>
  71. /// <returns>Queryable result (item is <see cref="IPsQueueItem"/>) collection limited by <paramref name="paging"/></returns>
  72. IQueryable<IPsQueueItem> QueryQueueItems(IPaging paging, string? owner, string? ownerRef, bool includeTransient = false, params PsStatusEnum[] statuses);
  73. #endregion
  74. }
  75. }