UNPKG

@sentry/core

Version:
79 lines (68 loc) 2.96 kB
Object.defineProperty(exports, '__esModule', { value: true }); const utils = require('@sentry/utils'); const debugBuild = require('../debug-build.js'); const hasTracingEnabled = require('../utils/hasTracingEnabled.js'); const parseSampleRate = require('../utils/parseSampleRate.js'); /** * Makes a sampling decision for the given options. * * Called every time a root span is created. Only root spans which emerge with a `sampled` value of `true` will be * sent to Sentry. */ function sampleSpan( options, samplingContext, ) { // nothing to do if tracing is not enabled if (!hasTracingEnabled.hasTracingEnabled(options)) { return [false]; } // we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` nor `enableTracing` were defined, so one of these should // work; prefer the hook if so let sampleRate; if (typeof options.tracesSampler === 'function') { sampleRate = options.tracesSampler(samplingContext); } else if (samplingContext.parentSampled !== undefined) { sampleRate = samplingContext.parentSampled; } else if (typeof options.tracesSampleRate !== 'undefined') { sampleRate = options.tracesSampleRate; } else { // When `enableTracing === true`, we use a sample rate of 100% sampleRate = 1; } // Since this is coming from the user (or from a function provided by the user), who knows what we might get. // (The only valid values are booleans or numbers between 0 and 1.) const parsedSampleRate = parseSampleRate.parseSampleRate(sampleRate); if (parsedSampleRate === undefined) { debugBuild.DEBUG_BUILD && utils.logger.warn('[Tracing] Discarding transaction because of invalid sample rate.'); return [false]; } // if the function returned 0 (or false), or if `tracesSampleRate` is 0, it's a sign the transaction should be dropped if (!parsedSampleRate) { debugBuild.DEBUG_BUILD && utils.logger.log( `[Tracing] Discarding transaction because ${ typeof options.tracesSampler === 'function' ? 'tracesSampler returned 0 or false' : 'a negative sampling decision was inherited or tracesSampleRate is set to 0' }`, ); return [false, parsedSampleRate]; } // Now we roll the dice. Math.random is inclusive of 0, but not of 1, so strict < is safe here. In case sampleRate is // a boolean, the < comparison will cause it to be automatically cast to 1 if it's true and 0 if it's false. const shouldSample = Math.random() < parsedSampleRate; // if we're not going to keep it, we're done if (!shouldSample) { debugBuild.DEBUG_BUILD && utils.logger.log( `[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = ${Number( sampleRate, )})`, ); return [false, parsedSampleRate]; } return [true, parsedSampleRate]; } exports.sampleSpan = sampleSpan; //# sourceMappingURL=sampling.js.map