feat: set childs under maintenance if parent is too

This commit is contained in:
Peace 2023-01-28 14:02:10 +01:00
parent aba515e172
commit f3ac351d75
No known key found for this signature in database
GPG key ID: 0EF6B46E172B739F
3 changed files with 40 additions and 8 deletions

View file

@ -1322,7 +1322,17 @@ class Monitor extends BeanModel {
ON maintenance_timeslot.maintenance_id = maintenance.id ON maintenance_timeslot.maintenance_id = maintenance.id
WHERE ${activeCondition} WHERE ${activeCondition}
LIMIT 1`, [ monitorID ]); LIMIT 1`, [ monitorID ]);
return maintenance.count !== 0;
if (maintenance.count !== 0) {
return true;
}
// Check if parent is under maintenance
const parent = await Monitor.getParent(monitorID);
if (parent === null) {
return false;
}
return await Monitor.isUnderMaintenance(parent.id);
} }
/** Make sure monitor interval is between bounds */ /** Make sure monitor interval is between bounds */

View file

@ -187,7 +187,7 @@ module.exports.maintenanceSocketHandler = (socket) => {
log.debug("maintenance", `Get Monitors for Maintenance: ${maintenanceID} User ID: ${socket.userID}`); log.debug("maintenance", `Get Monitors for Maintenance: ${maintenanceID} User ID: ${socket.userID}`);
let monitors = await R.getAll("SELECT monitor.id, monitor.name FROM monitor_maintenance mm JOIN monitor ON mm.monitor_id = monitor.id WHERE mm.maintenance_id = ? ", [ let monitors = await R.getAll("SELECT monitor.id FROM monitor_maintenance mm JOIN monitor ON mm.monitor_id = monitor.id WHERE mm.maintenance_id = ? ", [
maintenanceID, maintenanceID,
]); ]);

View file

@ -33,7 +33,7 @@
v-model="affectedMonitors" v-model="affectedMonitors"
:options="affectedMonitorsOptions" :options="affectedMonitorsOptions"
track-by="id" track-by="id"
label="name" label="pathName"
:multiple="true" :multiple="true"
:close-on-select="false" :close-on-select="false"
:clear-on-select="false" :clear-on-select="false"
@ -342,17 +342,39 @@ export default {
}, },
}, },
mounted() { mounted() {
this.init();
this.$root.getMonitorList((res) => { this.$root.getMonitorList((res) => {
if (res.ok) { if (res.ok) {
Object.values(this.$root.monitorList).map(monitor => { Object.values(this.$root.monitorList).sort((m1, m2) => {
if (m1.active !== m2.active) {
if (m1.active === 0) {
return 1;
}
if (m2.active === 0) {
return -1;
}
}
if (m1.weight !== m2.weight) {
if (m1.weight > m2.weight) {
return -1;
}
if (m1.weight < m2.weight) {
return 1;
}
}
return m1.pathName.localeCompare(m2.pathName);
}).map(monitor => {
this.affectedMonitorsOptions.push({ this.affectedMonitorsOptions.push({
id: monitor.id, id: monitor.id,
name: monitor.name, pathName: monitor.pathName,
}); });
}); });
} }
this.init();
}); });
}, },
methods: { methods: {
@ -387,7 +409,7 @@ export default {
this.$root.getSocket().emit("getMonitorMaintenance", this.$route.params.id, (res) => { this.$root.getSocket().emit("getMonitorMaintenance", this.$route.params.id, (res) => {
if (res.ok) { if (res.ok) {
Object.values(res.monitors).map(monitor => { Object.values(res.monitors).map(monitor => {
this.affectedMonitors.push(monitor); this.affectedMonitors.push(this.affectedMonitorsOptions.find(item => item.id === monitor.id));
}); });
} else { } else {
toast.error(res.msg); toast.error(res.msg);