in packages/mysql/lib/mysql_p.js [194:260]
function captureOperation(name) {
return function() {
var args = resolveArguments(arguments);
var parent = AWSXRay.resolveSegment(args.segment);
var command;
var originalOperation = this['__'+name];
if (args.segment) {
delete arguments[arguments.length-1];
}
if (!parent) {
AWSXRay.getLogger().info('Failed to capture MySQL. Cannot resolve sub/segment.');
return originalOperation.apply(this, arguments);
}
var config = this.config.connectionConfig || this.config;
var subsegment = parent.addNewSubsegment(config.database + '@' + config.host);
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 wrappedCallback(err, data) {
cb(err, data);
subsegment.close(err);
};
}
}
command = originalOperation.call(this, args.sql, args.values, args.callback);
if (!args.callback) {
var errorCapturer = function (err) {
subsegment.close(err);
};
if (isPromise(command)) {
command.then(() => {
subsegment.close();
}).catch (errorCapturer);
} else {
command.on('end', function() {
subsegment.close();
});
command.on(events.errorMonitor || 'error', errorCapturer);
}
}
subsegment.addSqlData(createSqlData(config, args.values, args.sql));
subsegment.namespace = 'remote';
return command;
};
}