dd-trace
Version:
Datadog APM tracing client for JavaScript
49 lines (39 loc) • 1.12 kB
JavaScript
const { addHook, AsyncResource } = require('./helpers/instrument')
const shimmer = require('../../datadog-shimmer')
function createWrapAcquire () {
return function wrapAcquire (acquire) {
return function acquireWithTrace (callback, priority) {
if (typeof callback === 'function') {
arguments[0] = AsyncResource.bind(callback)
}
return acquire.apply(this, arguments)
}
}
}
function createWrapPool () {
return function wrapPool (Pool) {
if (typeof Pool !== 'function') return Pool
return function PoolWithTrace (factory) {
const pool = Pool.apply(this, arguments)
if (pool && typeof pool.acquire === 'function') {
shimmer.wrap(pool, 'acquire', createWrapAcquire())
}
return pool
}
}
}
addHook({
name: 'generic-pool',
versions: ['^2.4']
}, genericPool => {
shimmer.wrap(genericPool.Pool.prototype, 'acquire', createWrapAcquire())
return genericPool
})
addHook({
name: 'generic-pool',
versions: ['2 - 2.3']
}, genericPool => {
shimmer.wrap(genericPool, 'Pool', createWrapPool())
return genericPool
})