From 9bb132f37eab6e48b68419862f3030d6abfa68b9 Mon Sep 17 00:00:00 2001 From: loic Date: Wed, 6 May 2026 16:48:03 +0200 Subject: [PATCH 1/7] add stream exceptions management --- composer.json | 4 ++-- src/Controller/JobController.php | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 6eadd09..352d0c7 100644 --- a/composer.json +++ b/composer.json @@ -44,9 +44,9 @@ } }, "require": { - "php": "^8.3", + "php": "^8.4", "ext-json": "*", - "code-rhapsodie/dataflow-bundle": "^5.6.0", + "code-rhapsodie/dataflow-bundle": "dev-stream-exceptions", "guzzlehttp/promises": "^2.2", "http-interop/http-factory-guzzle": "^1.2", "ibexa/admin-ui": "^5.0", diff --git a/src/Controller/JobController.php b/src/Controller/JobController.php index 1f2fcbc..c3ea86a 100644 --- a/src/Controller/JobController.php +++ b/src/Controller/JobController.php @@ -14,6 +14,7 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpFoundation\StreamedResponse; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; @@ -43,6 +44,15 @@ public function displayLog(int $id): Response $item = $this->jobGateway->find($id); $log = array_map(fn($line) => preg_replace('~#\d+~', "\n$0", (string) $line), $item->getExceptions() ?? []); + if (!empty($log) && $item->getStreamExceptions()) { + return new StreamedResponse(function () use ($item) { + while (($line = fgets($item->getStreamExceptions())) !== false) { + echo "

",preg_replace('~#\d+~', "
$0", (string) $line),"

"; + flush(); + } + }); + } + return $this->render('@ibexadesign/ibexa_dataflow/Item/log.html.twig', [ 'log' => $log, ]); From 65dd26a41b6d528c4b2b8eefc709fd52145783c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20J=2E?= Date: Thu, 7 May 2026 16:23:19 +0200 Subject: [PATCH 2/7] Fix count --- src/Controller/DashboardController.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Controller/DashboardController.php b/src/Controller/DashboardController.php index 2f4d146..0568f63 100644 --- a/src/Controller/DashboardController.php +++ b/src/Controller/DashboardController.php @@ -143,7 +143,9 @@ private function getPager(QueryBuilder $query, Request $request, string $class = if ($class === Job::class && !$this->exceptionHandler instanceof NullExceptionHandler) { $adapter = new TransformingAdapter($adapter, function (array $value) { - $value['exceptions'] = $this->exceptionHandler->find((int) $value['id']) ?? []; + $exceptions = $this->exceptionHandler->find((int)$value['id']); + $value['exceptions'] = $exceptions; + $value['total_results'] = $exceptions ? \count($exceptions) : 0; return $value; }); From e9de0713ce2d78d5f48232e17923b995846883a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20J=2E?= Date: Mon, 25 May 2026 11:54:00 +0200 Subject: [PATCH 3/7] Exception count --- src/Controller/DashboardController.php | 4 +--- .../themes/admin/ibexa_dataflow/parts/tab/job_list.html.twig | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Controller/DashboardController.php b/src/Controller/DashboardController.php index 0568f63..b48f2d6 100644 --- a/src/Controller/DashboardController.php +++ b/src/Controller/DashboardController.php @@ -143,9 +143,7 @@ private function getPager(QueryBuilder $query, Request $request, string $class = if ($class === Job::class && !$this->exceptionHandler instanceof NullExceptionHandler) { $adapter = new TransformingAdapter($adapter, function (array $value) { - $exceptions = $this->exceptionHandler->find((int)$value['id']); - $value['exceptions'] = $exceptions; - $value['total_results'] = $exceptions ? \count($exceptions) : 0; + $value['exceptions'] = $this->exceptionHandler->find((int) $value['id']); return $value; }); diff --git a/src/Resources/views/themes/admin/ibexa_dataflow/parts/tab/job_list.html.twig b/src/Resources/views/themes/admin/ibexa_dataflow/parts/tab/job_list.html.twig index 6eb9296..0f8ebb2 100644 --- a/src/Resources/views/themes/admin/ibexa_dataflow/parts/tab/job_list.html.twig +++ b/src/Resources/views/themes/admin/ibexa_dataflow/parts/tab/job_list.html.twig @@ -19,7 +19,7 @@ {content: job.label}, {content: date(job.requested_date)|ibexa_short_datetime}, {content: job.count is not null ? job.count|format_number(locale: app.request.locale) : '—'}, - {content: job.exceptions|length|format_number(locale: app.request.locale)}, + {content: job.exception_count|format_number(locale: app.request.locale)}, {content: job.start_time ? date(job.start_time)|ibexa_short_datetime : '—'}, {content: job.end_time ? date(job.end_time)|ibexa_short_datetime : '—'}, {content: macros.translateStatus(job.status)}, From 6916f9c83ff2e2309b3f340a0f0ca917a61a1bd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20J=2E?= Date: Mon, 25 May 2026 12:05:59 +0200 Subject: [PATCH 4/7] Fix exception log --- src/Controller/JobController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Controller/JobController.php b/src/Controller/JobController.php index c3ea86a..7ad69f8 100644 --- a/src/Controller/JobController.php +++ b/src/Controller/JobController.php @@ -44,7 +44,7 @@ public function displayLog(int $id): Response $item = $this->jobGateway->find($id); $log = array_map(fn($line) => preg_replace('~#\d+~', "\n$0", (string) $line), $item->getExceptions() ?? []); - if (!empty($log) && $item->getStreamExceptions()) { + if (empty($log) && $item->getStreamExceptions()) { return new StreamedResponse(function () use ($item) { while (($line = fgets($item->getStreamExceptions())) !== false) { echo "

",preg_replace('~#\d+~', "
$0", (string) $line),"

"; From 04a6bcb461bb0f7714e4921f4e99d84a0fbffc78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20J=2E?= Date: Thu, 4 Jun 2026 15:07:59 +0200 Subject: [PATCH 5/7] Display old exception count --- .../themes/admin/ibexa_dataflow/parts/tab/job_list.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Resources/views/themes/admin/ibexa_dataflow/parts/tab/job_list.html.twig b/src/Resources/views/themes/admin/ibexa_dataflow/parts/tab/job_list.html.twig index 0f8ebb2..4889687 100644 --- a/src/Resources/views/themes/admin/ibexa_dataflow/parts/tab/job_list.html.twig +++ b/src/Resources/views/themes/admin/ibexa_dataflow/parts/tab/job_list.html.twig @@ -19,7 +19,7 @@ {content: job.label}, {content: date(job.requested_date)|ibexa_short_datetime}, {content: job.count is not null ? job.count|format_number(locale: app.request.locale) : '—'}, - {content: job.exception_count|format_number(locale: app.request.locale)}, + {content: (job.exception_count is not null ? job.exception_count : job.exceptions|length)|format_number(locale: app.request.locale)}, {content: job.start_time ? date(job.start_time)|ibexa_short_datetime : '—'}, {content: job.end_time ? date(job.end_time)|ibexa_short_datetime : '—'}, {content: macros.translateStatus(job.status)}, From 906448d7a9c03fadf59f279d6bdcd2c30c1b5a32 Mon Sep 17 00:00:00 2001 From: loic Date: Mon, 8 Jun 2026 08:12:40 +0200 Subject: [PATCH 6/7] update dataflow --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 352d0c7..e4e19de 100644 --- a/composer.json +++ b/composer.json @@ -46,7 +46,7 @@ "require": { "php": "^8.4", "ext-json": "*", - "code-rhapsodie/dataflow-bundle": "dev-stream-exceptions", + "code-rhapsodie/dataflow-bundle": "^6.0", "guzzlehttp/promises": "^2.2", "http-interop/http-factory-guzzle": "^1.2", "ibexa/admin-ui": "^5.0", From 9d00a95e8a0b3182a1a7bc7482fd6d169634b062 Mon Sep 17 00:00:00 2001 From: loic Date: Mon, 8 Jun 2026 08:15:22 +0200 Subject: [PATCH 7/7] update changelog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 21d270c..5cffdee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# Version 6.2.0 +* add stream exceptions management + # Version 6.1.2 * Fix BillingAddressComparator