@risingstack/trace
Version:
RisingStack Trace Node.js collector
56 lines (49 loc) • 1.59 kB
JavaScript
var semver = require('semver')
var debug = require('debug')('risingstack/trace')
var consts = require('../consts')
var Shimmer = require('../utils/shimmer')
var utils = require('./utils')
function wrapNative (native, agent, version) {
// We support it only versions gte 4.0.0
if (!version) {
debug('trace: warning: Cannot determine postgres version. ' +
'(No package.json?) Native queries won\'t be instrumented.'
)
} else if (!semver.satisfies(version, '>= 4.0.0')) {
debug('trace: warning: You are using node-postgres version ' +
version + ', (<4.0.0) so native queries won\'t be instrumented.'
)
} else {
wrapClient(native, agent)
}
}
function wrapClient (pg, agent) {
Shimmer.wrap(pg.Client.prototype, 'pg.Client.prototype', 'query', function (original) {
return function () {
var host = this.host
var url = this.database
var port = this.port
var args = Array.prototype.slice.apply(arguments)
return utils.wrapQuery.call(this, original, args, agent, {
protocol: consts.PROTOCOLS.POSTGRES,
url: url,
host: port ? host + ':' + port : host,
method: utils.tryParseSql(args[0])
})
}
})
}
module.exports = function wrap (pg, agent, pkg) {
var version = pkg ? pkg.version : undefined
var original = pg.__lookupGetter__('native')
if (original) {
delete pg.native
pg.__defineGetter__('native', function getNative () {
var tmp = original()
wrapNative(tmp, agent, version)
return tmp
})
}
wrapClient(pg, agent)
return pg
}