perf: less recursion for isParentActive using db query

pull/5193/head
Peace 2 months ago
parent 5dc66e1495
commit 16c04f6ac2
No known key found for this signature in database
GPG Key ID: 0EF6B46E172B739F

@ -1719,14 +1719,31 @@ class Monitor extends BeanModel {
* @returns {Promise<boolean>} Is the parent monitor active?
*/
static async isParentActive(monitorID) {
const parent = await Monitor.getParent(monitorID);
if (parent === null) {
return true;
}
const result = await R.getRow(`
WITH RECURSIVE MonitorHierarchy AS (
SELECT parent FROM monitor
WHERE id = ?
UNION ALL
SELECT m.parent FROM monitor m
JOIN MonitorHierarchy mh ON m.id = mh.parent
)
SELECT
CASE
WHEN (SELECT parent FROM monitor WHERE id = ?) IS NULL THEN 1
ELSE
CASE
WHEN COUNT(m.id) = SUM(m.active) THEN 1
ELSE 0
END
END AS all_active
FROM MonitorHierarchy mh
LEFT JOIN monitor m ON mh.parent = m.id;
`, [
monitorID,
monitorID
]);
const parentActive = await Monitor.isParentActive(parent.id);
return parent.active && parentActive;
return result.all_active === 1;
}
/**

Loading…
Cancel
Save