wulf-pulse/migrations/023_create_veeam_tables.sql

202 lines
9 KiB
MySQL
Raw Permalink Normal View History

-- ============================================================================
-- Veeam Service Provider Console (VSPC) Integration Tables
-- Creates tables for synced Veeam backup data and compliance results
-- ============================================================================
-- Veeam Organizations (VSPC tenants/companies)
CREATE TABLE IF NOT EXISTS veeam_organizations (
instance_uid VARCHAR(255) PRIMARY KEY,
name VARCHAR(255) NOT NULL,
type VARCHAR(50),
company_id INTEGER,
tax_id VARCHAR(100),
email VARCHAR(255),
phone VARCHAR(50),
country VARCHAR(255),
state VARCHAR(255),
city VARCHAR(255),
street VARCHAR(500),
zip_code VARCHAR(50),
website VARCHAR(255),
notes TEXT,
synced_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
-- Veeam Backup Servers
CREATE TABLE IF NOT EXISTS veeam_backup_servers (
instance_uid VARCHAR(255) PRIMARY KEY,
name VARCHAR(255) NOT NULL,
organization_uid VARCHAR(255) REFERENCES veeam_organizations(instance_uid) ON DELETE SET NULL,
version VARCHAR(100),
display_version VARCHAR(100),
status VARCHAR(50),
backup_server_role_type VARCHAR(50),
installation_uid VARCHAR(255),
location_uid VARCHAR(255),
management_agent_uid VARCHAR(255),
synced_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
-- Veeam Backup Server Jobs (VM-level backup jobs)
CREATE TABLE IF NOT EXISTS veeam_backup_jobs (
instance_uid VARCHAR(255) PRIMARY KEY,
unique_uid VARCHAR(255),
name VARCHAR(500) NOT NULL,
description TEXT,
backup_server_uid VARCHAR(255) REFERENCES veeam_backup_servers(instance_uid) ON DELETE SET NULL,
organization_uid VARCHAR(255) REFERENCES veeam_organizations(instance_uid) ON DELETE SET NULL,
status VARCHAR(50),
type VARCHAR(100),
last_run TIMESTAMP WITH TIME ZONE,
last_end_time TIMESTAMP WITH TIME ZONE,
last_duration INTEGER,
processing_rate DOUBLE PRECISION,
avg_duration INTEGER,
transferred_data BIGINT,
backup_chain_size BIGINT,
bottleneck VARCHAR(100),
is_enabled BOOLEAN DEFAULT true,
schedule_type VARCHAR(100),
failure_message TEXT,
target_type VARCHAR(100),
destination VARCHAR(500),
retention_limit INTEGER,
retention_limit_type VARCHAR(50),
is_gfs_option_enabled BOOLEAN DEFAULT false,
synced_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
-- Veeam Backup Agent Jobs (workstation/physical server backup jobs)
CREATE TABLE IF NOT EXISTS veeam_backup_agent_jobs (
instance_uid VARCHAR(255) PRIMARY KEY,
original_uid VARCHAR(255),
backup_agent_uid VARCHAR(255),
organization_uid VARCHAR(255) REFERENCES veeam_organizations(instance_uid) ON DELETE SET NULL,
name VARCHAR(500) NOT NULL,
description TEXT,
config_uid VARCHAR(255),
system_type VARCHAR(50),
backup_policy_uid VARCHAR(255),
backup_policy_name VARCHAR(500),
backup_policy_assign_status VARCHAR(50),
backup_policy_failure_message TEXT,
status VARCHAR(50),
operation_mode VARCHAR(50),
destination VARCHAR(500),
restore_points INTEGER,
last_run TIMESTAMP WITH TIME ZONE,
last_end_time TIMESTAMP WITH TIME ZONE,
last_duration INTEGER,
next_run TIMESTAMP WITH TIME ZONE,
avg_duration INTEGER,
backup_mode VARCHAR(50),
target_type VARCHAR(100),
is_enabled BOOLEAN DEFAULT true,
schedule_type VARCHAR(100),
failure_message TEXT,
backed_up_size BIGINT,
free_space BIGINT,
synced_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
-- Veeam Protected Workloads (VMs)
CREATE TABLE IF NOT EXISTS veeam_protected_workloads (
instance_uid VARCHAR(255) PRIMARY KEY,
name VARCHAR(500) NOT NULL,
backup_server_uid VARCHAR(255) REFERENCES veeam_backup_servers(instance_uid) ON DELETE SET NULL,
organization_uid VARCHAR(255) REFERENCES veeam_organizations(instance_uid) ON DELETE SET NULL,
job_uid VARCHAR(255),
ip_addresses TEXT,
provisioned_source_size BIGINT,
used_source_size BIGINT,
total_restore_point_size BIGINT,
latest_restore_point_size BIGINT,
restore_points INTEGER,
latest_restore_point_date TIMESTAMP WITH TIME ZONE,
malware_state VARCHAR(50),
immutable BOOLEAN DEFAULT false,
synced_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
-- Veeam Repositories
CREATE TABLE IF NOT EXISTS veeam_repositories (
instance_uid VARCHAR(255) PRIMARY KEY,
name VARCHAR(500) NOT NULL,
backup_server_uid VARCHAR(255) REFERENCES veeam_backup_servers(instance_uid) ON DELETE SET NULL,
capacity_bytes BIGINT,
free_space_bytes BIGINT,
used_space_bytes BIGINT,
repository_type VARCHAR(100),
synced_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
-- Veeam Compliance Results (computed after each sync)
CREATE TABLE IF NOT EXISTS veeam_compliance_results (
id SERIAL PRIMARY KEY,
company_id INTEGER,
configuration_item_id INTEGER,
veeam_workload_uid VARCHAR(255),
mismatch_type VARCHAR(50) NOT NULL,
backup_type_udf VARCHAR(255),
device_name VARCHAR(500) NOT NULL,
contract_name VARCHAR(500),
veeam_workload_name VARCHAR(500),
computed_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
-- ============================================================================
-- INDEXES
-- ============================================================================
-- veeam_organizations indexes
CREATE INDEX IF NOT EXISTS idx_veeam_organizations_company_id ON veeam_organizations(company_id);
CREATE INDEX IF NOT EXISTS idx_veeam_organizations_type ON veeam_organizations(type);
CREATE INDEX IF NOT EXISTS idx_veeam_organizations_synced_at ON veeam_organizations(synced_at);
-- veeam_backup_servers indexes
CREATE INDEX IF NOT EXISTS idx_veeam_backup_servers_organization_uid ON veeam_backup_servers(organization_uid);
CREATE INDEX IF NOT EXISTS idx_veeam_backup_servers_status ON veeam_backup_servers(status);
CREATE INDEX IF NOT EXISTS idx_veeam_backup_servers_synced_at ON veeam_backup_servers(synced_at);
-- veeam_backup_jobs indexes
CREATE INDEX IF NOT EXISTS idx_veeam_backup_jobs_organization_uid ON veeam_backup_jobs(organization_uid);
CREATE INDEX IF NOT EXISTS idx_veeam_backup_jobs_backup_server_uid ON veeam_backup_jobs(backup_server_uid);
CREATE INDEX IF NOT EXISTS idx_veeam_backup_jobs_status ON veeam_backup_jobs(status);
CREATE INDEX IF NOT EXISTS idx_veeam_backup_jobs_last_run ON veeam_backup_jobs(last_run);
CREATE INDEX IF NOT EXISTS idx_veeam_backup_jobs_synced_at ON veeam_backup_jobs(synced_at);
-- veeam_backup_agent_jobs indexes
CREATE INDEX IF NOT EXISTS idx_veeam_backup_agent_jobs_organization_uid ON veeam_backup_agent_jobs(organization_uid);
CREATE INDEX IF NOT EXISTS idx_veeam_backup_agent_jobs_status ON veeam_backup_agent_jobs(status);
CREATE INDEX IF NOT EXISTS idx_veeam_backup_agent_jobs_last_run ON veeam_backup_agent_jobs(last_run);
CREATE INDEX IF NOT EXISTS idx_veeam_backup_agent_jobs_synced_at ON veeam_backup_agent_jobs(synced_at);
CREATE INDEX IF NOT EXISTS idx_veeam_backup_agent_jobs_backup_policy_name ON veeam_backup_agent_jobs(backup_policy_name);
-- veeam_protected_workloads indexes
CREATE INDEX IF NOT EXISTS idx_veeam_protected_workloads_organization_uid ON veeam_protected_workloads(organization_uid);
CREATE INDEX IF NOT EXISTS idx_veeam_protected_workloads_backup_server_uid ON veeam_protected_workloads(backup_server_uid);
CREATE INDEX IF NOT EXISTS idx_veeam_protected_workloads_job_uid ON veeam_protected_workloads(job_uid);
CREATE INDEX IF NOT EXISTS idx_veeam_protected_workloads_latest_restore_point ON veeam_protected_workloads(latest_restore_point_date);
CREATE INDEX IF NOT EXISTS idx_veeam_protected_workloads_synced_at ON veeam_protected_workloads(synced_at);
-- veeam_repositories indexes
CREATE INDEX IF NOT EXISTS idx_veeam_repositories_backup_server_uid ON veeam_repositories(backup_server_uid);
CREATE INDEX IF NOT EXISTS idx_veeam_repositories_synced_at ON veeam_repositories(synced_at);
-- veeam_compliance_results indexes
CREATE INDEX IF NOT EXISTS idx_veeam_compliance_results_company_id ON veeam_compliance_results(company_id);
CREATE INDEX IF NOT EXISTS idx_veeam_compliance_results_mismatch_type ON veeam_compliance_results(mismatch_type);
CREATE INDEX IF NOT EXISTS idx_veeam_compliance_results_computed_at ON veeam_compliance_results(computed_at);