diff --git a/src/bref/craft/CraftCliEntrypoint.php b/src/bref/craft/CraftCliEntrypoint.php index f3c83f5..64dd159 100644 --- a/src/bref/craft/CraftCliEntrypoint.php +++ b/src/bref/craft/CraftCliEntrypoint.php @@ -2,6 +2,7 @@ namespace craft\cloud\bref\craft; +use Bref\Context\Context; use craft\cloud\AppConfig; use craft\cloud\queue\SqsQueue; use craft\cloud\runtime\event\EventHandler; @@ -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..7c99a03 --- /dev/null +++ b/src/bref/handlers/JobSqsHandler.php @@ -0,0 +1,35 @@ +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 @@ +