Query

Query Identifying Protections that Reference Orphaned Failure Mode IDs

ft:locale
en-US
SELECT
    vt.asset_name,
    i.id AS indicator_id,
    i.name AS indicator_name,
    jsonb_agg(DISTINCT fm.failure_mode_id) AS orphaned_failure_mode_ids
FROM indicator i
CROSS JOIN LATERAL jsonb_array_elements(i.threshold) AS t(threshold)
CROSS JOIN LATERAL jsonb_array_elements(t.threshold -> 'actions') AS a(action)
LEFT JOIN LATERAL jsonb_array_elements_text(a.action -> 'failureModeIds') AS fm(failure_mode_id) ON true
LEFT JOIN failure_mode f
    ON f.id = fm.failure_mode_id
LEFT JOIN v_twin vt
    ON vt.id = i.twin_id
WHERE 
    a.action ->> 'type' = 'advisory'
    AND COALESCE((a.action ->> 'inheritFailureModes')::boolean, false) = false
    AND fm.failure_mode_id IS NOT NULL
    AND f.id IS NULL
GROUP BY
    i.id,
    i.name,
    vt.asset_name
ORDER BY
    vt.asset_name;