@interopio/insights-traces 0.0.171 → 0.0.172

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3 @@
1
+ import { IOInsights } from "@interopio/otel/insights";
2
+ export declare function setupClickstreamTrace(settings: IOInsights.Settings): void;
3
+ export declare function instrumentRequests(): void;
@@ -0,0 +1,243 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.instrumentRequests = exports.setupClickstreamTrace = void 0;
4
+ const otel_1 = require("@interopio/otel");
5
+ // For removeEventListener: (target -> originalListener -> wrappedListener)
6
+ const listenerMap = new WeakMap();
7
+ const listenerContextMap = new Map();
8
+ let clickstreamPropagationInfo = null;
9
+ // see comments in wrapListener
10
+ // this method just reads config and does the
11
+ // addListener patching
12
+ function setupClickstreamTrace(settings) {
13
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
14
+ const applicationName = settings.applicationName;
15
+ if (!settings.traces ||
16
+ settings.traces.clickstream === false ||
17
+ (typeof settings.traces.clickstream === "object" && !((_a = settings.traces.clickstream) === null || _a === void 0 ? void 0 : _a.enabled))) {
18
+ return;
19
+ }
20
+ const structure = (_f = (typeof ((_b = settings.traces) === null || _b === void 0 ? void 0 : _b.clickstream) === "string" ? (_c = settings.traces) === null || _c === void 0 ? void 0 : _c.clickstream :
21
+ typeof ((_d = settings.traces) === null || _d === void 0 ? void 0 : _d.clickstream) === "object" ? (_e = settings.traces) === null || _e === void 0 ? void 0 : _e.clickstream.structure :
22
+ null)) !== null && _f !== void 0 ? _f : "sibling";
23
+ const descriptiveName = (_k = (typeof ((_g = settings.traces) === null || _g === void 0 ? void 0 : _g.clickstream) === "string" ? null :
24
+ typeof ((_h = settings.traces) === null || _h === void 0 ? void 0 : _h.clickstream) === "object" ? (_j = settings.traces) === null || _j === void 0 ? void 0 : _j.clickstream.descriptiveName :
25
+ null)) !== null && _k !== void 0 ? _k : true;
26
+ const events = (_p = (typeof ((_l = settings.traces) === null || _l === void 0 ? void 0 : _l.clickstream) === "string" ? null :
27
+ typeof ((_m = settings.traces) === null || _m === void 0 ? void 0 : _m.clickstream) === "object" ? (_o = settings.traces) === null || _o === void 0 ? void 0 : _o.clickstream.events :
28
+ null)) !== null && _p !== void 0 ? _p : ["click"];
29
+ const nestRequests = (_t = (typeof ((_q = settings.traces) === null || _q === void 0 ? void 0 : _q.clickstream) === "string" ? null :
30
+ typeof ((_r = settings.traces) === null || _r === void 0 ? void 0 : _r.clickstream) === "object" ? (_s = settings.traces) === null || _s === void 0 ? void 0 : _s.clickstream.events :
31
+ null)) !== null && _t !== void 0 ? _t : ["click"];
32
+ const clickstreamTracePrefix = descriptiveName ?
33
+ "interopio.api.clickstream." + applicationName + "." :
34
+ "interopio.api.clickstream.";
35
+ const _add = EventTarget.prototype.addEventListener;
36
+ const _remove = EventTarget.prototype.removeEventListener;
37
+ EventTarget.prototype.addEventListener = function (type, listener, options) {
38
+ if (!listener || !events.find(x => x === type)) {
39
+ return _add.call(this, type, listener, options);
40
+ }
41
+ return _add.call(this, type, wrapListener(this, listener, clickstreamTracePrefix, structure), options);
42
+ };
43
+ EventTarget.prototype.removeEventListener = function (type, listener, options) {
44
+ var _a;
45
+ if (!listener || !events.find(x => x === type)) {
46
+ return _remove.call(this, type, listener, options);
47
+ }
48
+ const perTarget = listenerMap.get(this);
49
+ const wrapped = (_a = perTarget === null || perTarget === void 0 ? void 0 : perTarget.get(listener)) !== null && _a !== void 0 ? _a : listener;
50
+ return _remove.call(this, type, wrapped, options);
51
+ };
52
+ }
53
+ exports.setupClickstreamTrace = setupClickstreamTrace;
54
+ function getElementSelector(element) {
55
+ const elementTagName = element.tagName.toLowerCase();
56
+ const elementIdSelector = element.id ? `#${element.id}` : "";
57
+ const elementClassSelector = Array.from(element.classList).map(cls => `.${cls}`).join('');
58
+ const elementSelectorString = elementTagName + elementIdSelector + elementClassSelector;
59
+ return { elementTagName, elementIdSelector, elementClassSelector, elementSelectorString };
60
+ }
61
+ function wrapListener(target, listener, sourcePrefix, structure) {
62
+ // The point of this method is to wrap every event listener for event handled by
63
+ // the clickstream trace in an io.Insights span.
64
+ //
65
+ // The first listener invoked for the event will create the clickstream span,
66
+ // then set it as the active context, then it will create a child span for the event.
67
+ //
68
+ // All the other listeners will just create child spans under the clickstream span
69
+ // created by the initial listener.
70
+ //
71
+ // Once all listeners have been invoked, we clear the active context for the event type.
72
+ let perTarget = listenerMap.get(target);
73
+ if (!perTarget) {
74
+ perTarget = new WeakMap();
75
+ listenerMap.set(target, perTarget);
76
+ }
77
+ // Reuse wrapper so removeEventListener can find it
78
+ const existing = perTarget.get(listener);
79
+ if (existing)
80
+ return existing;
81
+ const wrapped = function (e, ...rest) {
82
+ // start clickstream trace on first event
83
+ if (!clickstreamPropagationInfo) {
84
+ otel_1.Traces.withSpan(sourcePrefix + "start", {}, null, { disableNesting: true }, (ts) => {
85
+ clickstreamPropagationInfo = ts.getPropagationInfo();
86
+ });
87
+ }
88
+ let listenerContext = listenerContextMap.get(e.type);
89
+ // Here we create a child span for each listener, which will be
90
+ // nested under the clickstream span
91
+ let innerListener = () => (0, otel_1.withSpan)(
92
+ // e.g. "io.api.clickstream.click.listener"
93
+ sourcePrefix + e.type + ".listener", { eventName: e.type }, listenerContext, typeof listener === "function" ?
94
+ () => listener === null || listener === void 0 ? void 0 : listener.call(this, e, ...rest) :
95
+ () => { var _a; return (_a = listener.handleEvent) === null || _a === void 0 ? void 0 : _a.call(listener, e, ...rest); });
96
+ // if there's no active clickstream span/context for the current event,
97
+ // create the span and nest all listener spans under it
98
+ if (!listenerContext) {
99
+ const innnerInnerListener = innerListener;
100
+ innerListener = () => {
101
+ var _a;
102
+ const element = (e.target || {});
103
+ const elementSelector = getElementSelector(element);
104
+ const rect = (_a = element === null || element === void 0 ? void 0 : element.getBoundingClientRect) === null || _a === void 0 ? void 0 : _a.call(element);
105
+ const data = Object.assign(Object.assign({}, elementSelector), { elementId: element.id, elementHref: element.href, elementSrc: element.src, eventType: e.type, elementBounds: { x: rect === null || rect === void 0 ? void 0 : rect.x, y: rect === null || rect === void 0 ? void 0 : rect.y, top: rect === null || rect === void 0 ? void 0 : rect.top, bottom: rect === null || rect === void 0 ? void 0 : rect.bottom, left: rect === null || rect === void 0 ? void 0 : rect.left, right: rect === null || rect === void 0 ? void 0 : rect.right, height: rect === null || rect === void 0 ? void 0 : rect.height, width: rect === null || rect === void 0 ? void 0 : rect.width } });
106
+ otel_1.Traces.withSpan(
107
+ // e.g. "io.api.clickstream.click"
108
+ sourcePrefix + e.type, data, clickstreamPropagationInfo, (ts) => {
109
+ ts.addData("INFO", data);
110
+ listenerContext = ts.getPropagationInfo();
111
+ listenerContextMap.set(e.type, listenerContext);
112
+ // Once all listeners have been invoked, we clear the active context for the event type.
113
+ setTimeout(() => {
114
+ listenerContextMap.delete(e.type);
115
+ }, 0);
116
+ if (structure === "nested") {
117
+ clickstreamPropagationInfo = listenerContext;
118
+ }
119
+ return innnerInnerListener();
120
+ });
121
+ };
122
+ }
123
+ return innerListener();
124
+ };
125
+ perTarget.set(listener, wrapped);
126
+ return wrapped;
127
+ }
128
+ function instrumentRequests() {
129
+ try {
130
+ patchFetch();
131
+ }
132
+ catch (err) {
133
+ }
134
+ try {
135
+ patchXHR();
136
+ }
137
+ catch (err) {
138
+ }
139
+ }
140
+ exports.instrumentRequests = instrumentRequests;
141
+ const origFetch = globalThis.fetch;
142
+ function patchFetch() {
143
+ if (typeof origFetch !== "function")
144
+ return;
145
+ globalThis.fetch = function patchedFetch(input, init) {
146
+ let toReturn;
147
+ otel_1.Traces.withSpan("interopio.api.instrumentation.fetch", {
148
+ url: typeof input === "string" ? input : (typeof input === "object" && input.method) || String(input),
149
+ method: (init && init.method) || (typeof input === "object" && input.method) || "GET",
150
+ }, (ts) => {
151
+ toReturn = origFetch.call(globalThis, input, init);
152
+ toReturn.then(x => {
153
+ ts.addData("INFO", {
154
+ statusCode: x.status,
155
+ responseContentType: x.headers.get("content-type"),
156
+ responseContentLength: x.headers.get("content-length"),
157
+ });
158
+ });
159
+ // @interopio/otel will handle setting the span status itself
160
+ return toReturn;
161
+ });
162
+ return toReturn;
163
+ };
164
+ }
165
+ function patchXHR() {
166
+ const XHRProto = globalThis.XMLHttpRequest && globalThis.XMLHttpRequest.prototype;
167
+ const origOpen = XHRProto === null || XHRProto === void 0 ? void 0 : XHRProto.open;
168
+ const origSend = XHRProto === null || XHRProto === void 0 ? void 0 : XHRProto.send;
169
+ if (!XHRProto || !origOpen || !origSend) {
170
+ return;
171
+ }
172
+ XHRProto.open = function patchedOpen(method, url, async, user, password) {
173
+ async = async !== null && async !== void 0 ? async : true;
174
+ let resolve;
175
+ let reject;
176
+ const promise = new Promise((_resolve, _reject) => {
177
+ resolve = _resolve;
178
+ reject = _reject;
179
+ });
180
+ otel_1.Traces.withSpan("interopio.api.instrumentation.xhr", {
181
+ method: method || "GET",
182
+ url: String(url),
183
+ }, (ts) => {
184
+ Object.defineProperty(this, "__netRecord", {
185
+ value: { resolve, reject, ts },
186
+ configurable: true,
187
+ });
188
+ origOpen.call(this, method, url, async !== null && async !== void 0 ? async : true, user, password);
189
+ return promise;
190
+ });
191
+ };
192
+ XHRProto.send = function patchedSend(body) {
193
+ const { resolve, reject, ts } = this.__netRecord;
194
+ if (ts) {
195
+ const finalize = (kind, err) => {
196
+ if (this.__netRecord) {
197
+ if (this.__netRecord.finalized) {
198
+ return;
199
+ }
200
+ this.__netRecord.finalized = true;
201
+ }
202
+ ts.addData("INFO", {
203
+ statusCode: safeGetStatus(this),
204
+ responseContentType: safeGetResponseHeader(this, "content-type"),
205
+ responseContentLength: safeGetResponseHeader(this, "content-length"),
206
+ resultKind: kind
207
+ });
208
+ if (err) {
209
+ ts.recordException(err);
210
+ }
211
+ if (kind === "error") {
212
+ reject(err);
213
+ }
214
+ else {
215
+ resolve(null);
216
+ }
217
+ };
218
+ this.addEventListener("loadend", () => finalize("success"), { once: true });
219
+ this.addEventListener("error", () => finalize("error", new Error("XHR network error")), { once: true });
220
+ this.addEventListener("abort", () => finalize("abort", new Error("XHR aborted")), { once: true });
221
+ this.addEventListener("timeout", () => finalize("timeout", new Error("XHR timeout")), { once: true });
222
+ }
223
+ return origSend.call(this, body);
224
+ };
225
+ function safeGetStatus(xhr) {
226
+ // Accessing status can throw in some edge cases
227
+ try {
228
+ return xhr.status;
229
+ }
230
+ catch (_a) {
231
+ return null;
232
+ }
233
+ }
234
+ function safeGetResponseHeader(xhr, name) {
235
+ try {
236
+ return xhr.getResponseHeader(name);
237
+ }
238
+ catch (_a) {
239
+ return undefined;
240
+ }
241
+ }
242
+ }
243
+ //# sourceMappingURL=clickstream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clickstream.js","sourceRoot":"","sources":["../src/clickstream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ export declare const Defaults: {
2
+ TRACE_VERSION: string;
3
+ DEFAULT_USER: string;
4
+ DEFAULT_SERVICE_NAME: string;
5
+ DEFAULT_SERVICE_ID: string;
6
+ DEFAULT_SERVICE_VERSION: string;
7
+ DEFAULT_PLATFORM_VERSION: string;
8
+ DEFAULT_METRIC_DESCRIPTION: string;
9
+ stopPropagationIfSpanIsDisabled: boolean;
10
+ countMetric: boolean;
11
+ durationMetric: boolean;
12
+ resultMetric: boolean;
13
+ countMetricOnDisabledSpans: boolean;
14
+ durationMetricOnDisabledSpans: boolean;
15
+ resultMetricOnDisabledSpans: boolean;
16
+ maxAttributeDepth: number;
17
+ otelSpanOptions: {};
18
+ disablePropagation: boolean;
19
+ addContextToTrace: boolean;
20
+ level: string;
21
+ forceChildTracing: boolean;
22
+ canBeRoot: boolean;
23
+ currentTracingStateGetterContextName: string;
24
+ minDurationMs: number;
25
+ log: boolean;
26
+ logOnDisabledSpans: boolean;
27
+ };
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Defaults = void 0;
4
+ exports.Defaults = {
5
+ TRACE_VERSION: "00",
6
+ DEFAULT_USER: "unknown-user",
7
+ DEFAULT_SERVICE_NAME: "unknown-service-name",
8
+ DEFAULT_SERVICE_ID: "unknown-service-id",
9
+ DEFAULT_SERVICE_VERSION: "unknown-service-version",
10
+ DEFAULT_PLATFORM_VERSION: "unknown-platform-version",
11
+ DEFAULT_METRIC_DESCRIPTION: "unknown-metric",
12
+ stopPropagationIfSpanIsDisabled: false,
13
+ countMetric: false,
14
+ durationMetric: false,
15
+ resultMetric: false,
16
+ countMetricOnDisabledSpans: false,
17
+ durationMetricOnDisabledSpans: false,
18
+ resultMetricOnDisabledSpans: false,
19
+ maxAttributeDepth: 5,
20
+ otelSpanOptions: {},
21
+ disablePropagation: false,
22
+ addContextToTrace: true,
23
+ level: "INFO",
24
+ forceChildTracing: false,
25
+ canBeRoot: true,
26
+ currentTracingStateGetterContextName: "interopio.insights.currentTracingStateGetter",
27
+ minDurationMs: 0,
28
+ log: false,
29
+ logOnDisabledSpans: false
30
+ };
31
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AACa,QAAA,QAAQ,GAAG;IACpB,aAAa,EAAE,IAAI;IACnB,YAAY,EAAE,cAAc;IAC5B,oBAAoB,EAAE,sBAAsB;IAC5C,kBAAkB,EAAE,oBAAoB;IACxC,uBAAuB,EAAE,yBAAyB;IAClD,wBAAwB,EAAE,0BAA0B;IACpD,0BAA0B,EAAE,gBAAgB;IAE5C,+BAA+B,EAAE,KAAK;IACtC,WAAW,EAAE,KAAK;IAClB,cAAc,EAAE,KAAK;IACrB,YAAY,EAAE,KAAK;IACnB,0BAA0B,EAAE,KAAK;IACjC,6BAA6B,EAAE,KAAK;IACpC,2BAA2B,EAAE,KAAK;IAClC,iBAAiB,EAAE,CAAC;IACpB,eAAe,EAAE,EAAE;IACnB,kBAAkB,EAAE,KAAK;IACzB,iBAAiB,EAAE,IAAI;IACvB,KAAK,EAAE,MAAM;IACb,iBAAiB,EAAE,KAAK;IACxB,SAAS,EAAE,IAAI;IACf,oCAAoC,EAAE,8CAA8C;IACpF,aAAa,EAAE,CAAC;IAChB,GAAG,EAAE,KAAK;IACV,kBAAkB,EAAE,KAAK;CAC5B,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { type Context } from "@opentelemetry/api";
2
+ import { type ReadableSpan, type Span, type SpanProcessor } from "@opentelemetry/sdk-trace-base";
3
+ export declare class DurationFilterProcessor implements SpanProcessor {
4
+ private _innerProcessor;
5
+ constructor(innerProcessor: SpanProcessor);
6
+ onStart(span: Span, parentContext: Context): void;
7
+ onEnd(span: ReadableSpan): void;
8
+ shutdown(): any;
9
+ forceFlush(): any;
10
+ }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DurationFilterProcessor = void 0;
4
+ class DurationFilterProcessor {
5
+ constructor(innerProcessor) {
6
+ this._innerProcessor = innerProcessor;
7
+ }
8
+ onStart(span, parentContext) {
9
+ this._innerProcessor.onStart(span, parentContext);
10
+ }
11
+ onEnd(span) {
12
+ const minDurationMs = span.attributes.insightsMinDurationMs && parseInt(span.attributes.insightsMinDurationMs + "", 10);
13
+ if (minDurationMs) {
14
+ const durationNs = span.endTime[0] * 1e9 + span.endTime[1] -
15
+ (span.startTime[0] * 1e9 + span.startTime[1]);
16
+ if (durationNs >= (minDurationMs * 1e6)) {
17
+ this._innerProcessor.onEnd(span);
18
+ }
19
+ }
20
+ else {
21
+ this._innerProcessor.onEnd(span);
22
+ }
23
+ }
24
+ shutdown() {
25
+ return this._innerProcessor.shutdown();
26
+ }
27
+ forceFlush() {
28
+ return this._innerProcessor.forceFlush();
29
+ }
30
+ }
31
+ exports.DurationFilterProcessor = DurationFilterProcessor;
32
+ //# sourceMappingURL=durationFilterProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"durationFilterProcessor.js","sourceRoot":"","sources":["../src/durationFilterProcessor.ts"],"names":[],"mappings":";;;AAGA,MAAa,uBAAuB;IAIlC,YAAY,cAA6B;QACvC,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;IACxC,CAAC;IAED,OAAO,CAAC,IAAU,EAAE,aAAsB;QACxC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,IAAkB;QACtB,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,qBAAqB,IAAI,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QACxH,IAAI,aAAa,EAAE;YACjB,MAAM,UAAU,GACd,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;gBACvC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAChD,IAAI,UAAU,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,EAAE;gBACvC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;aAClC;SACF;aAAM;YACL,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SAClC;IACH,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;IACzC,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;IAC3C,CAAC;CACF;AAjCD,0DAiCC"}
package/dist/index.js CHANGED
@@ -1,23 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.init = void 0;
4
+ const manager_1 = require("./manager");
4
5
  const otel_1 = require("@interopio/otel");
5
- const api_1 = require("@opentelemetry/api");
6
- const core_1 = require("@opentelemetry/core");
7
- const exporter_trace_otlp_http_1 = require("@opentelemetry/exporter-trace-otlp-http");
8
- const sdk_trace_base_1 = require("@opentelemetry/sdk-trace-base");
6
+ let singletonTracesManager;
9
7
  function init() {
10
8
  (0, otel_1.registerInsightsPlugin)("traces", () => ({
11
- get_ROOT_CONTEXT: () => api_1.ROOT_CONTEXT,
12
- trace: api_1.trace,
13
- context: api_1.context,
14
- propagation: api_1.propagation,
15
- newW3CTraceContextPropagator: () => new core_1.W3CTraceContextPropagator(),
16
- newBasicTracerProvider: (config) => new sdk_trace_base_1.BasicTracerProvider(config),
17
- newBatchSpanProcessor: (spanExporter, batchSpanProcessorConfig) => new sdk_trace_base_1.BatchSpanProcessor(spanExporter, batchSpanProcessorConfig),
18
- newParentBasedSampler: (config) => new sdk_trace_base_1.ParentBasedSampler(config),
19
- newOTLPTraceExporter: (config) => new exporter_trace_otlp_http_1.OTLPTraceExporter(config),
20
- newConsoleSpanExporter: () => new sdk_trace_base_1.ConsoleSpanExporter()
9
+ newTracesManager(otelSettings, logger, traceLogger, contextManager, propagator, tracerProvider, sampler, spanProcessors, spanExporters, providerRegistrationSettings, metrics) {
10
+ if (!singletonTracesManager) {
11
+ singletonTracesManager = new manager_1.TracesManager(otelSettings, logger, traceLogger, contextManager, propagator, tracerProvider, sampler, spanProcessors, spanExporters, providerRegistrationSettings, metrics);
12
+ }
13
+ return singletonTracesManager;
14
+ },
21
15
  }));
22
16
  }
23
17
  exports.init = init;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,0CAAiF;AACjF,4CAA+F;AAC/F,8CAAgE;AAChE,sFAA4E;AAE5E,kEAAmM;AAEnM,SAAgB,IAAI;IAClB,IAAA,6BAAsB,EACpB,QAAQ,EACR,GAAG,EAAE,CAAC,CAAC;QACL,gBAAgB,EAAE,GAAG,EAAE,CAAC,kBAAY;QACpC,KAAK,EAAL,WAAK;QACL,OAAO,EAAP,aAAO;QACP,WAAW,EAAX,iBAAW;QACX,4BAA4B,EAAE,GAAG,EAAE,CAAC,IAAI,gCAAyB,EAAE;QACnE,sBAAsB,EAAE,CAAC,MAAoB,EAAE,EAAE,CAAC,IAAI,oCAAmB,CAAC,MAAM,CAAC;QACjF,qBAAqB,EAAE,CAAC,YAA0B,EAAE,wBAAuC,EAAE,EAAE,CAAC,IAAI,mCAAkB,CAAC,YAAY,EAAE,wBAAwB,CAAC;QAC9J,qBAAqB,EAAE,CAAC,MAEvB,EAAE,EAAE,CAAC,IAAI,mCAAkB,CAAC,MAAM,CAAC;QACpC,oBAAoB,EAAE,CAAC,MAAkC,EAAE,EAAE,CAAC,IAAI,4CAAiB,CAAC,MAAa,CAAC;QAClG,sBAAsB,EAAE,GAAG,EAAE,CAAC,IAAI,oCAAmB,EAAE;KAC7B,CAAA,CAAC,CAAC;AAClC,CAAC;AAjBD,oBAiBC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAIA,uCAA0C;AAC1C,0CAAiF;AAGjF,IAAI,sBAAqC,CAAC;AAC1C,SAAgB,IAAI;IAClB,IAAA,6BAAsB,EACpB,QAAQ,EACR,GAAG,EAAE,CAAC,CAAC;QACL,gBAAgB,CACd,YAAiC,EACjC,MAAyB,EACzB,WAA8B,EAC9B,cAA8B,EAC9B,UAA6B,EAC7B,cAA+B,EAC/B,OAA8C,EAC9C,cAAgC,EAChC,aAA8B,EAC9B,4BAAkE,EAClE,OAAmC;YACnC,IAAI,CAAC,sBAAsB,EAAE;gBAC3B,sBAAsB,GAAG,IAAI,uBAAa,CACxC,YAAY,EACZ,MAAM,EACN,WAAW,EACX,cAAc,EACd,UAAU,EACV,cAAc,EACd,OAAO,EACP,cAAc,EACd,aAAa,EACb,4BAA4B,EAC5B,OAAO,CAAC,CAAC;aACZ;YACD,OAAO,sBAAsB,CAAC;QAChC,CAAC;KACyB,CAAA,CAAC,CAAC;AAClC,CAAC;AAjCD,oBAiCC"}
@@ -0,0 +1,33 @@
1
+ import { type Attributes, type Context, type Link, type SpanKind } from "@opentelemetry/api";
2
+ import { type Sampler, type SamplingResult } from "@opentelemetry/sdk-trace-base";
3
+ import { IOInsights } from "@interopio/otel/insights";
4
+ export declare class ioInsightsSampler implements Sampler {
5
+ private settings;
6
+ private defaults?;
7
+ private filteringContextGetter?;
8
+ private logger?;
9
+ constructor(settings: IOInsights.SamplingSettings[], defaults?: IOInsights.SpanCreationOptions | undefined, filteringContextGetter?: (() => {
10
+ [key: string]: any;
11
+ }) | undefined, logger?: IOInsights.Logger | undefined);
12
+ shouldSample(context: Context, traceId: string, spanName: string, spanKind: SpanKind, attributes: Attributes, links: Link[]): SamplingResult;
13
+ toString(): string;
14
+ private matchObjects;
15
+ private maybeSample;
16
+ }
17
+ export declare enum ImportedSamplingDecision {
18
+ /**
19
+ * `Span.isRecording() === false`, span will not be recorded and all events
20
+ * and attributes will be dropped.
21
+ */
22
+ NOT_RECORD = 0,
23
+ /**
24
+ * `Span.isRecording() === true`, but `Sampled` flag in {@link TraceFlags}
25
+ * MUST NOT be set.
26
+ */
27
+ RECORD = 1,
28
+ /**
29
+ * `Span.isRecording() === true` AND `Sampled` flag in {@link TraceFlags}
30
+ * MUST be set.
31
+ */
32
+ RECORD_AND_SAMPLED = 2
33
+ }
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ioInsightsSampler = void 0;
4
+ const otel_1 = require("@interopio/otel");
5
+ // https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript
6
+ // doesn't work on IE 11
7
+ const cyrb53 = (str, seed = 0) => {
8
+ let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed;
9
+ for (let i = 0, ch; i < str.length; i++) {
10
+ ch = str.charCodeAt(i);
11
+ h1 = Math.imul(h1 ^ ch, 2654435761);
12
+ h2 = Math.imul(h2 ^ ch, 1597334677);
13
+ }
14
+ h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507);
15
+ h1 ^= Math.imul(h2 ^ (h2 >>> 13), 3266489909);
16
+ h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507);
17
+ h2 ^= Math.imul(h1 ^ (h1 >>> 13), 3266489909);
18
+ return 4294967296 * (2097151 & h2) + (h1 >>> 0);
19
+ };
20
+ class ioInsightsSampler {
21
+ constructor(settings, defaults,
22
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
23
+ filteringContextGetter, logger) {
24
+ this.settings = settings;
25
+ this.defaults = defaults;
26
+ this.filteringContextGetter = filteringContextGetter;
27
+ this.logger = logger;
28
+ }
29
+ shouldSample(context, traceId, spanName, spanKind, attributes, links) {
30
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
31
+ const currentFilteringContext = ((_a = this.filteringContextGetter) === null || _a === void 0 ? void 0 : _a.call(null)) || {};
32
+ for (const setting of this.settings || []) {
33
+ let matched = true;
34
+ if (matched && setting.name) {
35
+ if (!this.matchObjects("name", { name: setting.name }, { name: spanName })) {
36
+ matched = false;
37
+ }
38
+ }
39
+ if (matched && setting.attributes) {
40
+ if (!this.matchObjects("attributes", setting.attributes, attributes)) {
41
+ matched = false;
42
+ }
43
+ }
44
+ if (matched && setting.context) {
45
+ if (!this.matchObjects("context", setting.context, currentFilteringContext, true)) {
46
+ matched = false;
47
+ }
48
+ }
49
+ if (!matched) {
50
+ if (((_b = this.logger) === null || _b === void 0 ? void 0 : _b.level) &&
51
+ ((_c = this.logger) === null || _c === void 0 ? void 0 : _c.level) >= 80 /* IOInsights.LoggerLogLevel.VERBOSE */) {
52
+ (_d = this.logger) === null || _d === void 0 ? void 0 : _d.verbose("sampling rule didn't match: " + JSON.stringify(setting));
53
+ }
54
+ continue;
55
+ }
56
+ if (((_e = this.logger) === null || _e === void 0 ? void 0 : _e.level) &&
57
+ ((_f = this.logger) === null || _f === void 0 ? void 0 : _f.level) >= 80 /* IOInsights.LoggerLogLevel.VERBOSE */) {
58
+ (_g = this.logger) === null || _g === void 0 ? void 0 : _g.verbose("sampling rule matched: " + JSON.stringify(setting));
59
+ }
60
+ return this.maybeSample(traceId, setting.sample);
61
+ }
62
+ if (((_h = this.logger) === null || _h === void 0 ? void 0 : _h.level) &&
63
+ ((_j = this.logger) === null || _j === void 0 ? void 0 : _j.level) >= 80 /* IOInsights.LoggerLogLevel.VERBOSE */) {
64
+ (_k = this.logger) === null || _k === void 0 ? void 0 : _k.verbose("no sampling rule matched, will fall back to defaults " + JSON.stringify(this.defaults || {}));
65
+ }
66
+ if (this.defaults) {
67
+ return this.maybeSample(traceId, this.defaults.sample || true);
68
+ }
69
+ if (((_l = this.logger) === null || _l === void 0 ? void 0 : _l.level) &&
70
+ ((_m = this.logger) === null || _m === void 0 ? void 0 : _m.level) >= 80 /* IOInsights.LoggerLogLevel.VERBOSE */) {
71
+ (_o = this.logger) === null || _o === void 0 ? void 0 : _o.verbose("no sampling rule matched, no defaults - will sample");
72
+ }
73
+ return { decision: ImportedSamplingDecision.RECORD_AND_SAMPLED };
74
+ }
75
+ toString() {
76
+ try {
77
+ return "ioInsightsSampler: " + JSON.stringify({ settings: this.settings, defaults: this.defaults });
78
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
79
+ }
80
+ catch (err) {
81
+ return "ioInsightsSampler: (error) " + err.message;
82
+ }
83
+ }
84
+ matchObjects(description, required, provided, deepValue) {
85
+ var _a, _b, _c, _d, _e, _f;
86
+ for (const [key, requiredValue] of Object.entries(required)) {
87
+ const providedValue = deepValue ? (0, otel_1.deep_value)(provided, key) : provided[key];
88
+ if (typeof requiredValue === "string" && requiredValue[0] === "#") {
89
+ if (providedValue === null ||
90
+ providedValue === undefined ||
91
+ !new RegExp(requiredValue.substring(1), "i").test(providedValue + "")) {
92
+ if (((_a = this.logger) === null || _a === void 0 ? void 0 : _a.level) &&
93
+ ((_b = this.logger) === null || _b === void 0 ? void 0 : _b.level) >= 80 /* IOInsights.LoggerLogLevel.VERBOSE */) {
94
+ (_c = this.logger) === null || _c === void 0 ? void 0 : _c.verbose(`matching ${description}: regex ${requiredValue} doesn't match ${providedValue}`);
95
+ }
96
+ return false;
97
+ }
98
+ }
99
+ if (requiredValue !== providedValue) {
100
+ if (((_d = this.logger) === null || _d === void 0 ? void 0 : _d.level) &&
101
+ ((_e = this.logger) === null || _e === void 0 ? void 0 : _e.level) >= 80 /* IOInsights.LoggerLogLevel.VERBOSE */) {
102
+ (_f = this.logger) === null || _f === void 0 ? void 0 : _f.verbose(`matching ${description}: ${requiredValue} doesn't match ${providedValue}`);
103
+ }
104
+ return false;
105
+ }
106
+ }
107
+ return true;
108
+ }
109
+ maybeSample(traceId, sample) {
110
+ var _a, _b, _c;
111
+ let toReturn;
112
+ if (sample === true || (typeof sample === "number" && sample >= 1.0)) {
113
+ toReturn = { decision: ImportedSamplingDecision.RECORD_AND_SAMPLED };
114
+ }
115
+ else if (sample === false || (typeof sample === "number" && sample <= 0.0)) {
116
+ toReturn = { decision: ImportedSamplingDecision.NOT_RECORD };
117
+ }
118
+ else {
119
+ const hash = cyrb53(traceId);
120
+ const toss = (hash / 1000) - Math.floor(hash / 1000);
121
+ toReturn = { decision: toss <= sample ? ImportedSamplingDecision.RECORD_AND_SAMPLED : ImportedSamplingDecision.NOT_RECORD };
122
+ }
123
+ if (((_a = this.logger) === null || _a === void 0 ? void 0 : _a.level) &&
124
+ ((_b = this.logger) === null || _b === void 0 ? void 0 : _b.level) >= 80 /* IOInsights.LoggerLogLevel.VERBOSE */) {
125
+ (_c = this.logger) === null || _c === void 0 ? void 0 : _c.verbose(`sampling decision with value ${sample}: ${JSON.stringify(toReturn)}`);
126
+ }
127
+ return toReturn;
128
+ }
129
+ }
130
+ exports.ioInsightsSampler = ioInsightsSampler;
131
+ //# sourceMappingURL=ioInsightsSampler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ioInsightsSampler.js","sourceRoot":"","sources":["../src/ioInsightsSampler.ts"],"names":[],"mappings":"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"}