mirror of
https://github.com/louislam/uptime-kuma.git
synced 2025-08-21 10:25:15 +08:00
feat: add ability to group monitors in dashboard
This commit is contained in:
@@ -12,6 +12,9 @@
|
||||
<label for="type" class="form-label">{{ $t("Monitor Type") }}</label>
|
||||
<select id="type" v-model="monitor.type" class="form-select">
|
||||
<optgroup :label="$t('General Monitor Type')">
|
||||
<option value="group">
|
||||
{{ $t("Group") }}
|
||||
</option>
|
||||
<option value="http">
|
||||
HTTP(s)
|
||||
</option>
|
||||
@@ -79,6 +82,15 @@
|
||||
<input id="name" v-model="monitor.name" type="text" class="form-control" required>
|
||||
</div>
|
||||
|
||||
<!-- Parent Monitor -->
|
||||
<div class="my-3">
|
||||
<label for="parent" class="form-label">{{ $t("Monitor Group") }}</label>
|
||||
<select v-model="monitor.parent" class="form-select" :disabled="sortedMonitorList.length === 0">
|
||||
<option :value="null" selected>{{ $t("None") }}</option>
|
||||
<option v-for="parentMonitor in sortedMonitorList" :key="parentMonitor.id" :value="parentMonitor.id">{{ parentMonitor.pathName }}</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<!-- URL -->
|
||||
<div v-if="monitor.type === 'http' || monitor.type === 'keyword' " class="my-3">
|
||||
<label for="url" class="form-label">{{ $t("URL") }}</label>
|
||||
@@ -737,6 +749,49 @@ message HealthCheckResponse {
|
||||
return null;
|
||||
},
|
||||
|
||||
sortedMonitorList() {
|
||||
// return Object.values(this.$root.monitorList).filter(monitor => {
|
||||
// // Only return monitors which aren't related to the current selected
|
||||
// if (monitor.id === this.monitor.id || monitor.parent === this.monitor.id) {
|
||||
// return false;
|
||||
// }
|
||||
// return true;
|
||||
// });
|
||||
|
||||
let result = Object.values(this.$root.monitorList);
|
||||
console.log(this.monitor.childrenIDs);
|
||||
result = result.filter(monitor => monitor.type === "group");
|
||||
result = result.filter(monitor => monitor.id !== this.monitor.id);
|
||||
result = result.filter(monitor => !this.monitor.childrenIDs?.includes(monitor.id));
|
||||
|
||||
result.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);
|
||||
});
|
||||
|
||||
return result;
|
||||
},
|
||||
|
||||
},
|
||||
watch: {
|
||||
"$root.proxyList"() {
|
||||
@@ -839,6 +894,7 @@ message HealthCheckResponse {
|
||||
this.monitor = {
|
||||
type: "http",
|
||||
name: "",
|
||||
parent: null,
|
||||
url: "https://",
|
||||
method: "GET",
|
||||
interval: 60,
|
||||
|
Reference in New Issue
Block a user