wulf-pulse/migrations/050_create_zabbix_wan_tables.sql

61 lines
4.1 KiB
MySQL
Raw Permalink Normal View History

-- Migration 050: Zabbix WAN host cache + IT Glue WAN circuit cache
-- Enables local gap analysis and event correlation without live API calls every time.
-- ────────────────────────────────────────────────────────────────
-- Zabbix WAN host cache
-- Populated by /api/zabbix/sync-hosts (syncs from live Zabbix API)
-- ────────────────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS zabbix_wan_hosts (
hostid VARCHAR(50) PRIMARY KEY,
host_name VARCHAR(255), -- technical/sanitized name (host field)
display_name VARCHAR(255), -- human-readable display name
wan_ip VARCHAR(45), -- ICMP interface IP
status INTEGER DEFAULT 0, -- 0=enabled, 1=disabled
rmm_site_uid VARCHAR(100), -- from {$RMM_SITE_UID} macro
autotask_company_id INTEGER, -- from {$AUTOTASK_COMPANY_ID} macro
autotask_company_name VARCHAR(255), -- from {$AUTOTASK_COMPANY_NAME} macro
isp_name VARCHAR(255), -- from {$ISP_NAME} macro
asn VARCHAR(50), -- from {$ASN} macro
is_multi_wan BOOLEAN DEFAULT FALSE,
source VARCHAR(50), -- 'datto-rmm', 'manual', etc.
tags JSONB,
last_problem_at TIMESTAMPTZ, -- most recent Zabbix problem clock
last_problem_name TEXT, -- most recent Zabbix problem name
last_synced_at TIMESTAMPTZ DEFAULT NOW(),
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_zabbix_wan_hosts_company ON zabbix_wan_hosts (autotask_company_id);
CREATE INDEX IF NOT EXISTS idx_zabbix_wan_hosts_rmm_site ON zabbix_wan_hosts (rmm_site_uid);
CREATE INDEX IF NOT EXISTS idx_zabbix_wan_hosts_ip ON zabbix_wan_hosts (wan_ip);
-- ────────────────────────────────────────────────────────────────
-- IT Glue WAN circuit cache
-- Populated by /api/itglue/sync-wan (parses flexible_asset_type_id=3794)
-- ────────────────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS itg_wan_circuits (
id BIGINT PRIMARY KEY, -- IT Glue flexible asset ID
organization_id BIGINT, -- IT Glue org ID
org_name VARCHAR(255),
autotask_company_id BIGINT, -- via itg_organizations.psa_id::bigint
provider VARCHAR(255),
link_type VARCHAR(100),
static_ips TEXT[], -- parsed public IPs from traits
raw_ip_text TEXT, -- original IT Glue text (for reference)
upload_mbps NUMERIC,
download_mbps NUMERIC,
location_name VARCHAR(255),
location_city VARCHAR(255),
notes TEXT,
is_decommissioned BOOLEAN DEFAULT FALSE,
zabbix_hostid VARCHAR(50), -- matched Zabbix host (NULL = gap)
last_synced_at TIMESTAMPTZ DEFAULT NOW(),
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_itg_wan_circuits_org ON itg_wan_circuits (organization_id);
CREATE INDEX IF NOT EXISTS idx_itg_wan_circuits_company ON itg_wan_circuits (autotask_company_id);
CREATE INDEX IF NOT EXISTS idx_itg_wan_circuits_zabbix ON itg_wan_circuits (zabbix_hostid);