PageRenderTime 39ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/src/PHPQueue/Cli.php

https://github.com/baidushine/php-queue
PHP | 99 lines | 87 code | 12 blank | 0 comment | 4 complexity | 60addff00a763daf0376ee005a9c9b49 MD5 | raw file
  1. <?php
  2. namespace PHPQueue;
  3. use PHPQueue\Exception\Exception;
  4. class Cli
  5. {
  6. public $queue_name;
  7. public function __construct($options=array())
  8. {
  9. if ( !empty($options['queue']) ) {
  10. $this->queue_name = $options['queue'];
  11. }
  12. }
  13. public function add($payload=array())
  14. {
  15. fwrite(STDOUT, "===========================================================\n");
  16. fwrite(STDOUT, "Adding Job...");
  17. $status = false;
  18. try {
  19. $queue = Base::getQueue($this->queue_name);
  20. $status = Base::addJob($queue, $payload);
  21. fwrite(STDOUT, "Done.\n");
  22. } catch (\Exception $ex) {
  23. fwrite(STDOUT, sprintf("Error: %s\n", $ex->getMessage()));
  24. throw $ex;
  25. }
  26. return $status;
  27. }
  28. public function peek()
  29. {
  30. $newJob = null;
  31. $queue = Base::getQueue($this->queue_name);
  32. try {
  33. $newJob = Base::getJob($queue);
  34. fwrite(STDOUT, "===========================================================\n");
  35. fwrite(STDOUT, "Next Job:\n");
  36. var_dump($newJob);
  37. fwrite(STDOUT, "\nReleasing Job...\n");
  38. $queue->releaseJob($newJob->job_id);
  39. } catch (\Exception $ex) {
  40. fwrite(STDOUT, "Error: " . $ex->getMessage() . "\n");
  41. }
  42. }
  43. public function work()
  44. {
  45. $newJob = null;
  46. $queue = Base::getQueue($this->queue_name);
  47. try {
  48. $newJob = Base::getJob($queue);
  49. fwrite(STDOUT, "===========================================================\n");
  50. fwrite(STDOUT, "Next Job:\n");
  51. var_dump($newJob);
  52. } catch (\Exception $ex) {
  53. fwrite(STDOUT, "Error: " . $ex->getMessage() . "\n");
  54. }
  55. if (empty($newJob)) {
  56. fwrite(STDOUT, "Notice: No Job found.\n");
  57. return;
  58. }
  59. try {
  60. if (empty($newJob->worker)) {
  61. throw new Exception("No worker declared.");
  62. }
  63. if (is_string($newJob->worker)) {
  64. $result_data = $this->processWorker($newJob->worker, $newJob);
  65. } elseif (is_array($newJob->worker)) {
  66. foreach ($newJob->worker as $worker_name) {
  67. $result_data = $this->processWorker($worker_name, $newJob);
  68. $newJob->data = $result_data;
  69. }
  70. }
  71. fwrite(STDOUT, "Updating job... \n");
  72. return Base::updateJob($queue, $newJob->job_id, $result_data);
  73. } catch (\Exception $ex) {
  74. fwrite(STDOUT, sprintf("\nError occured: %s\n", $ex->getMessage()));
  75. $queue->releaseJob($newJob->job_id);
  76. throw $ex;
  77. }
  78. }
  79. protected function processWorker($worker_name, $new_job)
  80. {
  81. fwrite(STDOUT, sprintf("Running worker (%s) now... ", $worker_name));
  82. $newWorker = Base::getWorker($worker_name);
  83. Base::workJob($newWorker, $new_job);
  84. fwrite(STDOUT, "Done.\n");
  85. return $newWorker->result_data;
  86. }
  87. }