65 lines
2.1 KiB
PHP
65 lines
2.1 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @package Grav\Common\Service
|
|
*
|
|
* @copyright Copyright (c) 2015 - 2025 Trilby Media, LLC. All rights reserved.
|
|
* @license MIT License; see LICENSE file for details.
|
|
*/
|
|
|
|
namespace Grav\Common\Service;
|
|
|
|
use Grav\Common\Scheduler\Scheduler;
|
|
use Grav\Common\Scheduler\JobQueue;
|
|
use Grav\Common\Scheduler\JobWorker;
|
|
use Pimple\Container;
|
|
use Pimple\ServiceProviderInterface;
|
|
|
|
/**
|
|
* Class SchedulerServiceProvider
|
|
* @package Grav\Common\Service
|
|
*/
|
|
class SchedulerServiceProvider implements ServiceProviderInterface
|
|
{
|
|
/**
|
|
* @param Container $container
|
|
* @return void
|
|
*/
|
|
public function register(Container $container)
|
|
{
|
|
$container['scheduler'] = function ($c) {
|
|
$config = $c['config'];
|
|
$scheduler = new Scheduler();
|
|
|
|
// Configure modern features if enabled
|
|
$modernConfig = $config->get('scheduler.modern', []);
|
|
if ($modernConfig['enabled'] ?? false) {
|
|
// Initialize components
|
|
$queuePath = $c['locator']->findResource('user-data://scheduler/queue', true, true);
|
|
$statusPath = $c['locator']->findResource('user-data://scheduler/status.yaml', true, true);
|
|
|
|
// Set modern configuration on scheduler
|
|
$scheduler->setModernConfig($modernConfig);
|
|
|
|
// Initialize job queue if enabled
|
|
if ($modernConfig['queue']['enabled'] ?? false) {
|
|
$jobQueue = new JobQueue($queuePath);
|
|
$scheduler->setJobQueue($jobQueue);
|
|
}
|
|
|
|
// Initialize workers if enabled
|
|
if ($modernConfig['workers']['enabled'] ?? false) {
|
|
$workerCount = $modernConfig['workers']['count'] ?? 2;
|
|
$workers = [];
|
|
for ($i = 0; $i < $workerCount; $i++) {
|
|
$workers[] = new JobWorker("worker-{$i}");
|
|
}
|
|
$scheduler->setWorkers($workers);
|
|
}
|
|
}
|
|
|
|
return $scheduler;
|
|
};
|
|
}
|
|
}
|