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>
This commit is contained in:
@@ -0,0 +1,155 @@
|
||||
-- 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;
|
||||
@@ -0,0 +1,6 @@
|
||||
-- Software de equipos: categoria que reporta el agente (application, store, system_component, update...)
|
||||
-- y bandera `is_component` (actualizaciones, runtimes, drivers, paquetes del sistema) para ocultarlos
|
||||
-- por defecto en las vistas de software. Idempotente.
|
||||
ALTER TABLE device_software
|
||||
ADD COLUMN IF NOT EXISTS category VARCHAR(40) NULL,
|
||||
ADD COLUMN IF NOT EXISTS is_component TINYINT(1) NOT NULL DEFAULT 0;
|
||||
Reference in New Issue
Block a user