TaskItem.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. using Quadarax.Foundation.Core.Business.Processor.Enums;
  2. using Quadarax.Foundation.Core.Business.Processor.Queue;
  3. using Quadarax.Foundation.Core.Logging;
  4. using Quadarax.Foundation.Core.Object;
  5. using Quadarax.Foundation.Core.Value.Extensions;
  6. namespace Quadarax.Foundation.Core.Business.Processor.Task
  7. {
  8. internal class TaskItem : ITaskItem
  9. {
  10. #region *** Properties ***
  11. /// <summary>
  12. /// <inheritdoc cref="ITaskItem.Id"/>
  13. /// </summary>
  14. public long Id { get; }
  15. /// <summary>
  16. /// <inheritdoc cref="ITaskItem.QueueType"/>
  17. /// </summary>
  18. public ProcessQueueTypeEnum QueueType { get; }
  19. /// <summary>
  20. /// <inheritdoc cref="ITaskItem.Created"/>
  21. /// </summary>
  22. public DateTime Created { get; }
  23. /// <summary>
  24. /// <inheritdoc cref="ITaskItem.Changed"/>
  25. /// </summary>
  26. public DateTime? Changed { get; }
  27. /// <summary>
  28. /// <inheritdoc cref="ITaskItem.AffinityToken"/>
  29. /// </summary>
  30. public IAffinityToken AffinityToken { get; }
  31. /// <summary>
  32. /// <inheritdoc cref="ITaskItem.Reference"/>
  33. /// </summary>
  34. public string Reference { get; }
  35. /// <summary>
  36. /// <inheritdoc cref="ITaskItem.Status"/>
  37. /// </summary>
  38. public ProcessStatusEnum Status { get; }
  39. /// <summary>
  40. /// <inheritdoc cref="ITaskItem.ProviderClass"/>
  41. /// </summary>
  42. public string ProviderClass { get; }
  43. /// <summary>
  44. /// <inheritdoc cref="ITaskItem.Priority"/>
  45. /// </summary>
  46. public byte Priority { get; }
  47. /// <summary>
  48. /// <inheritdoc cref="ITaskItem.ProcessingValidFrom"/>
  49. /// </summary>
  50. public DateTime ProcessingValidFrom { get; }
  51. /// <summary>
  52. /// <inheritdoc cref="ITaskItem.ProcessingValidTo"/>
  53. /// </summary>
  54. public DateTime? ProcessingValidTo { get; }
  55. /// <summary>
  56. /// <inheritdoc cref="ITaskItem.AttemptsLeft"/>
  57. /// </summary>
  58. public int AttemptsLeft { get; }
  59. /// <summary>
  60. /// <inheritdoc cref="ITaskItem.AttemptTimeout"/>
  61. /// </summary>
  62. public TimeSpan? AttemptTimeout { get; }
  63. /// <summary>
  64. /// <inheritdoc cref="ITaskItem.StatStarted"/>
  65. /// </summary>
  66. public DateTime StatStarted { get; }
  67. /// <summary>
  68. /// <inheritdoc cref="ITaskItem.StatFinished"/>
  69. /// </summary>
  70. public DateTime StatFinished { get; }
  71. /// <summary>
  72. /// <inheritdoc cref="ITaskItem.StatLastAttemptDuration"/>
  73. /// </summary>
  74. public TimeSpan StatLastAttemptDuration { get; }
  75. /// <summary>
  76. /// <inheritdoc cref="ITaskItem.StatusLog"/>
  77. /// </summary>
  78. public ITaskStatusLogItem[] StatusLog => _statusLog.ToArray();
  79. public TypedArgument[] Arguments => _arguments.ToArray();
  80. #endregion
  81. #region *** Private Fields ***
  82. private readonly List<ITaskStatusLogItem> _statusLog = new();
  83. private readonly List<TypedArgument> _arguments = new();
  84. private ILog _log;
  85. private ProcessQueue _parent;
  86. #endregion
  87. #region *** Constructors ***
  88. private TaskItem(ProcessQueue parent, long id, ProcessStatusEnum initialStatus, string reference, string source, TypedArgument[] initialArguments, byte priority, int attepts, TimeSpan? attemptTimeout, DateTime validFrom, DateTime? validTo, ITaskStatusLogItem[]? initialStatusLog):
  89. this(parent, reference, source, initialArguments, priority, attepts, attemptTimeout, validFrom, validTo, initialStatusLog)
  90. {
  91. Id = id;
  92. Status = initialStatus;
  93. }
  94. public TaskItem(ProcessQueue parent, string reference, string providerClass, TypedArgument[] initialArguments, byte priority, int attepts, TimeSpan? attemptTimeout, DateTime validFrom, DateTime? validTo, ITaskStatusLogItem[]? initialStatusLog)
  95. {
  96. _parent = parent ?? throw new ArgumentNullException(nameof(parent));
  97. _log = new ConsoleLogger().GetLogger(GetType());
  98. Priority = priority;
  99. Reference = reference;
  100. ProviderClass = providerClass;
  101. Arguments.Setup(initialArguments);
  102. AttemptTimeout = attemptTimeout;
  103. AttemptsLeft = attepts;
  104. ProcessingValidFrom = validFrom;
  105. ProcessingValidTo = validTo;
  106. Created = DateTime.Now;
  107. if (initialStatusLog != null)
  108. _statusLog.Setup(initialStatusLog);
  109. Status = ProcessStatusEnum.Pending;
  110. Id = long.MinValue;
  111. }
  112. #endregion
  113. #region *** Public Operations ***
  114. public void Postpone(TimeSpan postponeInterval, string reason)
  115. {
  116. throw new NotImplementedException();
  117. }
  118. public void Stop(string reason, bool willPause = true, bool willFail = false)
  119. {
  120. throw new NotImplementedException();
  121. }
  122. public void Reset(string reason, TimeSpan postponeValid)
  123. {
  124. throw new NotImplementedException();
  125. }
  126. public void Delete(string reason, bool immediate = false)
  127. {
  128. throw new NotImplementedException();
  129. }
  130. #endregion
  131. }
  132. }