Skip to content
This repository has been archived by the owner on Dec 1, 2023. It is now read-only.

Commit

Permalink
feat: remove debug-logfmt dependency
Browse files Browse the repository at this point in the history
  • Loading branch information
Kikobeats committed Jul 5, 2022
1 parent 58b6fe4 commit dae9fc9
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 17 deletions.
11 changes: 10 additions & 1 deletion README.md
Expand Up @@ -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

Expand Down
1 change: 0 additions & 1 deletion package.json
Expand Up @@ -29,7 +29,6 @@
"resolver"
],
"dependencies": {
"debug-logfmt": "~1.0.4",
"dns2": "~2.0.2"
},
"devDependencies": {
Expand Down
41 changes: 26 additions & 15 deletions 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
Expand All @@ -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)
}
Expand Down

0 comments on commit dae9fc9

Please sign in to comment.