From 7d331fb39ae19e90f62dc1102c45bfc98d2d2c6c Mon Sep 17 00:00:00 2001 From: Lars Gebhardt-Kusche Date: Fri, 6 Mar 2026 00:10:28 +0100 Subject: [PATCH] sdasd --- tools/pi_control/worker.php | 42 ++++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/tools/pi_control/worker.php b/tools/pi_control/worker.php index 513e56c..f224f79 100644 --- a/tools/pi_control/worker.php +++ b/tools/pi_control/worker.php @@ -11,12 +11,13 @@ $module = 'pi_control'; $pdo = module_fn($module, 'pdo'); module_fn($module, 'ensure_schema'); $table = fn(string $name) => module_fn($module, 'table', $name); -$redis = module_fn($module, 'redis'); +$settingsReloadSec = (int)(getenv('PI_CONTROL_SETTINGS_RELOAD_SEC') !== false ? (int)getenv('PI_CONTROL_SETTINGS_RELOAD_SEC') : 30); +$settingsReloadSec = $settingsReloadSec > 0 ? $settingsReloadSec : 30; -$settings = modules()->settings($module); -$queueName = (string)($settings['redis']['queue'] ?? (getenv('PI_CONTROL_REDIS_QUEUE') ?: 'pi_control:queue')); -$defaultTimeout = (int)($settings['exec_default_timeout'] ?? (getenv('PI_CONTROL_EXEC_DEFAULT_TIMEOUT') !== false ? (int)getenv('PI_CONTROL_EXEC_DEFAULT_TIMEOUT') : 300)); -$defaultTimeout = $defaultTimeout > 0 ? $defaultTimeout : 300; +$redis = null; +$queueName = 'pi_control:queue'; +$defaultTimeout = 300; +$lastSettingsAt = 0; $strictHostKey = getenv('PI_CONTROL_STRICT_HOSTKEY') === '1'; @@ -24,7 +25,22 @@ $driver = (string)$pdo->getAttribute(PDO::ATTR_DRIVER_NAME); $nowExpr = $driver === 'pgsql' ? 'NOW()' : "DATETIME('now')"; while (true) { - $job = $redis->command(['BLPOP', $queueName, 5]); + if (time() - $lastSettingsAt >= $settingsReloadSec) { + $settings = modules()->settings($module); + $queueName = (string)($settings['redis']['queue'] ?? (getenv('PI_CONTROL_REDIS_QUEUE') ?: 'pi_control:queue')); + $defaultTimeout = (int)($settings['exec_default_timeout'] ?? (getenv('PI_CONTROL_EXEC_DEFAULT_TIMEOUT') !== false ? (int)getenv('PI_CONTROL_EXEC_DEFAULT_TIMEOUT') : 300)); + $defaultTimeout = $defaultTimeout > 0 ? $defaultTimeout : 300; + $redis = module_fn($module, 'redis'); + $lastSettingsAt = time(); + } + + try { + $job = $redis->command(['BLPOP', $queueName, 5]); + } catch (\Throwable $e) { + fwrite(STDERR, '[worker] Redis error: ' . $e->getMessage() . PHP_EOL); + sleep(5); + continue; + } if (!$job || !is_array($job) || count($job) < 2) { continue; } @@ -36,10 +52,16 @@ while (true) { } $runId = (int)$data['run_id']; - $runStmt = $pdo->prepare('SELECT * FROM ' . $table('runs') . ' WHERE id = :id LIMIT 1'); - $runStmt->execute(['id' => $runId]); - $run = $runStmt->fetch(PDO::FETCH_ASSOC); - if (!$run || ($run['status'] ?? '') !== 'queued') { + try { + $runStmt = $pdo->prepare('SELECT * FROM ' . $table('runs') . ' WHERE id = :id LIMIT 1'); + $runStmt->execute(['id' => $runId]); + $run = $runStmt->fetch(PDO::FETCH_ASSOC); + if (!$run || ($run['status'] ?? '') !== 'queued') { + continue; + } + } catch (\Throwable $e) { + fwrite(STDERR, '[worker] DB error: ' . $e->getMessage() . PHP_EOL); + sleep(2); continue; }