update project accessed at in schedules

This commit is contained in:
Damodar Lohani 2024-12-17 14:05:49 +00:00
parent 0cdb2a98be
commit 2fb9ebe71d
3 changed files with 38 additions and 3 deletions

View file

@ -5,6 +5,8 @@ namespace Appwrite\Platform\Tasks;
use Appwrite\Event\Func; use Appwrite\Event\Func;
use Swoole\Coroutine as Co; use Swoole\Coroutine as Co;
use Utopia\Database\Database; use Utopia\Database\Database;
use Utopia\Database\DateTime;
use Utopia\Database\Validator\Authorization;
use Utopia\Pools\Group; use Utopia\Pools\Group;
class ScheduleExecutions extends ScheduleBase class ScheduleExecutions extends ScheduleBase
@ -57,6 +59,16 @@ class ScheduleExecutions extends ScheduleBase
$delay = $scheduledAt->getTimestamp() - (new \DateTime())->getTimestamp(); $delay = $scheduledAt->getTimestamp() - (new \DateTime())->getTimestamp();
$project = $schedule['project'];
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));
}
}
\go(function () use ($queueForFunctions, $schedule, $delay, $data) { \go(function () use ($queueForFunctions, $schedule, $delay, $data) {
Co::sleep($delay); Co::sleep($delay);

View file

@ -7,6 +7,7 @@ use Cron\CronExpression;
use Utopia\CLI\Console; use Utopia\CLI\Console;
use Utopia\Database\Database; use Utopia\Database\Database;
use Utopia\Database\DateTime; use Utopia\Database\DateTime;
use Utopia\Database\Validator\Authorization;
use Utopia\Pools\Group; use Utopia\Pools\Group;
class ScheduleFunctions extends ScheduleBase class ScheduleFunctions extends ScheduleBase
@ -70,7 +71,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 +85,16 @@ class ScheduleFunctions extends ScheduleBase
$schedule = $this->schedules[$scheduleKey]; $schedule = $this->schedules[$scheduleKey];
$project = $schedule['project'];
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));
}
}
$queueForFunctions = new Func($connection); $queueForFunctions = new Func($connection);
$queueForFunctions $queueForFunctions
@ -91,7 +102,7 @@ class ScheduleFunctions extends ScheduleBase
->setFunction($schedule['resource']) ->setFunction($schedule['resource'])
->setMethod('POST') ->setMethod('POST')
->setPath('/') ->setPath('/')
->setProject($schedule['project']) ->setProject($project)
->trigger(); ->trigger();
} }

View file

@ -4,6 +4,8 @@ namespace Appwrite\Platform\Tasks;
use Appwrite\Event\Messaging; use Appwrite\Event\Messaging;
use Utopia\Database\Database; use Utopia\Database\Database;
use Utopia\Database\DateTime;
use Utopia\Database\Validator\Authorization;
use Utopia\Pools\Group; use Utopia\Pools\Group;
class ScheduleMessages extends ScheduleBase class ScheduleMessages extends ScheduleBase
@ -45,10 +47,20 @@ class ScheduleMessages extends ScheduleBase
$connection = $queue->getResource(); $connection = $queue->getResource();
$queueForMessaging = new Messaging($connection); $queueForMessaging = new Messaging($connection);
$project = $schedule['project'];
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));
}
}
$queueForMessaging $queueForMessaging
->setType(MESSAGE_SEND_TYPE_EXTERNAL) ->setType(MESSAGE_SEND_TYPE_EXTERNAL)
->setMessageId($schedule['resourceId']) ->setMessageId($schedule['resourceId'])
->setProject($schedule['project']) ->setProject($project)
->trigger(); ->trigger();
$dbForPlatform->deleteDocument( $dbForPlatform->deleteDocument(