UNPKG

applicationinsights

Version:
47 lines 2.01 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Contracts = require("../Declarations/Contracts"); /** * A telemetry processor that handles sampling. */ function samplingTelemetryProcessor(envelope, contextObjects) { var samplingPercentage = envelope.sampleRate; // Set for us in Client.getEnvelope var isSampledIn = false; if (samplingPercentage === null || samplingPercentage === undefined || samplingPercentage >= 100) { return true; } else if (envelope.data && Contracts.TelemetryType.Metric === Contracts.baseTypeToTelemetryType(envelope.data.baseType)) { // Exclude MetricData telemetry from sampling return true; } else if (contextObjects.correlationContext && contextObjects.correlationContext.operation) { // If we're using dependency correlation, sampling should retain all telemetry from a given request isSampledIn = getSamplingHashCode(contextObjects.correlationContext.operation.id) < samplingPercentage; } else { // If we're not using dependency correlation, sampling should use a random distribution on each item isSampledIn = (Math.random() * 100) < samplingPercentage; } return isSampledIn; } exports.samplingTelemetryProcessor = samplingTelemetryProcessor; /** Ported from AI .NET SDK */ function getSamplingHashCode(input) { var csharpMin = -2147483648; var csharpMax = 2147483647; var hash = 5381; if (!input) { return 0; } while (input.length < 8) { input = input + input; } for (var i = 0; i < input.length; i++) { // JS doesn't respond to integer overflow by wrapping around. Simulate it with bitwise operators ( | 0) hash = ((((hash << 5) + hash) | 0) + input.charCodeAt(i) | 0); } hash = hash <= csharpMin ? csharpMax : Math.abs(hash); return (hash / csharpMax) * 100; } exports.getSamplingHashCode = getSamplingHashCode; //# sourceMappingURL=SamplingTelemetryProcessor.js.map