Skip to content

Commit 33e1492

Browse files
added terminate listener to run scheduled tasks
1 parent 63e97e9 commit 33e1492

File tree

6 files changed

+80
-0
lines changed

6 files changed

+80
-0
lines changed

src/DependencyInjection/Configuration.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@ public function getConfigTreeBuilder()
2020
$treeBuilder->root('task')
2121
->children()
2222
->enumNode('storage')->values(['array', 'doctrine'])->defaultValue('array')->end()
23+
->arrayNode('run')
24+
->addDefaultsIfNotSet()
25+
->children()
26+
->enumNode('mode')->values(['off', 'listener'])->defaultValue('off')->end()
27+
->end()
28+
->end()
2329
->end();
2430

2531
return $treeBuilder;

src/DependencyInjection/TaskExtension.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,9 @@ public function load(array $configs, ContainerBuilder $container)
2626
$loader->load(sprintf('storage/%s.xml', $config['storage']));
2727
$loader->load('scheduler.xml');
2828
$loader->load('command.xml');
29+
30+
if ($config['run']['mode'] === 'listener') {
31+
$loader->load('listener.xml');
32+
}
2933
}
3034
}

src/EventListener/RunListener.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
namespace Task\TaskBundle\EventListener;
4+
5+
use Symfony\Component\EventDispatcher\Event;
6+
use Task\SchedulerInterface;
7+
8+
/**
9+
* Listens to event and run scheduled tasks.
10+
*
11+
* @author @wachterjohannes <[email protected]>
12+
*/
13+
class RunListener
14+
{
15+
/**
16+
* @var SchedulerInterface
17+
*/
18+
private $scheduler;
19+
20+
public function __construct(SchedulerInterface $scheduler)
21+
{
22+
$this->scheduler = $scheduler;
23+
}
24+
25+
/**
26+
* Run scheduled tasks.
27+
*
28+
* @param Event $event
29+
*/
30+
public function run(Event $event)
31+
{
32+
$this->scheduler->run();
33+
}
34+
}

src/Resources/config/listener.xml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0" ?>
2+
<container xmlns="http://symfony.com/schema/dic/services"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
5+
<services>
6+
<service id="task.event_listener.run" class="Task\TaskBundle\EventListener\RunListener">
7+
<argument type="service" id="task.scheduler" />
8+
9+
<tag name="kernel.event_listener" event="kernel.terminate" method="run" />
10+
</service>
11+
</services>
12+
</container>

tests/Functional/SchedulerTest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
namespace Functional;
44

55
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
6+
use Symfony\Component\HttpFoundation\Request;
7+
use Symfony\Component\HttpFoundation\Response;
68
use Task\SchedulerInterface;
79
use Task\Storage\StorageInterface;
810
use Task\Task;
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
namespace Unit\EventListener;
4+
5+
use Symfony\Component\EventDispatcher\Event;
6+
use Task\SchedulerInterface;
7+
use Task\TaskBundle\EventListener\RunListener;
8+
9+
class RunListenerTest extends \PHPUnit_Framework_TestCase
10+
{
11+
public function testRun()
12+
{
13+
$event = $this->prophesize(Event::class);
14+
$scheduler = $this->prophesize(SchedulerInterface::class);
15+
16+
$listener = new RunListener($scheduler->reveal());
17+
18+
$listener->run($event->reveal());
19+
20+
$scheduler->run()->shouldBeCalledTimes(1);
21+
}
22+
}

0 commit comments

Comments
 (0)