mirror of
https://github.com/louislam/uptime-kuma.git
synced 2025-08-21 00:26:47 +08:00
feat: add RabbitMQ
monitor (#5199)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
This commit is contained in:
@@ -64,6 +64,9 @@
|
||||
<option value="mqtt">
|
||||
MQTT
|
||||
</option>
|
||||
<option value="rabbitmq">
|
||||
RabbitMQ
|
||||
</option>
|
||||
<option value="kafka-producer">
|
||||
Kafka Producer
|
||||
</option>
|
||||
@@ -90,6 +93,13 @@
|
||||
</option>
|
||||
</optgroup>
|
||||
</select>
|
||||
<i18n-t v-if="monitor.type === 'rabbitmq'" keypath="rabbitmqHelpText" tag="div" class="form-text">
|
||||
<template #rabitmq_documentation>
|
||||
<a href="https://www.rabbitmq.com/management" target="_blank" rel="noopener noreferrer">
|
||||
RabbitMQ documentation
|
||||
</a>
|
||||
</template>
|
||||
</i18n-t>
|
||||
</div>
|
||||
|
||||
<div v-if="monitor.type === 'tailscale-ping'" class="alert alert-warning" role="alert">
|
||||
@@ -233,6 +243,43 @@
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template v-if="monitor.type === 'rabbitmq'">
|
||||
<!-- RabbitMQ Nodes List -->
|
||||
<div class="my-3">
|
||||
<label for="rabbitmqNodes" class="form-label">{{ $t("RabbitMQ Nodes") }}</label>
|
||||
<VueMultiselect
|
||||
id="rabbitmqNodes"
|
||||
v-model="monitor.rabbitmqNodes"
|
||||
:required="true"
|
||||
:multiple="true"
|
||||
:options="[]"
|
||||
:placeholder="$t('Enter the list of nodes')"
|
||||
:tag-placeholder="$t('Press Enter to add node')"
|
||||
:max-height="500"
|
||||
:taggable="true"
|
||||
:show-no-options="false"
|
||||
:close-on-select="false"
|
||||
:clear-on-select="false"
|
||||
:preserve-search="false"
|
||||
:preselect-first="false"
|
||||
@tag="addRabbitmqNode"
|
||||
></VueMultiselect>
|
||||
<div class="form-text">
|
||||
{{ $t("rabbitmqNodesDescription", ["https://node1.rabbitmq.com:15672"]) }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="my-3">
|
||||
<label for="rabbitmqUsername" class="form-label">RabbitMQ {{ $t("RabbitMQ Username") }}</label>
|
||||
<input id="rabbitmqUsername" v-model="monitor.rabbitmqUsername" type="text" required class="form-control">
|
||||
</div>
|
||||
|
||||
<div class="my-3">
|
||||
<label for="rabbitmqPassword" class="form-label">{{ $t("RabbitMQ Password") }}</label>
|
||||
<HiddenInput id="rabbitmqPassword" v-model="monitor.rabbitmqPassword" autocomplete="false" required="true"></HiddenInput>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- Hostname -->
|
||||
<!-- 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">
|
||||
@@ -549,7 +596,7 @@
|
||||
</div>
|
||||
|
||||
<!-- Timeout: HTTP / Keyword / SNMP only -->
|
||||
<div v-if="monitor.type === 'http' || monitor.type === 'keyword' || monitor.type === 'json-query' || monitor.type === 'snmp'" class="my-3">
|
||||
<div v-if="monitor.type === 'http' || monitor.type === 'keyword' || monitor.type === 'json-query' || monitor.type === 'snmp' || monitor.type === 'rabbitmq'" class="my-3">
|
||||
<label for="timeout" class="form-label">{{ $t("Request Timeout") }} ({{ $t("timeoutAfter", [ monitor.timeout || clampTimeout(monitor.interval) ]) }})</label>
|
||||
<input id="timeout" v-model="monitor.timeout" type="number" class="form-control" required min="0" step="0.1">
|
||||
</div>
|
||||
@@ -1122,6 +1169,9 @@ const monitorDefaults = {
|
||||
kafkaProducerAllowAutoTopicCreation: false,
|
||||
gamedigGivenPortOnly: true,
|
||||
remote_browser: null,
|
||||
rabbitmqNodes: [],
|
||||
rabbitmqUsername: "",
|
||||
rabbitmqPassword: "",
|
||||
conditions: []
|
||||
};
|
||||
|
||||
@@ -1709,6 +1759,10 @@ message HealthCheckResponse {
|
||||
this.monitor.kafkaProducerBrokers.push(newBroker);
|
||||
},
|
||||
|
||||
addRabbitmqNode(newNode) {
|
||||
this.monitor.rabbitmqNodes.push(newNode);
|
||||
},
|
||||
|
||||
/**
|
||||
* Validate form input
|
||||
* @returns {boolean} Is the form input valid?
|
||||
@@ -1736,6 +1790,17 @@ message HealthCheckResponse {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (this.monitor.type === "rabbitmq") {
|
||||
if (this.monitor.rabbitmqNodes.length === 0) {
|
||||
toast.error(this.$t("rabbitmqNodesRequired"));
|
||||
return false;
|
||||
}
|
||||
if (!this.monitor.rabbitmqNodes.every(node => node.startsWith("http://") || node.startsWith("https://"))) {
|
||||
toast.error(this.$t("rabbitmqNodesInvalid"));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
},
|
||||
|
||||
|
Reference in New Issue
Block a user