Software /
code /
prosody
Comparison
net/adns.lua @ 13659:5abdcad8c2e0
net.adns: Collect DNS lookup timing metrics
Nice to have this in OpenMetricts instead of debug logs
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 07 Feb 2025 09:22:52 +0100 |
parent | 12974:ba409c67353b |
comparison
equal
deleted
inserted
replaced
13658:33806569d7c5 | 13659:5abdcad8c2e0 |
---|---|
72 return sock:send(data); | 72 return sock:send(data); |
73 end | 73 end |
74 return handler; | 74 return handler; |
75 end | 75 end |
76 | 76 |
77 local function measure(_qclass, _qtype) | |
78 return measure; | |
79 end | |
80 | |
77 function async_resolver_methods:lookup(handler, qname, qtype, qclass) | 81 function async_resolver_methods:lookup(handler, qname, qtype, qclass) |
78 local resolver = self._resolver; | 82 local resolver = self._resolver; |
83 local m = measure(qclass or "IN", qtype or "A"); | |
79 return coroutine.wrap(function (peek) | 84 return coroutine.wrap(function (peek) |
80 if peek then | 85 if peek then |
81 log("debug", "Records for %s already cached, using those...", qname); | 86 log("debug", "Records for %s already cached, using those...", qname); |
87 m(); | |
82 handler(peek); | 88 handler(peek); |
83 return; | 89 return; |
84 end | 90 end |
85 log("debug", "Records for %s not in cache, sending query (%s)...", qname, coroutine.running()); | 91 log("debug", "Records for %s not in cache, sending query (%s)...", qname, coroutine.running()); |
86 local ok, err = resolver:query(qname, qtype, qclass); | 92 local ok, err = resolver:query(qname, qtype, qclass); |
87 if ok then | 93 if ok then |
88 coroutine.yield(setmetatable({ resolver, qclass or "IN", qtype or "A", qname, coroutine.running()}, query_mt)); -- Wait for reply | 94 coroutine.yield(setmetatable({ resolver, qclass or "IN", qtype or "A", qname, coroutine.running()}, query_mt)); -- Wait for reply |
89 log("debug", "Reply for %s (%s)", qname, coroutine.running()); | 95 log("debug", "Reply for %s (%s)", qname, coroutine.running()); |
90 end | 96 end |
91 if ok then | 97 if ok then |
98 m(); | |
92 ok, err = pcall(handler, resolver:peek(qname, qtype, qclass)); | 99 ok, err = pcall(handler, resolver:peek(qname, qtype, qclass)); |
93 else | 100 else |
94 log("error", "Error sending DNS query: %s", err); | 101 log("error", "Error sending DNS query: %s", err); |
95 ok, err = pcall(handler, nil, err); | 102 ok, err = pcall(handler, nil, err); |
96 end | 103 end |
127 lookup = function (...) | 134 lookup = function (...) |
128 return new_async_resolver():lookup(...); | 135 return new_async_resolver():lookup(...); |
129 end; | 136 end; |
130 resolver = new_async_resolver; | 137 resolver = new_async_resolver; |
131 new_async_socket = new_async_socket; | 138 new_async_socket = new_async_socket; |
139 instrument = function(measure_) measure = measure_; end; | |
132 }; | 140 }; |