mysql2.js 6.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. const core_1 = require("@opencensus/core");
  4. const shimmer = require("shimmer");
  5. class Mysql2Plugin extends core_1.BasePlugin {
  6. constructor(moduleName) {
  7. super(moduleName);
  8. this.internalFileList = {
  9. '1 - 3': {
  10. 'Connection': 'lib/connection',
  11. 'Pool': 'lib/pool'
  12. }
  13. };
  14. }
  15. applyPatch() {
  16. this.logger.debug('Patched Mysql2');
  17. if (this.internalFilesExports.Connection) {
  18. this.logger.debug('patching mysql2.Connection.createQuery');
  19. shimmer.wrap(this.internalFilesExports.Connection, 'createQuery', this.getPatchCreateQuery());
  20. }
  21. if (this.internalFilesExports.Pool) {
  22. this.logger.debug('patching mysql2.Pool.prototype.getConnection');
  23. shimmer.wrap(this.internalFilesExports.Pool.prototype, 'getConnection', this.getPatchGetConnection());
  24. }
  25. return this.moduleExports;
  26. }
  27. applyUnpatch() {
  28. shimmer.unwrap(this.internalFilesExports.Connection, 'createQuery');
  29. shimmer.unwrap(this.internalFilesExports.Pool.prototype, 'getConnection');
  30. }
  31. getPatchCreateQuery() {
  32. const plugin = this;
  33. return (original) => {
  34. return function (...args) {
  35. const span = plugin.tracer.startChildSpan('mysql-query', core_1.SpanKind.CLIENT);
  36. if (span === null)
  37. return original.apply(this, arguments);
  38. const query = original.apply(this, arguments);
  39. span.addAttribute('sql', query.sql);
  40. if (plugin.options.detailedCommands === true && query.values) {
  41. span.addAttribute('values', query.values);
  42. }
  43. if (typeof query._callback === 'function') {
  44. query._callback = plugin.patchEnd(span, query._callback);
  45. }
  46. else {
  47. query.on('end', function () {
  48. span.end();
  49. });
  50. }
  51. return query;
  52. };
  53. };
  54. }
  55. getPatchGetConnection() {
  56. const plugin = this;
  57. return (original) => {
  58. return function (cb) {
  59. return original.call(this, plugin.tracer.wrap(cb));
  60. };
  61. };
  62. }
  63. patchEnd(span, resultHandler) {
  64. const plugin = this;
  65. const patchedEnd = function (err, res) {
  66. if (plugin.options.detailedCommands === true && err instanceof Error) {
  67. span.addAttribute('error', err.message);
  68. }
  69. if (span.ended === false) {
  70. span.end();
  71. }
  72. if (resultHandler) {
  73. return resultHandler.apply(this, arguments);
  74. }
  75. };
  76. return this.tracer.wrap(patchedEnd);
  77. }
  78. }
  79. exports.Mysql2Plugin = Mysql2Plugin;
  80. const plugin = new Mysql2Plugin('mysql2');
  81. exports.plugin = plugin;
  82. //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXlzcWwyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NlbnN1cy9wbHVnaW5zL215c3FsMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWdCQSwyQ0FBNkQ7QUFDN0QsbUNBQWtDO0FBVWxDLE1BQWEsWUFBYSxTQUFRLGlCQUFVO0lBVzFDLFlBQWEsVUFBa0I7UUFDN0IsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBVEEscUJBQWdCLEdBQUc7WUFDcEMsT0FBTyxFQUFFO2dCQUNQLFlBQVksRUFBRSxnQkFBZ0I7Z0JBQzlCLE1BQU0sRUFBRSxVQUFVO2FBQ25CO1NBQ0YsQ0FBQTtJQUtELENBQUM7SUFLUyxVQUFVO1FBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFFbkMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUE7WUFDM0QsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFBO1NBQzlGO1FBRUQsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUE7WUFDakUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQTtTQUN0RztRQUVELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQTtJQUMzQixDQUFDO0lBR0QsWUFBWTtRQUNWLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFv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