Selaa lähdekoodia

PsQueue: defines IPsQueue operations, dummy implements PsQueue

Dalibor Votruba 1 vuosi sitten
vanhempi
commit
c2a498ed85
2 muutettua tiedostoa jossa 106 lisäystä ja 11 poistoa
  1. 60 6
      qdr.fnd.core.pqueue/IPsQueue.cs
  2. 46 5
      qdr.fnd.core.pqueue/PsQueue.cs

+ 60 - 6
qdr.fnd.core.pqueue/IPsQueue.cs

@@ -1,4 +1,7 @@
-namespace qdr.fnd.core.pqueue
+using qdr.fnd.core.pqueue.Enums;
+using Quadarax.Foundation.Core.Data;
+
+namespace qdr.fnd.core.pqueue
 {
     public interface IPsQueue : IDisposable
     {
@@ -18,13 +21,64 @@
         void Stop();
 
         /// <summary>
-        /// 
+        /// Add new item to queue described by <paramref name="item"/>
+        /// </summary>
+        /// <param name="item">Queue item decriptor</param>
+        /// <returns>If succeed returns item identifier (itemId)</returns>
+        string EnQueueItem(IPsQueueItemDescriptor item);
+
+        /// <summary>
+        /// Get specific queue item (full) by its identifier <paramref name="itemId"/> no matter what <see cref="IPsQueueItem.Status"/> set.
+        /// Item must exists, otherwise throws exception.
+        /// </summary>
+        /// <param name="itemId">process item identifier.</param>
+        /// <returns>Full queue item (incl. status history).</returns>
+        IPsQueueItem GetQueueItem(string itemId);
+        
+        /// <summary>
+        /// Schedules item to start immediately. Ignores ValidFrom and status exept <see cref="PsStatusEnum.Started"/>,<see cref="PsStatusEnum.Stopped"/>,<see cref="PsStatusEnum.Expired"/>.
+        /// 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"/>
+        /// </summary>
+        /// <param name="itemId">process item identifier.</param>
+        /// <param name="emitter">Sign who emmits request.</param>
+        void ForceStartQueueItem(string itemId, string emitter);
+
+        /// <summary>
+        /// Schedules item to stops immediately and set <see cref="IPsQueueItem.Status"/> to <see cref="PsStatusEnum.Stopped"/>.
+        /// If item currently processing, kill process and left (skip decrement) attempt counter.
+        /// Ignores ValidFrom and status exept <see cref="PsStatusEnum.Expired"/>,<see cref="PsStatusEnum.DoneOk"/>,<see cref="PsStatusEnum.DoneFail"/>.
         /// </summary>
-        /// <param name="item"></param>
-        /// <returns></returns>
-        string EnQueue(IPsQueueItemDescriptor item);
+        /// <param name="itemId">process item identifier.</param>
+        /// <param name="emitter">Sign who emmits request.</param>
+        void ForceStopQueueItem(string itemId, string emitter);
 
-        bool DeQueue(string itemId, bool force);
+        /// <summary>
+        /// 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"/>.
+        /// If item currently processing, waits to next attempt, then set to paused.
+        /// Ignores ValidFrom and status exept <see cref="PsStatusEnum.Expired"/>,<see cref="PsStatusEnum.DoneOk"/>,<see cref="PsStatusEnum.DoneFail"/>,<see cref="PsStatusEnum.Stopped"/>.
+        /// </summary>
+        /// <param name="itemId">process item identifier.</param>
+        /// <param name="emitter">Sign who emmits request.</param>
+        void PauseQueueItem(string itemId, string emmiter);
+
+        /// <summary>
+        /// Schedules item to start or resume and set <see cref="IPsQueueItem.Status"/> to <see cref="PsStatusEnum.Started"/>.
+        /// </summary>
+        /// <param name="itemId">process item identifier.</param>
+        /// <param name="emitter">Sign who emmits request.</param>
+        /// <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>
+        void StartQueueItem(string itemId, string emmiter, bool isImmediate);
+
+        /// <summary>
+        /// Returns query (queryable) in process queue by custom specification.
+        /// </summary>
+        /// <param name="paging">Paging specification for query.</param>
+        /// <param name="owner">Owner identifier. If null then condition is skipped.</param>
+        /// <param name="ownerRef">Owner reference identifier. If null then condition is skipped.</param>
+        /// <param name="includeTransient">If set includes transient states. Default set to False.</param>
+        /// <param name="statuses">Collection of requested complex statuses.</param>
+        /// <returns>Queryable result (item is <see cref="IPsQueueItem"/>) collection limited by <paramref name="paging"/></returns>
+        IQueryable<IPsQueueItem> QueryQueueItems(IPaging paging, string? owner, string? ownerRef, bool includeTransient = false, params PsStatusEnum[] statuses);
 
         #endregion
     }

+ 46 - 5
qdr.fnd.core.pqueue/PsQueue.cs

@@ -11,7 +11,7 @@ using Quadarax.Foundation.Core.Value.Generators;
 
 namespace qdr.fnd.core.pqueue
 {
-    public class PsQueue : LoopWorker
+    public class PsQueue : LoopWorker, IPsQueue
     {
         #region *** Constants ***
         private const string CS_DEF_QUEUE_NAME = "PSQUEUE";
@@ -108,10 +108,6 @@ namespace qdr.fnd.core.pqueue
             Log(LogSeverityEnum.Info,$"{Name} - Item [{itemId}] was enqueued as {item}");
             return itemId;
         }
-        public bool Dequeue(string itemId, bool force)
-        {
-            throw new NotImplementedException();
-        }
 
         public IQueryable<IPsQueueItem> Query(string? owner, string? ownerRef, params Tuple<bool,PsStatusEnum>[] status)
         {
@@ -225,6 +221,51 @@ namespace qdr.fnd.core.pqueue
             _storage.Dispose();
             //TODO: Implement OnDisposing
         }
+
+        public void Start()
+        {
+            throw new NotImplementedException();
+        }
+
+        public void Stop()
+        {
+            throw new NotImplementedException();
+        }
+
+        public string EnQueueItem(IPsQueueItemDescriptor item)
+        {
+            throw new NotImplementedException();
+        }
+
+        public IPsQueueItem GetQueueItem(string itemId)
+        {
+            throw new NotImplementedException();
+        }
+
+        public void ForceStartQueueItem(string itemId, string emitter)
+        {
+            throw new NotImplementedException();
+        }
+
+        public void ForceStopQueueItem(string itemId, string emitter)
+        {
+            throw new NotImplementedException();
+        }
+
+        public void PauseQueueItem(string itemId, string emmiter)
+        {
+            throw new NotImplementedException();
+        }
+
+        public void StartQueueItem(string itemId, string emmiter, bool isImmediate)
+        {
+            throw new NotImplementedException();
+        }
+
+        public IQueryable<IPsQueueItem> QueryQueueItems(IPaging paging, string? owner, string? ownerRef, bool includeTransient = false, params PsStatusEnum[] statuses)
+        {
+            throw new NotImplementedException();
+        }
         #endregion
     }
 }