You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.6 KiB
50 lines
1.6 KiB
const { UP, PENDING, DOWN } = require("../../src/util");
|
|
const { MonitorType } = require("./monitor-type");
|
|
const Monitor = require("../model/monitor");
|
|
|
|
class GroupMonitorType extends MonitorType {
|
|
name = "group";
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
async check(monitor, heartbeat, _server) {
|
|
const children = await Monitor.getChildren(monitor.id);
|
|
|
|
if (children.length > 0) {
|
|
heartbeat.status = UP;
|
|
heartbeat.msg = "All children up and running";
|
|
for (const child of children) {
|
|
if (!child.active) {
|
|
// Ignore inactive childs
|
|
continue;
|
|
}
|
|
const lastBeat = await Monitor.getPreviousHeartbeat(child.id);
|
|
|
|
// Only change state if the monitor is in worse conditions then the ones before
|
|
// lastBeat.status could be null
|
|
if (!lastBeat) {
|
|
heartbeat.status = PENDING;
|
|
} else if (heartbeat.status === UP && (lastBeat.status === PENDING || lastBeat.status === DOWN)) {
|
|
heartbeat.status = lastBeat.status;
|
|
} else if (heartbeat.status === PENDING && lastBeat.status === DOWN) {
|
|
heartbeat.status = lastBeat.status;
|
|
}
|
|
}
|
|
|
|
if (heartbeat.status !== UP) {
|
|
heartbeat.msg = "Child inaccessible";
|
|
}
|
|
} else {
|
|
// Set status pending if group is empty
|
|
heartbeat.status = PENDING;
|
|
heartbeat.msg = "Group empty";
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
GroupMonitorType,
|
|
};
|
|
|