diff --git a/src/Middleware/SlowTaskNotifierMiddleware.php b/src/Middleware/SlowTaskNotifierMiddleware.php new file mode 100644 index 00000000..0da6249a --- /dev/null +++ b/src/Middleware/SlowTaskNotifierMiddleware.php @@ -0,0 +1,48 @@ + + */ +final class SlowTaskNotifierMiddleware implements PostExecutionMiddlewareInterface +{ + private HubInterface $hub; + private string $updateUrl; + private SerializerInterface $serializer; + + public function __construct( + HubInterface $hub, + string $updateUrl, + SerializerInterface $serializer + ) { + $this->hub = $hub; + $this->updateUrl = $updateUrl; + $this->serializer = $serializer; + } + + /** + * {@inheritdoc} + */ + public function postExecute(TaskInterface $task): void + { + if (!$this->hub instanceof HubInterface) { + return; + } + + $this->hub->publish(new Update($this->updateUrl, json_encode([ + 'event' => 'task.slow_execution', + 'body' => [ + 'task' => $this->serializer->serialize($task, 'json'), + ], + ]))); + } +} diff --git a/tests/DependencyInjection/SchedulerBundleConfigurationTest.php b/tests/DependencyInjection/SchedulerBundleConfigurationTest.php index d2d6f4c3..2d7bd543 100644 --- a/tests/DependencyInjection/SchedulerBundleConfigurationTest.php +++ b/tests/DependencyInjection/SchedulerBundleConfigurationTest.php @@ -24,6 +24,7 @@ public function testConfigurationCanBeEmpty(): void self::assertArrayHasKey('timezone', $configuration); self::assertArrayHasKey('tasks', $configuration); self::assertArrayNotHasKey('probe', $configuration); + self::assertArrayNotHasKey('notifier', $configuration); self::assertArrayHasKey('lock_store', $configuration); } diff --git a/tests/Middleware/SlowTaskNotifierMiddlewareTest.php b/tests/Middleware/SlowTaskNotifierMiddlewareTest.php new file mode 100644 index 00000000..efebb79b --- /dev/null +++ b/tests/Middleware/SlowTaskNotifierMiddlewareTest.php @@ -0,0 +1,14 @@ + + */ +final class SlowTaskNotifierMiddlewareTest extends TestCase +{ +}