Make Swoole Tables injectable Http resources

Register both `domains` and `hostnames` tables as Http resources so they
can be injected via the framework instead of relying on closures or globals.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
loks0n
2026-02-17 13:15:25 +00:00
co-authored by Claude Opus 4.6
parent 56cbcba2b1
commit b83e3ef36e
2 changed files with 10 additions and 2 deletions
+3 -1
View File
@@ -34,6 +34,7 @@ use Appwrite\Utopia\View;
use Executor\Executor;
use MaxMind\Db\Reader;
use Swoole\Http\Request as SwooleRequest;
use Swoole\Table;
use Utopia\Config\Config;
use Utopia\Console;
use Utopia\Database\Database;
@@ -1073,7 +1074,8 @@ Http::init()
->inject('queueForCertificates')
->inject('platform')
->inject('authorization')
->action(function (Request $request, Document $console, Database $dbForPlatform, Certificate $queueForCertificates, array $platform, Authorization $authorization) use ($hostnames) {
->inject('hostnames')
->action(function (Request $request, Document $console, Database $dbForPlatform, Certificate $queueForCertificates, array $platform, Authorization $authorization, Table $hostnames) {
$hostname = $request->getHostname();
$platformHostnames = $platform['hostnames'] ?? [];
+7 -1
View File
@@ -48,6 +48,9 @@ $hostnames = new Table(100_000);
$hostnames->column('value', Table::TYPE_INT, 1);
$hostnames->create();
Http::setResource('domains', fn () => $domains);
Http::setResource('hostnames', fn () => $hostnames);
$http = new Server(
host: "0.0.0.0",
port: System::getEnv('PORT', 80),
@@ -583,7 +586,7 @@ $http->on(Constant::EVENT_REQUEST, function (SwooleRequest $swooleRequest, Swool
});
// Fetch domains every `DOMAIN_SYNC_TIMER` seconds and update in the memory
$http->on(Constant::EVENT_TASK, function () use ($register, $domains) {
$http->on(Constant::EVENT_TASK, function () use ($register) {
$lastSyncUpdate = null;
$pools = $register->get('pools');
Http::setResource('pools', fn () => $pools);
@@ -592,6 +595,9 @@ $http->on(Constant::EVENT_TASK, function () use ($register, $domains) {
/** @var Utopia\Database\Database $dbForPlatform */
$dbForPlatform = $app->getResource('dbForPlatform');
/** @var Table $domains */
$domains = $app->getResource('domains');
Timer::tick(DOMAIN_SYNC_TIMER * 1000, function () use ($dbForPlatform, $domains, &$lastSyncUpdate, $app) {
try {
$time = DateTime::now();