From a8595eaca2c205cd5aa237d3ce3c297156a83a61 Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Sat, 17 Dec 2022 20:45:58 +0000 Subject: [PATCH 1/3] Port Messages worker to Utopia queue system --- app/init.php | 5 +- app/workers/messaging.php | 99 ++++++++++++++++++++---------------- src/Appwrite/Event/Phone.php | 10 +++- 3 files changed, 68 insertions(+), 46 deletions(-) diff --git a/app/init.php b/app/init.php index 2f71a60ce..ccd683244 100644 --- a/app/init.php +++ b/app/init.php @@ -853,7 +853,10 @@ App::setResource('audits', fn() => new Audit()); App::setResource('mails', fn() => new Mail()); App::setResource('deletes', fn() => new Delete()); App::setResource('database', fn() => new EventDatabase()); -App::setResource('messaging', fn() => new Phone()); +App::setResource('messaging', function (Connection $queue) { + return new Phone($queue); +}, ['queue']); + App::setResource('queue', function (Group $pools) { return $pools->get('queue')->pop()->getResource(); }, ['pools']); diff --git a/app/workers/messaging.php b/app/workers/messaging.php index 5732c8c00..8f6725fac 100644 --- a/app/workers/messaging.php +++ b/app/workers/messaging.php @@ -1,7 +1,9 @@ getUser(); +$secret = $dsn->getPassword(); -class MessagingV1 extends Worker -{ - protected ?Adapter $sms = null; - protected ?string $from = null; +Server::setResource('sms', function () use ($dsn, $user, $secret) { + return match ($dsn->getHost()) { + 'mock' => new Mock($user, $secret), // used for tests + 'twilio' => new Twilio($user, $secret), + 'text-magic' => new TextMagic($user, $secret), + 'telesign' => new Telesign($user, $secret), + 'msg91' => new Msg91($user, $secret), + 'vonage' => new Vonage($user, $secret), + default => null + }; +}); - public function getName(): string - { - return "mails"; - } +Server::setResource('execute', function () { + return function (string $recipient, string $message, Adapter $sms) { + $from = App::getEnv('_APP_SMS_FROM'); - public function init(): void - { - $dsn = new DSN(App::getEnv('_APP_SMS_PROVIDER')); - $user = $dsn->getUser(); - $secret = $dsn->getPassword(); - - $this->sms = match ($dsn->getHost()) { - 'mock' => new Mock($user, $secret), // used for tests - 'twilio' => new Twilio($user, $secret), - 'text-magic' => new TextMagic($user, $secret), - 'telesign' => new Telesign($user, $secret), - 'msg91' => new Msg91($user, $secret), - 'vonage' => new Vonage($user, $secret), - default => null - }; - - $this->from = App::getEnv('_APP_SMS_FROM'); - } - - public function run(): void - { if (empty(App::getEnv('_APP_SMS_PROVIDER'))) { Console::info('Skipped sms processing. No Phone provider has been set.'); return; } - if (empty($this->from)) { + if (empty($from)) { Console::info('Skipped sms processing. No phone number has been set.'); return; } $message = new SMS( - to: [$this->args['recipient']], - content: $this->args['message'], - from: $this->from, + to: [$recipient], + content: $message, + from: $from, ); try { - $this->sms->send($message); + $sms->send($message); + Console::info('Successfully sent sms message to ' . $recipient); } catch (\Exception $error) { throw new Exception('Error sending message: ' . $error->getMessage(), 500); } - } + }; +}); - public function shutdown(): void - { - } -} +$server->job() + ->inject('message') + ->inject('execute') + ->inject('sms') + ->action(function (Message $message, callable $execute, Adapter $sms) { + $payload = $message->getPayload() ?? []; + + if (empty($payload)) { + throw new Exception('Missing payload'); + } + + if (empty($payload['recipient'])) { + throw new Exception('Missing recipient'); + } + + if (empty($payload['message'])) { + throw new Exception('Missing message'); + } + + $execute($payload['recipient'], $payload['message'], $sms); + }); + +$server->workerStart(); +$server->start(); diff --git a/src/Appwrite/Event/Phone.php b/src/Appwrite/Event/Phone.php index 8baa5120c..162f1c92c 100644 --- a/src/Appwrite/Event/Phone.php +++ b/src/Appwrite/Event/Phone.php @@ -3,13 +3,15 @@ namespace Appwrite\Event; use Resque; +use Utopia\Queue\Client; +use Utopia\Queue\Connection; class Phone extends Event { protected string $recipient = ''; protected string $message = ''; - public function __construct() + public function __construct(protected Connection $connection) { parent::__construct(Event::MESSAGING_QUEUE_NAME, Event::MESSAGING_CLASS_NAME); } @@ -68,7 +70,11 @@ class Phone extends Event */ public function trigger(): string|bool { - return Resque::enqueue($this->queue, $this->class, [ + $client = new Client($this->queue, $this->connection); + + $events = $this->getEvent() ? Event::generateEvents($this->getEvent(), $this->getParams()) : null; + + return $client->enqueue([ 'project' => $this->project, 'user' => $this->user, 'payload' => $this->payload, From 50f82a276f4c086ae6a24550c2b82faadcc6d0c0 Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Sat, 17 Dec 2022 20:46:34 +0000 Subject: [PATCH 2/3] Run Linter --- app/workers/messaging.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/workers/messaging.php b/app/workers/messaging.php index 8f6725fac..1c2b96c10 100644 --- a/app/workers/messaging.php +++ b/app/workers/messaging.php @@ -24,7 +24,7 @@ $dsn = new DSN(App::getEnv('_APP_SMS_PROVIDER')); $user = $dsn->getUser(); $secret = $dsn->getPassword(); -Server::setResource('sms', function () use ($dsn, $user, $secret) { +Server::setResource('sms', function () use ($dsn, $user, $secret) { return match ($dsn->getHost()) { 'mock' => new Mock($user, $secret), // used for tests 'twilio' => new Twilio($user, $secret), @@ -58,7 +58,6 @@ Server::setResource('execute', function () { try { $sms->send($message); - Console::info('Successfully sent sms message to ' . $recipient); } catch (\Exception $error) { throw new Exception('Error sending message: ' . $error->getMessage(), 500); } From ab7c04074cd50dc018a9f6d3bfae8f7f693cc25f Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Sat, 17 Dec 2022 21:23:15 +0000 Subject: [PATCH 3/3] Update Phone.php --- src/Appwrite/Event/Phone.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Appwrite/Event/Phone.php b/src/Appwrite/Event/Phone.php index 162f1c92c..0399e27e4 100644 --- a/src/Appwrite/Event/Phone.php +++ b/src/Appwrite/Event/Phone.php @@ -2,7 +2,6 @@ namespace Appwrite\Event; -use Resque; use Utopia\Queue\Client; use Utopia\Queue\Connection;