Files
breadcrumb-the-shire/bin/scheduler-run.php
2026-03-04 15:56:58 +01:00

69 lines
2.1 KiB
PHP
Executable File

#!/usr/bin/env php
<?php
declare(strict_types=1);
chdir(__DIR__ . '/..');
require 'vendor/autoload.php';
require 'config/config.php';
require 'lib/Support/helpers.php';
$container = require 'lib/App/registerContainer.php';
setAppContainer($container);
use MintyPHP\DB;
use MintyPHP\Http\RequestContext;
use MintyPHP\Service\Audit\SystemAuditService;
use MintyPHP\Service\Scheduler\SchedulerServicesFactory;
$exitCode = 0;
$startedAt = microtime(true);
try {
RequestContext::start([
'channel' => 'scheduler',
'method' => 'CLI',
'path' => 'bin/scheduler-run.php',
]);
$factory = app(SchedulerServicesFactory::class);
$result = $factory->createSchedulerRunService()->runDueJobs();
if (!($result['ok'] ?? false)) {
$error = (string) ($result['error'] ?? 'unexpected_error');
fwrite(STDERR, sprintf("scheduler run failed: %s\n", $error));
$exitCode = 1;
} else {
$line = sprintf(
"scheduler completed: processed=%d success=%d failed=%d skipped=%d duration_ms=%d\n",
(int) ($result['processed'] ?? 0),
(int) ($result['success'] ?? 0),
(int) ($result['failed'] ?? 0),
(int) ($result['skipped'] ?? 0),
(int) ($result['duration_ms'] ?? 0)
);
fwrite(STDOUT, $line);
}
} catch (Throwable $exception) {
try {
app(SystemAuditService::class)->record('scheduler.run', 'failed', [
'error_code' => 'unexpected_error',
'metadata' => [
'trigger_type' => 'scheduler',
'run_status' => 'failed',
'processed' => 0,
'success_count' => 0,
'failed_count' => 0,
'skipped_count' => 0,
'duration_ms' => max(0, (int) round((microtime(true) - $startedAt) * 1000)),
'bootstrap_error' => true,
],
]);
} catch (Throwable) {
// fail-open
}
fwrite(STDERR, sprintf("scheduler run failed: unexpected_error: %s\n", $exception->getMessage()));
$exitCode = 1;
} finally {
DB::close();
}
exit($exitCode);