123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- var {
- _optionalChain
- } = require('@sentry/utils');
- Object.defineProperty(exports, '__esModule', { value: true });
- const utils = require('@sentry/utils');
- const debugBuild = require('../../common/debug-build.js');
- const nodeUtils = require('./utils/node-utils.js');
- /** Tracing integration for node-mysql package */
- class Mysql {
- /**
- * @inheritDoc
- */
- static __initStatic() {this.id = 'Mysql';}
- /**
- * @inheritDoc
- */
- constructor() {
- this.name = Mysql.id;
- }
- /** @inheritdoc */
- loadDependency() {
- return (this._module = this._module || utils.loadModule('mysql/lib/Connection.js'));
- }
- /**
- * @inheritDoc
- */
- setupOnce(_, getCurrentHub) {
- if (nodeUtils.shouldDisableAutoInstrumentation(getCurrentHub)) {
- debugBuild.DEBUG_BUILD && utils.logger.log('Mysql Integration is skipped because of instrumenter configuration.');
- return;
- }
- const pkg = this.loadDependency();
- if (!pkg) {
- debugBuild.DEBUG_BUILD && utils.logger.error('Mysql Integration was unable to require `mysql` package.');
- return;
- }
- let mySqlConfig = undefined;
- try {
- pkg.prototype.connect = new Proxy(pkg.prototype.connect, {
- apply(wrappingTarget, thisArg, args) {
- if (!mySqlConfig) {
- mySqlConfig = thisArg.config;
- }
- return wrappingTarget.apply(thisArg, args);
- },
- });
- } catch (e) {
- debugBuild.DEBUG_BUILD && utils.logger.error('Mysql Integration was unable to instrument `mysql` config.');
- }
- function spanDataFromConfig() {
- if (!mySqlConfig) {
- return {};
- }
- return {
- 'server.address': mySqlConfig.host,
- 'server.port': mySqlConfig.port,
- 'db.user': mySqlConfig.user,
- };
- }
- function finishSpan(span) {
- if (!span) {
- return;
- }
- const data = spanDataFromConfig();
- Object.keys(data).forEach(key => {
- span.setAttribute(key, data[key]);
- });
- span.end();
- }
- // The original function will have one of these signatures:
- // function (callback) => void
- // function (options, callback) => void
- // function (options, values, callback) => void
- utils.fill(pkg, 'createQuery', function (orig) {
- return function ( options, values, callback) {
- // eslint-disable-next-line deprecation/deprecation
- const scope = getCurrentHub().getScope();
- // eslint-disable-next-line deprecation/deprecation
- const parentSpan = scope.getSpan();
- // eslint-disable-next-line deprecation/deprecation
- const span = _optionalChain([parentSpan, 'optionalAccess', _2 => _2.startChild, 'call', _3 => _3({
- description: typeof options === 'string' ? options : (options ).sql,
- op: 'db',
- origin: 'auto.db.mysql',
- data: {
- 'db.system': 'mysql',
- },
- })]);
- if (typeof callback === 'function') {
- return orig.call(this, options, values, function (err, result, fields) {
- finishSpan(span);
- callback(err, result, fields);
- });
- }
- if (typeof values === 'function') {
- return orig.call(this, options, function (err, result, fields) {
- finishSpan(span);
- values(err, result, fields);
- });
- }
- // streaming, no callback!
- const query = orig.call(this, options, values) ;
- query.on('end', () => {
- finishSpan(span);
- });
- return query;
- };
- });
- }
- }Mysql.__initStatic();
- exports.Mysql = Mysql;
- //# sourceMappingURL=mysql.js.map
|