mirror of
https://github.com/appwrite/appwrite
synced 2026-05-24 09:28:40 +00:00
feat(tasks): Coroutine
This commit is contained in:
parent
90fd0ba392
commit
6083d8b7a8
9 changed files with 415 additions and 361 deletions
344
app/cli.php
344
app/cli.php
|
|
@ -9,192 +9,236 @@ use Appwrite\Event\Func;
|
||||||
use Appwrite\Event\Hamster;
|
use Appwrite\Event\Hamster;
|
||||||
use Appwrite\Platform\Appwrite;
|
use Appwrite\Platform\Appwrite;
|
||||||
use Appwrite\Utopia\Queue\Connections;
|
use Appwrite\Utopia\Queue\Connections;
|
||||||
|
use Utopia\Cache\Adapter\None;
|
||||||
use Utopia\Cache\Adapter\Sharding;
|
use Utopia\Cache\Adapter\Sharding;
|
||||||
use Utopia\Cache\Cache;
|
use Utopia\Cache\Cache;
|
||||||
use Utopia\CLI\CLI;
|
|
||||||
use Utopia\CLI\Console;
|
use Utopia\CLI\Console;
|
||||||
use Utopia\Config\Config;
|
use Utopia\Queue\Connection\Redis;
|
||||||
|
use Utopia\Database\Adapter\MariaDB;
|
||||||
|
use Utopia\Database\Adapter\MySQL;
|
||||||
use Utopia\Database\Database;
|
use Utopia\Database\Database;
|
||||||
use Utopia\Database\Document;
|
use Utopia\Database\Document;
|
||||||
use Utopia\Database\Validator\Authorization;
|
use Utopia\Database\Validator\Authorization;
|
||||||
|
use Utopia\DI\Dependency;
|
||||||
use Utopia\Logger\Log;
|
use Utopia\Logger\Log;
|
||||||
use Utopia\Platform\Service;
|
use Utopia\Platform\Service;
|
||||||
use Utopia\Pools\Group;
|
use Utopia\Pools\Group;
|
||||||
use Utopia\Queue\Connection;
|
use Utopia\Queue\Connection;
|
||||||
use Utopia\Registry\Registry;
|
use Utopia\Registry\Registry;
|
||||||
use Utopia\System\System;
|
use Utopia\System\System;
|
||||||
|
use Swoole\Runtime;
|
||||||
|
use Utopia\CLI\Adapters\Swoole as SwooleCLI;
|
||||||
|
|
||||||
global $register;
|
global $global, $container;
|
||||||
|
|
||||||
CLI::setResource('register', fn () => $register);
|
Runtime::enableCoroutine(SWOOLE_HOOK_ALL);
|
||||||
|
|
||||||
CLI::setResource('connections', function () {
|
$registry = new Dependency();
|
||||||
return new Connections();
|
$registry
|
||||||
});
|
->setName('register')
|
||||||
|
->setCallback(fn() => $global);
|
||||||
|
|
||||||
CLI::setResource('cache', function ($pools, Connections $connections) {
|
$connections = new Dependency();
|
||||||
$list = Config::getParam('pools-cache', []);
|
$connections
|
||||||
$adapters = [];
|
->setName('connections')
|
||||||
|
->setCallback(fn() => new Connections());
|
||||||
|
|
||||||
foreach ($list as $value) {
|
$cache = new Dependency();
|
||||||
$connection = $pools->get($value)->pop();
|
$cache
|
||||||
$connections->add($connection);
|
->setName('cache')
|
||||||
$adapters[] = $connection->getResource();
|
->setCallback(function () {
|
||||||
}
|
return new Cache(new None());
|
||||||
|
});
|
||||||
|
$container->set($cache);
|
||||||
|
|
||||||
return new Cache(new Sharding($adapters));
|
$pools = new Dependency();
|
||||||
}, ['pools', 'connections']);
|
$pools
|
||||||
|
->setName('pools')
|
||||||
|
->inject('register')
|
||||||
|
->setCallback(function (Registry $register) {
|
||||||
|
return $register->get('pools');
|
||||||
|
});
|
||||||
|
|
||||||
CLI::setResource('pools', function (Registry $register) {
|
$dbForConsole = new Dependency();
|
||||||
return $register->get('pools');
|
$dbForConsole
|
||||||
}, ['register']);
|
->setName('dbForConsole')
|
||||||
|
->inject('pools')
|
||||||
|
->inject('cache')
|
||||||
|
->inject('auth')
|
||||||
|
->inject('connections')
|
||||||
|
->setCallback(function ($pools, $cache, $auth, Connections $connections) {
|
||||||
|
$pool = $pools['pools-console-main']['pool'];
|
||||||
|
$dsn = $pools['pools-console-main']['dsn'];
|
||||||
|
$connection = $pool->get();
|
||||||
|
$connections->add($connection, $pool);
|
||||||
|
|
||||||
CLI::setResource('dbForConsole', function ($pools, $cache, $auth, Connections $connections) {
|
$adapter = match ($dsn->getScheme()) {
|
||||||
$sleep = 3;
|
'mariadb' => new MariaDB($connection),
|
||||||
$maxAttempts = 5;
|
'mysql' => new MySQL($connection),
|
||||||
$attempts = 0;
|
default => null
|
||||||
$ready = false;
|
};
|
||||||
|
|
||||||
$connection = null;
|
$adapter->setDatabase($dsn->getPath());
|
||||||
|
|
||||||
do {
|
$database = new Database($adapter, $cache);
|
||||||
$attempts++;
|
|
||||||
try {
|
|
||||||
// Prepare database connection
|
|
||||||
$connection = $pools->get('console')->pop();
|
|
||||||
$dbAdapter = $connection->getResource();
|
|
||||||
|
|
||||||
$dbForConsole = new Database($dbAdapter, $cache);
|
|
||||||
$dbForConsole->setAuthorization($auth);
|
|
||||||
|
|
||||||
$dbForConsole
|
|
||||||
->setNamespace('_console')
|
|
||||||
->setMetadata('host', \gethostname())
|
|
||||||
->setMetadata('project', 'console');
|
|
||||||
|
|
||||||
// Ensure tables exist
|
|
||||||
$collections = Config::getParam('collections', [])['console'];
|
|
||||||
$last = \array_key_last($collections);
|
|
||||||
|
|
||||||
if (!($dbForConsole->exists($dbForConsole->getDatabase(), $last))) { /** TODO cache ready variable using registry */
|
|
||||||
throw new Exception('Tables not ready yet.');
|
|
||||||
}
|
|
||||||
|
|
||||||
$ready = true;
|
|
||||||
} catch (\Throwable $err) {
|
|
||||||
if($connection !== null) {
|
|
||||||
$connection->reclaim();
|
|
||||||
$connection = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
Console::warning($err->getMessage());
|
|
||||||
sleep($sleep);
|
|
||||||
}
|
|
||||||
} while ($attempts < $maxAttempts && !$ready);
|
|
||||||
|
|
||||||
if($connection !== null) {
|
|
||||||
$connections->add($connection);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$ready) {
|
|
||||||
throw new Exception("Console is not ready yet. Please try again later.");
|
|
||||||
}
|
|
||||||
|
|
||||||
return $dbForConsole;
|
|
||||||
}, ['pools', 'cache', 'auth', 'connections']);
|
|
||||||
|
|
||||||
CLI::setResource('getProjectDB', function (Group $pools, Database $dbForConsole, $cache, $auth, Connections $connections) {
|
|
||||||
$databases = []; // TODO: @Meldiron This should probably be responsibility of utopia-php/pools
|
|
||||||
|
|
||||||
return function (Document $project) use ($pools, $dbForConsole, $cache, &$databases, $auth, $connections) {
|
|
||||||
if ($project->isEmpty() || $project->getId() === 'console') {
|
|
||||||
return $dbForConsole;
|
|
||||||
}
|
|
||||||
|
|
||||||
$databaseName = $project->getAttribute('database');
|
|
||||||
|
|
||||||
if (isset($databases[$databaseName])) {
|
|
||||||
$database = $databases[$databaseName];
|
|
||||||
$database->setNamespace('_' . $project->getInternalId());
|
|
||||||
return $database;
|
|
||||||
}
|
|
||||||
|
|
||||||
$connection = $pools->get($databaseName)->pop();
|
|
||||||
$connections->add($connection);
|
|
||||||
$dbAdapter = $connection->getResource();
|
|
||||||
|
|
||||||
$database = new Database($dbAdapter, $cache);
|
|
||||||
$database->setAuthorization($auth);
|
$database->setAuthorization($auth);
|
||||||
|
$database->setNamespace('_console');
|
||||||
$databases[$databaseName] = $database;
|
|
||||||
|
|
||||||
$database
|
|
||||||
->setNamespace('_' . $project->getInternalId())
|
|
||||||
->setMetadata('host', \gethostname())
|
|
||||||
->setMetadata('project', $project->getId());
|
|
||||||
|
|
||||||
return $database;
|
return $database;
|
||||||
};
|
});
|
||||||
}, ['pools', 'dbForConsole', 'cache', 'auth', 'connections']);
|
|
||||||
|
|
||||||
CLI::setResource('queue', function (Group $pools, Connections $connections) {
|
$getProjectDB = new Dependency();
|
||||||
$connection = $pools->get('queue')->pop();
|
$getProjectDB
|
||||||
$connections->add($connection);
|
->setName('getProjectDB')
|
||||||
return $connection->getResource();
|
->inject('pools')
|
||||||
}, ['pools', 'connections']);
|
->inject('dbForConsole')
|
||||||
CLI::setResource('queueForFunctions', function (Connection $queue) {
|
->inject('cache')
|
||||||
return new Func($queue);
|
->inject('auth')
|
||||||
}, ['queue']);
|
->inject('connections')
|
||||||
CLI::setResource('queueForHamster', function (Connection $queue) {
|
->setCallback(function (array $pools, Database $dbForConsole, Cache $cache, Authorization $auth, Connections $connections) {
|
||||||
return new Hamster($queue);
|
return function (Document $project) use ($pools, $dbForConsole, $cache, &$databases, $auth, $connections): Database {
|
||||||
}, ['queue']);
|
if ($project->isEmpty() || $project->getId() === 'console') {
|
||||||
CLI::setResource('queueForDeletes', function (Connection $queue) {
|
return $dbForConsole;
|
||||||
return new Delete($queue);
|
}
|
||||||
}, ['queue']);
|
|
||||||
CLI::setResource('queueForCertificates', function (Connection $queue) {
|
|
||||||
return new Certificate($queue);
|
|
||||||
}, ['queue']);
|
|
||||||
CLI::setResource('logError', function (Registry $register) {
|
|
||||||
return function (Throwable $error, string $namespace, string $action) use ($register) {
|
|
||||||
$logger = $register->get('logger');
|
|
||||||
|
|
||||||
if ($logger) {
|
$databaseName = $project->getAttribute('database');
|
||||||
$version = System::getEnv('_APP_VERSION', 'UNKNOWN');
|
|
||||||
|
|
||||||
$log = new Log();
|
$pool = $pools['pools-database-' . $databaseName]['pool'];
|
||||||
$log->setNamespace($namespace);
|
$dsn = $pools['pools-database-' . $databaseName]['dsn'];
|
||||||
$log->setServer(\gethostname());
|
|
||||||
$log->setVersion($version);
|
|
||||||
$log->setType(Log::TYPE_ERROR);
|
|
||||||
$log->setMessage($error->getMessage());
|
|
||||||
|
|
||||||
$log->addTag('code', $error->getCode());
|
$connection = $pool->get();
|
||||||
$log->addTag('verboseType', get_class($error));
|
$connections->add($connection, $pool);
|
||||||
|
$adapter = match ($dsn->getScheme()) {
|
||||||
|
'mariadb' => new MariaDB($connection),
|
||||||
|
'mysql' => new MySQL($connection),
|
||||||
|
default => null
|
||||||
|
};
|
||||||
|
$adapter->setDatabase($dsn->getPath());
|
||||||
|
|
||||||
$log->addExtra('file', $error->getFile());
|
$database = new Database($adapter, $cache);
|
||||||
$log->addExtra('line', $error->getLine());
|
$database->setAuthorization($auth);
|
||||||
$log->addExtra('trace', $error->getTraceAsString());
|
$database->setNamespace('_' . $project->getInternalId());
|
||||||
$log->addExtra('detailedTrace', $error->getTrace());
|
|
||||||
|
|
||||||
$log->setAction($action);
|
return $database;
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
$isProduction = System::getEnv('_APP_ENV', 'development') === 'production';
|
$queue = new Dependency();
|
||||||
|
$queue
|
||||||
|
->setName('queue')
|
||||||
|
->inject('pools')
|
||||||
|
->inject('connections')
|
||||||
|
->setCallback(function (array $pools, Connections $connections) {
|
||||||
|
$pool = $pools['pools-queue-main']['pool'];
|
||||||
|
$dsn = $pools['pools-queue-main']['dsn'];
|
||||||
|
$connection = $pool->get();
|
||||||
|
$connections->add($connection, $pool);
|
||||||
|
|
||||||
$log->setEnvironment($isProduction ? Log::ENVIRONMENT_PRODUCTION : Log::ENVIRONMENT_STAGING);
|
return new Redis($dsn->getHost(), $dsn->getPort());
|
||||||
|
});
|
||||||
|
|
||||||
$responseCode = $logger->addLog($log);
|
$queueForFunctions = new Dependency();
|
||||||
Console::info('Usage stats log pushed with status code: ' . $responseCode);
|
$queueForFunctions
|
||||||
}
|
->setName('queueForFunctions')
|
||||||
|
->inject('queue')
|
||||||
|
->setCallback(function (Connection $queue) {
|
||||||
|
return new Func($queue);
|
||||||
|
});
|
||||||
|
|
||||||
Console::warning("Failed: {$error->getMessage()}");
|
$queueForHamster = new Dependency();
|
||||||
Console::warning($error->getTraceAsString());
|
$queueForHamster
|
||||||
};
|
->setName('queueForHamster')
|
||||||
}, ['register']);
|
->inject('queue')
|
||||||
|
->setCallback(function (Connection $queue) {
|
||||||
|
return new Hamster($queue);
|
||||||
|
});
|
||||||
|
|
||||||
CLI::setResource('auth', fn () => new Authorization());
|
$queueForDeletes = new Dependency();
|
||||||
|
$queueForDeletes
|
||||||
|
->setName('queueForDeletes')
|
||||||
|
->inject('queue')
|
||||||
|
->setCallback(function (Connection $queue) {
|
||||||
|
return new Delete($queue);
|
||||||
|
});
|
||||||
|
|
||||||
|
$queueForCertificates = new Dependency();
|
||||||
|
$queueForCertificates
|
||||||
|
->setName('queueForCertificates')
|
||||||
|
->inject('queue')
|
||||||
|
->setCallback(function (Connection $queue) {
|
||||||
|
return new Certificate($queue);
|
||||||
|
});
|
||||||
|
|
||||||
|
$queueForCertificates = new Dependency();
|
||||||
|
$queueForCertificates
|
||||||
|
->setName('queueForCertificates')
|
||||||
|
->inject('queue')
|
||||||
|
->setCallback(function (Connection $queue) {
|
||||||
|
return new Certificate($queue);
|
||||||
|
});
|
||||||
|
|
||||||
|
$logError = new Dependency();
|
||||||
|
$logError
|
||||||
|
->setName('logError')
|
||||||
|
->inject('register')
|
||||||
|
->setCallback(function (Registry $register) {
|
||||||
|
return function (Throwable $error, string $namespace, string $action) use ($register) {
|
||||||
|
$logger = $register->get('logger');
|
||||||
|
|
||||||
|
if ($logger) {
|
||||||
|
$version = System::getEnv('_APP_VERSION', 'UNKNOWN');
|
||||||
|
|
||||||
|
$log = new Log();
|
||||||
|
$log->setNamespace($namespace);
|
||||||
|
$log->setServer(\gethostname());
|
||||||
|
$log->setVersion($version);
|
||||||
|
$log->setType(Log::TYPE_ERROR);
|
||||||
|
$log->setMessage($error->getMessage());
|
||||||
|
|
||||||
|
$log->addTag('code', $error->getCode());
|
||||||
|
$log->addTag('verboseType', get_class($error));
|
||||||
|
|
||||||
|
$log->addExtra('file', $error->getFile());
|
||||||
|
$log->addExtra('line', $error->getLine());
|
||||||
|
$log->addExtra('trace', $error->getTraceAsString());
|
||||||
|
$log->addExtra('detailedTrace', $error->getTrace());
|
||||||
|
|
||||||
|
$log->setAction($action);
|
||||||
|
|
||||||
|
$isProduction = System::getEnv('_APP_ENV', 'development') === 'production';
|
||||||
|
|
||||||
|
$log->setEnvironment($isProduction ? Log::ENVIRONMENT_PRODUCTION : Log::ENVIRONMENT_STAGING);
|
||||||
|
|
||||||
|
$responseCode = $logger->addLog($log);
|
||||||
|
Console::info('Usage stats log pushed with status code: ' . $responseCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
Console::warning("Failed: {$error->getMessage()}");
|
||||||
|
Console::warning($error->getTraceAsString());
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
$auth = new Dependency();
|
||||||
|
$auth
|
||||||
|
->setName('auth')
|
||||||
|
->setCallback(fn() => new Authorization());
|
||||||
|
|
||||||
|
$container->set($registry);
|
||||||
|
$container->set($connections);
|
||||||
|
$container->set($cache);
|
||||||
|
$container->set($pools);
|
||||||
|
$container->set($dbForConsole);
|
||||||
|
$container->set($getProjectDB);
|
||||||
|
$container->set($queue);
|
||||||
|
$container->set($queueForFunctions);
|
||||||
|
$container->set($queueForHamster);
|
||||||
|
$container->set($queueForDeletes);
|
||||||
|
$container->set($queueForCertificates);
|
||||||
|
$container->set($logError);
|
||||||
|
$container->set($auth);
|
||||||
|
|
||||||
$platform = new Appwrite();
|
$platform = new Appwrite();
|
||||||
$platform->init(Service::TYPE_CLI);
|
$platform->init(Service::TYPE_CLI, ['adapter' => new SwooleCLI(1)]);
|
||||||
|
|
||||||
$cli = $platform->getCli();
|
$cli = $platform->getCli();
|
||||||
|
|
||||||
|
|
@ -212,4 +256,6 @@ $cli
|
||||||
Console::error($error->getMessage());
|
Console::error($error->getMessage());
|
||||||
});
|
});
|
||||||
|
|
||||||
$cli->run();
|
$cli
|
||||||
|
->setContainer($container)
|
||||||
|
->run();
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,8 @@ use Utopia\Http\Adapter\Swoole\Server;
|
||||||
use Utopia\Http\Http;
|
use Utopia\Http\Http;
|
||||||
use Utopia\System\System;
|
use Utopia\System\System;
|
||||||
|
|
||||||
|
global $global, $container;
|
||||||
|
|
||||||
$workerNumber = swoole_cpu_num() * intval(System::getEnv('_APP_WORKER_PER_CORE', 6));
|
$workerNumber = swoole_cpu_num() * intval(System::getEnv('_APP_WORKER_PER_CORE', 6));
|
||||||
$payloadSize = 6 * (1024 * 1024); // 6MB
|
$payloadSize = 6 * (1024 * 1024); // 6MB
|
||||||
|
|
||||||
|
|
@ -48,7 +50,7 @@ $server = new Server('0.0.0.0', '80', [
|
||||||
|
|
||||||
$http = new Http($server, $container, 'UTC');
|
$http = new Http($server, $container, 'UTC');
|
||||||
|
|
||||||
// $http->loadFiles(__DIR__ . '/../console');
|
$http->loadFiles(__DIR__ . '/../console');
|
||||||
$http->setRequestClass(Request::class);
|
$http->setRequestClass(Request::class);
|
||||||
$http->setResponseClass(Response::class);
|
$http->setResponseClass(Response::class);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ use Utopia\Registry\Registry;
|
||||||
use Utopia\Storage\Device\Local;
|
use Utopia\Storage\Device\Local;
|
||||||
use Utopia\System\System;
|
use Utopia\System\System;
|
||||||
|
|
||||||
global $gloabl, $container;
|
global $global, $container;
|
||||||
|
|
||||||
Runtime::enableCoroutine(SWOOLE_HOOK_ALL);
|
Runtime::enableCoroutine(SWOOLE_HOOK_ALL);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@
|
||||||
"utopia-php/analytics": "dev-feat-framework-v2 as 0.10.99",
|
"utopia-php/analytics": "dev-feat-framework-v2 as 0.10.99",
|
||||||
"utopia-php/audit": "dev-feat-framework-v2 as 0.39.99",
|
"utopia-php/audit": "dev-feat-framework-v2 as 0.39.99",
|
||||||
"utopia-php/cache": "0.9.*",
|
"utopia-php/cache": "0.9.*",
|
||||||
"utopia-php/cli": "0.17.*",
|
"utopia-php/cli": "dev-dev-coroutines as 0.17.99",
|
||||||
"utopia-php/config": "0.2.*",
|
"utopia-php/config": "0.2.*",
|
||||||
"utopia-php/database": "dev-feat-framework-v2 as 0.49.99",
|
"utopia-php/database": "dev-feat-framework-v2 as 0.49.99",
|
||||||
"utopia-php/domains": "dev-feat-framework-v2 as 0.5.99",
|
"utopia-php/domains": "dev-feat-framework-v2 as 0.5.99",
|
||||||
|
|
|
||||||
158
composer.lock
generated
158
composer.lock
generated
|
|
@ -4,7 +4,7 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "bb3213cfb05b043e7d2ea2002069bb98",
|
"content-hash": "7778579de897a3e077914bd37686a62b",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "adhocore/jwt",
|
"name": "adhocore/jwt",
|
||||||
|
|
@ -1050,12 +1050,12 @@
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/polyfill-php80.git",
|
"url": "https://github.com/symfony/polyfill-php80.git",
|
||||||
"reference": "7d191eb4022901cd3d91a816ec5464ca3a08a8aa"
|
"reference": "77fa7995ac1b21ab60769b7323d600a991a90433"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7d191eb4022901cd3d91a816ec5464ca3a08a8aa",
|
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433",
|
||||||
"reference": "7d191eb4022901cd3d91a816ec5464ca3a08a8aa",
|
"reference": "77fa7995ac1b21ab60769b7323d600a991a90433",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
|
@ -1123,7 +1123,7 @@
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2024-04-19T06:31:17+00:00"
|
"time": "2024-05-31T15:07:36+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "thecodingmachine/safe",
|
"name": "thecodingmachine/safe",
|
||||||
|
|
@ -1458,27 +1458,29 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "utopia-php/cli",
|
"name": "utopia-php/cli",
|
||||||
"version": "0.17.0",
|
"version": "dev-dev-coroutines",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/utopia-php/cli.git",
|
"url": "https://github.com/utopia-php/cli.git",
|
||||||
"reference": "0829fd5215afe88f53f3091cedc808da801fd1bb"
|
"reference": "c9b049160aff2eecea7dd1ff041165ae15f41f76"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/utopia-php/cli/zipball/0829fd5215afe88f53f3091cedc808da801fd1bb",
|
"url": "https://api.github.com/repos/utopia-php/cli/zipball/c9b049160aff2eecea7dd1ff041165ae15f41f76",
|
||||||
"reference": "0829fd5215afe88f53f3091cedc808da801fd1bb",
|
"reference": "c9b049160aff2eecea7dd1ff041165ae15f41f76",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.4",
|
"php": ">=7.4",
|
||||||
"utopia-php/framework": "0.34.*"
|
"utopia-php/di": "dev-main",
|
||||||
|
"utopia-php/framework": "dev-feat-di-upgrade as 0.34.99"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"laravel/pint": "1.2.*",
|
"laravel/pint": "1.2.*",
|
||||||
|
"phpstan/phpstan": "^1.10",
|
||||||
"phpunit/phpunit": "^9.3",
|
"phpunit/phpunit": "^9.3",
|
||||||
"squizlabs/php_codesniffer": "^3.6",
|
"squizlabs/php_codesniffer": "^3.6",
|
||||||
"vimeo/psalm": "4.0.1"
|
"swoole/ide-helper": "4.8.8"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
|
|
@ -1501,9 +1503,9 @@
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/utopia-php/cli/issues",
|
"issues": "https://github.com/utopia-php/cli/issues",
|
||||||
"source": "https://github.com/utopia-php/cli/tree/0.17.0"
|
"source": "https://github.com/utopia-php/cli/tree/dev-coroutines"
|
||||||
},
|
},
|
||||||
"time": "2024-01-24T11:37:29+00:00"
|
"time": "2024-06-03T17:55:34+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "utopia-php/config",
|
"name": "utopia-php/config",
|
||||||
|
|
@ -2035,22 +2037,21 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "utopia-php/migration",
|
"name": "utopia-php/migration",
|
||||||
"version": "0.4.1",
|
"version": "0.4.4",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/utopia-php/migration.git",
|
"url": "https://github.com/utopia-php/migration.git",
|
||||||
"reference": "ae3cfe93f6d313105d226aeb68806660c806a925"
|
"reference": "a8a5d392bebf082faf289f4dfe09d9fd76844c33"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/utopia-php/migration/zipball/ae3cfe93f6d313105d226aeb68806660c806a925",
|
"url": "https://api.github.com/repos/utopia-php/migration/zipball/a8a5d392bebf082faf289f4dfe09d9fd76844c33",
|
||||||
"reference": "ae3cfe93f6d313105d226aeb68806660c806a925",
|
"reference": "a8a5d392bebf082faf289f4dfe09d9fd76844c33",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"appwrite/appwrite": "10.1.0",
|
"appwrite/appwrite": "10.1.0",
|
||||||
"php": "8.*",
|
"php": "8.*"
|
||||||
"utopia-php/cli": "0.*"
|
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"laravel/pint": "1.*",
|
"laravel/pint": "1.*",
|
||||||
|
|
@ -2077,9 +2078,9 @@
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/utopia-php/migration/issues",
|
"issues": "https://github.com/utopia-php/migration/issues",
|
||||||
"source": "https://github.com/utopia-php/migration/tree/0.4.1"
|
"source": "https://github.com/utopia-php/migration/tree/0.4.4"
|
||||||
},
|
},
|
||||||
"time": "2024-05-01T13:19:18+00:00"
|
"time": "2024-05-17T05:25:31+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "utopia-php/mongo",
|
"name": "utopia-php/mongo",
|
||||||
|
|
@ -2197,20 +2198,20 @@
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/utopia-php/platform.git",
|
"url": "https://github.com/utopia-php/platform.git",
|
||||||
"reference": "e6f2f281b2ad962211b1c6f88650d0230f615a3a"
|
"reference": "55b1d8675a35d8fb269614a1e916a1bff616983c"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/utopia-php/platform/zipball/e6f2f281b2ad962211b1c6f88650d0230f615a3a",
|
"url": "https://api.github.com/repos/utopia-php/platform/zipball/55b1d8675a35d8fb269614a1e916a1bff616983c",
|
||||||
"reference": "e6f2f281b2ad962211b1c6f88650d0230f615a3a",
|
"reference": "55b1d8675a35d8fb269614a1e916a1bff616983c",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"ext-json": "*",
|
"ext-json": "*",
|
||||||
"ext-redis": "*",
|
"ext-redis": "*",
|
||||||
"php": ">=8.0",
|
"php": ">=8.0",
|
||||||
"utopia-php/cli": "0.17.*",
|
"utopia-php/cli": "dev-dev-coroutines as 0.17.99",
|
||||||
"utopia-php/framework": "0.34.*",
|
"utopia-php/framework": "dev-feat-di-upgrade as 0.34.99",
|
||||||
"utopia-php/queue": "dev-feat-coroutine-and-di as 0.7.99"
|
"utopia-php/queue": "dev-feat-coroutine-and-di as 0.7.99"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
|
|
@ -2239,7 +2240,7 @@
|
||||||
"issues": "https://github.com/utopia-php/platform/issues",
|
"issues": "https://github.com/utopia-php/platform/issues",
|
||||||
"source": "https://github.com/utopia-php/platform/tree/feat-framework-v2"
|
"source": "https://github.com/utopia-php/platform/tree/feat-framework-v2"
|
||||||
},
|
},
|
||||||
"time": "2024-04-21T18:38:38+00:00"
|
"time": "2024-06-03T18:01:18+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "utopia-php/queue",
|
"name": "utopia-php/queue",
|
||||||
|
|
@ -2540,16 +2541,16 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "utopia-php/vcs",
|
"name": "utopia-php/vcs",
|
||||||
"version": "0.6.5",
|
"version": "0.6.6",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/utopia-php/vcs.git",
|
"url": "https://github.com/utopia-php/vcs.git",
|
||||||
"reference": "104e47ea8e38c156ec0e0bd415caa3dcd5046fe2"
|
"reference": "e538264cfee5e3efdfe1771efba04750cf20b2c4"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/utopia-php/vcs/zipball/104e47ea8e38c156ec0e0bd415caa3dcd5046fe2",
|
"url": "https://api.github.com/repos/utopia-php/vcs/zipball/e538264cfee5e3efdfe1771efba04750cf20b2c4",
|
||||||
"reference": "104e47ea8e38c156ec0e0bd415caa3dcd5046fe2",
|
"reference": "e538264cfee5e3efdfe1771efba04750cf20b2c4",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
|
@ -2583,9 +2584,9 @@
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/utopia-php/vcs/issues",
|
"issues": "https://github.com/utopia-php/vcs/issues",
|
||||||
"source": "https://github.com/utopia-php/vcs/tree/0.6.5"
|
"source": "https://github.com/utopia-php/vcs/tree/0.6.6"
|
||||||
},
|
},
|
||||||
"time": "2024-01-08T17:11:12+00:00"
|
"time": "2024-05-17T09:36:30+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "utopia-php/view",
|
"name": "utopia-php/view",
|
||||||
|
|
@ -2815,16 +2816,16 @@
|
||||||
"packages-dev": [
|
"packages-dev": [
|
||||||
{
|
{
|
||||||
"name": "appwrite/sdk-generator",
|
"name": "appwrite/sdk-generator",
|
||||||
"version": "0.38.2",
|
"version": "0.38.6",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/appwrite/sdk-generator.git",
|
"url": "https://github.com/appwrite/sdk-generator.git",
|
||||||
"reference": "51284668529e2b10ed933412a42b603c76cded23"
|
"reference": "d7016d6d72545e84709892faca972eb4bf5bd699"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/51284668529e2b10ed933412a42b603c76cded23",
|
"url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/d7016d6d72545e84709892faca972eb4bf5bd699",
|
||||||
"reference": "51284668529e2b10ed933412a42b603c76cded23",
|
"reference": "d7016d6d72545e84709892faca972eb4bf5bd699",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
|
@ -2860,9 +2861,9 @@
|
||||||
"description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms",
|
"description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/appwrite/sdk-generator/issues",
|
"issues": "https://github.com/appwrite/sdk-generator/issues",
|
||||||
"source": "https://github.com/appwrite/sdk-generator/tree/0.38.2"
|
"source": "https://github.com/appwrite/sdk-generator/tree/0.38.6"
|
||||||
},
|
},
|
||||||
"time": "2024-04-25T07:49:29+00:00"
|
"time": "2024-05-20T18:00:16+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "doctrine/deprecations",
|
"name": "doctrine/deprecations",
|
||||||
|
|
@ -2984,16 +2985,16 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "laravel/pint",
|
"name": "laravel/pint",
|
||||||
"version": "v1.15.3",
|
"version": "v1.16.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/laravel/pint.git",
|
"url": "https://github.com/laravel/pint.git",
|
||||||
"reference": "3600b5d17aff52f6100ea4921849deacbbeb8656"
|
"reference": "1b3a3dc5bc6a81ff52828ba7277621f1d49d6d98"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/laravel/pint/zipball/3600b5d17aff52f6100ea4921849deacbbeb8656",
|
"url": "https://api.github.com/repos/laravel/pint/zipball/1b3a3dc5bc6a81ff52828ba7277621f1d49d6d98",
|
||||||
"reference": "3600b5d17aff52f6100ea4921849deacbbeb8656",
|
"reference": "1b3a3dc5bc6a81ff52828ba7277621f1d49d6d98",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
|
@ -3004,11 +3005,11 @@
|
||||||
"php": "^8.1.0"
|
"php": "^8.1.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"friendsofphp/php-cs-fixer": "^3.54.0",
|
"friendsofphp/php-cs-fixer": "^3.57.1",
|
||||||
"illuminate/view": "^10.48.8",
|
"illuminate/view": "^10.48.10",
|
||||||
"larastan/larastan": "^2.9.5",
|
"larastan/larastan": "^2.9.6",
|
||||||
"laravel-zero/framework": "^10.3.0",
|
"laravel-zero/framework": "^10.4.0",
|
||||||
"mockery/mockery": "^1.6.11",
|
"mockery/mockery": "^1.6.12",
|
||||||
"nunomaduro/termwind": "^1.15.1",
|
"nunomaduro/termwind": "^1.15.1",
|
||||||
"pestphp/pest": "^2.34.7"
|
"pestphp/pest": "^2.34.7"
|
||||||
},
|
},
|
||||||
|
|
@ -3046,7 +3047,7 @@
|
||||||
"issues": "https://github.com/laravel/pint/issues",
|
"issues": "https://github.com/laravel/pint/issues",
|
||||||
"source": "https://github.com/laravel/pint"
|
"source": "https://github.com/laravel/pint"
|
||||||
},
|
},
|
||||||
"time": "2024-04-30T15:02:26+00:00"
|
"time": "2024-05-21T18:08:25+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "matthiasmullie/minify",
|
"name": "matthiasmullie/minify",
|
||||||
|
|
@ -3239,12 +3240,12 @@
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/nikic/PHP-Parser.git",
|
"url": "https://github.com/nikic/PHP-Parser.git",
|
||||||
"reference": "c5ee33df86c06b3278c670f64273b1ba768a0744"
|
"reference": "daaadc3bae458908aa477b90a8932e7da9253f22"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c5ee33df86c06b3278c670f64273b1ba768a0744",
|
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/daaadc3bae458908aa477b90a8932e7da9253f22",
|
||||||
"reference": "c5ee33df86c06b3278c670f64273b1ba768a0744",
|
"reference": "daaadc3bae458908aa477b90a8932e7da9253f22",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
|
@ -3290,7 +3291,7 @@
|
||||||
"issues": "https://github.com/nikic/PHP-Parser/issues",
|
"issues": "https://github.com/nikic/PHP-Parser/issues",
|
||||||
"source": "https://github.com/nikic/PHP-Parser/tree/master"
|
"source": "https://github.com/nikic/PHP-Parser/tree/master"
|
||||||
},
|
},
|
||||||
"time": "2024-04-19T12:04:10+00:00"
|
"time": "2024-06-03T06:24:19+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phar-io/manifest",
|
"name": "phar-io/manifest",
|
||||||
|
|
@ -3470,12 +3471,12 @@
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
|
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
|
||||||
"reference": "88a07d262854c827db22f2eac8b072138e492f65"
|
"reference": "aa53f8d4374d1f5bd3fc598548d6272cb5d9bf39"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/88a07d262854c827db22f2eac8b072138e492f65",
|
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/aa53f8d4374d1f5bd3fc598548d6272cb5d9bf39",
|
||||||
"reference": "88a07d262854c827db22f2eac8b072138e492f65",
|
"reference": "aa53f8d4374d1f5bd3fc598548d6272cb5d9bf39",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
|
@ -3527,7 +3528,7 @@
|
||||||
"issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
|
"issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
|
||||||
"source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.x"
|
"source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.x"
|
||||||
},
|
},
|
||||||
"time": "2024-05-08T18:52:15+00:00"
|
"time": "2024-05-21T06:14:15+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpdocumentor/type-resolver",
|
"name": "phpdocumentor/type-resolver",
|
||||||
|
|
@ -3535,12 +3536,12 @@
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/phpDocumentor/TypeResolver.git",
|
"url": "https://github.com/phpDocumentor/TypeResolver.git",
|
||||||
"reference": "483fb7fe262607b0a5ec32f99bdc42e2212b22fe"
|
"reference": "eee054a3d40f09920f5b27c9b09a6483f88d9d24"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/483fb7fe262607b0a5ec32f99bdc42e2212b22fe",
|
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/eee054a3d40f09920f5b27c9b09a6483f88d9d24",
|
||||||
"reference": "483fb7fe262607b0a5ec32f99bdc42e2212b22fe",
|
"reference": "eee054a3d40f09920f5b27c9b09a6483f88d9d24",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
|
@ -3586,7 +3587,7 @@
|
||||||
"issues": "https://github.com/phpDocumentor/TypeResolver/issues",
|
"issues": "https://github.com/phpDocumentor/TypeResolver/issues",
|
||||||
"source": "https://github.com/phpDocumentor/TypeResolver/tree/1.x"
|
"source": "https://github.com/phpDocumentor/TypeResolver/tree/1.x"
|
||||||
},
|
},
|
||||||
"time": "2024-03-29T20:21:22+00:00"
|
"time": "2024-05-24T14:24:30+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpspec/prophecy",
|
"name": "phpspec/prophecy",
|
||||||
|
|
@ -3660,16 +3661,16 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpstan/phpdoc-parser",
|
"name": "phpstan/phpdoc-parser",
|
||||||
"version": "1.29.0",
|
"version": "1.29.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/phpstan/phpdoc-parser.git",
|
"url": "https://github.com/phpstan/phpdoc-parser.git",
|
||||||
"reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc"
|
"reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/536889f2b340489d328f5ffb7b02bb6b183ddedc",
|
"url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/fcaefacf2d5c417e928405b71b400d4ce10daaf4",
|
||||||
"reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc",
|
"reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
|
@ -3701,9 +3702,9 @@
|
||||||
"description": "PHPDoc parser with support for nullable, intersection and generic types",
|
"description": "PHPDoc parser with support for nullable, intersection and generic types",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
|
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
|
||||||
"source": "https://github.com/phpstan/phpdoc-parser/tree/1.29.0"
|
"source": "https://github.com/phpstan/phpdoc-parser/tree/1.29.1"
|
||||||
},
|
},
|
||||||
"time": "2024-05-06T12:04:23+00:00"
|
"time": "2024-05-31T08:52:43+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpstan/phpstan",
|
"name": "phpstan/phpstan",
|
||||||
|
|
@ -5239,12 +5240,12 @@
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/polyfill-ctype.git",
|
"url": "https://github.com/symfony/polyfill-ctype.git",
|
||||||
"reference": "c9e59dec962d38cf2e0e4c61c4a1a1312f4dd7fe"
|
"reference": "0424dff1c58f028c451efff2045f5d92410bd540"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c9e59dec962d38cf2e0e4c61c4a1a1312f4dd7fe",
|
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/0424dff1c58f028c451efff2045f5d92410bd540",
|
||||||
"reference": "c9e59dec962d38cf2e0e4c61c4a1a1312f4dd7fe",
|
"reference": "0424dff1c58f028c451efff2045f5d92410bd540",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
|
@ -5311,7 +5312,7 @@
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2024-04-19T06:31:17+00:00"
|
"time": "2024-05-31T15:07:36+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-mbstring",
|
"name": "symfony/polyfill-mbstring",
|
||||||
|
|
@ -5319,12 +5320,12 @@
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||||
"reference": "e642fbe7a7b73cdb05460555289a9057bfd6ead6"
|
"reference": "098e36a5b73de12beeb5ac17e80abf3696f7ad5f"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e642fbe7a7b73cdb05460555289a9057bfd6ead6",
|
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/098e36a5b73de12beeb5ac17e80abf3696f7ad5f",
|
||||||
"reference": "e642fbe7a7b73cdb05460555289a9057bfd6ead6",
|
"reference": "098e36a5b73de12beeb5ac17e80abf3696f7ad5f",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
|
@ -5392,7 +5393,7 @@
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2024-04-19T06:31:17+00:00"
|
"time": "2024-05-31T15:07:36+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "textalk/websocket",
|
"name": "textalk/websocket",
|
||||||
|
|
@ -5624,6 +5625,12 @@
|
||||||
"alias": "0.39.99",
|
"alias": "0.39.99",
|
||||||
"alias_normalized": "0.39.99.0"
|
"alias_normalized": "0.39.99.0"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"package": "utopia-php/cli",
|
||||||
|
"version": "dev-dev-coroutines",
|
||||||
|
"alias": "0.17.99",
|
||||||
|
"alias_normalized": "0.17.99.0"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"package": "utopia-php/database",
|
"package": "utopia-php/database",
|
||||||
"version": "dev-feat-framework-v2",
|
"version": "dev-feat-framework-v2",
|
||||||
|
|
@ -5672,6 +5679,7 @@
|
||||||
"utopia-php/abuse": 20,
|
"utopia-php/abuse": 20,
|
||||||
"utopia-php/analytics": 20,
|
"utopia-php/analytics": 20,
|
||||||
"utopia-php/audit": 20,
|
"utopia-php/audit": 20,
|
||||||
|
"utopia-php/cli": 20,
|
||||||
"utopia-php/database": 20,
|
"utopia-php/database": 20,
|
||||||
"utopia-php/domains": 20,
|
"utopia-php/domains": 20,
|
||||||
"utopia-php/framework": 20,
|
"utopia-php/framework": 20,
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,8 @@ x-logging: &x-logging
|
||||||
max-file: "5"
|
max-file: "5"
|
||||||
max-size: "10m"
|
max-size: "10m"
|
||||||
|
|
||||||
|
version: "3"
|
||||||
|
|
||||||
services:
|
services:
|
||||||
traefik:
|
traefik:
|
||||||
image: traefik:2.11
|
image: traefik:2.11
|
||||||
|
|
@ -40,6 +42,7 @@ services:
|
||||||
networks:
|
networks:
|
||||||
- gateway
|
- gateway
|
||||||
- appwrite
|
- appwrite
|
||||||
|
- runtimes
|
||||||
|
|
||||||
appwrite:
|
appwrite:
|
||||||
container_name: appwrite
|
container_name: appwrite
|
||||||
|
|
@ -48,7 +51,7 @@ services:
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
args:
|
args:
|
||||||
DEBUG: false
|
DEBUG: true
|
||||||
TESTING: true
|
TESTING: true
|
||||||
VERSION: dev
|
VERSION: dev
|
||||||
ports:
|
ports:
|
||||||
|
|
@ -75,14 +78,15 @@ services:
|
||||||
- appwrite-config:/storage/config:rw
|
- appwrite-config:/storage/config:rw
|
||||||
- appwrite-certificates:/storage/certificates:rw
|
- appwrite-certificates:/storage/certificates:rw
|
||||||
- appwrite-functions:/storage/functions:rw
|
- appwrite-functions:/storage/functions:rw
|
||||||
|
- appwrite-builds:/storage/builds:rw
|
||||||
- ./phpunit.xml:/usr/src/code/phpunit.xml
|
- ./phpunit.xml:/usr/src/code/phpunit.xml
|
||||||
- ./tests:/usr/src/code/tests
|
- ./tests:/usr/src/code/tests
|
||||||
- ./app:/usr/src/code/app
|
- ./app:/usr/src/code/app
|
||||||
|
- ./vendor:/usr/src/code/vendor
|
||||||
- ./docs:/usr/src/code/docs
|
- ./docs:/usr/src/code/docs
|
||||||
- ./public:/usr/src/code/public
|
- ./public:/usr/src/code/public
|
||||||
- ./src:/usr/src/code/src
|
- ./src:/usr/src/code/src
|
||||||
- ./dev:/usr/src/code/dev
|
- ./dev:/usr/src/code/dev
|
||||||
- ./temp-debug:/tmp/xdebug
|
|
||||||
depends_on:
|
depends_on:
|
||||||
- mariadb
|
- mariadb
|
||||||
- redis
|
- redis
|
||||||
|
|
@ -92,6 +96,7 @@ services:
|
||||||
- -e
|
- -e
|
||||||
- app/http.php
|
- app/http.php
|
||||||
environment:
|
environment:
|
||||||
|
- PHP_IDE_CONFIG=serverName=Appwrite
|
||||||
- _APP_ENV
|
- _APP_ENV
|
||||||
- _APP_WORKER_PER_CORE
|
- _APP_WORKER_PER_CORE
|
||||||
- _APP_LOCALE
|
- _APP_LOCALE
|
||||||
|
|
@ -187,7 +192,6 @@ services:
|
||||||
- _APP_MESSAGE_EMAIL_TEST_DSN
|
- _APP_MESSAGE_EMAIL_TEST_DSN
|
||||||
- _APP_MESSAGE_PUSH_TEST_DSN
|
- _APP_MESSAGE_PUSH_TEST_DSN
|
||||||
- _APP_CONSOLE_COUNTRIES_DENYLIST
|
- _APP_CONSOLE_COUNTRIES_DENYLIST
|
||||||
|
|
||||||
appwrite-realtime:
|
appwrite-realtime:
|
||||||
entrypoint: realtime
|
entrypoint: realtime
|
||||||
<<: *x-logging
|
<<: *x-logging
|
||||||
|
|
@ -214,11 +218,13 @@ services:
|
||||||
- appwrite
|
- appwrite
|
||||||
volumes:
|
volumes:
|
||||||
- ./app:/usr/src/code/app
|
- ./app:/usr/src/code/app
|
||||||
|
- ./vendor:/usr/src/code/vendor
|
||||||
- ./src:/usr/src/code/src
|
- ./src:/usr/src/code/src
|
||||||
depends_on:
|
depends_on:
|
||||||
- mariadb
|
- mariadb
|
||||||
- redis
|
- redis
|
||||||
environment:
|
environment:
|
||||||
|
- PHP_IDE_CONFIG=serverName=Appwrite
|
||||||
- _APP_ENV
|
- _APP_ENV
|
||||||
- _APP_WORKER_PER_CORE
|
- _APP_WORKER_PER_CORE
|
||||||
- _APP_OPTIONS_ABUSE
|
- _APP_OPTIONS_ABUSE
|
||||||
|
|
@ -246,11 +252,13 @@ services:
|
||||||
- appwrite
|
- appwrite
|
||||||
volumes:
|
volumes:
|
||||||
- ./app:/usr/src/code/app
|
- ./app:/usr/src/code/app
|
||||||
|
- ./vendor:/usr/src/code/vendor
|
||||||
- ./src:/usr/src/code/src
|
- ./src:/usr/src/code/src
|
||||||
depends_on:
|
depends_on:
|
||||||
- redis
|
- redis
|
||||||
- mariadb
|
- mariadb
|
||||||
environment:
|
environment:
|
||||||
|
- PHP_IDE_CONFIG=serverName=Appwrite
|
||||||
- _APP_ENV
|
- _APP_ENV
|
||||||
- _APP_WORKER_PER_CORE
|
- _APP_WORKER_PER_CORE
|
||||||
- _APP_OPENSSL_KEY_V1
|
- _APP_OPENSSL_KEY_V1
|
||||||
|
|
@ -275,12 +283,14 @@ services:
|
||||||
- appwrite
|
- appwrite
|
||||||
volumes:
|
volumes:
|
||||||
- ./app:/usr/src/code/app
|
- ./app:/usr/src/code/app
|
||||||
|
- ./vendor:/usr/src/code/vendor
|
||||||
- ./src:/usr/src/code/src
|
- ./src:/usr/src/code/src
|
||||||
depends_on:
|
depends_on:
|
||||||
- redis
|
- redis
|
||||||
- mariadb
|
- mariadb
|
||||||
- request-catcher
|
- request-catcher
|
||||||
environment:
|
environment:
|
||||||
|
- PHP_IDE_CONFIG=serverName=Appwrite
|
||||||
- _APP_ENV
|
- _APP_ENV
|
||||||
- _APP_WORKER_PER_CORE
|
- _APP_WORKER_PER_CORE
|
||||||
- _APP_OPENSSL_KEY_V1
|
- _APP_OPENSSL_KEY_V1
|
||||||
|
|
@ -315,8 +325,10 @@ services:
|
||||||
- appwrite-builds:/storage/builds:rw
|
- appwrite-builds:/storage/builds:rw
|
||||||
- appwrite-certificates:/storage/certificates:rw
|
- appwrite-certificates:/storage/certificates:rw
|
||||||
- ./app:/usr/src/code/app
|
- ./app:/usr/src/code/app
|
||||||
|
- ./vendor:/usr/src/code/vendor
|
||||||
- ./src:/usr/src/code/src
|
- ./src:/usr/src/code/src
|
||||||
environment:
|
environment:
|
||||||
|
- PHP_IDE_CONFIG=serverName=Appwrite
|
||||||
- _APP_ENV
|
- _APP_ENV
|
||||||
- _APP_WORKER_PER_CORE
|
- _APP_WORKER_PER_CORE
|
||||||
- _APP_OPENSSL_KEY_V1
|
- _APP_OPENSSL_KEY_V1
|
||||||
|
|
@ -364,11 +376,13 @@ services:
|
||||||
- appwrite
|
- appwrite
|
||||||
volumes:
|
volumes:
|
||||||
- ./app:/usr/src/code/app
|
- ./app:/usr/src/code/app
|
||||||
|
- ./vendor:/usr/src/code/vendor
|
||||||
- ./src:/usr/src/code/src
|
- ./src:/usr/src/code/src
|
||||||
depends_on:
|
depends_on:
|
||||||
- redis
|
- redis
|
||||||
- mariadb
|
- mariadb
|
||||||
environment:
|
environment:
|
||||||
|
- PHP_IDE_CONFIG=serverName=Appwrite
|
||||||
- _APP_ENV
|
- _APP_ENV
|
||||||
- _APP_WORKER_PER_CORE
|
- _APP_WORKER_PER_CORE
|
||||||
- _APP_OPENSSL_KEY_V1
|
- _APP_OPENSSL_KEY_V1
|
||||||
|
|
@ -397,11 +411,13 @@ services:
|
||||||
- appwrite-functions:/storage/functions:rw
|
- appwrite-functions:/storage/functions:rw
|
||||||
- appwrite-builds:/storage/builds:rw
|
- appwrite-builds:/storage/builds:rw
|
||||||
- ./app:/usr/src/code/app
|
- ./app:/usr/src/code/app
|
||||||
|
- ./vendor:/usr/src/code/vendor
|
||||||
- ./src:/usr/src/code/src
|
- ./src:/usr/src/code/src
|
||||||
depends_on:
|
depends_on:
|
||||||
- redis
|
- redis
|
||||||
- mariadb
|
- mariadb
|
||||||
environment:
|
environment:
|
||||||
|
- PHP_IDE_CONFIG=serverName=Appwrite
|
||||||
- _APP_ENV
|
- _APP_ENV
|
||||||
- _APP_WORKER_PER_CORE
|
- _APP_WORKER_PER_CORE
|
||||||
- _APP_OPENSSL_KEY_V1
|
- _APP_OPENSSL_KEY_V1
|
||||||
|
|
@ -465,8 +481,10 @@ services:
|
||||||
- appwrite-config:/storage/config:rw
|
- appwrite-config:/storage/config:rw
|
||||||
- appwrite-certificates:/storage/certificates:rw
|
- appwrite-certificates:/storage/certificates:rw
|
||||||
- ./app:/usr/src/code/app
|
- ./app:/usr/src/code/app
|
||||||
|
- ./vendor:/usr/src/code/vendor
|
||||||
- ./src:/usr/src/code/src
|
- ./src:/usr/src/code/src
|
||||||
environment:
|
environment:
|
||||||
|
- PHP_IDE_CONFIG=serverName=Appwrite
|
||||||
- _APP_ENV
|
- _APP_ENV
|
||||||
- _APP_WORKER_PER_CORE
|
- _APP_WORKER_PER_CORE
|
||||||
- _APP_OPENSSL_KEY_V1
|
- _APP_OPENSSL_KEY_V1
|
||||||
|
|
@ -495,15 +513,19 @@ services:
|
||||||
- appwrite
|
- appwrite
|
||||||
volumes:
|
volumes:
|
||||||
- ./app:/usr/src/code/app
|
- ./app:/usr/src/code/app
|
||||||
|
- ./vendor:/usr/src/code/vendor
|
||||||
- ./src:/usr/src/code/src
|
- ./src:/usr/src/code/src
|
||||||
depends_on:
|
depends_on:
|
||||||
- redis
|
- redis
|
||||||
- mariadb
|
- mariadb
|
||||||
- openruntimes-executor
|
- openruntimes-executor
|
||||||
environment:
|
environment:
|
||||||
|
- PHP_IDE_CONFIG=serverName=Appwrite
|
||||||
- _APP_ENV
|
- _APP_ENV
|
||||||
- _APP_WORKER_PER_CORE
|
- _APP_WORKER_PER_CORE
|
||||||
- _APP_OPENSSL_KEY_V1
|
- _APP_OPENSSL_KEY_V1
|
||||||
|
- _APP_DOMAIN
|
||||||
|
- _APP_OPTIONS_FORCE_HTTPS
|
||||||
- _APP_REDIS_HOST
|
- _APP_REDIS_HOST
|
||||||
- _APP_REDIS_PORT
|
- _APP_REDIS_PORT
|
||||||
- _APP_REDIS_USER
|
- _APP_REDIS_USER
|
||||||
|
|
@ -534,12 +556,14 @@ services:
|
||||||
- appwrite
|
- appwrite
|
||||||
volumes:
|
volumes:
|
||||||
- ./app:/usr/src/code/app
|
- ./app:/usr/src/code/app
|
||||||
|
- ./vendor:/usr/src/code/vendor
|
||||||
- ./src:/usr/src/code/src
|
- ./src:/usr/src/code/src
|
||||||
depends_on:
|
depends_on:
|
||||||
- redis
|
- redis
|
||||||
- maildev
|
- maildev
|
||||||
# - smtp
|
# - smtp
|
||||||
environment:
|
environment:
|
||||||
|
- PHP_IDE_CONFIG=serverName=Appwrite
|
||||||
- _APP_ENV
|
- _APP_ENV
|
||||||
- _APP_WORKER_PER_CORE
|
- _APP_WORKER_PER_CORE
|
||||||
- _APP_OPENSSL_KEY_V1
|
- _APP_OPENSSL_KEY_V1
|
||||||
|
|
@ -569,10 +593,12 @@ services:
|
||||||
- appwrite
|
- appwrite
|
||||||
volumes:
|
volumes:
|
||||||
- ./app:/usr/src/code/app
|
- ./app:/usr/src/code/app
|
||||||
|
- ./vendor:/usr/src/code/vendor
|
||||||
- ./src:/usr/src/code/src
|
- ./src:/usr/src/code/src
|
||||||
depends_on:
|
depends_on:
|
||||||
- redis
|
- redis
|
||||||
environment:
|
environment:
|
||||||
|
- PHP_IDE_CONFIG=serverName=Appwrite
|
||||||
- _APP_ENV
|
- _APP_ENV
|
||||||
- _APP_WORKER_PER_CORE
|
- _APP_WORKER_PER_CORE
|
||||||
- _APP_OPENSSL_KEY_V1
|
- _APP_OPENSSL_KEY_V1
|
||||||
|
|
@ -601,11 +627,13 @@ services:
|
||||||
- appwrite
|
- appwrite
|
||||||
volumes:
|
volumes:
|
||||||
- ./app:/usr/src/code/app
|
- ./app:/usr/src/code/app
|
||||||
|
- ./vendor:/usr/src/code/vendor
|
||||||
- ./src:/usr/src/code/src
|
- ./src:/usr/src/code/src
|
||||||
- ./tests:/usr/src/code/tests
|
- ./tests:/usr/src/code/tests
|
||||||
depends_on:
|
depends_on:
|
||||||
- mariadb
|
- mariadb
|
||||||
environment:
|
environment:
|
||||||
|
- PHP_IDE_CONFIG=serverName=Appwrite
|
||||||
- _APP_ENV
|
- _APP_ENV
|
||||||
- _APP_WORKER_PER_CORE
|
- _APP_WORKER_PER_CORE
|
||||||
- _APP_OPENSSL_KEY_V1
|
- _APP_OPENSSL_KEY_V1
|
||||||
|
|
@ -626,19 +654,21 @@ services:
|
||||||
- _APP_MIGRATIONS_FIREBASE_CLIENT_ID
|
- _APP_MIGRATIONS_FIREBASE_CLIENT_ID
|
||||||
- _APP_MIGRATIONS_FIREBASE_CLIENT_SECRET
|
- _APP_MIGRATIONS_FIREBASE_CLIENT_SECRET
|
||||||
|
|
||||||
appwrite-maintenance:
|
appwrite-task-maintenance:
|
||||||
entrypoint: maintenance
|
entrypoint: maintenance
|
||||||
<<: *x-logging
|
<<: *x-logging
|
||||||
container_name: appwrite-maintenance
|
container_name: appwrite-task-maintenance
|
||||||
image: appwrite-dev
|
image: appwrite-dev
|
||||||
networks:
|
networks:
|
||||||
- appwrite
|
- appwrite
|
||||||
volumes:
|
volumes:
|
||||||
- ./app:/usr/src/code/app
|
- ./app:/usr/src/code/app
|
||||||
|
- ./vendor:/usr/src/code/vendor
|
||||||
- ./src:/usr/src/code/src
|
- ./src:/usr/src/code/src
|
||||||
depends_on:
|
depends_on:
|
||||||
- redis
|
- redis
|
||||||
environment:
|
environment:
|
||||||
|
- PHP_IDE_CONFIG=serverName=Appwrite
|
||||||
- _APP_ENV
|
- _APP_ENV
|
||||||
- _APP_WORKER_PER_CORE
|
- _APP_WORKER_PER_CORE
|
||||||
- _APP_DOMAIN
|
- _APP_DOMAIN
|
||||||
|
|
@ -672,11 +702,13 @@ services:
|
||||||
- appwrite
|
- appwrite
|
||||||
volumes:
|
volumes:
|
||||||
- ./app:/usr/src/code/app
|
- ./app:/usr/src/code/app
|
||||||
|
- ./vendor:/usr/src/code/vendor
|
||||||
- ./src:/usr/src/code/src
|
- ./src:/usr/src/code/src
|
||||||
depends_on:
|
depends_on:
|
||||||
- redis
|
- redis
|
||||||
- mariadb
|
- mariadb
|
||||||
environment:
|
environment:
|
||||||
|
- PHP_IDE_CONFIG=serverName=Appwrite
|
||||||
- _APP_ENV
|
- _APP_ENV
|
||||||
- _APP_WORKER_PER_CORE
|
- _APP_WORKER_PER_CORE
|
||||||
- _APP_OPENSSL_KEY_V1
|
- _APP_OPENSSL_KEY_V1
|
||||||
|
|
@ -703,11 +735,13 @@ services:
|
||||||
- appwrite
|
- appwrite
|
||||||
volumes:
|
volumes:
|
||||||
- ./app:/usr/src/code/app
|
- ./app:/usr/src/code/app
|
||||||
|
- ./vendor:/usr/src/code/vendor
|
||||||
- ./src:/usr/src/code/src
|
- ./src:/usr/src/code/src
|
||||||
depends_on:
|
depends_on:
|
||||||
- redis
|
- redis
|
||||||
- mariadb
|
- mariadb
|
||||||
environment:
|
environment:
|
||||||
|
- PHP_IDE_CONFIG=serverName=Appwrite
|
||||||
- _APP_ENV
|
- _APP_ENV
|
||||||
- _APP_WORKER_PER_CORE
|
- _APP_WORKER_PER_CORE
|
||||||
- _APP_OPENSSL_KEY_V1
|
- _APP_OPENSSL_KEY_V1
|
||||||
|
|
@ -725,20 +759,22 @@ services:
|
||||||
- _APP_LOGGING_CONFIG
|
- _APP_LOGGING_CONFIG
|
||||||
- _APP_USAGE_AGGREGATION_INTERVAL
|
- _APP_USAGE_AGGREGATION_INTERVAL
|
||||||
|
|
||||||
appwrite-scheduler-functions:
|
appwrite-task-scheduler-functions:
|
||||||
entrypoint: schedule-functions
|
entrypoint: schedule-functions
|
||||||
<<: *x-logging
|
<<: *x-logging
|
||||||
container_name: appwrite-scheduler-functions
|
container_name: appwrite-task-scheduler-functions
|
||||||
image: appwrite-dev
|
image: appwrite-dev
|
||||||
networks:
|
networks:
|
||||||
- appwrite
|
- appwrite
|
||||||
volumes:
|
volumes:
|
||||||
- ./app:/usr/src/code/app
|
- ./app:/usr/src/code/app
|
||||||
|
- ./vendor:/usr/src/code/vendor
|
||||||
- ./src:/usr/src/code/src
|
- ./src:/usr/src/code/src
|
||||||
depends_on:
|
depends_on:
|
||||||
- mariadb
|
- mariadb
|
||||||
- redis
|
- redis
|
||||||
environment:
|
environment:
|
||||||
|
- PHP_IDE_CONFIG=serverName=Appwrite
|
||||||
- _APP_ENV
|
- _APP_ENV
|
||||||
- _APP_WORKER_PER_CORE
|
- _APP_WORKER_PER_CORE
|
||||||
- _APP_OPENSSL_KEY_V1
|
- _APP_OPENSSL_KEY_V1
|
||||||
|
|
@ -752,20 +788,22 @@ services:
|
||||||
- _APP_DB_USER
|
- _APP_DB_USER
|
||||||
- _APP_DB_PASS
|
- _APP_DB_PASS
|
||||||
|
|
||||||
appwrite-scheduler-messages:
|
appwrite-task-scheduler-messages:
|
||||||
entrypoint: schedule-messages
|
entrypoint: schedule-messages
|
||||||
<<: *x-logging
|
<<: *x-logging
|
||||||
container_name: appwrite-scheduler-messages
|
container_name: appwrite-task-scheduler-messages
|
||||||
image: appwrite-dev
|
image: appwrite-dev
|
||||||
networks:
|
networks:
|
||||||
- appwrite
|
- appwrite
|
||||||
volumes:
|
volumes:
|
||||||
- ./app:/usr/src/code/app
|
- ./app:/usr/src/code/app
|
||||||
|
- ./vendor:/usr/src/code/vendor
|
||||||
- ./src:/usr/src/code/src
|
- ./src:/usr/src/code/src
|
||||||
depends_on:
|
depends_on:
|
||||||
- mariadb
|
- mariadb
|
||||||
- redis
|
- redis
|
||||||
environment:
|
environment:
|
||||||
|
- PHP_IDE_CONFIG=serverName=Appwrite
|
||||||
- _APP_ENV
|
- _APP_ENV
|
||||||
- _APP_WORKER_PER_CORE
|
- _APP_WORKER_PER_CORE
|
||||||
- _APP_OPENSSL_KEY_V1
|
- _APP_OPENSSL_KEY_V1
|
||||||
|
|
@ -785,65 +823,9 @@ services:
|
||||||
networks:
|
networks:
|
||||||
- appwrite
|
- appwrite
|
||||||
environment:
|
environment:
|
||||||
|
- PHP_IDE_CONFIG=serverName=Appwrite
|
||||||
- _APP_ASSISTANT_OPENAI_API_KEY
|
- _APP_ASSISTANT_OPENAI_API_KEY
|
||||||
|
|
||||||
appwrite-worker-hamster:
|
|
||||||
entrypoint: worker-hamster
|
|
||||||
<<: *x-logging
|
|
||||||
container_name: appwrite-worker-hamster
|
|
||||||
image: appwrite-dev
|
|
||||||
networks:
|
|
||||||
- appwrite
|
|
||||||
volumes:
|
|
||||||
- ./app:/usr/src/code/app
|
|
||||||
- ./src:/usr/src/code/src
|
|
||||||
depends_on:
|
|
||||||
- redis
|
|
||||||
- mariadb
|
|
||||||
environment:
|
|
||||||
- _APP_ENV
|
|
||||||
- _APP_WORKER_PER_CORE
|
|
||||||
- _APP_OPENSSL_KEY_V1
|
|
||||||
- _APP_DB_HOST
|
|
||||||
- _APP_DB_PORT
|
|
||||||
- _APP_DB_SCHEMA
|
|
||||||
- _APP_DB_USER
|
|
||||||
- _APP_DB_PASS
|
|
||||||
- _APP_REDIS_HOST
|
|
||||||
- _APP_REDIS_PORT
|
|
||||||
- _APP_REDIS_USER
|
|
||||||
- _APP_REDIS_PASS
|
|
||||||
- _APP_MIXPANEL_TOKEN
|
|
||||||
|
|
||||||
appwrite-hamster-scheduler:
|
|
||||||
entrypoint: hamster
|
|
||||||
<<: *x-logging
|
|
||||||
container_name: appwrite-hamster-scheduler
|
|
||||||
image: appwrite-dev
|
|
||||||
networks:
|
|
||||||
- appwrite
|
|
||||||
volumes:
|
|
||||||
- ./app:/usr/src/code/app
|
|
||||||
- ./src:/usr/src/code/src
|
|
||||||
depends_on:
|
|
||||||
- redis
|
|
||||||
- mariadb
|
|
||||||
environment:
|
|
||||||
- _APP_ENV
|
|
||||||
- _APP_WORKER_PER_CORE
|
|
||||||
- _APP_OPENSSL_KEY_V1
|
|
||||||
- _APP_REDIS_HOST
|
|
||||||
- _APP_REDIS_PORT
|
|
||||||
- _APP_REDIS_USER
|
|
||||||
- _APP_REDIS_PASS
|
|
||||||
- _APP_DB_HOST
|
|
||||||
- _APP_DB_PORT
|
|
||||||
- _APP_DB_SCHEMA
|
|
||||||
- _APP_DB_USER
|
|
||||||
- _APP_DB_PASS
|
|
||||||
- _APP_HAMSTER_TIME
|
|
||||||
- _APP_HAMSTER_INTERVAL
|
|
||||||
|
|
||||||
openruntimes-executor:
|
openruntimes-executor:
|
||||||
container_name: openruntimes-executor
|
container_name: openruntimes-executor
|
||||||
hostname: appwrite-executor
|
hostname: appwrite-executor
|
||||||
|
|
@ -862,6 +844,7 @@ services:
|
||||||
# It's not possible to share mount file between 2 containers without host mount (copying is too slow)
|
# It's not possible to share mount file between 2 containers without host mount (copying is too slow)
|
||||||
- /tmp:/tmp:rw
|
- /tmp:/tmp:rw
|
||||||
environment:
|
environment:
|
||||||
|
- PHP_IDE_CONFIG=serverName=Appwrite
|
||||||
- OPR_EXECUTOR_INACTIVE_TRESHOLD=$_APP_FUNCTIONS_INACTIVE_THRESHOLD
|
- OPR_EXECUTOR_INACTIVE_TRESHOLD=$_APP_FUNCTIONS_INACTIVE_THRESHOLD
|
||||||
- OPR_EXECUTOR_MAINTENANCE_INTERVAL=$_APP_FUNCTIONS_MAINTENANCE_INTERVAL
|
- OPR_EXECUTOR_MAINTENANCE_INTERVAL=$_APP_FUNCTIONS_MAINTENANCE_INTERVAL
|
||||||
- OPR_EXECUTOR_NETWORK=$_APP_FUNCTIONS_RUNTIMES_NETWORK
|
- OPR_EXECUTOR_NETWORK=$_APP_FUNCTIONS_RUNTIMES_NETWORK
|
||||||
|
|
@ -905,6 +888,7 @@ services:
|
||||||
- appwrite
|
- appwrite
|
||||||
- runtimes
|
- runtimes
|
||||||
environment:
|
environment:
|
||||||
|
- PHP_IDE_CONFIG=serverName=Appwrite
|
||||||
- OPR_PROXY_WORKER_PER_CORE=$_APP_WORKER_PER_CORE
|
- OPR_PROXY_WORKER_PER_CORE=$_APP_WORKER_PER_CORE
|
||||||
- OPR_PROXY_ENV=$_APP_ENV
|
- OPR_PROXY_ENV=$_APP_ENV
|
||||||
- OPR_PROXY_EXECUTOR_SECRET=$_APP_EXECUTOR_SECRET
|
- OPR_PROXY_EXECUTOR_SECRET=$_APP_EXECUTOR_SECRET
|
||||||
|
|
@ -925,10 +909,10 @@ services:
|
||||||
- appwrite
|
- appwrite
|
||||||
volumes:
|
volumes:
|
||||||
- appwrite-mariadb:/var/lib/mysql:rw
|
- appwrite-mariadb:/var/lib/mysql:rw
|
||||||
- ./mariadb-config.cnf:/etc/mysql/conf.d/mariadb-config.cnf
|
|
||||||
ports:
|
ports:
|
||||||
- "3306:3306"
|
- "3306:3306"
|
||||||
environment:
|
environment:
|
||||||
|
- PHP_IDE_CONFIG=serverName=Appwrite
|
||||||
- MYSQL_ROOT_PASSWORD=${_APP_DB_ROOT_PASS}
|
- MYSQL_ROOT_PASSWORD=${_APP_DB_ROOT_PASS}
|
||||||
- MYSQL_DATABASE=${_APP_DB_SCHEMA}
|
- MYSQL_DATABASE=${_APP_DB_SCHEMA}
|
||||||
- MYSQL_USER=${_APP_DB_USER}
|
- MYSQL_USER=${_APP_DB_USER}
|
||||||
|
|
@ -944,6 +928,7 @@ services:
|
||||||
# networks:
|
# networks:
|
||||||
# - appwrite
|
# - appwrite
|
||||||
# environment:
|
# environment:
|
||||||
|
# PHP_IDE_CONFIG=serverName=Appwrite
|
||||||
# - LOCAL_DOMAINS=@
|
# - LOCAL_DOMAINS=@
|
||||||
# - RELAY_FROM_HOSTS=192.168.0.0/16 ; *.yourdomain.com
|
# - RELAY_FROM_HOSTS=192.168.0.0/16 ; *.yourdomain.com
|
||||||
# - SMARTHOST_HOST=smtp
|
# - SMARTHOST_HOST=smtp
|
||||||
|
|
@ -1019,6 +1004,7 @@ services:
|
||||||
networks:
|
networks:
|
||||||
- appwrite
|
- appwrite
|
||||||
environment:
|
environment:
|
||||||
|
- PHP_IDE_CONFIG=serverName=Appwrite
|
||||||
- REDIS_HOSTS=redis
|
- REDIS_HOSTS=redis
|
||||||
ports:
|
ports:
|
||||||
- "8081:5540"
|
- "8081:5540"
|
||||||
|
|
@ -1032,6 +1018,7 @@ services:
|
||||||
ports:
|
ports:
|
||||||
- "9509:3000"
|
- "9509:3000"
|
||||||
environment:
|
environment:
|
||||||
|
- PHP_IDE_CONFIG=serverName=Appwrite
|
||||||
- SERVER_URL=http://localhost/v1/graphql
|
- SERVER_URL=http://localhost/v1/graphql
|
||||||
|
|
||||||
# Dev Tools End ------------------------------------------------------------------------------------------
|
# Dev Tools End ------------------------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
namespace Appwrite\Platform\Tasks;
|
namespace Appwrite\Platform\Tasks;
|
||||||
|
|
||||||
|
use Appwrite\Utopia\Queue\Connections;
|
||||||
use Swoole\Timer;
|
use Swoole\Timer;
|
||||||
use Utopia\CLI\Console;
|
use Utopia\CLI\Console;
|
||||||
use Utopia\Database\Database;
|
use Utopia\Database\Database;
|
||||||
|
|
@ -21,17 +22,19 @@ abstract class ScheduleBase extends Action
|
||||||
protected const ENQUEUE_TIMER = 60; //seconds
|
protected const ENQUEUE_TIMER = 60; //seconds
|
||||||
|
|
||||||
protected array $schedules = [];
|
protected array $schedules = [];
|
||||||
|
protected Connections $connections;
|
||||||
|
|
||||||
abstract public static function getName(): string;
|
abstract public static function getName(): string;
|
||||||
abstract public static function getSupportedResource(): string;
|
abstract public static function getSupportedResource(): string;
|
||||||
|
|
||||||
abstract protected function enqueueResources(
|
abstract protected function enqueueResources(
|
||||||
Group $pools,
|
array $pools,
|
||||||
Database $dbForConsole
|
Database $dbForConsole
|
||||||
);
|
);
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
|
$this->connections = new Connections();
|
||||||
$type = static::getSupportedResource();
|
$type = static::getSupportedResource();
|
||||||
|
|
||||||
$this
|
$this
|
||||||
|
|
@ -39,7 +42,7 @@ abstract class ScheduleBase extends Action
|
||||||
->inject('pools')
|
->inject('pools')
|
||||||
->inject('dbForConsole')
|
->inject('dbForConsole')
|
||||||
->inject('getProjectDB')
|
->inject('getProjectDB')
|
||||||
->callback(fn (Group $pools, Database $dbForConsole, callable $getProjectDB) => $this->action($pools, $dbForConsole, $getProjectDB));
|
->callback(fn (array $pools, Database $dbForConsole, callable $getProjectDB) => $this->action($pools, $dbForConsole, $getProjectDB));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -47,7 +50,7 @@ abstract class ScheduleBase extends Action
|
||||||
* 2. Create timer that sync all changes from 'schedules' collection to local copy. Only reading changes thanks to 'resourceUpdatedAt' attribute
|
* 2. Create timer that sync all changes from 'schedules' collection to local copy. Only reading changes thanks to 'resourceUpdatedAt' attribute
|
||||||
* 3. Create timer that prepares coroutines for soon-to-execute schedules. When it's ready, coroutine sleeps until exact time before sending request to worker.
|
* 3. Create timer that prepares coroutines for soon-to-execute schedules. When it's ready, coroutine sleeps until exact time before sending request to worker.
|
||||||
*/
|
*/
|
||||||
public function action(Group $pools, Database $dbForConsole, callable $getProjectDB): void
|
public function action(array $pools, Database $dbForConsole, callable $getProjectDB): void
|
||||||
{
|
{
|
||||||
Console::title(\ucfirst(static::getSupportedResource()) . ' scheduler V1');
|
Console::title(\ucfirst(static::getSupportedResource()) . ' scheduler V1');
|
||||||
Console::success(APP_NAME . ' ' . \ucfirst(static::getSupportedResource()) . ' scheduler v1 has started');
|
Console::success(APP_NAME . ' ' . \ucfirst(static::getSupportedResource()) . ' scheduler v1 has started');
|
||||||
|
|
@ -124,76 +127,71 @@ abstract class ScheduleBase extends Action
|
||||||
$latestDocument = \end($results);
|
$latestDocument = \end($results);
|
||||||
}
|
}
|
||||||
|
|
||||||
$pools->reclaim();
|
|
||||||
|
|
||||||
Console::success("{$total} resources were loaded in " . (\microtime(true) - $loadStart) . " seconds");
|
Console::success("{$total} resources were loaded in " . (\microtime(true) - $loadStart) . " seconds");
|
||||||
|
|
||||||
Console::success("Starting timers at " . DateTime::now());
|
Console::success("Starting timers at " . DateTime::now());
|
||||||
|
|
||||||
run(function () use ($dbForConsole, &$lastSyncUpdate, $getSchedule, $pools) {
|
|
||||||
/**
|
|
||||||
* The timer synchronize $schedules copy with database collection.
|
|
||||||
*/
|
|
||||||
Timer::tick(static::UPDATE_TIMER * 1000, function () use ($dbForConsole, &$lastSyncUpdate, $getSchedule, $pools) {
|
|
||||||
$time = DateTime::now();
|
|
||||||
$timerStart = \microtime(true);
|
|
||||||
|
|
||||||
$limit = 1000;
|
Timer::tick(static::UPDATE_TIMER * 1000, function () use ($dbForConsole, &$lastSyncUpdate, $getSchedule, $pools) {
|
||||||
$sum = $limit;
|
$time = DateTime::now();
|
||||||
$total = 0;
|
$timerStart = \microtime(true);
|
||||||
$latestDocument = null;
|
|
||||||
|
|
||||||
Console::log("Sync tick: Running at $time");
|
$limit = 1000;
|
||||||
|
$sum = $limit;
|
||||||
|
$total = 0;
|
||||||
|
$latestDocument = null;
|
||||||
|
|
||||||
while ($sum === $limit) {
|
Console::log("Sync tick: Running at $time");
|
||||||
$paginationQueries = [Query::limit($limit)];
|
|
||||||
|
|
||||||
if ($latestDocument) {
|
while ($sum === $limit) {
|
||||||
$paginationQueries[] = Query::cursorAfter($latestDocument);
|
$paginationQueries = [Query::limit($limit)];
|
||||||
}
|
|
||||||
|
|
||||||
$results = $dbForConsole->find('schedules', \array_merge($paginationQueries, [
|
if ($latestDocument) {
|
||||||
Query::equal('region', [System::getEnv('_APP_REGION', 'default')]),
|
$paginationQueries[] = Query::cursorAfter($latestDocument);
|
||||||
Query::equal('resourceType', [static::getSupportedResource()]),
|
|
||||||
Query::greaterThanEqual('resourceUpdatedAt', $lastSyncUpdate),
|
|
||||||
]));
|
|
||||||
|
|
||||||
$sum = count($results);
|
|
||||||
$total = $total + $sum;
|
|
||||||
|
|
||||||
foreach ($results as $document) {
|
|
||||||
$localDocument = $schedules[$document['resourceId']] ?? null;
|
|
||||||
|
|
||||||
// Check if resource has been updated since last sync
|
|
||||||
$org = $localDocument !== null ? \strtotime($localDocument['resourceUpdatedAt']) : null;
|
|
||||||
$new = \strtotime($document['resourceUpdatedAt']);
|
|
||||||
|
|
||||||
if (!$document['active']) {
|
|
||||||
Console::info("Removing: {$document['resourceId']}");
|
|
||||||
unset($this->schedules[$document['resourceId']]);
|
|
||||||
} elseif ($new !== $org) {
|
|
||||||
Console::info("Updating: {$document['resourceId']}");
|
|
||||||
$this->schedules[$document['resourceId']] = $getSchedule($document);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$latestDocument = \end($results);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$lastSyncUpdate = $time;
|
$results = $dbForConsole->find('schedules', \array_merge($paginationQueries, [
|
||||||
$timerEnd = \microtime(true);
|
Query::equal('region', [System::getEnv('_APP_REGION', 'default')]),
|
||||||
|
Query::equal('resourceType', [static::getSupportedResource()]),
|
||||||
|
Query::greaterThanEqual('resourceUpdatedAt', $lastSyncUpdate),
|
||||||
|
]));
|
||||||
|
|
||||||
$pools->reclaim();
|
$sum = count($results);
|
||||||
|
$total = $total + $sum;
|
||||||
|
|
||||||
Console::log("Sync tick: {$total} schedules were updated in " . ($timerEnd - $timerStart) . " seconds");
|
foreach ($results as $document) {
|
||||||
});
|
$localDocument = $schedules[$document['resourceId']] ?? null;
|
||||||
|
|
||||||
Timer::tick(
|
// Check if resource has been updated since last sync
|
||||||
static::ENQUEUE_TIMER * 1000,
|
$org = $localDocument !== null ? \strtotime($localDocument['resourceUpdatedAt']) : null;
|
||||||
fn () => $this->enqueueResources($pools, $dbForConsole)
|
$new = \strtotime($document['resourceUpdatedAt']);
|
||||||
);
|
|
||||||
|
|
||||||
$this->enqueueResources($pools, $dbForConsole);
|
if (!$document['active']) {
|
||||||
|
Console::info("Removing: {$document['resourceId']}");
|
||||||
|
unset($this->schedules[$document['resourceId']]);
|
||||||
|
} elseif ($new !== $org) {
|
||||||
|
Console::info("Updating: {$document['resourceId']}");
|
||||||
|
$this->schedules[$document['resourceId']] = $getSchedule($document);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$latestDocument = \end($results);
|
||||||
|
}
|
||||||
|
|
||||||
|
$lastSyncUpdate = $time;
|
||||||
|
$timerEnd = \microtime(true);
|
||||||
|
|
||||||
|
|
||||||
|
Console::log("Sync tick: {$total} schedules were updated in " . ($timerEnd - $timerStart) . " seconds");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Timer::tick(
|
||||||
|
static::ENQUEUE_TIMER * 1000,
|
||||||
|
fn() => $this->enqueueResources($pools, $dbForConsole)
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->enqueueResources($pools, $dbForConsole);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ use Utopia\CLI\Console;
|
||||||
use Utopia\Database\Database;
|
use Utopia\Database\Database;
|
||||||
use Utopia\Database\DateTime;
|
use Utopia\Database\DateTime;
|
||||||
use Utopia\Pools\Group;
|
use Utopia\Pools\Group;
|
||||||
|
use Utopia\Queue\Connection\Redis;
|
||||||
|
|
||||||
class ScheduleFunctions extends ScheduleBase
|
class ScheduleFunctions extends ScheduleBase
|
||||||
{
|
{
|
||||||
|
|
@ -26,7 +27,7 @@ class ScheduleFunctions extends ScheduleBase
|
||||||
return 'function';
|
return 'function';
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function enqueueResources(Group $pools, Database $dbForConsole): void
|
protected function enqueueResources(array $pools, Database $dbForConsole): void
|
||||||
{
|
{
|
||||||
$timerStart = \microtime(true);
|
$timerStart = \microtime(true);
|
||||||
$time = DateTime::now();
|
$time = DateTime::now();
|
||||||
|
|
@ -68,8 +69,12 @@ class ScheduleFunctions extends ScheduleBase
|
||||||
\go(function () use ($delay, $scheduleKeys, $pools) {
|
\go(function () use ($delay, $scheduleKeys, $pools) {
|
||||||
\sleep($delay); // in seconds
|
\sleep($delay); // in seconds
|
||||||
|
|
||||||
$queue = $pools->get('queue')->pop();
|
$pool = $pools['pools-queue-main']['pool'];
|
||||||
$connection = $queue->getResource();
|
$dsn = $pools['pools-queue-main']['dsn'];
|
||||||
|
$connection = $pool->get();
|
||||||
|
$this->connections->add($connection, $pool);
|
||||||
|
|
||||||
|
$queueConnection = new Redis($dsn->getHost(), $dsn->getPort());
|
||||||
|
|
||||||
foreach ($scheduleKeys as $scheduleKey) {
|
foreach ($scheduleKeys as $scheduleKey) {
|
||||||
// Ensure schedule was not deleted
|
// Ensure schedule was not deleted
|
||||||
|
|
@ -79,7 +84,7 @@ class ScheduleFunctions extends ScheduleBase
|
||||||
|
|
||||||
$schedule = $this->schedules[$scheduleKey];
|
$schedule = $this->schedules[$scheduleKey];
|
||||||
|
|
||||||
$queueForFunctions = new Func($connection);
|
$queueForFunctions = new Func($queueConnection);
|
||||||
|
|
||||||
$queueForFunctions
|
$queueForFunctions
|
||||||
->setType('schedule')
|
->setType('schedule')
|
||||||
|
|
@ -90,7 +95,8 @@ class ScheduleFunctions extends ScheduleBase
|
||||||
->trigger();
|
->trigger();
|
||||||
}
|
}
|
||||||
|
|
||||||
$queue->reclaim(); // TODO: Do in try/catch/finally, or add to connectons resource
|
$this->connections->reclaim();
|
||||||
|
// $queue->reclaim(); // TODO: Do in try/catch/finally, or add to connectons resource
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ namespace Appwrite\Platform\Tasks;
|
||||||
use Appwrite\Event\Messaging;
|
use Appwrite\Event\Messaging;
|
||||||
use Utopia\Database\Database;
|
use Utopia\Database\Database;
|
||||||
use Utopia\Pools\Group;
|
use Utopia\Pools\Group;
|
||||||
|
use Utopia\Queue\Connection\Redis;
|
||||||
|
|
||||||
class ScheduleMessages extends ScheduleBase
|
class ScheduleMessages extends ScheduleBase
|
||||||
{
|
{
|
||||||
|
|
@ -21,7 +22,7 @@ class ScheduleMessages extends ScheduleBase
|
||||||
return 'message';
|
return 'message';
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function enqueueResources(Group $pools, Database $dbForConsole): void
|
protected function enqueueResources(array $pools, Database $dbForConsole): void
|
||||||
{
|
{
|
||||||
foreach ($this->schedules as $schedule) {
|
foreach ($this->schedules as $schedule) {
|
||||||
if (!$schedule['active']) {
|
if (!$schedule['active']) {
|
||||||
|
|
@ -36,9 +37,14 @@ class ScheduleMessages extends ScheduleBase
|
||||||
}
|
}
|
||||||
|
|
||||||
\go(function () use ($now, $schedule, $pools, $dbForConsole) {
|
\go(function () use ($now, $schedule, $pools, $dbForConsole) {
|
||||||
$queue = $pools->get('queue')->pop();
|
$pool = $pools['pools-queue-main']['pool'];
|
||||||
$connection = $queue->getResource();
|
$dsn = $pools['pools-queue-main']['dsn'];
|
||||||
$queueForMessaging = new Messaging($connection);
|
$connection = $pool->get();
|
||||||
|
$this->connections->add($connection, $pool);
|
||||||
|
|
||||||
|
$queueConnection = new Redis($dsn->getHost(), $dsn->getPort());
|
||||||
|
|
||||||
|
$queueForMessaging = new Messaging($queueConnection);
|
||||||
|
|
||||||
$queueForMessaging
|
$queueForMessaging
|
||||||
->setType(MESSAGE_SEND_TYPE_EXTERNAL)
|
->setType(MESSAGE_SEND_TYPE_EXTERNAL)
|
||||||
|
|
@ -51,7 +57,8 @@ class ScheduleMessages extends ScheduleBase
|
||||||
$schedule['$id'],
|
$schedule['$id'],
|
||||||
);
|
);
|
||||||
|
|
||||||
$queue->reclaim(); // TODO: Do in try/catch/finally, or add to connectons resource
|
$this->connections->reclaim();
|
||||||
|
// $queue->reclaim(); // TODO: Do in try/catch/finally, or add to connectons resource
|
||||||
|
|
||||||
unset($this->schedules[$schedule['resourceId']]);
|
unset($this->schedules[$schedule['resourceId']]);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue