in packages/postgres/lib/postgres_p.js [52:123]
function captureQuery() {
var lastArg = arguments[arguments.length-1];
var parent = AWSXRay.resolveSegment(
(lastArg != null && lastArg.constructor &&
(lastArg.constructor.name === 'Segment' || lastArg.constructor.name === 'Subsegment'))
? lastArg
: null
);
if (!parent) {
AWSXRay.getLogger().info('Failed to capture Postgres. Cannot resolve sub/segment.');
return this.__query.apply(this, arguments);
}
var args = pgNormalizeQueryConfig.apply(this, arguments) || {};
var subsegment = parent.addNewSubsegment(this.database + '@' + this.host);
subsegment.namespace = 'remote';
if (args.callback) {
var cb = args.callback;
if (AWSXRay.isAutomaticMode()) {
args.callback = function autoContext(err, data) {
var session = AWSXRay.getNamespace();
session.run(function() {
AWSXRay.setSegment(subsegment);
cb(err, data);
});
subsegment.close(err);
};
} else {
args.callback = function(err, data) {
cb(err, data, subsegment);
subsegment.close(err);
};
}
}
var result = this.__query.call(this, args);
if (this._queryable && !this._ending) {
var query;
// To get the actual query object, we have to extract it from the
// owning connection object. The query will either be the last one in
// the queue or it will be the active query.
if (this.queryQueue.length === 0) {
query = this.activeQuery;
} else {
query = this.queryQueue[this.queryQueue.length-1];
}
if (!args.callback && query.on instanceof Function) {
query.on('end', function() {
subsegment.close();
});
var errorCapturer = function (err) {
subsegment.close(err);
};
query.on(events.errorMonitor || 'error', errorCapturer);
}
subsegment.addSqlData(createSqlData(this.connectionParameters, query));
}
return result;
}