feat(dns): add configurable timeout for DNS monitor (#6990)

Co-authored-by: Maks Pikov <mixelburg@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Frank Elsinga <frank@elsinga.de>
This commit is contained in:
mixelburg
2026-02-23 22:17:22 +02:00
committed by GitHub
parent bd68103ade
commit 0ce2ebb31e
2 changed files with 11 additions and 3 deletions

View File

@@ -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);

View File

@@ -1430,6 +1430,7 @@
<!-- Timeout: HTTP / JSON query / Keyword / Ping / RabbitMQ / SNMP / Websocket Upgrade only -->
<div
v-if="
monitor.type === 'dns' ||
monitor.type === 'http' ||
monitor.type === 'json-query' ||
monitor.type === 'keyword' ||