import { db } from '../db/index.js'; /** Maintenance must leave pending lifecycle work and retained recovery to Provisioning. */ export function hasActiveProvisioning(server: string, exceptOperationId = ''): boolean { return ( !!db() .prepare( `SELECT 1 FROM server_deployments WHERE server = ? AND server_deleted_at IS NULL AND id != ? AND state IN ('queued', 'waiting', 'running', 'awaiting-health') LIMIT 1` ) .get(server, exceptOperationId) || !!db() .prepare( `SELECT 1 FROM restart_rollout WHERE server = ? AND healthy_at IS NULL AND (operation_id IS NULL OR operation_id != ?)` ) .get(server, exceptOperationId) ); } /** Only the latest lifecycle operation can describe the current server. */ export function isProvisioning(server: string): boolean { const operation = db() .prepare( `SELECT action, state FROM server_deployments WHERE server = ? AND server_deleted_at IS NULL ORDER BY rowid DESC LIMIT 1` ) .get(server) as { action: string; state: string } | undefined; return ( !!operation && ['create', 'rebuild', 'start'].includes(operation.action) && ['queued', 'running', 'awaiting-health'].includes(operation.state) ); }