feat: integracion de interfaz de binarios para actualizacion automatica
This commit is contained in:
@@ -140,6 +140,14 @@ CREATE TABLE IF NOT EXISTS a24c.restore_job_logs (
|
||||
restored_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
-- Descartar sin borrar: las vistas de restaurados/fallidos filtran por dismissed_at IS NULL,
|
||||
-- pero listRestoreJobLogSummaries sigue contando TODO. Un DELETE real bajaría los contadores de
|
||||
-- /servidores-restauracion y podría retroceder la última restauración exitosa de un servidor.
|
||||
ALTER TABLE a24c.restore_job_logs ADD COLUMN IF NOT EXISTS dismissed_at TIMESTAMPTZ;
|
||||
ALTER TABLE a24c.restore_job_logs ADD COLUMN IF NOT EXISTS dismissed_by VARCHAR(128);
|
||||
CREATE INDEX IF NOT EXISTS idx_a24c_restore_job_logs_pendientes
|
||||
ON a24c.restore_job_logs (status, restored_at DESC) WHERE dismissed_at IS NULL;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_a24c_restore_job_logs_target
|
||||
ON a24c.restore_job_logs (restore_target_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_a24c_restore_job_logs_restored_at
|
||||
@@ -164,5 +172,76 @@ CREATE TABLE IF NOT EXISTS a24c.cloudrestore_status (
|
||||
reported_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
-- Identidad del build instalado, reportada por el agente en instance-config. Es la fuente
|
||||
-- autoritativa para decidir qué artefacto de CRAS le toca a cada servidor; un agente anterior
|
||||
-- a 1.1.0 no las manda y quedan NULL (el panel cae a restore_targets.os).
|
||||
ALTER TABLE a24c.cloudrestore_status ADD COLUMN IF NOT EXISTS processed_folder VARCHAR(500);
|
||||
ALTER TABLE a24c.cloudrestore_status ADD COLUMN IF NOT EXISTS platform VARCHAR(20);
|
||||
ALTER TABLE a24c.cloudrestore_status ADD COLUMN IF NOT EXISTS arch VARCHAR(20);
|
||||
-- Carpeta del ejecutable (APP_DIR). Distinta de input_folder: ahí vive config/.env.
|
||||
ALTER TABLE a24c.cloudrestore_status ADD COLUMN IF NOT EXISTS install_path VARCHAR(500);
|
||||
|
||||
COMMENT ON TABLE a24c.cloudrestore_status IS
|
||||
'Carpeta de entrada vigente reportada por CloudRestoreAS. Solo lectura en el panel.';
|
||||
|
||||
-- ============================================================================
|
||||
-- Distribución de versiones de CloudRestoreAS (migración a24c e2f3a4b5c6d7).
|
||||
--
|
||||
-- Los binarios NO viven aquí: se publican en el registro de paquetes genéricos de Gitea
|
||||
-- (ADUANASOFT/generic/cloudrestoreas/<version>) y el panel los cachea en disco. Un artefacto
|
||||
-- pesa ~270 MB, así que guardarlo como BLOB en la base no es viable.
|
||||
-- ============================================================================
|
||||
|
||||
-- Catálogo de versiones publicadas (metadatos + el sha256 que calcula Gitea).
|
||||
CREATE TABLE IF NOT EXISTS a24c.cras_releases (
|
||||
id SERIAL PRIMARY KEY,
|
||||
version VARCHAR(50) NOT NULL,
|
||||
platform VARCHAR(20) NOT NULL,
|
||||
arch VARCHAR(20) NOT NULL DEFAULT 'x86_64',
|
||||
file_name VARCHAR(255) NOT NULL,
|
||||
file_size BIGINT,
|
||||
sha256 VARCHAR(64),
|
||||
gitea_package VARCHAR(120) NOT NULL DEFAULT 'cloudrestoreas',
|
||||
changelog TEXT,
|
||||
is_active BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
published_at TIMESTAMPTZ,
|
||||
discovered_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
CONSTRAINT cras_releases_platform_check CHECK (platform IN ('windows', 'linux')),
|
||||
CONSTRAINT cras_releases_version_platform_arch_key UNIQUE (version, platform, arch)
|
||||
);
|
||||
|
||||
-- Una sola versión activa POR plataforma+arquitectura, garantizado en la base: así Windows y
|
||||
-- Linux pueden tener cada una la suya, a diferencia de un is_active singleton global.
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS idx_a24c_cras_releases_active
|
||||
ON a24c.cras_releases (platform, arch) WHERE is_active;
|
||||
CREATE INDEX IF NOT EXISTS idx_a24c_cras_releases_version
|
||||
ON a24c.cras_releases (version);
|
||||
|
||||
-- Bitácora de instalaciones remotas, con progreso paso a paso para que la UI lo siga.
|
||||
CREATE TABLE IF NOT EXISTS a24c.cras_install_runs (
|
||||
id SERIAL PRIMARY KEY,
|
||||
restore_target_id INTEGER REFERENCES a24c.restore_targets (id) ON DELETE SET NULL,
|
||||
release_id INTEGER REFERENCES a24c.cras_releases (id) ON DELETE SET NULL,
|
||||
version VARCHAR(50),
|
||||
platform VARCHAR(20),
|
||||
mode VARCHAR(20) NOT NULL,
|
||||
status VARCHAR(20) NOT NULL,
|
||||
install_path VARCHAR(500),
|
||||
steps JSONB NOT NULL DEFAULT '[]'::jsonb,
|
||||
error_message TEXT,
|
||||
started_by VARCHAR(128),
|
||||
started_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
finished_at TIMESTAMPTZ,
|
||||
CONSTRAINT cras_install_runs_mode_check CHECK (mode IN ('install', 'update')),
|
||||
CONSTRAINT cras_install_runs_status_check CHECK (status IN ('running', 'completed', 'failed'))
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_a24c_cras_install_runs_target
|
||||
ON a24c.cras_install_runs (restore_target_id, started_at DESC);
|
||||
CREATE INDEX IF NOT EXISTS idx_a24c_cras_install_runs_running
|
||||
ON a24c.cras_install_runs (restore_target_id) WHERE status = 'running';
|
||||
|
||||
COMMENT ON TABLE a24c.cras_releases IS
|
||||
'Catálogo de versiones de CloudRestoreAS publicadas en Gitea. Solo metadatos; los binarios viven en Gitea.';
|
||||
COMMENT ON TABLE a24c.cras_install_runs IS
|
||||
'Bitácora de instalaciones remotas de CloudRestoreAS, con progreso paso a paso en steps.';
|
||||
|
||||
Reference in New Issue
Block a user