Files
dd0c/products/05-aws-cost-anomaly/migrations/005_zombies.sql

28 lines
1.2 KiB
MySQL
Raw Normal View History

-- Zombie resource detection + composite scoring
-- Zombie resources table
CREATE TABLE zombie_resources (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
tenant_id UUID NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
resource_id TEXT NOT NULL,
resource_type TEXT NOT NULL CHECK (resource_type IN ('ec2', 'rds', 'ebs', 'eip', 'nat_gateway')),
region TEXT NOT NULL,
account_id TEXT NOT NULL,
estimated_monthly_waste NUMERIC(10,2) NOT NULL DEFAULT 0,
last_activity TIMESTAMPTZ,
recommendation TEXT NOT NULL,
status TEXT NOT NULL DEFAULT 'open' CHECK (status IN ('open', 'dismissed', 'remediated')),
detected_at TIMESTAMPTZ NOT NULL DEFAULT now(),
UNIQUE(tenant_id, resource_id, resource_type)
);
CREATE INDEX idx_zombie_resources_tenant ON zombie_resources(tenant_id, status, detected_at DESC);
-- RLS
ALTER TABLE zombie_resources ENABLE ROW LEVEL SECURITY;
CREATE POLICY tenant_iso_zombies ON zombie_resources
USING (tenant_id::text = current_setting('app.tenant_id', true));
-- Composite scoring columns on anomalies
ALTER TABLE anomalies ADD COLUMN IF NOT EXISTS composite_score NUMERIC(5,2);
ALTER TABLE anomalies ADD COLUMN IF NOT EXISTS score_breakdown JSONB;