Initial commit

This commit is contained in:
Merlin 2024-10-30 19:04:17 +00:00 committed by GitHub
parent 0254e72177
commit 346f7806f4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 49 additions and 3 deletions

View file

@ -0,0 +1,34 @@
const { MonitorType } = require("./monitor-type");
const { UP } = require("../../src/util");
const axios = require("axios");
class PterodactylNode extends MonitorType {
name = "pterodactyl-node";
/**
* @inheritdoc
*/
async check(monitor, heartbeat, server) {
await axios.get(`${monitor.nodeHost}/api/system`, {
headers: {
Authorization: `Bearer ${monitor.apiKey}`
}
})
.then(async res => {
if (res.status === 200) {
const data = await res.json();
heartbeat.msg = `Node is up, Version ${data.version}`;
heartbeat.status = UP;
} else {
throw Error(`Node is down, Status ${res.status}`);
}
});
}
}
module.exports = {
PterodactylNode,
};

View file

@ -116,6 +116,7 @@ class UptimeKumaServer {
UptimeKumaServer.monitorTypeList["snmp"] = new SNMPMonitorType(); UptimeKumaServer.monitorTypeList["snmp"] = new SNMPMonitorType();
UptimeKumaServer.monitorTypeList["mongodb"] = new MongodbMonitorType(); UptimeKumaServer.monitorTypeList["mongodb"] = new MongodbMonitorType();
UptimeKumaServer.monitorTypeList["rabbitmq"] = new RabbitMqMonitorType(); UptimeKumaServer.monitorTypeList["rabbitmq"] = new RabbitMqMonitorType();
UptimeKumaServer.monitorTypeList["pterodactyl-node"] = new PterodactylNode();
// Allow all CORS origins (polling) in development // Allow all CORS origins (polling) in development
let cors = undefined; let cors = undefined;
@ -554,4 +555,5 @@ const { MqttMonitorType } = require("./monitor-types/mqtt");
const { SNMPMonitorType } = require("./monitor-types/snmp"); const { SNMPMonitorType } = require("./monitor-types/snmp");
const { MongodbMonitorType } = require("./monitor-types/mongodb"); const { MongodbMonitorType } = require("./monitor-types/mongodb");
const { RabbitMqMonitorType } = require("./monitor-types/rabbitmq"); const { RabbitMqMonitorType } = require("./monitor-types/rabbitmq");
const { PterodactylNode } = require("./monitor-types/pterodactyl-node");
const Monitor = require("./model/monitor"); const Monitor = require("./model/monitor");

View file

@ -91,6 +91,9 @@
<option v-if="!$root.info.isContainer" value="tailscale-ping"> <option v-if="!$root.info.isContainer" value="tailscale-ping">
Tailscale Ping Tailscale Ping
</option> </option>
<option value="pterodactyl-node">
Pterodactyl Node
</option>
</optgroup> </optgroup>
</select> </select>
<i18n-t v-if="monitor.type === 'rabbitmq'" keypath="rabbitmqHelpText" tag="div" class="form-text"> <i18n-t v-if="monitor.type === 'rabbitmq'" keypath="rabbitmqHelpText" tag="div" class="form-text">
@ -282,7 +285,7 @@
<!-- Hostname --> <!-- Hostname -->
<!-- TCP Port / Ping / DNS / Steam / MQTT / Radius / Tailscale Ping / SNMP only --> <!-- 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"> <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' || monitor.type === 'pterodactyl-node'" class="my-3">
<label for="hostname" class="form-label">{{ $t("Hostname") }}</label> <label for="hostname" class="form-label">{{ $t("Hostname") }}</label>
<input <input
id="hostname" id="hostname"
@ -297,7 +300,7 @@
<!-- Port --> <!-- Port -->
<!-- For TCP Port / Steam / MQTT / Radius Type / SNMP --> <!-- For TCP Port / Steam / MQTT / Radius Type / SNMP -->
<div v-if="monitor.type === 'port' || monitor.type === 'steam' || monitor.type === 'gamedig' || monitor.type === 'mqtt' || monitor.type === 'radius' || monitor.type === 'snmp'" class="my-3"> <div v-if="monitor.type === 'port' || monitor.type === 'steam' || monitor.type === 'gamedig' || monitor.type === 'mqtt' || monitor.type === 'radius' || monitor.type === 'snmp' || monitor.type === 'pterodactyl-node'" class="my-3">
<label for="port" class="form-label">{{ $t("Port") }}</label> <label for="port" class="form-label">{{ $t("Port") }}</label>
<input id="port" v-model="monitor.port" type="number" class="form-control" required min="0" max="65535" step="1"> <input id="port" v-model="monitor.port" type="number" class="form-control" required min="0" max="65535" step="1">
</div> </div>
@ -601,6 +604,12 @@
<input id="timeout" v-model="monitor.timeout" type="number" class="form-control" required min="0" step="0.1"> <input id="timeout" v-model="monitor.timeout" type="number" class="form-control" required min="0" step="0.1">
</div> </div>
<!-- ApiKey: Pterodactyl node only -->
<div v-if="monitor.type === 'pterodactyl-node'" class="my-3">
<label for="apiKey" class="form-label">{{ $t("API Key") }}</label>
<HiddenInput id="apiKey" v-model="monitor.apiKey" type="password" required></HiddenInput>
</div>
<div class="my-3"> <div class="my-3">
<label for="resend-interval" class="form-label"> <label for="resend-interval" class="form-label">
{{ $t("Resend Notification if Down X times consecutively") }} {{ $t("Resend Notification if Down X times consecutively") }}
@ -1111,7 +1120,8 @@ const monitorDefaults = {
rabbitmqNodes: [], rabbitmqNodes: [],
rabbitmqUsername: "", rabbitmqUsername: "",
rabbitmqPassword: "", rabbitmqPassword: "",
conditions: [] conditions: [],
apiKey: "",
}; };
export default { export default {