mirror of
https://github.com/louislam/uptime-kuma.git
synced 2025-03-15 13:54:45 +00:00
perf: less recursion for isParentActive using db query
This commit is contained in:
parent
5dc66e1495
commit
16c04f6ac2
1 changed files with 24 additions and 7 deletions
|
@ -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 (
|
||||||
|
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
|
||||||
|
]);
|
||||||
|
|
||||||
if (parent === null) {
|
return result.all_active === 1;
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
const parentActive = await Monitor.isParentActive(parent.id);
|
|
||||||
return parent.active && parentActive;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Add table
Reference in a new issue