From 5067797e6396cb8a96239496a1e9693477a7e731 Mon Sep 17 00:00:00 2001 From: Jannik Zschiesche Date: Mon, 21 Sep 2026 10:31:56 +0200 Subject: [PATCH 1/4] Prepare sync transport check --- src/Transport/TransportsHelper.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/Transport/TransportsHelper.php b/src/Transport/TransportsHelper.php index d2a87b7..57604b5 100644 --- a/src/Transport/TransportsHelper.php +++ b/src/Transport/TransportsHelper.php @@ -8,6 +8,7 @@ use Symfony\Component\Messenger\Transport\TransportInterface; use Torr\TaskManager\Config\BundleConfig; use Torr\TaskManager\Exception\Transport\InvalidMessageTransportException; +use Torr\TaskManager\Task\DispatchAfterRunTask\DispatchAfterRunTask; /** * Helper to interact with transports of the Symfony messenger component. @@ -47,6 +48,21 @@ public function hasSyncTransport () : bool return false; } + /** + */ + public function isSyncTransport (string $name, TransportInterface $transport) : bool + { + if (self::INTERNAL_TRANSPORT_NAME === $name) + { + return false; + } + + if ($transport instanceof SyncTransport) + { + return true; + } + } + /** * @return array */ From 0ed0355585abff4098b408b39a252ff975aa211d Mon Sep 17 00:00:00 2001 From: Jannik Zschiesche Date: Mon, 21 Sep 2026 10:54:20 +0200 Subject: [PATCH 2/4] Prepare task refactor --- src/Command/QueueTasksCommand.php | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/src/Command/QueueTasksCommand.php b/src/Command/QueueTasksCommand.php index b38fb31..b4b02be 100644 --- a/src/Command/QueueTasksCommand.php +++ b/src/Command/QueueTasksCommand.php @@ -48,11 +48,6 @@ protected function execute (InputInterface $input, OutputInterface $output) : in $io = new TorrStyle($input, $output); $io->title("Task Manager: Queue Task"); - if ($this->receiverHelper->hasSyncTransport()) - { - $io->caution("The app is using sync transports: that means that registered tasks are directly worked on."); - } - try { [$tasksToQueue, $taskPassedExplicitly] = $this->getTasksToQueue($input, $io); @@ -172,21 +167,21 @@ private function fetchTasksByKey (array $keys) : array private function formatTaskLabel (Task $task) : string { $metaData = $task->getMetaData(); + $label = \sprintf( + "%s (%s)", + $metaData->label, + $metaData->getKey(), + ); if (null !== $metaData->group) { return \sprintf( - "%s: %s (%s)", + "%s: %s", $metaData->group, - $metaData->label, - $metaData->getKey(), + $label, ); } - return \sprintf( - "%s (%s)", - $metaData->label, - $metaData->getKey(), - ); + return $label; } } From 1d9167e09df32d7ab4da0f65e796acd4ed3a4ec2 Mon Sep 17 00:00:00 2001 From: Jannik Zschiesche Date: Mon, 21 Sep 2026 11:03:09 +0200 Subject: [PATCH 3/4] Mark tasks directly in cli queue command --- CHANGELOG.md | 6 +++++ src/Command/QueueTasksCommand.php | 7 +++++- src/Transport/TransportsHelper.php | 28 +++++++++++++++++++----- tests/Manager/TaskManagerTest.php | 7 +++++- tests/Transport/TransportsHelperTest.php | 7 +++++- 5 files changed, 46 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8beef81..b250a8e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +4.1.0 +===== + +* (feature) Show "uses sync transport" info per task. + + 4.0.0 ===== diff --git a/src/Command/QueueTasksCommand.php b/src/Command/QueueTasksCommand.php index b4b02be..564989e 100644 --- a/src/Command/QueueTasksCommand.php +++ b/src/Command/QueueTasksCommand.php @@ -175,13 +175,18 @@ private function formatTaskLabel (Task $task) : string if (null !== $metaData->group) { - return \sprintf( + $label = \sprintf( "%s: %s", $metaData->group, $label, ); } + if ($this->receiverHelper->usesSyncTransport($task)) + { + $label = \sprintf("[sync] %s", $label); + } + return $label; } } diff --git a/src/Transport/TransportsHelper.php b/src/Transport/TransportsHelper.php index 57604b5..a9d115a 100644 --- a/src/Transport/TransportsHelper.php +++ b/src/Transport/TransportsHelper.php @@ -2,13 +2,16 @@ namespace Torr\TaskManager\Transport; +use Symfony\Component\DependencyInjection\Attribute\Autowire; use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException; use Symfony\Component\DependencyInjection\ServiceLocator; +use Symfony\Component\Messenger\Envelope; +use Symfony\Component\Messenger\Transport\Sender\SendersLocatorInterface; use Symfony\Component\Messenger\Transport\Sync\SyncTransport; use Symfony\Component\Messenger\Transport\TransportInterface; use Torr\TaskManager\Config\BundleConfig; use Torr\TaskManager\Exception\Transport\InvalidMessageTransportException; -use Torr\TaskManager\Task\DispatchAfterRunTask\DispatchAfterRunTask; +use Torr\TaskManager\Task\Task; /** * Helper to interact with transports of the Symfony messenger component. @@ -25,6 +28,8 @@ public function __construct ( /** @var ServiceLocator */ private ServiceLocator $transports, private BundleConfig $bundleConfig, + #[Autowire(service: "messenger.senders_locator")] + private SendersLocatorInterface $sendersLocator, ) {} /** @@ -49,18 +54,29 @@ public function hasSyncTransport () : bool } /** + * @param Envelope|Task|object $message */ - public function isSyncTransport (string $name, TransportInterface $transport) : bool + public function usesSyncTransport (object $message) : bool { - if (self::INTERNAL_TRANSPORT_NAME === $name) + if (!$message instanceof Envelope) { - return false; + $message = new Envelope($message); } - if ($transport instanceof SyncTransport) + foreach ($this->sendersLocator->getSenders($message) as $name => $transport) { - return true; + if (self::INTERNAL_TRANSPORT_NAME === $name) + { + continue; + } + + if ($transport instanceof SyncTransport) + { + return true; + } } + + return false; } /** diff --git a/tests/Manager/TaskManagerTest.php b/tests/Manager/TaskManagerTest.php index 6c3dc64..cb78386 100644 --- a/tests/Manager/TaskManagerTest.php +++ b/tests/Manager/TaskManagerTest.php @@ -9,6 +9,7 @@ use Symfony\Component\Messenger\Stamp\DeduplicateStamp; use Symfony\Component\Messenger\Stamp\StampInterface; use Symfony\Component\Messenger\Transport\Receiver\ListableReceiverInterface; +use Symfony\Component\Messenger\Transport\Sender\SendersLocatorInterface; use Symfony\Component\Messenger\Transport\TransportInterface; use Torr\TaskManager\Config\BundleConfig; use Torr\TaskManager\Manager\TaskManager; @@ -79,7 +80,11 @@ private function createManager (array $transports, MessageBusInterface $bus) : T $locator = new ServiceLocator($factories); $config = new BundleConfig(sortedQueues: array_keys($transports)); - $helper = new TransportsHelper($locator, $config); + $helper = new TransportsHelper( + $locator, + $config, + self::createStub(SendersLocatorInterface::class), + ); return new TaskManager($helper, $bus); } diff --git a/tests/Transport/TransportsHelperTest.php b/tests/Transport/TransportsHelperTest.php index 42724f5..b43b301 100644 --- a/tests/Transport/TransportsHelperTest.php +++ b/tests/Transport/TransportsHelperTest.php @@ -4,6 +4,7 @@ use PHPUnit\Framework\TestCase; use Symfony\Component\DependencyInjection\ServiceLocator; +use Symfony\Component\Messenger\Transport\Sender\SendersLocatorInterface; use Torr\TaskManager\Config\BundleConfig; use Torr\TaskManager\Transport\TransportsHelper; @@ -33,7 +34,11 @@ public function testOrderedTransports () : void "scheduler_3" => static fn () => null, ]); - $helper = new TransportsHelper($locator, $config); + $helper = new TransportsHelper( + $locator, + $config, + self::createStub(SendersLocatorInterface::class), + ); self::assertSame([ "scheduler_1", From 73cac1c5ddf296aa46fada9e8fa539536b9707da Mon Sep 17 00:00:00 2001 From: Jannik Zschiesche Date: Mon, 21 Sep 2026 11:09:38 +0200 Subject: [PATCH 4/4] Fix PHPStan issue --- src/Entity/TaskLog.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Entity/TaskLog.php b/src/Entity/TaskLog.php index ab90918..b268be2 100644 --- a/src/Entity/TaskLog.php +++ b/src/Entity/TaskLog.php @@ -63,7 +63,7 @@ class TaskLog /** @var Collection */ #[ORM\OneToMany(mappedBy: "taskLog", targetEntity: TaskRun::class, cascade: ["remove"], orphanRemoval: true)] - #[ORM\OrderBy(["timeStarted" => "asc"])] + #[ORM\OrderBy(["timeStarted" => "ASC"])] public private(set) Collection $runs; /**