From dae9fc94c2144d52acca81ee3b1f5ba5469d18d1 Mon Sep 17 00:00:00 2001 From: Kiko Beats Date: Tue, 5 Jul 2022 10:51:08 +0200 Subject: [PATCH] feat: remove debug-logfmt dependency --- README.md | 11 ++++++++++- package.json | 1 - src/index.js | 41 ++++++++++++++++++++++++++--------------- 3 files changed, 36 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 81aa149..0fa8bd2 100644 --- a/README.md +++ b/README.md @@ -88,7 +88,16 @@ https.get('https://example.com', { lookup: cacheable.lookup }, response => { }) ``` -If you want to debug timings, pass `DEBUG=doh-resolver*` as environment variable. +If you want to debug timings, you can pass your own logger: + +```js +const DoHResolver = require('doh-resolver') + +const resolver = new DoHResolver({ + servers: ['1.1.1.1', '8.8.8.8'], + logger: require('debug-logfmt')('doh-resolver') +}) +``` ## License diff --git a/package.json b/package.json index cdbd9b9..6a532c8 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,6 @@ "resolver" ], "dependencies": { - "debug-logfmt": "~1.0.4", "dns2": "~2.0.2" }, "devDependencies": { diff --git a/src/index.js b/src/index.js index a00701f..69d268d 100644 --- a/src/index.js +++ b/src/index.js @@ -1,38 +1,49 @@ 'use strict' -const debug = require('debug-logfmt')('doh-resolver') const { DOHClient } = require('dns2') +const loggerNoop = (() => { + const debug = () => {} + debug.info = debug + debug.error = debug + return debug +})() + const timestamp = (start = process.hrtime()) => () => { const hrtime = process.hrtime(start) const nanoseconds = hrtime[0] * 1e9 + hrtime[1] return nanoseconds / 1e6 } -const createLogger = transport => (...args) => { +const createLogWithDuration = transport => (...args) => { const end = timestamp() return () => transport(...args, { duration: `${Math.round(end())}ms` }) } -const logger = { - debug: createLogger(debug), - info: createLogger(debug.info) -} - -const measure = async (fn, props, logger) => { - const time = logger(props) +const logTime = async (fn, props, logWithDuration) => { + const time = logWithDuration(props) const result = await fn() time() return result } class DoHResolver { - constructor ({ servers, get, onError = (cb, error) => cb(error.errors[0]) }) { + constructor ({ + logger = loggerNoop, + servers, + get, + onError = (cb, error) => cb(error.errors[0]) + }) { this.servers = [].concat(servers) this.resolve4 = this.createTypeResolver('A') this.resolve6 = this.createTypeResolver('AAAA') this.get = get this.onError = onError + this.log = { + debug: createLogWithDuration(logger), + info: createLogWithDuration(logger.info), + error: logger.error + } } getServers = () => this.servers @@ -45,28 +56,28 @@ class DoHResolver { try { cb( null, - await measure( + await logTime( () => Promise.any( clients.map((client, index) => - measure( + logTime( () => client(domain, type).then(({ answers }) => answers), { server: this.servers[index], type, domain }, - logger.debug + this.log.debug ) ) ), { type, domain }, - logger.info + this.log.info ) ) } catch (error) { error.errors.forEach(({ name, code, message }) => - debug.error({ name, code, message }) + this.log.error({ name, code, message }) ) this.onError(cb, error) }