This commit is contained in:
2026-03-05 23:16:49 +01:00
parent d76abde68d
commit 2ccf71915f
7 changed files with 461 additions and 19 deletions

View File

@@ -32,6 +32,17 @@ $mm->registerFunction($moduleName, 'pdo', function () use ($moduleName): \PDO {
return $base;
});
$mm->registerFunction($moduleName, 'redis', function () use ($moduleName) {
$settings = modules()->settings($moduleName);
$redis = (array)($settings['redis'] ?? []);
$host = (string)($redis['host'] ?? 'redis');
$port = (int)($redis['port'] ?? 6379);
$password = (string)($redis['password'] ?? '');
$db = (int)($redis['db'] ?? 0);
return new \App\RedisClient($host, $port, $password !== '' ? $password : null, $db);
});
$mm->registerFunction($moduleName, 'ensure_schema', function () use ($moduleName): void {
$pdo = module_fn($moduleName, 'pdo');
$table = fn(string $name) => module_fn($moduleName, 'table', $name);
@@ -60,6 +71,7 @@ $mm->registerFunction($moduleName, 'ensure_schema', function () use ($moduleName
label VARCHAR(160) NOT NULL,
command TEXT NOT NULL,
admin_only BOOLEAN NOT NULL DEFAULT false,
timeout_sec INTEGER NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
)");
$pdo->exec("CREATE TABLE IF NOT EXISTS {$runTable} (
@@ -69,7 +81,12 @@ $mm->registerFunction($moduleName, 'ensure_schema', function () use ($moduleName
command_text TEXT NOT NULL,
status VARCHAR(20) NOT NULL DEFAULT 'pending',
output TEXT NULL,
error TEXT NULL,
exit_code INTEGER NULL,
timeout_sec INTEGER NULL,
created_by VARCHAR(120) NULL,
started_at TIMESTAMP NULL,
finished_at TIMESTAMP NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
)");
$pdo->exec("CREATE TABLE IF NOT EXISTS {$sessionTable} (
@@ -99,6 +116,7 @@ $mm->registerFunction($moduleName, 'ensure_schema', function () use ($moduleName
label VARCHAR(160) NOT NULL,
command TEXT NOT NULL,
admin_only INTEGER NOT NULL DEFAULT 0,
timeout_sec INTEGER NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
)");
$pdo->exec("CREATE TABLE IF NOT EXISTS {$runTable} (
@@ -108,7 +126,12 @@ $mm->registerFunction($moduleName, 'ensure_schema', function () use ($moduleName
command_text TEXT NOT NULL,
status VARCHAR(20) NOT NULL DEFAULT 'pending',
output TEXT NULL,
error TEXT NULL,
exit_code INTEGER NULL,
timeout_sec INTEGER NULL,
created_by VARCHAR(120) NULL,
started_at DATETIME NULL,
finished_at DATETIME NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
)");
$pdo->exec("CREATE TABLE IF NOT EXISTS {$sessionTable} (
@@ -123,6 +146,46 @@ $mm->registerFunction($moduleName, 'ensure_schema', function () use ($moduleName
)");
}
// Schema migrations for existing tables
if ($driver === 'pgsql') {
$pdo->exec("ALTER TABLE {$cmdTable} ADD COLUMN IF NOT EXISTS timeout_sec INTEGER NULL");
$pdo->exec("ALTER TABLE {$runTable} ADD COLUMN IF NOT EXISTS error TEXT NULL");
$pdo->exec("ALTER TABLE {$runTable} ADD COLUMN IF NOT EXISTS exit_code INTEGER NULL");
$pdo->exec("ALTER TABLE {$runTable} ADD COLUMN IF NOT EXISTS timeout_sec INTEGER NULL");
$pdo->exec("ALTER TABLE {$runTable} ADD COLUMN IF NOT EXISTS started_at TIMESTAMP NULL");
$pdo->exec("ALTER TABLE {$runTable} ADD COLUMN IF NOT EXISTS finished_at TIMESTAMP NULL");
} else {
$columns = [];
$stmt = $pdo->query('PRAGMA table_info(' . $cmdTable . ')');
foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $col) {
$columns[$col['name']] = true;
}
if (empty($columns['timeout_sec'])) {
$pdo->exec("ALTER TABLE {$cmdTable} ADD COLUMN timeout_sec INTEGER NULL");
}
$columns = [];
$stmt = $pdo->query('PRAGMA table_info(' . $runTable . ')');
foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $col) {
$columns[$col['name']] = true;
}
if (empty($columns['error'])) {
$pdo->exec("ALTER TABLE {$runTable} ADD COLUMN error TEXT NULL");
}
if (empty($columns['exit_code'])) {
$pdo->exec("ALTER TABLE {$runTable} ADD COLUMN exit_code INTEGER NULL");
}
if (empty($columns['timeout_sec'])) {
$pdo->exec("ALTER TABLE {$runTable} ADD COLUMN timeout_sec INTEGER NULL");
}
if (empty($columns['started_at'])) {
$pdo->exec("ALTER TABLE {$runTable} ADD COLUMN started_at DATETIME NULL");
}
if (empty($columns['finished_at'])) {
$pdo->exec("ALTER TABLE {$runTable} ADD COLUMN finished_at DATETIME NULL");
}
}
// Seed default commands (only when empty)
$count = (int)$pdo->query('SELECT COUNT(*) FROM ' . $cmdTable)->fetchColumn();
if ($count === 0) {