appwrite/src/Appwrite/Platform/Tasks/ScheduleExecutions.php

72 lines
2.1 KiB
PHP
Raw Normal View History

2024-06-17 12:44:12 +00:00
<?php
namespace Appwrite\Platform\Tasks;
use Appwrite\Event\Func;
use Utopia\Database\Database;
use Utopia\Pools\Group;
class ScheduleExecutions extends ScheduleBase
{
public const UPDATE_TIMER = 3; // seconds
public const ENQUEUE_TIMER = 4; // seconds
public static function getName(): string
{
return 'schedule-executions';
}
public static function getSupportedResource(): string
{
return 'execution';
}
protected function enqueueResources(Group $pools, Database $dbForConsole): void
{
2024-06-17 13:12:02 +00:00
$queue = $pools->get('queue')->pop();
$connection = $queue->getResource();
$queueForFunctions = new Func($connection);
2024-06-17 12:44:12 +00:00
foreach ($this->schedules as $schedule) {
2024-06-17 13:12:02 +00:00
if (!$schedule['active']) {
2024-07-01 13:35:37 +00:00
$dbForConsole->deleteDocument(
'schedules',
$schedule['$id'],
);
2024-06-17 12:44:12 +00:00
unset($this->schedules[$schedule['resourceId']]);
continue;
}
$now = new \DateTime();
$scheduledAt = new \DateTime($schedule['schedule']);
if ($scheduledAt > $now) {
continue;
}
2024-06-17 13:12:02 +00:00
$queueForFunctions
->setType('schedule')
2024-06-26 11:30:23 +00:00
// Set functionId instead of function as we don't have $dbForProject
2024-06-26 10:01:43 +00:00
// TODO: Refactor to use function instead of functionId
2024-06-17 13:12:02 +00:00
->setFunctionId($schedule['resource']['functionId'])
->setExecution($schedule['resource'])
2024-06-28 21:42:55 +00:00
->setMethod($schedule['data']['method'] ?? 'POST')
->setPath($schedule['data']['path'] ?? '/')
->setHeaders($schedule['data']['headers'] ?? [])
->setBody($schedule['data']['body'] ?? '')
2024-06-17 13:12:02 +00:00
->setProject($schedule['project'])
->trigger();
2024-06-17 12:44:12 +00:00
2024-06-17 13:12:02 +00:00
$dbForConsole->deleteDocument(
'schedules',
$schedule['$id'],
);
2024-06-17 12:44:12 +00:00
2024-06-17 13:12:02 +00:00
unset($this->schedules[$schedule['resourceId']]);
2024-06-17 12:44:12 +00:00
}
2024-06-17 13:12:02 +00:00
$queue->reclaim();
2024-06-17 12:44:12 +00:00
}
}