mirror of
https://github.com/louislam/uptime-kuma.git
synced 2025-08-21 02:34:11 +08:00
Monitor Conditions (#5048)
This commit is contained in:
@@ -79,7 +79,7 @@
|
||||
<span class="word">{{ $t("checkEverySecond", [ monitor.interval ]) }}</span>
|
||||
</div>
|
||||
<div class="col-md-4 text-center">
|
||||
<span class="badge rounded-pill" :class=" 'bg-' + status.color " style="font-size: 30px;">{{ status.text }}</span>
|
||||
<span class="badge rounded-pill" :class=" 'bg-' + status.color " style="font-size: 30px;" data-testid="monitor-status">{{ status.text }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -10,7 +10,7 @@
|
||||
|
||||
<div class="my-3">
|
||||
<label for="type" class="form-label">{{ $t("Monitor Type") }}</label>
|
||||
<select id="type" v-model="monitor.type" class="form-select">
|
||||
<select id="type" v-model="monitor.type" class="form-select" data-testid="monitor-type-select">
|
||||
<optgroup :label="$t('General Monitor Type')">
|
||||
<option value="group">
|
||||
{{ $t("Group") }}
|
||||
@@ -99,7 +99,7 @@
|
||||
<!-- Friendly Name -->
|
||||
<div class="my-3">
|
||||
<label for="name" class="form-label">{{ $t("Friendly Name") }}</label>
|
||||
<input id="name" v-model="monitor.name" type="text" class="form-control" required>
|
||||
<input id="name" v-model="monitor.name" type="text" class="form-control" required data-testid="friendly-name-input">
|
||||
</div>
|
||||
|
||||
<!-- URL -->
|
||||
@@ -237,7 +237,15 @@
|
||||
<!-- TCP Port / Ping / DNS / Steam / MQTT / Radius / Tailscale Ping / SNMP only -->
|
||||
<div v-if="monitor.type === 'port' || monitor.type === 'ping' || monitor.type === 'dns' || monitor.type === 'steam' || monitor.type === 'gamedig' || monitor.type === 'mqtt' || monitor.type === 'radius' || monitor.type === 'tailscale-ping' || monitor.type === 'snmp'" class="my-3">
|
||||
<label for="hostname" class="form-label">{{ $t("Hostname") }}</label>
|
||||
<input id="hostname" v-model="monitor.hostname" type="text" class="form-control" :pattern="`${monitor.type === 'mqtt' ? mqttIpOrHostnameRegexPattern : ipOrHostnameRegexPattern}`" required>
|
||||
<input
|
||||
id="hostname"
|
||||
v-model="monitor.hostname"
|
||||
type="text"
|
||||
class="form-control"
|
||||
:pattern="`${monitor.type === 'mqtt' ? mqttIpOrHostnameRegexPattern : ipOrHostnameRegexPattern}`"
|
||||
required
|
||||
data-testid="hostname-input"
|
||||
>
|
||||
</div>
|
||||
|
||||
<!-- Port -->
|
||||
@@ -343,6 +351,7 @@
|
||||
:preselect-first="false"
|
||||
:max-height="500"
|
||||
:taggable="false"
|
||||
data-testid="resolve-type-select"
|
||||
></VueMultiselect>
|
||||
|
||||
<div class="form-text">
|
||||
@@ -509,6 +518,14 @@
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- Conditions -->
|
||||
<EditMonitorConditions
|
||||
v-if="supportsConditions && conditionVariables.length > 0"
|
||||
v-model="monitor.conditions"
|
||||
:condition-variables="conditionVariables"
|
||||
class="my-3"
|
||||
/>
|
||||
|
||||
<!-- Interval -->
|
||||
<div class="my-3">
|
||||
<label for="interval" class="form-label">{{ $t("Heartbeat Interval") }} ({{ $t("checkEverySecond", [ monitor.interval ]) }})</label>
|
||||
@@ -963,7 +980,15 @@
|
||||
</div>
|
||||
|
||||
<div class="fixed-bottom-bar p-3">
|
||||
<button id="monitor-submit-btn" class="btn btn-primary" type="submit" :disabled="processing">{{ $t("Save") }}</button>
|
||||
<button
|
||||
id="monitor-submit-btn"
|
||||
class="btn btn-primary"
|
||||
type="submit"
|
||||
:disabled="processing"
|
||||
data-testid="save-button"
|
||||
>
|
||||
{{ $t("Save") }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
@@ -972,7 +997,7 @@
|
||||
<DockerHostDialog ref="dockerHostDialog" @added="addedDockerHost" />
|
||||
<ProxyDialog ref="proxyDialog" @added="addedProxy" />
|
||||
<CreateGroupDialog ref="createGroupDialog" @added="addedDraftGroup" />
|
||||
<RemoteBrowserDialog ref="remoteBrowserDialog" @added="addedRemoteBrowser" />
|
||||
<RemoteBrowserDialog ref="remoteBrowserDialog" />
|
||||
</div>
|
||||
</transition>
|
||||
</template>
|
||||
@@ -991,6 +1016,7 @@ import TagsManager from "../components/TagsManager.vue";
|
||||
import { genSecret, isDev, MAX_INTERVAL_SECOND, MIN_INTERVAL_SECOND, sleep } from "../util.ts";
|
||||
import { hostNameRegexPattern } from "../util-frontend";
|
||||
import HiddenInput from "../components/HiddenInput.vue";
|
||||
import EditMonitorConditions from "../components/EditMonitorConditions.vue";
|
||||
|
||||
const toast = useToast;
|
||||
|
||||
@@ -1034,7 +1060,8 @@ const monitorDefaults = {
|
||||
kafkaProducerSsl: false,
|
||||
kafkaProducerAllowAutoTopicCreation: false,
|
||||
gamedigGivenPortOnly: true,
|
||||
remote_browser: null
|
||||
remote_browser: null,
|
||||
conditions: []
|
||||
};
|
||||
|
||||
export default {
|
||||
@@ -1049,6 +1076,7 @@ export default {
|
||||
RemoteBrowserDialog,
|
||||
TagsManager,
|
||||
VueMultiselect,
|
||||
EditMonitorConditions,
|
||||
},
|
||||
|
||||
data() {
|
||||
@@ -1303,7 +1331,15 @@ message HealthCheckResponse {
|
||||
value: null,
|
||||
}];
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
supportsConditions() {
|
||||
return this.$root.monitorTypeList[this.monitor.type]?.supportsConditions || false;
|
||||
},
|
||||
|
||||
conditionVariables() {
|
||||
return this.$root.monitorTypeList[this.monitor.type]?.conditionVariables || [];
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
"$root.proxyList"() {
|
||||
@@ -1336,7 +1372,7 @@ message HealthCheckResponse {
|
||||
}
|
||||
},
|
||||
|
||||
"monitor.type"() {
|
||||
"monitor.type"(newType, oldType) {
|
||||
if (this.monitor.type === "push") {
|
||||
if (! this.monitor.pushToken) {
|
||||
// ideally this would require checking if the generated token is already used
|
||||
@@ -1408,6 +1444,10 @@ message HealthCheckResponse {
|
||||
}
|
||||
}
|
||||
|
||||
// Reset conditions since condition variables likely change:
|
||||
if (oldType && newType !== oldType) {
|
||||
this.monitor.conditions = [];
|
||||
}
|
||||
},
|
||||
|
||||
currentGameObject(newGameObject, previousGameObject) {
|
||||
|
Reference in New Issue
Block a user