From 84f1a15a4c1e99394e8559832ec4ff1be0285126 Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Tue, 6 Dec 2022 15:06:40 +0000 Subject: [PATCH 1/2] Refactor Audit Worker to use Utopia Queue system --- app/cli.php | 5 ++ app/init.php | 4 +- app/worker.php | 11 +++++ app/workers/audits.php | 91 ++++++++++++++++++++++-------------- src/Appwrite/Event/Audit.php | 8 +++- 5 files changed, 82 insertions(+), 37 deletions(-) diff --git a/app/cli.php b/app/cli.php index 13709b9b57..8120f5ff68 100644 --- a/app/cli.php +++ b/app/cli.php @@ -4,6 +4,7 @@ require_once __DIR__ . '/init.php'; require_once __DIR__ . '/controllers/general.php'; use Appwrite\Event\Func; +use Appwrite\Event\Audit; use Appwrite\Platform\Appwrite; use Utopia\CLI\CLI; use Utopia\Database\Validator\Authorization; @@ -114,6 +115,10 @@ CLI::setResource('queueForFunctions', function (Group $pools) { return new Func($pools->get('queue')->pop()->getResource()); }, ['pools']); +CLI::setResource('audits', function (Group $pools) { + return new Audit($pools->get('queue')->pop()->getResource()); +}, ['pools']); + CLI::setResource('logError', function (Registry $register) { return function (Throwable $error, string $namespace, string $action) use ($register) { $logger = $register->get('logger'); diff --git a/app/init.php b/app/init.php index 31f82740b6..c6e946e2b1 100644 --- a/app/init.php +++ b/app/init.php @@ -847,7 +847,9 @@ App::setResource('locale', fn() => new Locale(App::getEnv('_APP_LOCALE', 'en'))) // Queues App::setResource('events', fn() => new Event('', '')); -App::setResource('audits', fn() => new Audit()); +App::setResource('audits', function (Group $pools) { + return new Audit($pools->get('queue')->pop()->getResource()); +}, ['pools']); App::setResource('mails', fn() => new Mail()); App::setResource('deletes', fn() => new Delete()); App::setResource('database', fn() => new EventDatabase()); diff --git a/app/worker.php b/app/worker.php index 42a5f92439..f7644ffe98 100644 --- a/app/worker.php +++ b/app/worker.php @@ -2,6 +2,7 @@ require_once __DIR__ . '/init.php'; +use Appwrite\Event\Audit; use Appwrite\Event\Func; use Swoole\Runtime; use Utopia\App; @@ -85,6 +86,16 @@ Server::setResource('queueForFunctions', function (Registry $register) { ); }, ['register']); +Server::setResource('audits', function (Registry $register) { + $pools = $register->get('pools'); + return new Audit( + $pools + ->get('queue') + ->pop() + ->getResource() + ); +}, ['register']); + Server::setResource('logger', function ($register) { return $register->get('logger'); }, ['register']); diff --git a/app/workers/audits.php b/app/workers/audits.php index 90ac020536..9ca0a27a30 100644 --- a/app/workers/audits.php +++ b/app/workers/audits.php @@ -1,42 +1,33 @@ args['event']; - $payload = $this->args['payload']; - $mode = $this->args['mode']; - $resource = $this->args['resource']; - $userAgent = $this->args['userAgent']; - $ip = $this->args['ip']; - - $user = new Document($this->args['user']); - $project = new Document($this->args['project']); - $userName = $user->getAttribute('name', ''); $userEmail = $user->getAttribute('email', ''); - $dbForProject = $this->getProjectDB($project); $audit = new Audit($dbForProject); $audit->log( userId: $user->getId(), @@ -53,9 +44,41 @@ class AuditsV1 extends Worker 'data' => $payload, ] ); - } + }; +}); - public function shutdown(): void - { - } -} +$server->job() + ->inject('message') + ->inject('dbForProject') + ->inject('execute') + ->action(function (Message $message, Database $dbForProject, callable $execute) { + $payload = $message->getPayload() ?? []; + + if (empty($payload)) { + throw new Exception('Missing payload'); + } + + $event = $payload['event'] ?? ''; + $auditPayload = $payload['payload'] ?? ''; + $mode = $payload['mode'] ?? ''; + $resource = $payload['resource'] ?? ''; + $userAgent = $payload['userAgent'] ?? ''; + $ip = $payload['ip'] ?? ''; + $project = new Document($payload['project'] ?? []); + $user = new Document($payload['user'] ?? []); + + $execute( + $dbForProject, + $event, + $auditPayload, + $mode, + $resource, + $userAgent, + $ip, + $user, + $project + ); + }); + +$server->workerStart(); +$server->start(); \ No newline at end of file diff --git a/src/Appwrite/Event/Audit.php b/src/Appwrite/Event/Audit.php index 254f7c294a..9be6e27b33 100644 --- a/src/Appwrite/Event/Audit.php +++ b/src/Appwrite/Event/Audit.php @@ -3,6 +3,8 @@ namespace Appwrite\Event; use Resque; +use Utopia\Queue\Client; +use Utopia\Queue\Connection; class Audit extends Event { @@ -11,7 +13,7 @@ class Audit extends Event protected string $userAgent = ''; protected string $ip = ''; - public function __construct() + public function __construct(protected Connection $connection) { parent::__construct(Event::AUDITS_QUEUE_NAME, Event::AUDITS_CLASS_NAME); } @@ -116,7 +118,9 @@ class Audit extends Event */ public function trigger(): string|bool { - return Resque::enqueue($this->queue, $this->class, [ + $client = new Client($this->queue, $this->connection); + + return $client->enqueue([ 'project' => $this->project, 'user' => $this->user, 'payload' => $this->payload, From 85268cbae2be5ae38d171c68cce94b7659d115ca Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Tue, 6 Dec 2022 15:15:16 +0000 Subject: [PATCH 2/2] Run Linter --- app/workers/audits.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/workers/audits.php b/app/workers/audits.php index 9ca0a27a30..bfea0be217 100644 --- a/app/workers/audits.php +++ b/app/workers/audits.php @@ -23,8 +23,7 @@ Server::setResource('execute', function () { string $ip, Document $user, Document $project - ) - { + ) { $userName = $user->getAttribute('name', ''); $userEmail = $user->getAttribute('email', ''); @@ -81,4 +80,4 @@ $server->job() }); $server->workerStart(); -$server->start(); \ No newline at end of file +$server->start();