DatabaseQueue.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. <?php
  2. namespace ModulesGarden\ProxmoxAddon\Core\Queue;
  3. use ModulesGarden\ProxmoxAddon\Core\Queue\Models\Job;
  4. class DatabaseQueue implements QueueInterface
  5. {
  6. /**
  7. * @var int
  8. */
  9. protected $retryLimit = 100;
  10. /**
  11. * @param $job
  12. * @param string $data
  13. * @param int $parentId
  14. * @param null $relType
  15. * @param null $relId
  16. * @param null $customId
  17. */
  18. public function push($job, $data = '', $parentId = null, $relType = null, $relId = null, $customId = null)
  19. {
  20. $model = new Job();
  21. $model->job = $job;
  22. $model->data = $data;
  23. $model->parent_id = $parentId;
  24. $model->rel_type = $relType;
  25. $model->rel_id = $relId;
  26. $model->custom_id = $customId;
  27. $model->save();
  28. return $model;
  29. }
  30. public function pushRaw($payload, $queue = null, array $options = [])
  31. {
  32. }
  33. public function later($delay, $job, $data = '', $queue = null)
  34. {
  35. }
  36. public function pushOn($queue, $job, $data = '')
  37. {
  38. }
  39. public function laterOn($queue, $delay, $job, $data = '')
  40. {
  41. }
  42. /**
  43. * @return mixed
  44. */
  45. public function pop()
  46. {
  47. return $this->query()->first();
  48. }
  49. /**
  50. * @return mixed
  51. */
  52. public function count()
  53. {
  54. return $this->query()->count();
  55. }
  56. /**
  57. * @return \ModulesGarden\ProxmoxAddon\Core\Queue\Models\Job
  58. */
  59. protected function query()
  60. {
  61. $table = (new\ModulesGarden\ProxmoxAddon\Core\Queue\Models\Job)->getTable();
  62. $query = \ModulesGarden\ProxmoxAddon\Core\Queue\Models\Job
  63. ::select("{$table}.*")
  64. ->leftJoin($table.' as parent', function($join) use($table) {
  65. $join->on($table.'.parent_id', '=', 'parent.id');
  66. })
  67. ->where(function($query) use($table){
  68. $query->where("{$table}.status", '=', '')
  69. ->orWhere(function($query) use($table){
  70. $query->where("{$table}.status", '=', \ModulesGarden\ProxmoxAddon\Core\Queue\Models\Job::STATUS_ERROR);
  71. $query->where("{$table}.retry_after", '<', date("Y-m-d H:i:s"));
  72. $query->where("{$table}.retry_count", '<', $this->retryLimit);
  73. })
  74. ->orWhere(function($query) use($table){
  75. $query->where("{$table}.status", '=', \ModulesGarden\ProxmoxAddon\Core\Queue\Models\Job::STATUS_WAITING);
  76. $query->where("{$table}.retry_after", '<', date("Y-m-d H:i:s"));
  77. $query->where("{$table}.retry_count", '<', $this->retryLimit);
  78. });
  79. })
  80. ->where(function($query) use($table){
  81. $query->whereRaw("{$table}.parent_id IS NULL");
  82. $query->orWhere("parent.status", \ModulesGarden\ProxmoxAddon\Core\Queue\Models\Job::STATUS_FINISHED);
  83. });
  84. return $query;
  85. }
  86. }