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? * @returns {Promise<boolean>} Is the parent monitor active?
*/ */
static async isParentActive(monitorID) { static async isParentActive(monitorID) {
const parent = await Monitor.getParent(monitorID); const result = await R.getRow(`
WITH RECURSIVE MonitorHierarchy AS (
if (parent === null) { SELECT parent FROM monitor
return true; 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 result.all_active === 1;
return parent.active && parentActive;
} }
/** /**

Loading…
Cancel
Save