1
0
Fork 0
mirror of synced 2024-06-26 18:20:43 +12:00
appwrite/app/worker.php

95 lines
2.4 KiB
PHP
Raw Normal View History

2022-11-10 06:01:43 +13:00
<?php
require_once __DIR__ . '/init.php';
2022-11-16 07:13:17 +13:00
use Appwrite\Event\Func;
2022-11-10 06:01:43 +13:00
use Swoole\Runtime;
use Utopia\App;
use Utopia\Cache\Adapter\Sharding;
use Utopia\Cache\Cache;
use Utopia\Config\Config;
use Utopia\Database\Database;
2022-11-13 03:35:42 +13:00
use Utopia\Database\Document;
use Utopia\Queue\Message;
2022-11-10 06:01:43 +13:00
use Utopia\Queue\Server;
use Utopia\Registry\Registry;
global $register;
Server::setResource('register', fn() => $register);
Server::setResource('dbForConsole', function (Cache $cache, Registry $register) {
$pools = $register->get('pools');
2022-11-16 17:17:46 +13:00
$database = $pools
2022-11-10 06:01:43 +13:00
->get('console')
->pop()
->getResource()
;
2022-11-16 17:17:46 +13:00
$adapter = new Database($database, $cache);
$adapter->setNamespace('console');
2022-11-10 06:01:43 +13:00
2022-11-16 17:17:46 +13:00
return $adapter;
2022-11-10 06:01:43 +13:00
}, ['cache', 'register']);
2022-11-13 03:35:42 +13:00
Server::setResource('dbForProject', function (Cache $cache, Registry $register, Message $message, Database $dbForConsole) {
2022-11-16 17:17:46 +13:00
$payload = $message->getPayload() ?? [];
$project = new Document($payload['project'] ?? []);
2022-11-13 03:35:42 +13:00
if ($project->isEmpty() || $project->getId() === 'console') {
return $dbForConsole;
}
$pools = $register->get('pools');
2022-11-16 17:17:46 +13:00
$database = $pools
2022-11-13 03:35:42 +13:00
->get($project->getAttribute('database'))
->pop()
->getResource()
;
2022-11-16 17:17:46 +13:00
$adapter = new Database($database, $cache);
$adapter->setNamespace('_' . $project->getInternalId());
2022-11-13 03:35:42 +13:00
2022-11-16 17:17:46 +13:00
return $adapter;
2022-11-13 03:35:42 +13:00
}, ['cache', 'register', 'message', 'dbForConsole']);
2022-11-10 06:01:43 +13:00
Server::setResource('cache', function (Registry $register) {
$pools = $register->get('pools');
$list = Config::getParam('pools-cache', []);
$adapters = [];
foreach ($list as $value) {
$adapters[] = $pools
->get($value)
->pop()
->getResource()
;
}
return new Cache(new Sharding($adapters));
}, ['register']);
2022-11-16 19:08:01 +13:00
Server::setResource('queueForFunctions', function (Registry $register) {
2022-11-16 07:13:17 +13:00
$pools = $register->get('pools');
2022-11-16 17:17:46 +13:00
return new Func(
$pools
->get('queue')
->pop()
->getResource()
2022-11-16 18:30:57 +13:00
);
2022-11-16 07:13:17 +13:00
}, ['register']);
Server::setResource('logger', function ($register) {
2022-11-10 06:01:43 +13:00
return $register->get('logger');
}, ['register']);
2022-11-16 17:17:46 +13:00
Server::setResource('statsd', function ($register) {
return $register->get('statsd');
}, ['register']);
2022-11-10 06:01:43 +13:00
$pools = $register->get('pools');
2022-11-16 05:03:42 +13:00
$connection = $pools->get('queue')->pop()->getResource();
2022-11-10 06:01:43 +13:00
$workerNumber = swoole_cpu_num() * intval(App::getEnv('_APP_WORKER_PER_CORE', 6));
2022-11-16 18:30:57 +13:00
Runtime::enableCoroutine(SWOOLE_HOOK_ALL);