{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../src/instrumentation.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { context, trace, isSpanContextValid, Span } from '@opentelemetry/api';\nimport { SeverityNumber } from '@opentelemetry/api-logs';\nimport {\n  InstrumentationBase,\n  InstrumentationNodeModuleDefinition,\n  InstrumentationNodeModuleFile,\n  isWrapped,\n  safeExecuteInTheMiddle,\n} from '@opentelemetry/instrumentation';\nimport type { WinstonInstrumentationConfig } from './types';\nimport type {\n  Winston2LoggerModule,\n  Winston2LogMethod,\n  Winston3ConfigureMethod,\n  Winston3LogMethod,\n  Winston3Logger,\n} from './internal-types';\n/** @knipignore */\nimport { PACKAGE_NAME, PACKAGE_VERSION } from './version';\n\nconst winston3Versions = ['>=3 <4'];\nconst winstonPre3Versions = ['>=1 <3'];\n\nexport class WinstonInstrumentation extends InstrumentationBase<WinstonInstrumentationConfig> {\n  constructor(config: WinstonInstrumentationConfig = {}) {\n    super(PACKAGE_NAME, PACKAGE_VERSION, config);\n  }\n\n  protected init() {\n    const winstons3instrumentationNodeModuleDefinition =\n      new InstrumentationNodeModuleDefinition(\n        'winston',\n        winston3Versions,\n        moduleExports => moduleExports,\n        () => {},\n        [\n          new InstrumentationNodeModuleFile(\n            'winston/lib/winston/logger.js',\n            winston3Versions,\n            (logger: Winston3Logger) => {\n              if (isWrapped(logger.prototype['write'])) {\n                this._unwrap(logger.prototype, 'write');\n              }\n              this._wrap(logger.prototype, 'write', this._getPatchedWrite());\n\n              // Wrap configure\n              if (isWrapped(logger.prototype['configure'])) {\n                this._unwrap(logger.prototype, 'configure');\n              }\n              this._wrap(\n                logger.prototype,\n                'configure',\n                this._getPatchedConfigure()\n              );\n\n              return logger;\n            },\n            (logger: Winston3Logger) => {\n              if (logger === undefined) return;\n              this._unwrap(logger.prototype, 'write');\n              this._unwrap(logger.prototype, 'configure');\n            }\n          ),\n        ]\n      );\n\n    const winstons2instrumentationNodeModuleDefinition =\n      new InstrumentationNodeModuleDefinition(\n        'winston',\n        winstonPre3Versions,\n        moduleExports => moduleExports,\n        () => {},\n        [\n          new InstrumentationNodeModuleFile(\n            'winston/lib/winston/logger.js',\n            winstonPre3Versions,\n            (fileExports: Winston2LoggerModule) => {\n              const proto = fileExports.Logger.prototype;\n\n              if (isWrapped(proto.log)) {\n                this._unwrap(proto, 'log');\n              }\n              this._wrap(proto, 'log', this._getPatchedLog());\n\n              return fileExports;\n            },\n            (fileExports: Winston2LoggerModule) => {\n              if (fileExports === undefined) return;\n              this._unwrap(fileExports.Logger.prototype, 'log');\n            }\n          ),\n        ]\n      );\n    return [\n      winstons3instrumentationNodeModuleDefinition,\n      winstons2instrumentationNodeModuleDefinition,\n    ];\n  }\n\n  private _callHook(span: Span, record: Record<string, string>) {\n    const { logHook } = this.getConfig();\n\n    if (!logHook) {\n      return;\n    }\n\n    safeExecuteInTheMiddle(\n      () => logHook(span, record),\n      err => {\n        if (err) {\n          this._diag.error('error calling logHook', err);\n        }\n      },\n      true\n    );\n  }\n\n  private _getPatchedWrite() {\n    return (original: Winston3LogMethod) => {\n      const instrumentation = this;\n      return function patchedWrite(\n        this: never,\n        ...args: Parameters<typeof original>\n      ) {\n        const record = args[0];\n        instrumentation._handleLogCorrelation(record);\n        return original.apply(this, args);\n      };\n    };\n  }\n\n  private _getPatchedLog() {\n    return (original: Winston2LogMethod) => {\n      const instrumentation = this;\n      return function patchedLog(\n        this: never,\n        ...args: Parameters<typeof original>\n      ) {\n        const record: Record<string, any> = {};\n        instrumentation._handleLogCorrelation(record);\n        // Inject in metadata argument\n        let isDataInjected = false;\n        for (let i = args.length - 1; i >= 0; i--) {\n          if (typeof args[i] === 'object') {\n            args[i] = Object.assign(args[i], record);\n            isDataInjected = true;\n            break;\n          }\n        }\n        if (!isDataInjected) {\n          const insertAt =\n            typeof args[args.length - 1] === 'function'\n              ? args.length - 1\n              : args.length;\n\n          args.splice(insertAt, 0, record);\n        }\n\n        return original.apply(this, args);\n      };\n    };\n  }\n\n  private _getPatchedConfigure() {\n    return (original: Winston3ConfigureMethod) => {\n      const instrumentation = this;\n      return function patchedConfigure(\n        this: never,\n        ...args: Parameters<typeof original>\n      ) {\n        const config = instrumentation.getConfig();\n        if (!config.disableLogSending) {\n          if (args && args.length > 0) {\n            // Try to load Winston transport\n            try {\n              const {\n                OpenTelemetryTransportV3,\n              } = require('@opentelemetry/winston-transport');\n              const originalTransports = args[0].transports;\n              let newTransports = Array.isArray(originalTransports)\n                ? originalTransports\n                : [];\n              let transportOptions = {};\n              if (config.logSeverity) {\n                const winstonLevel = instrumentation._winstonLevelFromSeverity(\n                  config.logSeverity,\n                  args[0].levels\n                );\n                transportOptions = { level: winstonLevel };\n              }\n              const openTelemetryTransport = new OpenTelemetryTransportV3(\n                transportOptions\n              );\n              if (originalTransports && !Array.isArray(originalTransports)) {\n                newTransports = [originalTransports];\n              }\n              newTransports.push(openTelemetryTransport);\n              args[0].transports = newTransports;\n            } catch (err) {\n              instrumentation._diag.warn(\n                '@opentelemetry/winston-transport is not available, log records will not be automatically sent.'\n              );\n            }\n          }\n        }\n        return original.apply(this, args);\n      };\n    };\n  }\n\n  private _handleLogCorrelation(record: Record<string, string>) {\n    if (!this.getConfig().disableLogCorrelation) {\n      const span = trace.getSpan(context.active());\n      if (span) {\n        const spanContext = span.spanContext();\n        if (isSpanContextValid(spanContext)) {\n          const fields = {\n            trace_id: spanContext.traceId,\n            span_id: spanContext.spanId,\n            trace_flags: `0${spanContext.traceFlags.toString(16)}`,\n          };\n          const enhancedRecord = Object.assign(record, fields);\n          this._callHook(span, enhancedRecord);\n          return enhancedRecord;\n        }\n      }\n    }\n    return record;\n  }\n\n  private _winstonLevelFromSeverity(\n    severity: SeverityNumber,\n    winstonLevels: { [key: string]: number } | undefined\n  ): string | undefined {\n    if (winstonLevels) {\n      if (isNpmLevels(winstonLevels)) {\n        if (severity >= SeverityNumber.ERROR) {\n          return 'error';\n        } else if (severity >= SeverityNumber.WARN) {\n          return 'warn';\n        } else if (severity >= SeverityNumber.INFO) {\n          return 'info';\n        } else if (severity >= SeverityNumber.DEBUG3) {\n          return 'http';\n        } else if (severity >= SeverityNumber.DEBUG2) {\n          return 'verbose';\n        } else if (severity >= SeverityNumber.DEBUG) {\n          return 'debug';\n        } else if (severity >= SeverityNumber.TRACE) {\n          return 'silly';\n        }\n      } else if (isCliLevels(winstonLevels)) {\n        if (severity >= SeverityNumber.ERROR) {\n          return 'error';\n        } else if (severity >= SeverityNumber.WARN) {\n          return 'warn';\n        } else if (severity >= SeverityNumber.INFO3) {\n          return 'help';\n        } else if (severity >= SeverityNumber.INFO2) {\n          return 'data';\n        } else if (severity >= SeverityNumber.INFO) {\n          return 'info';\n        } else if (severity >= SeverityNumber.DEBUG) {\n          return 'debug';\n        } else if (severity >= SeverityNumber.TRACE4) {\n          return 'prompt';\n        } else if (severity >= SeverityNumber.TRACE3) {\n          return 'verbose';\n        } else if (severity >= SeverityNumber.TRACE2) {\n          return 'input';\n        } else if (severity >= SeverityNumber.TRACE) {\n          return 'silly';\n        }\n      } else if (isSyslogLevels(winstonLevels)) {\n        if (severity >= SeverityNumber.FATAL2) {\n          return 'emerg';\n        } else if (severity >= SeverityNumber.FATAL) {\n          return 'alert';\n        } else if (severity >= SeverityNumber.ERROR2) {\n          return 'crit';\n        } else if (severity >= SeverityNumber.ERROR) {\n          return 'error';\n        } else if (severity >= SeverityNumber.WARN) {\n          return 'warning';\n        } else if (severity >= SeverityNumber.INFO2) {\n          return 'notice';\n        } else if (severity >= SeverityNumber.INFO) {\n          return 'info';\n        } else if (severity >= SeverityNumber.TRACE) {\n          return 'debug';\n        }\n      }\n      // Unknown level\n      this._diag.warn(\n        'failed to configure severity with existing winston levels'\n      );\n    }\n\n    function isCliLevels(arg: any): boolean {\n      return (\n        arg &&\n        arg.error !== undefined &&\n        arg.warn &&\n        arg.help &&\n        arg.data &&\n        arg.info &&\n        arg.debug &&\n        arg.prompt &&\n        arg.verbose &&\n        arg.input &&\n        arg.silly\n      );\n    }\n\n    function isNpmLevels(arg: any): boolean {\n      return (\n        arg &&\n        arg.error !== undefined &&\n        arg.warn &&\n        arg.info &&\n        arg.http &&\n        arg.verbose &&\n        arg.debug &&\n        arg.silly\n      );\n    }\n\n    function isSyslogLevels(arg: any): boolean {\n      return (\n        arg &&\n        arg.emerg !== undefined &&\n        arg.alert &&\n        arg.crit &&\n        arg.error &&\n        arg.warning &&\n        arg.notice &&\n        arg.info &&\n        arg.debug\n      );\n    }\n\n    return;\n  }\n}\n"]}