@commercetools/ts-sdk-apm
Version:
commercetools typescript SDK application performance monitoring.
79 lines (66 loc) • 2.36 kB
JavaScript
;
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;