@codefresh-io/cf-telemetry 3.11.1 → 3.12.0-alpha.2
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.
- package/dist/otel/config.d.ts +2 -0
- package/dist/otel/config.js +2 -0
- package/dist/otel/config.js.map +1 -1
- package/dist/otel/sdk/event-loop-block-tracker.d.ts +1 -0
- package/dist/otel/sdk/event-loop-block-tracker.js +59 -0
- package/dist/otel/sdk/event-loop-block-tracker.js.map +1 -0
- package/dist/otel/sdk/init.js +7 -0
- package/dist/otel/sdk/init.js.map +1 -1
- package/dist/otel/sdk/sdk.js +5 -1
- package/dist/otel/sdk/sdk.js.map +1 -1
- package/package.json +1 -1
package/dist/otel/config.d.ts
CHANGED
package/dist/otel/config.js
CHANGED
|
@@ -4,5 +4,7 @@ exports.config = void 0;
|
|
|
4
4
|
exports.config = {
|
|
5
5
|
enabled: process.env['CF_TELEMETRY_OTEL_ENABLE'] === 'true',
|
|
6
6
|
allowHttpInstrumentation: process.env['CF_TELEMETRY_OTEL_ALLOW_HTTP_INSTRUMENTATION'] === 'true',
|
|
7
|
+
enableSpanForEventLoopBlock: process.env['CF_TELEMETRY_OTEL_SPAN_FOR_EVENT_LOOP_BLOCK_ENABLE'] === 'true',
|
|
8
|
+
spanForEventLoopBlockThresholdMs: Number.parseInt(process.env['CF_TELEMETRY_OTEL_SPAN_FOR_EVENT_LOOP_BLOCK_THRESHOLD_MS'] ?? '50', 10),
|
|
7
9
|
};
|
|
8
10
|
//# sourceMappingURL=config.js.map
|
package/dist/otel/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/otel/config.ts"],"names":[],"mappings":";;;AAAa,QAAA,MAAM,GAAG;IACpB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,KAAK,MAAM;IAC3D,wBAAwB,EAAE,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,KAAK,MAAM;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/otel/config.ts"],"names":[],"mappings":";;;AAAa,QAAA,MAAM,GAAG;IACpB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,KAAK,MAAM;IAC3D,wBAAwB,EAAE,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,KAAK,MAAM;IAChG,2BAA2B,EAAE,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,KAAK,MAAM;IACzG,gCAAgC,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;CAC9H,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const eventLoopBlockTracker: import("async_hooks").AsyncHook;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.eventLoopBlockTracker = void 0;
|
|
4
|
+
const node_async_hooks_1 = require("node:async_hooks");
|
|
5
|
+
const cf_1 = require("../cf");
|
|
6
|
+
const config_1 = require("../config");
|
|
7
|
+
class EventLoopBlockedError extends Error {
|
|
8
|
+
constructor(...args) {
|
|
9
|
+
super(...args);
|
|
10
|
+
this.name = this.constructor.name;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
const NS_IN_MS = 1e6;
|
|
14
|
+
const NS_IN_S = 1e9;
|
|
15
|
+
const THRESHOLD_NS = config_1.config.spanForEventLoopBlockThresholdMs * NS_IN_MS;
|
|
16
|
+
const SPAN_NAME = 'Event loop blocked';
|
|
17
|
+
const cache = new Map();
|
|
18
|
+
const tracer = (0, cf_1.getTracer)();
|
|
19
|
+
const init = (asyncId, type) => {
|
|
20
|
+
cache.set(asyncId, {
|
|
21
|
+
type,
|
|
22
|
+
stack: new EventLoopBlockedError().stack,
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
const destroy = (asyncId) => {
|
|
26
|
+
cache.delete(asyncId);
|
|
27
|
+
};
|
|
28
|
+
const before = (asyncId) => {
|
|
29
|
+
const cached = cache.get(asyncId);
|
|
30
|
+
if (!cached)
|
|
31
|
+
return;
|
|
32
|
+
cache.set(asyncId, {
|
|
33
|
+
...cached,
|
|
34
|
+
start: process.hrtime(),
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
const after = (asyncId) => {
|
|
38
|
+
const cached = cache.get(asyncId);
|
|
39
|
+
if (!cached)
|
|
40
|
+
return;
|
|
41
|
+
cache.delete(asyncId);
|
|
42
|
+
if (!cached.start)
|
|
43
|
+
return;
|
|
44
|
+
const [sec, nanosec] = process.hrtime(cached.start);
|
|
45
|
+
const diffNs = sec * NS_IN_S + nanosec;
|
|
46
|
+
if (diffNs > THRESHOLD_NS) {
|
|
47
|
+
const diffMs = diffNs / NS_IN_MS;
|
|
48
|
+
const span = tracer.startSpan(SPAN_NAME, {
|
|
49
|
+
startTime: new Date(Date.now() - diffMs),
|
|
50
|
+
attributes: {
|
|
51
|
+
'nodejs.async.resource.type': cached.type,
|
|
52
|
+
'stacktrace': cached.stack,
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
span.end();
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
exports.eventLoopBlockTracker = (0, node_async_hooks_1.createHook)({ init, destroy, before, after });
|
|
59
|
+
//# sourceMappingURL=event-loop-block-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-loop-block-tracker.js","sourceRoot":"","sources":["../../../src/otel/sdk/event-loop-block-tracker.ts"],"names":[],"mappings":";;;AAAA,uDAA8C;AAC9C,8BAAkC;AAClC,sCAAmC;AAYnC,MAAM,qBAAsB,SAAQ,KAAK;IACvC,YAAY,GAAG,IAAyC;QACtD,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IACpC,CAAC;CACF;AAED,MAAM,QAAQ,GAAG,GAAG,CAAC;AACrB,MAAM,OAAO,GAAG,GAAG,CAAC;AACpB,MAAM,YAAY,GAAG,eAAM,CAAC,gCAAgC,GAAG,QAAQ,CAAC;AACxE,MAAM,SAAS,GAAG,oBAAoB,CAAC;AAEvC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAiC,CAAC;AACvD,MAAM,MAAM,GAAG,IAAA,cAAS,GAAE,CAAC;AAE3B,MAAM,IAAI,GAAG,CAAC,OAAmB,EAAE,IAAY,EAAQ,EAAE;IACvD,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE;QACjB,IAAI;QACJ,KAAK,EAAE,IAAI,qBAAqB,EAAE,CAAC,KAAK;KACzC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,CAAC,OAAmB,EAAQ,EAAE;IAC5C,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,CAAC,OAAmB,EAAQ,EAAE;IAC3C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAElC,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE;QACjB,GAAG,MAAM;QACT,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE;KACxB,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,KAAK,GAAG,CAAC,OAAmB,EAAQ,EAAE;IAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAElC,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEtB,IAAI,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO;IAE1B,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,GAAG,GAAG,OAAO,GAAG,OAAO,CAAC;IACvC,IAAI,MAAM,GAAG,YAAY,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE;YACvC,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;YACxC,UAAU,EAAE;gBACV,4BAA4B,EAAE,MAAM,CAAC,IAAI;gBACzC,YAAY,EAAE,MAAM,CAAC,KAAK;aAC3B;SACF,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC;AACH,CAAC,CAAC;AAEW,QAAA,qBAAqB,GAAG,IAAA,6BAAU,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC"}
|
package/dist/otel/sdk/init.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.terminate = exports.init = void 0;
|
|
4
4
|
const config_1 = require("../config");
|
|
5
|
+
const event_loop_block_tracker_1 = require("./event-loop-block-tracker");
|
|
5
6
|
const sdk_1 = require("./sdk");
|
|
6
7
|
const track_unhandled_errors_1 = require("./track-unhandled-errors");
|
|
7
8
|
const init = (logger) => {
|
|
@@ -15,6 +16,12 @@ const init = (logger) => {
|
|
|
15
16
|
logger.debug('OpenTelemetry configuration', config_1.config);
|
|
16
17
|
sdk_1.sdk.start();
|
|
17
18
|
(0, track_unhandled_errors_1.trackUnhandledErrors)(logger);
|
|
19
|
+
if (config_1.config.enableSpanForEventLoopBlock) {
|
|
20
|
+
logger.info(`Enabling span creation on event loop blockage above ${config_1.config.spanForEventLoopBlockThresholdMs}ms`);
|
|
21
|
+
logger.warn('Span creation on event loop blockage is not intended for production use as it causes significant performance overhead.'
|
|
22
|
+
+ ' Use it only for debugging purposes. Set CF_TELEMETRY_OTEL_SPAN_FOR_EVENT_LOOP_BLOCK_ENABLE=false to disable it');
|
|
23
|
+
event_loop_block_tracker_1.eventLoopBlockTracker.enable();
|
|
24
|
+
}
|
|
18
25
|
logger.info('OpenTelemetry initialized');
|
|
19
26
|
}
|
|
20
27
|
catch (exception) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/otel/sdk/init.ts"],"names":[],"mappings":";;;AACA,sCAAmC;AACnC,+BAA4B;AAC5B,qEAAgE;AAEzD,MAAM,IAAI,GAAG,CAAC,MAAc,EAAQ,EAAE;IAC3C,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAI,CAAC;QACH,IAAI,CAAC,eAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;YACzF,OAAO;QACT,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,eAAM,CAAC,CAAC;QACpD,SAAG,CAAC,KAAK,EAAE,CAAC;QACZ,IAAA,6CAAoB,EAAC,MAAM,CAAC,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,SAAS,EAAE,CAAC;QACnB,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE,SAAS,CAAC,CAAC;IAChE,CAAC;AACH,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/otel/sdk/init.ts"],"names":[],"mappings":";;;AACA,sCAAmC;AACnC,yEAAmE;AACnE,+BAA4B;AAC5B,qEAAgE;AAEzD,MAAM,IAAI,GAAG,CAAC,MAAc,EAAQ,EAAE;IAC3C,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAI,CAAC;QACH,IAAI,CAAC,eAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;YACzF,OAAO;QACT,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,eAAM,CAAC,CAAC;QACpD,SAAG,CAAC,KAAK,EAAE,CAAC;QACZ,IAAA,6CAAoB,EAAC,MAAM,CAAC,CAAC;QAC7B,IAAI,eAAM,CAAC,2BAA2B,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,uDAAuD,eAAM,CAAC,gCAAgC,IAAI,CAAC,CAAC;YAChH,MAAM,CAAC,IAAI,CAAC,wHAAwH;kBAChI,iHAAiH,CAAC,CAAC;YACvH,gDAAqB,CAAC,MAAM,EAAE,CAAC;QACjC,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,SAAS,EAAE,CAAC;QACnB,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE,SAAS,CAAC,CAAC;IAChE,CAAC;AACH,CAAC,CAAC;AArBW,QAAA,IAAI,QAqBf;AAEK,MAAM,SAAS,GAAG,KAAK,EAAE,MAAc,EAAiB,EAAE;IAC/D,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACzC,MAAM,SAAG,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,SAAS,EAAE,CAAC;QACnB,MAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE,SAAS,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC,CAAC;AATW,QAAA,SAAS,aASpB"}
|
package/dist/otel/sdk/sdk.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.sdk = void 0;
|
|
4
4
|
const auto_instrumentations_node_1 = require("@opentelemetry/auto-instrumentations-node");
|
|
5
5
|
const baggage_span_processor_1 = require("@opentelemetry/baggage-span-processor");
|
|
6
|
+
const exporter_trace_otlp_http_1 = require("@opentelemetry/exporter-trace-otlp-http");
|
|
6
7
|
const exporter_trace_otlp_grpc_1 = require("@opentelemetry/exporter-trace-otlp-grpc");
|
|
7
8
|
const resources_1 = require("@opentelemetry/resources");
|
|
8
9
|
const sdk_node_1 = require("@opentelemetry/sdk-node");
|
|
@@ -12,6 +13,9 @@ const global_config_1 = require("../../global-config");
|
|
|
12
13
|
const config_1 = require("../config");
|
|
13
14
|
const disable_http_instrumentation_1 = require("./disable-http-instrumentation");
|
|
14
15
|
const instrumentation_configs_1 = require("./instrumentation-configs");
|
|
16
|
+
const OTLPTraceExporter = process.env['OTEL_EXPORTER_OTLP_PROTOCOL'] === 'grpc'
|
|
17
|
+
? exporter_trace_otlp_grpc_1.OTLPTraceExporter
|
|
18
|
+
: exporter_trace_otlp_http_1.OTLPTraceExporter;
|
|
15
19
|
/**
|
|
16
20
|
* HTTP instrumentation is disabled by default because of potential security issues.
|
|
17
21
|
* In particular, it adds span attributes with request query parameters (`url.full` and `url.query`),
|
|
@@ -27,7 +31,7 @@ exports.sdk = new sdk_node_1.NodeSDK({
|
|
|
27
31
|
[semantic_conventions_1.ATTR_SERVICE_VERSION]: global_config_1.globalConfig.serviceVersion,
|
|
28
32
|
}),
|
|
29
33
|
spanProcessors: [
|
|
30
|
-
new sdk_trace_base_1.BatchSpanProcessor(new
|
|
34
|
+
new sdk_trace_base_1.BatchSpanProcessor(new OTLPTraceExporter()),
|
|
31
35
|
// It copies baggage info from parent span to child span
|
|
32
36
|
new baggage_span_processor_1.BaggageSpanProcessor(baggage_span_processor_1.ALLOW_ALL_BAGGAGE_KEYS),
|
|
33
37
|
],
|
package/dist/otel/sdk/sdk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../../src/otel/sdk/sdk.ts"],"names":[],"mappings":";;;AAAA,0FAAwF;AACxF,kFAAqG;AACrG,
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../../src/otel/sdk/sdk.ts"],"names":[],"mappings":";;;AAAA,0FAAwF;AACxF,kFAAqG;AACrG,sFAAqG;AACrG,sFAAqG;AACrG,wDAAkE;AAClE,sDAAkD;AAClD,kEAAmE;AACnE,8EAA8F;AAC9F,uDAAmD;AACnD,sCAAmC;AACnC,iFAA4E;AAC5E,uEAAmE;AAEnE,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,KAAK,MAAM;IAC7E,CAAC,CAAC,4CAAqB;IACvB,CAAC,CAAC,4CAAqB,CAAC;AAE1B;;;;GAIG;AACH,IAAI,eAAM,CAAC,wBAAwB,KAAK,IAAI;IAAE,IAAA,yDAA0B,GAAE,CAAC;AAE9D,QAAA,GAAG,GAAG,IAAI,kBAAO,CAAC;IAC7B,WAAW,EAAE,4BAAY,CAAC,WAAW;IACrC,mBAAmB,EAAE,IAAI;IACzB,QAAQ,EAAE,IAAA,kCAAsB,EAAC;QAC/B,CAAC,wCAAiB,CAAC,EAAE,4BAAY,CAAC,WAAW;QAC7C,CAAC,2CAAoB,CAAC,EAAE,4BAAY,CAAC,cAAc;KACpD,CAAC;IACF,cAAc,EAAE;QACd,IAAI,mCAAkB,CAAC,IAAI,iBAAiB,EAAE,CAAC;QAC/C,wDAAwD;QACxD,IAAI,6CAAoB,CAAC,+CAAsB,CAAC;KACjD;IACD,gBAAgB,EAAE,CAAC,IAAA,wDAA2B,EAAC,gDAAsB,CAAC,CAAC;CACxE,CAAC,CAAC"}
|