Files
project.linkedcorp.net/backend/database/migrations/023_devices.sql
T
Milton Gonzalez e25c2c3b35 feat: version 2.15.0 -- menu Equipos (inventario de TI con agente GLPI)
Ingesta POST /api/inventory (JSON/XML, token de instalacion), upsert por deviceid,
historial de cambios, pestañas Resumen/Equipos/Software/Agentes, detalle con buscador
por pestaña y casilla para ocultar actualizaciones/drivers/componentes del software.
Migraciones 023 y 024. Diseño en docs/ARQUITECTURA-INVENTARIO.md.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 19:05:00 -05:00

156 lines
6.2 KiB
SQL

-- Modulo Equipos (inventario alimentado por el agente GLPI). Idempotente: CREATE TABLE IF NOT EXISTS.
-- Un equipo = una fila en `devices`, upsert por `deviceid` (identificador estable que genera el
-- agente; el hostname cambia). Los componentes se reemplazan completos en cada reporte.
SET NAMES utf8mb4;
-- Tokens que autentican al agente en la ingesta. Se guarda el HASH (sha256), nunca el token.
CREATE TABLE IF NOT EXISTS inventory_tokens (
id INT AUTO_INCREMENT PRIMARY KEY,
label VARCHAR(120) NOT NULL,
token_hash CHAR(64) NOT NULL UNIQUE,
is_active TINYINT(1) NOT NULL DEFAULT 1,
last_used_at DATETIME NULL,
created_by INT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_inventory_tokens_user FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS devices (
id INT AUTO_INCREMENT PRIMARY KEY,
deviceid VARCHAR(255) NOT NULL UNIQUE,
hostname VARCHAR(190) NULL,
kind ENUM('desktop','laptop','server','virtual','printer','network','other') NOT NULL DEFAULT 'other',
manufacturer VARCHAR(160) NULL,
model VARCHAR(190) NULL,
serial VARCHAR(160) NULL,
os_name VARCHAR(190) NULL,
os_version VARCHAR(120) NULL,
os_arch VARCHAR(40) NULL,
domain VARCHAR(190) NULL,
last_user VARCHAR(190) NULL,
ip_main VARCHAR(64) NULL,
mac_main VARCHAR(40) NULL,
cpu_summary VARCHAR(255) NULL,
ram_mb INT NULL,
disk_total_mb BIGINT NULL,
disk_free_mb BIGINT NULL,
max_disk_used_pct TINYINT UNSIGNED NULL,
agent_version VARCHAR(80) NULL,
tag VARCHAR(120) NULL,
itemtype VARCHAR(60) NULL,
first_seen DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
last_seen DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
-- Baja logica (conserva historial); un nuevo reporte NO reactiva un equipo dado de baja.
status ENUM('active','retired') NOT NULL DEFAULT 'active',
assigned_user_id INT NULL,
department_id INT NULL,
notes TEXT NULL,
raw_file VARCHAR(255) NULL,
extra_json LONGTEXT NULL,
KEY idx_devices_hostname (hostname),
KEY idx_devices_last_seen (last_seen),
CONSTRAINT fk_devices_user FOREIGN KEY (assigned_user_id) REFERENCES users(id) ON DELETE SET NULL,
CONSTRAINT fk_devices_department FOREIGN KEY (department_id) REFERENCES departments(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS device_cpus (
id INT AUTO_INCREMENT PRIMARY KEY,
device_id INT NOT NULL,
name VARCHAR(255) NULL,
manufacturer VARCHAR(120) NULL,
cores INT NULL,
threads INT NULL,
speed_mhz INT NULL,
KEY idx_device_cpus_device (device_id),
CONSTRAINT fk_device_cpus_device FOREIGN KEY (device_id) REFERENCES devices(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS device_memories (
id INT AUTO_INCREMENT PRIMARY KEY,
device_id INT NOT NULL,
slot VARCHAR(80) NULL,
capacity_mb INT NULL,
type VARCHAR(60) NULL,
speed VARCHAR(40) NULL,
manufacturer VARCHAR(120) NULL,
serial VARCHAR(120) NULL,
KEY idx_device_memories_device (device_id),
CONSTRAINT fk_device_memories_device FOREIGN KEY (device_id) REFERENCES devices(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS device_disks (
id INT AUTO_INCREMENT PRIMARY KEY,
device_id INT NOT NULL,
name VARCHAR(190) NULL,
model VARCHAR(190) NULL,
manufacturer VARCHAR(120) NULL,
type VARCHAR(60) NULL,
interface VARCHAR(60) NULL,
size_mb BIGINT NULL,
serial VARCHAR(160) NULL,
KEY idx_device_disks_device (device_id),
CONSTRAINT fk_device_disks_device FOREIGN KEY (device_id) REFERENCES devices(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS device_volumes (
id INT AUTO_INCREMENT PRIMARY KEY,
device_id INT NOT NULL,
mount VARCHAR(190) NULL,
label VARCHAR(190) NULL,
filesystem VARCHAR(60) NULL,
type VARCHAR(60) NULL,
total_mb BIGINT NULL,
free_mb BIGINT NULL,
KEY idx_device_volumes_device (device_id),
CONSTRAINT fk_device_volumes_device FOREIGN KEY (device_id) REFERENCES devices(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS device_networks (
id INT AUTO_INCREMENT PRIMARY KEY,
device_id INT NOT NULL,
description VARCHAR(255) NULL,
mac VARCHAR(40) NULL,
ip VARCHAR(64) NULL,
mask VARCHAR(64) NULL,
gateway VARCHAR(64) NULL,
type VARCHAR(60) NULL,
status VARCHAR(40) NULL,
KEY idx_device_networks_device (device_id),
CONSTRAINT fk_device_networks_device FOREIGN KEY (device_id) REFERENCES devices(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS device_monitors (
id INT AUTO_INCREMENT PRIMARY KEY,
device_id INT NOT NULL,
manufacturer VARCHAR(120) NULL,
model VARCHAR(190) NULL,
serial VARCHAR(120) NULL,
KEY idx_device_monitors_device (device_id),
CONSTRAINT fk_device_monitors_device FOREIGN KEY (device_id) REFERENCES devices(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS device_software (
id INT AUTO_INCREMENT PRIMARY KEY,
device_id INT NOT NULL,
name VARCHAR(255) NOT NULL,
version VARCHAR(120) NULL,
publisher VARCHAR(190) NULL,
install_date VARCHAR(40) NULL,
KEY idx_device_software_device (device_id),
KEY idx_device_software_name (name(120)),
CONSTRAINT fk_device_software_device FOREIGN KEY (device_id) REFERENCES devices(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Diff entre reportes consecutivos (RAM que bajo, disco nuevo, software instalado/desinstalado).
CREATE TABLE IF NOT EXISTS device_changes (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
device_id INT NOT NULL,
change_type VARCHAR(40) NOT NULL,
field VARCHAR(120) NULL,
old_value TEXT NULL,
new_value TEXT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
KEY idx_device_changes_device (device_id, created_at),
CONSTRAINT fk_device_changes_device FOREIGN KEY (device_id) REFERENCES devices(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;