67 lines
2.5 KiB
PHP
67 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace classes;
|
|
|
|
class cron_schema_bootstrap
|
|
{
|
|
private static bool $initialized = false;
|
|
|
|
public static function ensureTables(): void
|
|
{
|
|
if (self::$initialized) {
|
|
return;
|
|
}
|
|
|
|
global $db;
|
|
|
|
if (!isset($db) || !is_object($db) || !method_exists($db, 'query')) {
|
|
return;
|
|
}
|
|
|
|
$db->query(
|
|
"CREATE TABLE IF NOT EXISTS cron_task_state (
|
|
task_id VARCHAR(191) NOT NULL PRIMARY KEY,
|
|
module VARCHAR(64) NOT NULL,
|
|
enabled TINYINT(1) NOT NULL DEFAULT 1,
|
|
schedule_json LONGTEXT NULL,
|
|
last_run_at DATETIME NULL,
|
|
next_run_at DATETIME NULL,
|
|
locked_until DATETIME NULL,
|
|
lock_owner VARCHAR(191) NULL,
|
|
current_run_id BIGINT UNSIGNED NULL,
|
|
last_status VARCHAR(32) NULL,
|
|
last_error TEXT NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
|
|
KEY idx_cron_task_state_next_run (enabled, next_run_at),
|
|
KEY idx_cron_task_state_lock (locked_until)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci"
|
|
);
|
|
|
|
$db->query(
|
|
"CREATE TABLE IF NOT EXISTS cron_task_runs (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
task_id VARCHAR(191) NOT NULL,
|
|
module VARCHAR(64) NOT NULL,
|
|
source VARCHAR(32) NOT NULL,
|
|
status VARCHAR(32) NOT NULL DEFAULT 'running',
|
|
actor_user_id INT NULL,
|
|
scheduled_for DATETIME NULL,
|
|
started_at DATETIME NULL,
|
|
completed_at DATETIME NULL,
|
|
duration_ms INT UNSIGNED NULL,
|
|
summary_json LONGTEXT NULL,
|
|
error_message TEXT NULL,
|
|
lock_owner VARCHAR(191) NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
|
|
KEY idx_cron_task_runs_task_created (task_id, created_at),
|
|
KEY idx_cron_task_runs_status_created (status, created_at),
|
|
KEY idx_cron_task_runs_module_created (module, created_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci"
|
|
);
|
|
|
|
self::$initialized = true;
|
|
}
|
|
}
|