From 2668170e2dce31c73b7191a342494265991b6b46 Mon Sep 17 00:00:00 2001 From: Marco Deleu Date: Mon, 29 Sep 2025 13:32:49 -0300 Subject: [PATCH 1/2] Job SQS Handler --- src/bref/craft/CraftCliEntrypoint.php | 17 +++++++++++- src/bref/handlers/CommandHandler.php | 4 +-- src/bref/handlers/CommandSqsHandler.php | 4 +-- src/bref/handlers/JobSqsHandler.php | 37 +++++++++++++++++++++++++ src/bref/handlers/job-sqs-cmd.php | 5 ++++ 5 files changed, 60 insertions(+), 7 deletions(-) create mode 100644 src/bref/handlers/JobSqsHandler.php create mode 100644 src/bref/handlers/job-sqs-cmd.php diff --git a/src/bref/craft/CraftCliEntrypoint.php b/src/bref/craft/CraftCliEntrypoint.php index f3c83f5..dcc9665 100644 --- a/src/bref/craft/CraftCliEntrypoint.php +++ b/src/bref/craft/CraftCliEntrypoint.php @@ -5,6 +5,7 @@ use craft\cloud\AppConfig; use craft\cloud\queue\SqsQueue; use craft\cloud\runtime\event\EventHandler; +use Bref\Context\Context; use Symfony\Component\Process\Process; final class CraftCliEntrypoint @@ -37,8 +38,22 @@ private function command(string $command, array $environment, int $timeout): arr ]; } - public function lambdaCommand(string $command, array $environment) + public function lambdaCommand(string $command, Context $context): array { + $environment = $this->invocationContext($context); + return $this->command($command, $environment, self::LAMBDA_EXECUTION_LIMIT); } + + public function craftJob(string $jobId, Context $context): array + { + $environment = $this->invocationContext($context); + + return $this->command("cloud/queue/exec $jobId", $environment, self::LAMBDA_EXECUTION_LIMIT); + } + + private function invocationContext(Context $context): array + { + return ['LAMBDA_INVOCATION_CONTEXT' => json_encode($context, JSON_THROW_ON_ERROR)]; + } } diff --git a/src/bref/handlers/CommandHandler.php b/src/bref/handlers/CommandHandler.php index 9cc18ed..e77277a 100644 --- a/src/bref/handlers/CommandHandler.php +++ b/src/bref/handlers/CommandHandler.php @@ -23,10 +23,8 @@ public function handle(mixed $event, Context $context): array $command = $event['command']; - $environment = ['LAMBDA_INVOCATION_CONTEXT' => json_encode($context, JSON_THROW_ON_ERROR)]; - $entrypoint = new CraftCliEntrypoint(); - return $entrypoint->lambdaCommand($command, $environment); + return $entrypoint->lambdaCommand($command, $context); } } diff --git a/src/bref/handlers/CommandSqsHandler.php b/src/bref/handlers/CommandSqsHandler.php index 6d6521f..ae4540c 100644 --- a/src/bref/handlers/CommandSqsHandler.php +++ b/src/bref/handlers/CommandSqsHandler.php @@ -42,9 +42,7 @@ public function handleSqs(SqsEvent $event, Context $context): void public function runCommand(string $command, Context $context): array { try { - $environment = ['LAMBDA_INVOCATION_CONTEXT' => json_encode($context, JSON_THROW_ON_ERROR)]; - - return $this->entrypoint->lambdaCommand($command, $environment); + return $this->entrypoint->lambdaCommand($command, $context); } catch (Throwable $t) { return [ 'exit_code' => 1, diff --git a/src/bref/handlers/JobSqsHandler.php b/src/bref/handlers/JobSqsHandler.php new file mode 100644 index 0000000..b896cb0 --- /dev/null +++ b/src/bref/handlers/JobSqsHandler.php @@ -0,0 +1,37 @@ +entrypoint = new CraftCliEntrypoint(); + } + + public function handleSqs(SqsEvent $event, Context $context): void + { + foreach ($event->getRecords() as $record) { + $message = $record->getBody(); + + $payload = json_decode($message, associative: true, flags: JSON_THROW_ON_ERROR); + + $jobId = $payload['jobId'] ?? throw new RuntimeException("Job Id not found. Message: [$message]"); + + $this->entrypoint->craftJob($jobId, $context); + } + } +} diff --git a/src/bref/handlers/job-sqs-cmd.php b/src/bref/handlers/job-sqs-cmd.php new file mode 100644 index 0000000..81b0219 --- /dev/null +++ b/src/bref/handlers/job-sqs-cmd.php @@ -0,0 +1,5 @@ + Date: Fri, 3 Oct 2025 16:06:17 -0300 Subject: [PATCH 2/2] ECS Fix --- src/bref/craft/CraftCliEntrypoint.php | 2 +- src/bref/handlers/JobSqsHandler.php | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/bref/craft/CraftCliEntrypoint.php b/src/bref/craft/CraftCliEntrypoint.php index dcc9665..64dd159 100644 --- a/src/bref/craft/CraftCliEntrypoint.php +++ b/src/bref/craft/CraftCliEntrypoint.php @@ -2,10 +2,10 @@ namespace craft\cloud\bref\craft; +use Bref\Context\Context; use craft\cloud\AppConfig; use craft\cloud\queue\SqsQueue; use craft\cloud\runtime\event\EventHandler; -use Bref\Context\Context; use Symfony\Component\Process\Process; final class CraftCliEntrypoint diff --git a/src/bref/handlers/JobSqsHandler.php b/src/bref/handlers/JobSqsHandler.php index b896cb0..7c99a03 100644 --- a/src/bref/handlers/JobSqsHandler.php +++ b/src/bref/handlers/JobSqsHandler.php @@ -6,9 +6,7 @@ use Bref\Event\Sqs\SqsEvent; use Bref\Event\Sqs\SqsHandler; use craft\cloud\bref\craft\CraftCliEntrypoint; -use craft\cloud\bref\curl\CurlClient; use RuntimeException; -use Throwable; /** * @internal