mirror of
https://github.com/louislam/uptime-kuma.git
synced 2024-10-01 01:25:45 -04:00
57 lines
2.4 KiB
JavaScript
57 lines
2.4 KiB
JavaScript
|
const { MonitorType } = require("./monitor-type");
|
||
|
const { UP } = require("../../src/util");
|
||
|
const dayjs = require("dayjs");
|
||
|
const { dnsResolve } = require("../util-server");
|
||
|
const { R } = require("redbean-node");
|
||
|
|
||
|
class DnsMonitorType extends MonitorType {
|
||
|
|
||
|
name = "dns";
|
||
|
|
||
|
/**
|
||
|
* @inheritdoc
|
||
|
*/
|
||
|
async check(monitor, heartbeat, _server) {
|
||
|
let startTime = dayjs().valueOf();
|
||
|
let dnsMessage = "";
|
||
|
|
||
|
let dnsRes = await dnsResolve(monitor.hostname, monitor.dns_resolve_server, monitor.port, monitor.dns_resolve_type);
|
||
|
heartbeat.ping = dayjs().valueOf() - startTime;
|
||
|
|
||
|
if (monitor.dns_resolve_type === "A" || monitor.dns_resolve_type === "AAAA" || monitor.dns_resolve_type === "TXT" || monitor.dns_resolve_type === "PTR") {
|
||
|
dnsMessage += "Records: ";
|
||
|
dnsMessage += dnsRes.join(" | ");
|
||
|
} else if (monitor.dns_resolve_type === "CNAME" || monitor.dns_resolve_type === "PTR") {
|
||
|
dnsMessage += dnsRes[0];
|
||
|
} else if (monitor.dns_resolve_type === "CAA") {
|
||
|
dnsMessage += dnsRes[0].issue;
|
||
|
} else if (monitor.dns_resolve_type === "MX") {
|
||
|
dnsRes.forEach(record => {
|
||
|
dnsMessage += `Hostname: ${record.exchange} - Priority: ${record.priority} | `;
|
||
|
});
|
||
|
dnsMessage = dnsMessage.slice(0, -2);
|
||
|
} else if (monitor.dns_resolve_type === "NS") {
|
||
|
dnsMessage += "Servers: ";
|
||
|
dnsMessage += dnsRes.join(" | ");
|
||
|
} else if (monitor.dns_resolve_type === "SOA") {
|
||
|
dnsMessage += `NS-Name: ${dnsRes.nsname} | Hostmaster: ${dnsRes.hostmaster} | Serial: ${dnsRes.serial} | Refresh: ${dnsRes.refresh} | Retry: ${dnsRes.retry} | Expire: ${dnsRes.expire} | MinTTL: ${dnsRes.minttl}`;
|
||
|
} else if (monitor.dns_resolve_type === "SRV") {
|
||
|
dnsRes.forEach(record => {
|
||
|
dnsMessage += `Name: ${record.name} | Port: ${record.port} | Priority: ${record.priority} | Weight: ${record.weight} | `;
|
||
|
});
|
||
|
dnsMessage = dnsMessage.slice(0, -2);
|
||
|
}
|
||
|
|
||
|
if (monitor.dns_last_result !== dnsMessage && dnsMessage !== undefined) {
|
||
|
await R.exec("UPDATE `monitor` SET dns_last_result = ? WHERE id = ? ", [ dnsMessage, monitor.id ]);
|
||
|
}
|
||
|
|
||
|
heartbeat.msg = dnsMessage;
|
||
|
heartbeat.status = UP;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = {
|
||
|
DnsMonitorType,
|
||
|
};
|