diff options
Diffstat (limited to 'net/unbound.lua')
-rw-r--r-- | net/unbound.lua | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/net/unbound.lua b/net/unbound.lua index 176a6156..557a37fc 100644 --- a/net/unbound.lua +++ b/net/unbound.lua @@ -20,7 +20,6 @@ local libunbound = require"lunbound"; local promise = require"prosody.util.promise"; local new_id = require "prosody.util.id".short; -local gettime = require"socket".gettime; local dns_utils = require"prosody.util.dns"; local classes, types, errors = dns_utils.classes, dns_utils.types, dns_utils.errors; local parsers = dns_utils.parsers; @@ -116,21 +115,26 @@ local function prep_answer(a) return setmetatable(a, answer_mt); end +local function measure(_qclass, _qtype) + return measure; +end + local function lookup(callback, qname, qtype, qclass) if not unbound then initialize(); end qtype = qtype and s_upper(qtype) or "A"; qclass = qclass and s_upper(qclass) or "IN"; local ntype, nclass = types[qtype], classes[qclass]; - local startedat = gettime(); + + local m; local ret; local log_query = logger.init("unbound.query"..new_id()); local function callback_wrapper(a, err) - local gotdataat = gettime(); + m(); waiting_queries[ret] = nil; if a then prep_answer(a); - log_query("debug", "Results for %s %s %s: %s (%s, %f sec)", qname, qclass, qtype, a.rcode == 0 and (#a .. " items") or a.status, - a.secure and "Secure" or a.bogus or "Insecure", gotdataat - startedat); -- Insecure as in unsigned + log_query("debug", "Results for %s %s %s: %s (%s)", qname, qclass, qtype, a.rcode == 0 and (#a .. " items") or a.status, + a.secure and "Secure" or a.bogus or "Insecure"); -- Insecure as in unsigned else log_query("error", "Results for %s %s %s: %s", qname, qclass, qtype, tostring(err)); end @@ -138,6 +142,7 @@ local function lookup(callback, qname, qtype, qclass) if not ok then log_query("error", "Error in callback: %s", cerr); end end log_query("debug", "Resolve %s %s %s", qname, qclass, qtype); + m = measure(qclass, qtype); local err; ret, err = unbound:resolve_async(callback_wrapper, qname, ntype, nclass); if ret then @@ -225,6 +230,8 @@ local wrapper = { }; } +_M.instrument = function(measure_) measure = measure_; end; + function _M.resolver() return wrapper; end return _M; |