diff --git a/Doctrine/BaseDoctrineJobManager.php b/Doctrine/BaseDoctrineJobManager.php index e998b90..e046bd2 100644 --- a/Doctrine/BaseDoctrineJobManager.php +++ b/Doctrine/BaseDoctrineJobManager.php @@ -4,6 +4,7 @@ use Doctrine\Common\Persistence\ObjectManager; use Doctrine\Common\Persistence\ObjectRepository; +use Dtc\QueueBundle\EventDispatcher\EventDispatcher; use Dtc\QueueBundle\Manager\ArchivableJobManager; use Dtc\QueueBundle\Manager\JobTimingManager; use Dtc\QueueBundle\Manager\RunManager; @@ -28,6 +29,7 @@ abstract class BaseDoctrineJobManager extends ArchivableJobManager * @param JobTimingManager $jobTimingManager * @param ObjectManager $objectManager * @param $jobClass + * @param EventDispatcher $eventDispatcher * @param $jobArchiveClass */ public function __construct( @@ -35,10 +37,11 @@ public function __construct( JobTimingManager $jobTimingManager, ObjectManager $objectManager, $jobClass, + EventDispatcher $eventDispatcher, $jobArchiveClass ) { $this->objectManager = $objectManager; - parent::__construct($runManager, $jobTimingManager, $jobClass, $jobArchiveClass); + parent::__construct($runManager, $jobTimingManager, $jobClass, $eventDispatcher, $jobArchiveClass); } protected function getFetchCount($totalCount) diff --git a/EventDispatcher/Event.php b/EventDispatcher/Event.php index 96817e9..3455223 100644 --- a/EventDispatcher/Event.php +++ b/EventDispatcher/Event.php @@ -6,6 +6,7 @@ class Event { + const POST_CREATE_JOB = 'queue.post_create_job'; const PRE_JOB = 'queue.pre_job'; const POST_JOB = 'queue.post_job'; diff --git a/Manager/AbstractJobManager.php b/Manager/AbstractJobManager.php index a3ddfda..2cb5b2e 100644 --- a/Manager/AbstractJobManager.php +++ b/Manager/AbstractJobManager.php @@ -2,6 +2,7 @@ namespace Dtc\QueueBundle\Manager; +use Dtc\QueueBundle\EventDispatcher\EventDispatcher; use Dtc\QueueBundle\Exception\UnsupportedException; use Dtc\QueueBundle\Model\BaseJob; use Dtc\QueueBundle\Model\Job; @@ -11,12 +12,16 @@ abstract class AbstractJobManager implements JobManagerInterface protected $jobTiminigManager; protected $jobClass; protected $runManager; - - public function __construct(RunManager $runManager, JobTimingManager $jobTimingManager, $jobClass) + + /** @var EventDispatcher $eventDispatcher */ + protected $eventDispatcher; + + public function __construct(RunManager $runManager, JobTimingManager $jobTimingManager, $jobClass, EventDispatcher $eventDispatcher) { $this->runManager = $runManager; $this->jobTiminigManager = $jobTimingManager; $this->jobClass = $jobClass; + $this->eventDispatcher = $eventDispatcher; } /** diff --git a/Manager/ArchivableJobManager.php b/Manager/ArchivableJobManager.php index aa01e53..9d24bcd 100644 --- a/Manager/ArchivableJobManager.php +++ b/Manager/ArchivableJobManager.php @@ -2,6 +2,8 @@ namespace Dtc\QueueBundle\Manager; +use Dtc\QueueBundle\EventDispatcher\EventDispatcher; + abstract class ArchivableJobManager extends StallableJobManager { /** @@ -15,16 +17,18 @@ abstract class ArchivableJobManager extends StallableJobManager * @param RunManager $runManager * @param JobTimingManager $jobTimingManager * @param $jobClass + * @param EventDispatcher $eventDispatcher * @param $jobArchiveClass */ public function __construct( RunManager $runManager, JobTimingManager $jobTimingManager, $jobClass, + EventDispatcher $eventDispatcher, $jobArchiveClass ) { $this->jobArchiveClass = $jobArchiveClass; - parent::__construct($runManager, $jobTimingManager, $jobClass); + parent::__construct($runManager, $jobTimingManager, $jobClass, $eventDispatcher); } /** diff --git a/Manager/RetryableJobManager.php b/Manager/RetryableJobManager.php index f35d48c..4da5c8a 100644 --- a/Manager/RetryableJobManager.php +++ b/Manager/RetryableJobManager.php @@ -2,6 +2,7 @@ namespace Dtc\QueueBundle\Manager; +use Dtc\QueueBundle\EventDispatcher\Event; use Dtc\QueueBundle\Model\BaseJob; use Dtc\QueueBundle\Model\RetryableJob; use Dtc\QueueBundle\Model\Job; @@ -48,7 +49,12 @@ public function save(Job $job) $this->recordTiming($job); $job->setUpdatedAt(new \DateTime()); - return $this->retryableSave($job); + $result = $this->retryableSave($job); + + $event = new Event($job); + $this->eventDispatcher->dispatch(Event::POST_CREATE_JOB, $event); + + return $result; } /** diff --git a/Model/Job.php b/Model/Job.php index 93dd111..a4624a4 100644 --- a/Model/Job.php +++ b/Model/Job.php @@ -2,6 +2,8 @@ namespace Dtc\QueueBundle\Model; +use Dtc\QueueBundle\Manager\JobManagerInterface; + class Job extends BaseJob { const STATUS_EXPIRED = 'expired'; @@ -28,7 +30,7 @@ public function __call($method, $args) } $job = $this->jobManager->save($this); - + return $job; } diff --git a/RabbitMQ/JobManager.php b/RabbitMQ/JobManager.php index 7cccf82..d977eea 100644 --- a/RabbitMQ/JobManager.php +++ b/RabbitMQ/JobManager.php @@ -2,6 +2,7 @@ namespace Dtc\QueueBundle\RabbitMQ; +use Dtc\QueueBundle\EventDispatcher\EventDispatcher; use Dtc\QueueBundle\Manager\SaveableTrait; use Dtc\QueueBundle\Manager\VerifyTrait; use Dtc\QueueBundle\Model\BaseJob; @@ -39,11 +40,11 @@ class JobManager extends PriorityJobManager protected $hostname; protected $pid; - public function __construct(RunManager $runManager, JobTimingManager $jobTimingManager, $jobClass) + public function __construct(RunManager $runManager, JobTimingManager $jobTimingManager, $jobClass, EventDispatcher $eventDispatcher) { $this->hostname = gethostname() ?: ''; $this->pid = getmypid(); - parent::__construct($runManager, $jobTimingManager, $jobClass); + parent::__construct($runManager, $jobTimingManager, $jobClass, $eventDispatcher); } /** diff --git a/Redis/BaseJobManager.php b/Redis/BaseJobManager.php index d73276d..41089ab 100644 --- a/Redis/BaseJobManager.php +++ b/Redis/BaseJobManager.php @@ -2,6 +2,7 @@ namespace Dtc\QueueBundle\Redis; +use Dtc\QueueBundle\EventDispatcher\EventDispatcher; use Dtc\QueueBundle\Manager\JobIdTrait; use Dtc\QueueBundle\Manager\JobTimingManager; use Dtc\QueueBundle\Manager\PriorityJobManager; @@ -31,13 +32,13 @@ abstract class BaseJobManager extends PriorityJobManager /** * @param string $cacheKeyPrefix */ - public function __construct(RunManager $runManager, JobTimingManager $jobTimingManager, $jobClass, $cacheKeyPrefix) + public function __construct(RunManager $runManager, JobTimingManager $jobTimingManager, $jobClass, EventDispatcher $eventDispatcher, $cacheKeyPrefix) { $this->cacheKeyPrefix = $cacheKeyPrefix; $this->hostname = gethostname() ?: ''; $this->pid = getmypid(); - parent::__construct($runManager, $jobTimingManager, $jobClass); + parent::__construct($runManager, $jobTimingManager, $jobClass, $eventDispatcher); } public function setRedis(RedisInterface $redis) diff --git a/Resources/config/queue.yml b/Resources/config/queue.yml index cc43cc2..7c5f0ef 100644 --- a/Resources/config/queue.yml +++ b/Resources/config/queue.yml @@ -76,6 +76,7 @@ services: - "@dtc_queue.manager.job_timing" - '@dtc_queue.document_manager' - '%dtc_queue.class.job%' + - '@dtc_queue.event_dispatcher' - '%dtc_queue.class.job_archive%' calls: - ["setMaxPriority", ['%dtc_queue.priority.max%']] @@ -94,6 +95,7 @@ services: - "@dtc_queue.manager.run" - "@dtc_queue.manager.job_timing" - '%dtc_queue.class.job%' + - '@dtc_queue.event_dispatcher' calls: - ["setDefaultMaxRetries", ['%dtc_queue.retry.max.retries%']] - ["setDefaultMaxFailures", ['%dtc_queue.retry.max.failures%']] @@ -107,6 +109,7 @@ services: - "@dtc_queue.manager.run" - "@dtc_queue.manager.job_timing" - "%dtc_queue.class.job%" + - '@dtc_queue.event_dispatcher' calls: - ["setMaxPriority", ['%dtc_queue.priority.max%']] - ["setPriorityDirection", ['%dtc_queue.priority.direction%']] @@ -123,6 +126,7 @@ services: - "@dtc_queue.manager.run" - "@dtc_queue.manager.job_timing" - "%dtc_queue.class.job%" + - '@dtc_queue.event_dispatcher' - "%dtc_queue.redis.prefix%" calls: - ["setMaxPriority", ['%dtc_queue.priority.max%']] @@ -199,6 +203,7 @@ services: - "@dtc_queue.manager.job_timing" - '@dtc_queue.entity_manager' - '%dtc_queue.class.job%' + - '@dtc_queue.event_dispatcher' - '%dtc_queue.class.job_archive%' calls: - ["setMaxPriority", ['%dtc_queue.priority.max%']] diff --git a/Tests/Beanstalkd/JobManagerTest.php b/Tests/Beanstalkd/JobManagerTest.php index aa8903f..194723c 100755 --- a/Tests/Beanstalkd/JobManagerTest.php +++ b/Tests/Beanstalkd/JobManagerTest.php @@ -3,6 +3,7 @@ namespace Dtc\QueueBundle\Tests\Beanstalkd; use Dtc\QueueBundle\Beanstalkd\JobManager; +use Dtc\QueueBundle\EventDispatcher\EventDispatcher; use Dtc\QueueBundle\Manager\JobTimingManager; use Dtc\QueueBundle\Manager\RunManager; use Dtc\QueueBundle\Tests\FibonacciWorker; @@ -32,7 +33,8 @@ public static function setUpBeforeClass() self::$beanstalkd = new Pheanstalk($host); self::$jobTimingManager = new JobTimingManager($jobTimingClass, false); self::$runManager = new RunManager($runClass); - self::$jobManager = new JobManager(self::$runManager, self::$jobTimingManager, $className); + self::$eventDispatcher = new EventDispatcher(); + self::$jobManager = new JobManager(self::$runManager, self::$jobTimingManager, $className, self::$eventDispatcher); self::$jobManager->setBeanstalkd(self::$beanstalkd); self::$worker = new FibonacciWorker(); diff --git a/Tests/Command/CommandTrait.php b/Tests/Command/CommandTrait.php index ccd4cea..4cc9af1 100644 --- a/Tests/Command/CommandTrait.php +++ b/Tests/Command/CommandTrait.php @@ -2,6 +2,7 @@ namespace Dtc\QueueBundle\Tests\Command; +use Dtc\QueueBundle\EventDispatcher\EventDispatcher; use Dtc\QueueBundle\Model\Job; use Dtc\QueueBundle\Model\JobTiming; use Dtc\QueueBundle\Manager\JobTimingManager; @@ -86,7 +87,8 @@ protected function runStubCommand($className, $params, $call, $expectedResult = $jobTimingManager = new JobTimingManager(JobTiming::class, false); $runManager = new StubRunManager($jobTimingManager, \Dtc\QueueBundle\Model\Run::class); - $jobManager = new StubJobManager($runManager, $jobTimingManager, Job::class); + $eventDispatcher = new EventDispatcher(); + $jobManager = new StubJobManager($runManager, $jobTimingManager, Job::class, $eventDispatcher); $container = new Container(); $container->set('dtc_queue.manager.job', $jobManager); $container->set('dtc_queue.manager.run', $runManager); diff --git a/Tests/Command/CountCommandTest.php b/Tests/Command/CountCommandTest.php index 41c9970..e9e4424 100644 --- a/Tests/Command/CountCommandTest.php +++ b/Tests/Command/CountCommandTest.php @@ -3,6 +3,7 @@ namespace Dtc\QueueBundle\Tests\Command; use Dtc\QueueBundle\Command\CountCommand; +use Dtc\QueueBundle\EventDispatcher\EventDispatcher; use Dtc\QueueBundle\Model\Job; use Dtc\QueueBundle\Model\JobTiming; use Dtc\QueueBundle\Manager\JobTimingManager; @@ -22,7 +23,8 @@ public function testCountCommand() $container = new Container(); $jobTimingManager = new JobTimingManager(JobTiming::class, false); $runManager = new RunManager($jobTimingManager, Run::class); - $container->set('dtc_queue.manager.job', new StubJobManager($runManager, $jobTimingManager, Job::class)); + $eventDispatcher = new EventDispatcher(); + $container->set('dtc_queue.manager.job', new StubJobManager($runManager, $jobTimingManager, Job::class, $eventDispatcher)); $this->runCommandException(CountCommand::class, $container, []); } diff --git a/Tests/Command/CreateJobCommandTest.php b/Tests/Command/CreateJobCommandTest.php index 0ef86f9..457d6e3 100644 --- a/Tests/Command/CreateJobCommandTest.php +++ b/Tests/Command/CreateJobCommandTest.php @@ -22,7 +22,8 @@ public function testCreateJobCommand() { $jobTimingManager = new JobTimingManager(JobTimingManager::class, false); $runManager = new RunManager($jobTimingManager, Run::class); - $jobManager = new StubJobManager($runManager, $jobTimingManager, Job::class); + $eventDispatcher = new EventDispatcher(); + $jobManager = new StubJobManager($runManager, $jobTimingManager, Job::class, $eventDispatcher); $container = new Container(); $container->set('dtc_queue.manager.job', $jobManager); $this->runCommandException(CreateJobCommand::class, $container, ['worker_name' => 'fibonacci', 'method' => 'fibonacci', 'args' => [1]]); diff --git a/Tests/Doctrine/DoctrineJobManagerTest.php b/Tests/Doctrine/DoctrineJobManagerTest.php index f1a63e7..9eeca94 100644 --- a/Tests/Doctrine/DoctrineJobManagerTest.php +++ b/Tests/Doctrine/DoctrineJobManagerTest.php @@ -6,6 +6,7 @@ use Doctrine\ORM\EntityManager; use Dtc\QueueBundle\Doctrine\DoctrineJobManager; use Dtc\QueueBundle\Doctrine\DtcQueueListener; +use Dtc\QueueBundle\EventDispatcher\EventDispatcher; use Dtc\QueueBundle\Manager\StallableJobManager; use Dtc\QueueBundle\Model\BaseJob; use Dtc\QueueBundle\Model\Job; @@ -52,8 +53,9 @@ public static function setUpBeforeClass() { self::$jobTimingManager = new self::$jobTimingManagerClass(self::$objectManager, self::$jobTimingClass, true); self::$runManager = new self::$runManagerClass(self::$objectManager, self::$runClass, self::$runArchiveClass); + self::$eventDispatcher = new EventDispatcher(); /** @var JobManager|\Dtc\QueueBundle\ORM\JobManager $jobManager */ - $jobManager = new self::$jobManagerClass(self::$runManager, self::$jobTimingManager, self::$objectManager, self::$objectName, self::$archiveObjectName); + $jobManager = new self::$jobManagerClass(self::$runManager, self::$jobTimingManager, self::$objectManager, self::$objectName, self::$eventDispatcher, self::$archiveObjectName); self::$jobManager = $jobManager; $jobManager->setMaxPriority(255); @@ -341,7 +343,7 @@ public function testResetExceptionJobs() self::assertEquals(BaseJob::STATUS_EXCEPTION, $result->getStatus()); if ($objectManager instanceof EntityManager) { JobManagerTest::createObjectManager(); - $jobManager = new self::$jobManagerClass(self::$runManager, self::$jobTimingManager, self::$objectManager, self::$objectName, self::$archiveObjectName); + $jobManager = new self::$jobManagerClass(self::$runManager, self::$jobTimingManager, self::$objectManager, self::$objectName, self::$eventDispatcher, self::$archiveObjectName); $jobManager->getObjectManager()->clear(); $objectManager = $jobManager->getObjectManager(); } diff --git a/Tests/EventDispatcher/EventDispatcherTest.php b/Tests/EventDispatcher/EventDispatcherTest.php index 3abc99f..6a28ccf 100644 --- a/Tests/EventDispatcher/EventDispatcherTest.php +++ b/Tests/EventDispatcher/EventDispatcherTest.php @@ -16,16 +16,28 @@ public function testEventDispatcher() self::assertFalse($eventDispatcher->hasListeners(Event::POST_JOB)); self::assertFalse($eventDispatcher->hasListeners(Event::PRE_JOB)); + self::assertFalse($eventDispatcher->hasListeners(Event::POST_CREATE_JOB)); $eventDispatcher->addSubscriber($eventSubscriber); self::assertTrue($eventDispatcher->hasListeners(Event::POST_JOB)); self::assertTrue($eventDispatcher->hasListeners(Event::PRE_JOB)); + self::assertTrue($eventDispatcher->hasListeners(Event::POST_CREATE_JOB)); $job = new Job(); $event = new Event($job); self::assertEmpty($eventSubscriber->getPostJobCalled()); self::assertEmpty($eventSubscriber->getPreJobCalled()); + self::assertEmpty($eventSubscriber->getPostCreateJobCalled()); + + $eventDispatcher->dispatch(Event::POST_CREATE_JOB, $event); + + self::assertEmpty($eventSubscriber->getPostJobCalled()); + self::assertEmpty($eventSubscriber->getPreJobCalled()); + $postCreateJobCalled = $eventSubscriber->getPostCreateJobCalled(); + self::assertNotEmpty($postCreateJobCalled); + $dispatchedEvent = $postCreateJobCalled[0]; + self::assertEquals($event, $dispatchedEvent); $eventDispatcher->dispatch(Event::PRE_JOB, $event); diff --git a/Tests/EventDispatcher/StubEventSubscriber.php b/Tests/EventDispatcher/StubEventSubscriber.php index 6d24eea..aff8230 100644 --- a/Tests/EventDispatcher/StubEventSubscriber.php +++ b/Tests/EventDispatcher/StubEventSubscriber.php @@ -7,6 +7,7 @@ class StubEventSubscriber implements EventSubscriberInterface { + protected $postCreateJobCalled; protected $preJobCalled; protected $postJobCalled; @@ -20,6 +21,11 @@ public function postJob(Event $event) $this->postJobCalled[] = $event; } + public function postCreateJob(Event $event) + { + $this->postCreateJobCalled[] = $event; + } + public function getPreJobCalled() { return $this->preJobCalled; @@ -30,9 +36,15 @@ public function getPostJobCalled() return $this->postJobCalled; } + public function getPostCreateJobCalled() + { + return $this->postCreateJobCalled; + } + public static function getSubscribedEvents() { return [ + Event::POST_CREATE_JOB => 'postCreateJob', Event::PRE_JOB => 'preJob', Event::POST_JOB => 'postJob', ]; diff --git a/Tests/Manager/BaseJobManagerTest.php b/Tests/Manager/BaseJobManagerTest.php index 9bd5764..f31b679 100755 --- a/Tests/Manager/BaseJobManagerTest.php +++ b/Tests/Manager/BaseJobManagerTest.php @@ -2,6 +2,7 @@ namespace Dtc\QueueBundle\Tests\Manager; +use Dtc\QueueBundle\EventDispatcher\EventDispatcher; use Dtc\QueueBundle\Manager\JobManagerInterface; use Dtc\QueueBundle\Manager\PriorityJobManager; use Dtc\QueueBundle\Manager\RunManager; @@ -30,6 +31,9 @@ abstract class BaseJobManagerTest extends TestCase /** @var JobTimingManager */ public static $jobTimingManager; + /** @var EventDispatcher */ + public static $eventDispatcher; + public static function setUpBeforeClass() { self::$jobClass = self::$jobManager->getJobClass(); diff --git a/Tests/Manager/StaticJobManagerTest.php b/Tests/Manager/StaticJobManagerTest.php index 3f407f9..4e5ca68 100755 --- a/Tests/Manager/StaticJobManagerTest.php +++ b/Tests/Manager/StaticJobManagerTest.php @@ -2,6 +2,7 @@ namespace Dtc\QueueBundle\Tests\Manager; +use Dtc\QueueBundle\EventDispatcher\EventDispatcher; use Dtc\QueueBundle\Model\Job; use Dtc\QueueBundle\Model\JobTiming; use Dtc\QueueBundle\Manager\JobTimingManager; @@ -16,7 +17,8 @@ public static function setUpBeforeClass() { self::$jobTimingManager = new JobTimingManager(JobTiming::class, false); self::$runManager = new RunManager(Run::class); - self::$jobManager = new StaticJobManager(self::$runManager, self::$jobTimingManager, Job::class); + self::$eventDispatcher = new EventDispatcher(); + self::$jobManager = new StaticJobManager(self::$runManager, self::$jobTimingManager, Job::class, self::$eventDispatcher); self::$worker = new FibonacciWorker(); parent::setUpBeforeClass(); } diff --git a/Tests/Manager/WorkerManagerTest.php b/Tests/Manager/WorkerManagerTest.php index 800806b..19a7d06 100755 --- a/Tests/Manager/WorkerManagerTest.php +++ b/Tests/Manager/WorkerManagerTest.php @@ -27,7 +27,8 @@ public function setup() { $jobTimingManager = new JobTimingManager(JobTiming::class, false); $runManager = new RunManager(Run::class); - $this->jobManager = new StaticJobManager($runManager, $jobTimingManager, Job::class); + $eventDispatcher = new EventDispatcher(); + $this->jobManager = new StaticJobManager($runManager, $jobTimingManager, Job::class, $eventDispatcher); $this->worker = new FibonacciWorker(); $this->worker->setJobManager($this->jobManager); $this->eventDispatcher = new EventDispatcher(); diff --git a/Tests/Model/JobTest.php b/Tests/Model/JobTest.php index 514eee9..b8352bd 100755 --- a/Tests/Model/JobTest.php +++ b/Tests/Model/JobTest.php @@ -2,6 +2,7 @@ namespace Dtc\QueueBundle\Tests\Model; +use Dtc\QueueBundle\EventDispatcher\EventDispatcher; use Dtc\QueueBundle\Model\Job; use Dtc\QueueBundle\Model\JobTiming; use Dtc\QueueBundle\Manager\JobTimingManager; @@ -48,7 +49,8 @@ public function testChainJobCall() { $jobTimingManager = new JobTimingManager(JobTiming::class, false); $runManager = new RunManager(Run::class); - $jobManager = new StaticJobManager($runManager, $jobTimingManager, Job::class); + $eventDispatcher = new EventDispatcher(); + $jobManager = new StaticJobManager($runManager, $jobTimingManager, Job::class, $eventDispatcher); $worker = new FibonacciWorker(); $worker->setJobManager($jobManager); diff --git a/Tests/Model/WorkerTest.php b/Tests/Model/WorkerTest.php index 4b6c9e0..ba0bfd7 100755 --- a/Tests/Model/WorkerTest.php +++ b/Tests/Model/WorkerTest.php @@ -2,6 +2,7 @@ namespace Dtc\QueueBundle\Tests\Model; +use Dtc\QueueBundle\EventDispatcher\EventDispatcher; use Dtc\QueueBundle\Model\Job; use Dtc\QueueBundle\Model\JobTiming; use Dtc\QueueBundle\Manager\JobTimingManager; @@ -21,7 +22,8 @@ public function setUp() { $jobTimingManager = new JobTimingManager(JobTiming::class, false); $runManager = new RunManager(Run::class); - $this->jobManager = new StaticJobManager($runManager, $jobTimingManager, Job::class); + $eventDispatcher = new EventDispatcher(); + $this->jobManager = new StaticJobManager($runManager, $jobTimingManager, Job::class, $eventDispatcher); $this->worker = new FibonacciWorker(); $this->worker->setJobManager($this->jobManager); } diff --git a/Tests/RabbitMQ/JobManagerTest.php b/Tests/RabbitMQ/JobManagerTest.php index 2a4cf73..05ba9c6 100755 --- a/Tests/RabbitMQ/JobManagerTest.php +++ b/Tests/RabbitMQ/JobManagerTest.php @@ -2,6 +2,7 @@ namespace Dtc\QueueBundle\Tests\RabbitMQ; +use Dtc\QueueBundle\EventDispatcher\EventDispatcher; use Dtc\QueueBundle\Exception\UnsupportedException; use Dtc\QueueBundle\Model\Job; use Dtc\QueueBundle\Model\JobTiming; @@ -43,7 +44,8 @@ public static function setUpBeforeClass() self::$jobTimingManager = new JobTimingManager($jobTimingClass, false); self::$runManager = new RunManager($runClass); - self::$jobManager = new JobManager(self::$runManager, self::$jobTimingManager, \Dtc\QueueBundle\RabbitMQ\Job::class); + self::$eventDispatcher = new EventDispatcher(); + self::$jobManager = new JobManager(self::$runManager, self::$jobTimingManager, \Dtc\QueueBundle\RabbitMQ\Job::class, self::$eventDispatcher); self::$jobManager->setAMQPConnection(self::$connection); self::$jobManager->setMaxPriority(255); self::$jobManager->setQueueArgs('dtc_queue', false, true, false, false); @@ -66,7 +68,7 @@ public function testConstructor() { $test = null; try { - $test = new JobManager(self::$runManager, self::$jobTimingManager, Job::class); + $test = new JobManager(self::$runManager, self::$jobTimingManager, Job::class, self::$eventDispatcher); } catch (\Exception $exception) { self::fail("shouldn't get here"); } @@ -75,7 +77,7 @@ public function testConstructor() public function testSetupChannel() { - $jobManager = new JobManager(self::$runManager, self::$jobTimingManager, Job::class); + $jobManager = new JobManager(self::$runManager, self::$jobTimingManager, Job::class, self::$eventDispatcher); $failed = false; try { $jobManager->setupChannel(); diff --git a/Tests/Redis/JobManagerNoPriorityTest.php b/Tests/Redis/JobManagerNoPriorityTest.php index b32f690..bca379f 100644 --- a/Tests/Redis/JobManagerNoPriorityTest.php +++ b/Tests/Redis/JobManagerNoPriorityTest.php @@ -38,6 +38,7 @@ public static function setUpBeforeClass() self::$runManager, self::$jobTimingManager, \Dtc\QueueBundle\Redis\Job::class, + self::$eventDispatcher, 'test_cache_key' ); self::$jobManager->setRedis($phpredis); diff --git a/Tests/Redis/JobManagerTest.php b/Tests/Redis/JobManagerTest.php index bf86074..b0c0ae0 100644 --- a/Tests/Redis/JobManagerTest.php +++ b/Tests/Redis/JobManagerTest.php @@ -2,6 +2,7 @@ namespace Dtc\QueueBundle\Tests\Redis; +use Dtc\QueueBundle\EventDispatcher\EventDispatcher; use Dtc\QueueBundle\Model\BaseJob; use Dtc\QueueBundle\Model\Job; use Dtc\QueueBundle\Model\JobTiming; @@ -51,7 +52,8 @@ public static function setUpBeforeClass() self::$jobTimingManager = new JobTimingManager($jobTimingClass, false); self::$runManager = new RunManager($runClass); - self::$jobManager = new JobManager(self::$runManager, self::$jobTimingManager, \Dtc\QueueBundle\Redis\Job::class, 'test_cache_key'); + self::$eventDispatcher = new EventDispatcher(); + self::$jobManager = new JobManager(self::$runManager, self::$jobTimingManager, \Dtc\QueueBundle\Redis\Job::class, self::$eventDispatcher, 'test_cache_key'); self::$jobManager->setRedis($predis); self::$jobManager->setMaxPriority(255); self::$worker = new FibonacciWorker(); @@ -62,7 +64,7 @@ public function testConstructor() { $test = null; try { - $test = new JobManager(self::$runManager, self::$jobTimingManager, Job::class, 'something'); + $test = new JobManager(self::$runManager, self::$jobTimingManager, Job::class, self::$eventDispatcher, 'something'); } catch (\Exception $exception) { self::fail("shouldn't get here"); } diff --git a/Tests/Redis/PhpRedisJobManagerTest.php b/Tests/Redis/PhpRedisJobManagerTest.php index 98617b3..8b0a88f 100644 --- a/Tests/Redis/PhpRedisJobManagerTest.php +++ b/Tests/Redis/PhpRedisJobManagerTest.php @@ -40,6 +40,7 @@ public static function setUpBeforeClass() self::$runManager, self::$jobTimingManager, \Dtc\QueueBundle\Redis\Job::class, + self::$eventDispatcher, 'test_cache_key' ); self::$jobManager->setRedis($phpredis); diff --git a/Tests/StaticJobManager.php b/Tests/StaticJobManager.php index 1504133..cb3c2f5 100755 --- a/Tests/StaticJobManager.php +++ b/Tests/StaticJobManager.php @@ -2,6 +2,8 @@ namespace Dtc\QueueBundle\Tests; +use Dtc\QueueBundle\EventDispatcher\Event; +use Dtc\QueueBundle\EventDispatcher\EventDispatcher; use Dtc\QueueBundle\Manager\AbstractJobManager; use Dtc\QueueBundle\Model\Job; use Dtc\QueueBundle\Manager\JobTimingManager; @@ -18,11 +20,11 @@ class StaticJobManager extends AbstractJobManager private $uniqeId; public $enableSorting = true; - public function __construct(RunManager $runManager, JobTimingManager $jobTimingManager, $jobClass) + public function __construct(RunManager $runManager, JobTimingManager $jobTimingManager, $jobClass, EventDispatcher $eventDispatcher) { $this->jobs = array(); $this->uniqeId = 1; - parent::__construct($runManager, $jobTimingManager, $jobClass); + parent::__construct($runManager, $jobTimingManager, $jobClass, $eventDispatcher); } public function getWaitingJobCount($workerName = null, $methodName = null) @@ -76,6 +78,9 @@ public function save(Job $job) ++$this->uniqeId; } + $event = new Event($job); + $this->eventDispatcher->dispatch(Event::POST_CREATE_JOB, $event); + return $job; }