UNPKG

@commercetools/ts-sdk-apm

Version:
79 lines (66 loc) 2.36 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var datadog = require('dd-trace'); function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; } var datadog__default = /*#__PURE__*/_interopDefault(datadog); // Initialize datadog once datadog__default["default"].init(); // Record metrics for datadog const recordDatadog = (metric, tags) => { datadog__default["default"].dogstatsd.gauge(`client_response_time`, metric, tags); }; const time = () => performance.now(); function createTelemetryMiddleware(options) { /** * default newrelic APM and * opentelemetry tracer modules */ const defaultOptions = { /** * if this is to be used with newrelic, then * pass this (apm) as an option in the `createTelemetryMiddleware` * function e.g createTelemetryMiddleware({ apm: () => require('newrelic'), ... }) * Note: don't forget to install newrelic agent in your project `yarn add newrelic` */ apm: () => {}, tracer: () => Promise.resolve().then(function () { return require('./opentelemetry-a1ac8980.browser.cjs.js'); }) }; // trace function trace() { // validate apm and tracer if (!(options?.apm && typeof options.apm == 'function')) { options.apm = defaultOptions.apm; } if (!(options?.tracer && typeof options.tracer == 'function')) { options.tracer = defaultOptions.tracer; } options.apm(); options.tracer(); } trace(); // expose tracing modules return next => async request => { const nextRequest = { ...request, ...options }; // start (high resolution milliseconds) timestamp const start = time(); const response = await next(nextRequest); const response_time = time() - start; // send `response_time` to APM platforms if (options?.customMetrics && options.customMetrics.datadog) { recordDatadog(response_time, { env: process.env.NODE_ENV || 'dev' }); } if (options?.customMetrics && options.customMetrics.newrelic) { // @ts-ignore const { recordNewRelic } = await Promise.resolve().then(function () { return require('./newRelicHelper-f0d942b0.browser.cjs.js'); }); recordNewRelic(response_time); } return response; }; } exports.createTelemetryMiddleware = createTelemetryMiddleware;