202 lines
6.4 KiB
SQL
202 lines
6.4 KiB
SQL
ALTER TABLE icinga_service ADD COLUMN assign_filter text DEFAULT NULL;
|
|
|
|
WITH flat_assign AS (
|
|
|
|
SELECT
|
|
service_id,
|
|
CASE WHEN COUNT(*) = 0 THEN NULL
|
|
WHEN COUNT(*) = 1 THEN MAX(sa.filter_string)
|
|
ELSE ARRAY_TO_STRING(ARRAY_AGG(sa.filter_string), '&') END AS filter_string
|
|
FROM (
|
|
SELECT
|
|
sa_not.service_id,
|
|
CASE WHEN COUNT(*) = 0 THEN NULL
|
|
WHEN COUNT(*) = 1 THEN MAX(sa_not.filter_string)
|
|
ELSE '(' || ARRAY_TO_STRING(ARRAY_AGG(sa_not.filter_string), '&') || ')' END AS filter_string
|
|
FROM ( SELECT
|
|
sa.service_id,
|
|
'!' || sa.filter_string AS filter_string
|
|
FROM icinga_service_assignment sa
|
|
WHERE assign_type = 'ignore'
|
|
) sa_not
|
|
GROUP BY service_id
|
|
|
|
UNION ALL
|
|
|
|
SELECT
|
|
sa_yes.service_id,
|
|
CASE WHEN COUNT(*) = 0 THEN NULL
|
|
WHEN COUNT(*) = 1 THEN MAX(sa_yes.filter_string)
|
|
ELSE '(' || ARRAY_TO_STRING(ARRAY_AGG(sa_yes.filter_string), '|') || ')' END AS filter_string
|
|
FROM ( SELECT
|
|
sa.service_id,
|
|
sa.filter_string AS filter_string
|
|
FROM icinga_service_assignment sa
|
|
WHERE assign_type = 'assign'
|
|
) sa_yes
|
|
GROUP BY service_id
|
|
|
|
) sa GROUP BY service_id
|
|
|
|
) UPDATE icinga_service s
|
|
SET assign_filter = flat_assign.filter_string
|
|
FROM flat_assign
|
|
WHERE s.id = flat_assign.service_id;
|
|
|
|
DROP TABLE icinga_service_assignment;
|
|
|
|
ALTER TABLE icinga_service_set ADD COLUMN assign_filter text DEFAULT NULL;
|
|
|
|
WITH flat_assign AS (
|
|
|
|
SELECT
|
|
service_set_id,
|
|
CASE WHEN COUNT(*) = 0 THEN NULL
|
|
WHEN COUNT(*) = 1 THEN MAX(sa.filter_string)
|
|
ELSE ARRAY_TO_STRING(ARRAY_AGG(sa.filter_string), '&') END AS filter_string
|
|
FROM (
|
|
SELECT
|
|
sa_not.service_set_id,
|
|
CASE WHEN COUNT(*) = 0 THEN NULL
|
|
WHEN COUNT(*) = 1 THEN MAX(sa_not.filter_string)
|
|
ELSE '(' || ARRAY_TO_STRING(ARRAY_AGG(sa_not.filter_string), '&') || ')' END AS filter_string
|
|
FROM ( SELECT
|
|
sa.service_set_id,
|
|
'!' || sa.filter_string AS filter_string
|
|
FROM icinga_service_set_assignment sa
|
|
WHERE assign_type = 'ignore'
|
|
) sa_not
|
|
GROUP BY service_set_id
|
|
|
|
UNION ALL
|
|
|
|
SELECT
|
|
sa_yes.service_set_id,
|
|
CASE WHEN COUNT(*) = 0 THEN NULL
|
|
WHEN COUNT(*) = 1 THEN MAX(sa_yes.filter_string)
|
|
ELSE '(' || ARRAY_TO_STRING(ARRAY_AGG(sa_yes.filter_string), '|') || ')' END AS filter_string
|
|
FROM ( SELECT
|
|
sa.service_set_id,
|
|
sa.filter_string AS filter_string
|
|
FROM icinga_service_set_assignment sa
|
|
WHERE assign_type = 'assign'
|
|
) sa_yes
|
|
GROUP BY service_set_id
|
|
|
|
) sa GROUP BY service_set_id
|
|
|
|
) UPDATE icinga_service_set s
|
|
SET assign_filter = flat_assign.filter_string
|
|
FROM flat_assign
|
|
WHERE s.id = flat_assign.service_set_id;
|
|
|
|
DROP TABLE icinga_service_set_assignment;
|
|
|
|
|
|
ALTER TABLE icinga_notification ADD COLUMN assign_filter text DEFAULT NULL;
|
|
|
|
WITH flat_assign AS (
|
|
|
|
SELECT
|
|
notification_id,
|
|
CASE WHEN COUNT(*) = 0 THEN NULL
|
|
WHEN COUNT(*) = 1 THEN MAX(sa.filter_string)
|
|
ELSE ARRAY_TO_STRING(ARRAY_AGG(sa.filter_string), '&') END AS filter_string
|
|
FROM (
|
|
SELECT
|
|
sa_not.notification_id,
|
|
CASE WHEN COUNT(*) = 0 THEN NULL
|
|
WHEN COUNT(*) = 1 THEN MAX(sa_not.filter_string)
|
|
ELSE '(' || ARRAY_TO_STRING(ARRAY_AGG(sa_not.filter_string), '&') || ')' END AS filter_string
|
|
FROM ( SELECT
|
|
sa.notification_id,
|
|
'!' || sa.filter_string AS filter_string
|
|
FROM icinga_notification_assignment sa
|
|
WHERE assign_type = 'ignore'
|
|
) sa_not
|
|
GROUP BY notification_id
|
|
|
|
UNION ALL
|
|
|
|
SELECT
|
|
sa_yes.notification_id,
|
|
CASE WHEN COUNT(*) = 0 THEN NULL
|
|
WHEN COUNT(*) = 1 THEN MAX(sa_yes.filter_string)
|
|
ELSE '(' || ARRAY_TO_STRING(ARRAY_AGG(sa_yes.filter_string), '|') || ')' END AS filter_string
|
|
FROM ( SELECT
|
|
sa.notification_id,
|
|
sa.filter_string AS filter_string
|
|
FROM icinga_notification_assignment sa
|
|
WHERE assign_type = 'assign'
|
|
) sa_yes
|
|
GROUP BY notification_id
|
|
|
|
) sa GROUP BY notification_id
|
|
|
|
) UPDATE icinga_notification s
|
|
SET assign_filter = flat_assign.filter_string
|
|
FROM flat_assign
|
|
WHERE s.id = flat_assign.notification_id;
|
|
|
|
|
|
DROP TABLE icinga_notification_assignment;
|
|
|
|
ALTER TABLE icinga_hostgroup ADD COLUMN assign_filter text DEFAULT NULL;
|
|
|
|
WITH flat_assign AS (
|
|
|
|
SELECT
|
|
hostgroup_id,
|
|
CASE WHEN COUNT(*) = 0 THEN NULL
|
|
WHEN COUNT(*) = 1 THEN MAX(sa.filter_string)
|
|
ELSE ARRAY_TO_STRING(ARRAY_AGG(sa.filter_string), '&') END AS filter_string
|
|
FROM (
|
|
SELECT
|
|
sa_not.hostgroup_id,
|
|
CASE WHEN COUNT(*) = 0 THEN NULL
|
|
WHEN COUNT(*) = 1 THEN MAX(sa_not.filter_string)
|
|
ELSE '(' || ARRAY_TO_STRING(ARRAY_AGG(sa_not.filter_string), '&') || ')' END AS filter_string
|
|
FROM ( SELECT
|
|
sa.hostgroup_id,
|
|
'!' || sa.filter_string AS filter_string
|
|
FROM icinga_hostgroup_assignment sa
|
|
WHERE assign_type = 'ignore'
|
|
) sa_not
|
|
GROUP BY hostgroup_id
|
|
|
|
UNION ALL
|
|
|
|
SELECT
|
|
sa_yes.hostgroup_id,
|
|
CASE WHEN COUNT(*) = 0 THEN NULL
|
|
WHEN COUNT(*) = 1 THEN MAX(sa_yes.filter_string)
|
|
ELSE '(' || ARRAY_TO_STRING(ARRAY_AGG(sa_yes.filter_string), '|') || ')' END AS filter_string
|
|
FROM ( SELECT
|
|
sa.hostgroup_id,
|
|
sa.filter_string AS filter_string
|
|
FROM icinga_hostgroup_assignment sa
|
|
WHERE assign_type = 'assign'
|
|
) sa_yes
|
|
GROUP BY hostgroup_id
|
|
|
|
) sa GROUP BY hostgroup_id
|
|
|
|
) UPDATE icinga_hostgroup s
|
|
SET assign_filter = flat_assign.filter_string
|
|
FROM flat_assign
|
|
WHERE s.id = flat_assign.hostgroup_id;
|
|
|
|
|
|
DROP TABLE icinga_hostgroup_assignment;
|
|
|
|
|
|
ALTER TABLE icinga_servicegroup ADD COLUMN assign_filter text DEFAULT NULL;
|
|
|
|
|
|
DROP TYPE enum_assign_type;
|
|
|
|
|
|
INSERT INTO director_schema_migration
|
|
(schema_version, migration_time)
|
|
VALUES (120, NOW());
|