Merge branch '1.6.x' into migrate-to-redis-abuse

This commit is contained in:
Christy Jacob 2024-12-18 12:46:09 +05:30 committed by GitHub
commit e8a3b87f68
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 28 additions and 1 deletions

View file

@ -91,6 +91,15 @@ function router(App $utopia, Database $dbForPlatform, callable $getProjectDB, Sw
$project = Authorization::skip( $project = Authorization::skip(
fn () => $dbForPlatform->getDocument('projects', $projectId) fn () => $dbForPlatform->getDocument('projects', $projectId)
); );
if (!$project->isEmpty() && $project->getId() !== 'console') {
$accessedAt = $project->getAttribute('accessedAt', '');
if (DateTime::formatTz(DateTime::addSeconds(new \DateTime(), -APP_PROJECT_ACCESS)) > $accessedAt) {
$project->setAttribute('accessedAt', DateTime::now());
Authorization::skip(fn () => $dbForPlatform->updateDocument('projects', $project->getId(), $project));
}
}
if (array_key_exists('proxy', $project->getAttribute('services', []))) { if (array_key_exists('proxy', $project->getAttribute('services', []))) {
$status = $project->getAttribute('services', [])['proxy']; $status = $project->getAttribute('services', [])['proxy'];
if (!$status) { if (!$status) {

View file

@ -9,6 +9,7 @@ use Utopia\Database\DateTime;
use Utopia\Database\Document; use Utopia\Database\Document;
use Utopia\Database\Exception; use Utopia\Database\Exception;
use Utopia\Database\Query; use Utopia\Database\Query;
use Utopia\Database\Validator\Authorization;
use Utopia\Platform\Action; use Utopia\Platform\Action;
use Utopia\Pools\Group; use Utopia\Pools\Group;
use Utopia\System\System; use Utopia\System\System;
@ -39,6 +40,17 @@ abstract class ScheduleBase extends Action
->callback(fn (Group $pools, Database $dbForPlatform, callable $getProjectDB) => $this->action($pools, $dbForPlatform, $getProjectDB)); ->callback(fn (Group $pools, Database $dbForPlatform, callable $getProjectDB) => $this->action($pools, $dbForPlatform, $getProjectDB));
} }
protected function updateProjectAccess(Document $project, Database $dbForPlatform): void
{
if (!$project->isEmpty() && $project->getId() !== 'console') {
$accessedAt = $project->getAttribute('accessedAt', '');
if (DateTime::formatTz(DateTime::addSeconds(new \DateTime(), -APP_PROJECT_ACCESS)) > $accessedAt) {
$project->setAttribute('accessedAt', DateTime::now());
Authorization::skip(fn () => $dbForPlatform->updateDocument('projects', $project->getId(), $project));
}
}
}
/** /**
* 1. Load all documents from 'schedules' collection to create local copy * 1. Load all documents from 'schedules' collection to create local copy
* 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

View file

@ -57,6 +57,8 @@ class ScheduleExecutions extends ScheduleBase
$delay = $scheduledAt->getTimestamp() - (new \DateTime())->getTimestamp(); $delay = $scheduledAt->getTimestamp() - (new \DateTime())->getTimestamp();
$this->updateProjectAccess($schedule['project'], $dbForPlatform);
\go(function () use ($queueForFunctions, $schedule, $delay, $data) { \go(function () use ($queueForFunctions, $schedule, $delay, $data) {
Co::sleep($delay); Co::sleep($delay);

View file

@ -70,7 +70,7 @@ class ScheduleFunctions extends ScheduleBase
} }
foreach ($delayedExecutions as $delay => $scheduleKeys) { foreach ($delayedExecutions as $delay => $scheduleKeys) {
\go(function () use ($delay, $scheduleKeys, $pools) { \go(function () use ($delay, $scheduleKeys, $pools, $dbForPlatform) {
\sleep($delay); // in seconds \sleep($delay); // in seconds
$queue = $pools->get('queue')->pop(); $queue = $pools->get('queue')->pop();
@ -84,6 +84,8 @@ class ScheduleFunctions extends ScheduleBase
$schedule = $this->schedules[$scheduleKey]; $schedule = $this->schedules[$scheduleKey];
$this->updateProjectAccess($schedule['project'], $dbForPlatform);
$queueForFunctions = new Func($connection); $queueForFunctions = new Func($connection);
$queueForFunctions $queueForFunctions

View file

@ -45,6 +45,8 @@ class ScheduleMessages extends ScheduleBase
$connection = $queue->getResource(); $connection = $queue->getResource();
$queueForMessaging = new Messaging($connection); $queueForMessaging = new Messaging($connection);
$this->updateProjectAccess($schedule['project'], $dbForPlatform);
$queueForMessaging $queueForMessaging
->setType(MESSAGE_SEND_TYPE_EXTERNAL) ->setType(MESSAGE_SEND_TYPE_EXTERNAL)
->setMessageId($schedule['resourceId']) ->setMessageId($schedule['resourceId'])