Queue.php 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. namespace ModulesGarden\Servers\ProxmoxVps\Core\Queue;
  3. use ModulesGarden\Servers\ProxmoxVps\Core\DependencyInjection;
  4. use ModulesGarden\Servers\ProxmoxVps\Core\Queue\Models\Job as JobModel;
  5. use ModulesGarden\Servers\ProxmoxVps\Core\Queue\Services\Log;
  6. class Queue
  7. {
  8. /**
  9. * @var null
  10. */
  11. protected $callBefore = null;
  12. /**
  13. * @var null
  14. */
  15. protected $callAfter = null;
  16. /**
  17. *
  18. */
  19. public function process()
  20. {
  21. $queue = DependencyInjection::get(DatabaseQueue::class);
  22. while($model = $queue->pop())
  23. {
  24. if($this->callBefore)
  25. {
  26. $callback = $this->callBefore;
  27. $callback($model);
  28. }
  29. $job = new Manager($model);
  30. $job->fire();
  31. if($this->callAfter)
  32. {
  33. $callback = $this->callAfter;
  34. $callback($model);
  35. }
  36. }
  37. }
  38. /**
  39. * @param $id
  40. */
  41. public function cancelRelated($id)
  42. {
  43. $job = JobModel::where('id', $id)->first();
  44. $related = JobModel::where('rel_id', $job->rel_id)
  45. ->where('rel_type', $job->rel_type)->where('id', '<', $id)
  46. ->whereNotIn('status', [JobModel::STATUS_CANCELED, JobModel::STATUS_FINISHED])->get();
  47. foreach ($related as $relatedJob)
  48. {
  49. $relatedJob->setCanceled();
  50. $log = new Log($relatedJob);
  51. $log->info('Canceled by task: ' . $job->id);
  52. }
  53. }
  54. /**
  55. * @param $callable
  56. * @throws \Exception
  57. */
  58. public function setCallBefore($callable)
  59. {
  60. if(!is_callable($callable))
  61. {
  62. throw new \Exception('Argument is not callable');
  63. }
  64. $this->callBefore = $callable;
  65. }
  66. /**
  67. * @param $callable
  68. * @throws \Exception
  69. */
  70. public function setCallAfter($callable)
  71. {
  72. if(!is_callable($callable))
  73. {
  74. throw new \Exception('Argument is not callable');
  75. }
  76. $this->callAfter = $callable;
  77. }
  78. }