diff --git a/server/monitor-types/dns.js b/server/monitor-types/dns.js index 725e8619a55..3697ed841ab 100644 --- a/server/monitor-types/dns.js +++ b/server/monitor-types/dns.js @@ -24,7 +24,13 @@ class DnsMonitorType extends MonitorType { let dnsMessage = ""; const resolverServers = await this.resolveDnsResolverServers(monitor.dns_resolve_server); - let dnsRes = await this.dnsResolve(monitor.hostname, resolverServers, monitor.port, monitor.dns_resolve_type); + let dnsRes = await this.dnsResolve( + monitor.hostname, + resolverServers, + monitor.port, + monitor.dns_resolve_type, + monitor.timeout != null ? monitor.timeout * 1000 : 5000 + ); heartbeat.ping = dayjs().valueOf() - startTime; const conditions = ConditionExpressionGroup.fromMonitor(monitor); @@ -169,10 +175,11 @@ class DnsMonitorType extends MonitorType { * @param {string[]} resolverServer Array of DNS server IP addresses to use * @param {string} resolverPort Port the DNS server is listening on * @param {string} rrtype The type of record to request + * @param {number} timeout Timeout in milliseconds for the DNS query (defaults to c-ares default of 5000ms) * @returns {Promise<(string[] | object[] | object)>} DNS response */ - async dnsResolve(hostname, resolverServer, resolverPort, rrtype) { - const resolver = new Resolver(); + async dnsResolve(hostname, resolverServer, resolverPort, rrtype, timeout = 5000) { + const resolver = new Resolver({ timeout }); resolver.setServers(resolverServer.map((server) => `[${server}]:${resolverPort}`)); if (rrtype === "PTR") { return await resolver.reverse(hostname); diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue index 9836fb79ef8..326990fb420 100644 --- a/src/pages/EditMonitor.vue +++ b/src/pages/EditMonitor.vue @@ -1430,6 +1430,7 @@