-- ============================================================================ -- 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);