@breadstone/archipel-platform-telemetry 0.0.21 → 0.0.23
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/README.md +1 -1
- package/package.json +45 -11
- package/src/OtelSdkHolder.d.ts +1 -1
- package/src/OtelSdkHolder.js +2 -2
- package/src/TelemetryModule.js +9 -9
- package/src/core/TelemetryCacheMetricsRecorder.js +2 -2
- package/src/index.d.ts +1 -1
- package/src/index.js +1 -1
- package/src/{tokens.js → tokens/TelemetryTokens.js} +1 -1
- /package/src/{tokens.d.ts → tokens/TelemetryTokens.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ import { TelemetryModule } from '@breadstone/archipel-platform-telemetry';
|
|
|
17
17
|
- **Metrics collection**: Counter, histogram, and gauge recording via `TelemetryFacade`
|
|
18
18
|
- **Distributed tracing**: OpenTelemetry SDK integration with automatic span creation
|
|
19
19
|
- **Operation interceptor**: `OperationTelemetryInterceptor` wraps controller methods in telemetry operations (returns `Observable<unknown>`)
|
|
20
|
-
- **Graceful degradation**: Falls back to `NoopTelemetryFacade` when disabled
|
|
20
|
+
- **Graceful degradation**: Falls back to `NoopTelemetryFacade` when disabled - zero overhead
|
|
21
21
|
- **Health checks**: Integration with health module for observability readiness
|
|
22
22
|
- **Structured logging**: `TelemetryLoggerService` with request correlation IDs
|
|
23
23
|
- **Eager metric init**: `MetricsService` creates instruments at startup via `OnModuleInit`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@breadstone/archipel-platform-telemetry",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.23",
|
|
4
4
|
"description": "OpenTelemetry integration with tracing, metrics, and graceful no-op fallback for NestJS.",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "./src/index.js",
|
|
@@ -28,26 +28,60 @@
|
|
|
28
28
|
"README.md"
|
|
29
29
|
],
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@breadstone/archipel-platform-caching": "0.0.
|
|
32
|
-
"@breadstone/archipel-platform-core": "0.0.
|
|
33
|
-
"@opentelemetry/api": "1.9.1",
|
|
34
|
-
"@opentelemetry/exporter-metrics-otlp-http": "0.215.0",
|
|
35
|
-
"@opentelemetry/exporter-trace-otlp-http": "0.215.0",
|
|
36
|
-
"@opentelemetry/instrumentation-express": "0.63.0",
|
|
37
|
-
"@opentelemetry/instrumentation-http": "0.215.0",
|
|
38
|
-
"@opentelemetry/resources": "2.7.0",
|
|
39
|
-
"@opentelemetry/sdk-node": "0.215.0",
|
|
40
|
-
"@opentelemetry/semantic-conventions": "1.40.0",
|
|
31
|
+
"@breadstone/archipel-platform-caching": "0.0.23",
|
|
32
|
+
"@breadstone/archipel-platform-core": "0.0.23",
|
|
41
33
|
"tslib": "2.8.1"
|
|
42
34
|
},
|
|
43
35
|
"peerDependencies": {
|
|
44
36
|
"@nestjs/common": ">=11.0.0",
|
|
45
37
|
"@nestjs/core": ">=11.0.0",
|
|
38
|
+
"@opentelemetry/api": ">=1.9.0",
|
|
39
|
+
"@opentelemetry/exporter-metrics-otlp-http": ">=0.200.0",
|
|
40
|
+
"@opentelemetry/exporter-trace-otlp-http": ">=0.200.0",
|
|
41
|
+
"@opentelemetry/instrumentation-express": ">=0.60.0",
|
|
42
|
+
"@opentelemetry/instrumentation-http": ">=0.200.0",
|
|
43
|
+
"@opentelemetry/resources": ">=2.0.0",
|
|
44
|
+
"@opentelemetry/sdk-node": ">=0.200.0",
|
|
45
|
+
"@opentelemetry/semantic-conventions": ">=1.30.0",
|
|
46
46
|
"rxjs": ">=7.0.0"
|
|
47
47
|
},
|
|
48
|
+
"peerDependenciesMeta": {
|
|
49
|
+
"@opentelemetry/api": {
|
|
50
|
+
"optional": true
|
|
51
|
+
},
|
|
52
|
+
"@opentelemetry/exporter-metrics-otlp-http": {
|
|
53
|
+
"optional": true
|
|
54
|
+
},
|
|
55
|
+
"@opentelemetry/exporter-trace-otlp-http": {
|
|
56
|
+
"optional": true
|
|
57
|
+
},
|
|
58
|
+
"@opentelemetry/instrumentation-express": {
|
|
59
|
+
"optional": true
|
|
60
|
+
},
|
|
61
|
+
"@opentelemetry/instrumentation-http": {
|
|
62
|
+
"optional": true
|
|
63
|
+
},
|
|
64
|
+
"@opentelemetry/resources": {
|
|
65
|
+
"optional": true
|
|
66
|
+
},
|
|
67
|
+
"@opentelemetry/sdk-node": {
|
|
68
|
+
"optional": true
|
|
69
|
+
},
|
|
70
|
+
"@opentelemetry/semantic-conventions": {
|
|
71
|
+
"optional": true
|
|
72
|
+
}
|
|
73
|
+
},
|
|
48
74
|
"devDependencies": {
|
|
49
75
|
"@nestjs/common": "11.1.19",
|
|
50
76
|
"@nestjs/core": "11.1.19",
|
|
77
|
+
"@opentelemetry/api": "1.9.1",
|
|
78
|
+
"@opentelemetry/exporter-metrics-otlp-http": "0.215.0",
|
|
79
|
+
"@opentelemetry/exporter-trace-otlp-http": "0.215.0",
|
|
80
|
+
"@opentelemetry/instrumentation-express": "0.63.0",
|
|
81
|
+
"@opentelemetry/instrumentation-http": "0.215.0",
|
|
82
|
+
"@opentelemetry/resources": "2.7.0",
|
|
83
|
+
"@opentelemetry/sdk-node": "0.215.0",
|
|
84
|
+
"@opentelemetry/semantic-conventions": "1.40.0",
|
|
51
85
|
"rxjs": "7.8.2",
|
|
52
86
|
"vitest": "4.1.4"
|
|
53
87
|
}
|
package/src/OtelSdkHolder.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ export declare class OtelSdkHolder implements OnApplicationShutdown {
|
|
|
12
12
|
private _sdk?;
|
|
13
13
|
/**
|
|
14
14
|
* Stores the SDK reference so it can be shut down later.
|
|
15
|
-
* Can only be called once
|
|
15
|
+
* Can only be called once - subsequent calls are ignored.
|
|
16
16
|
*/
|
|
17
17
|
setSdk(sdk: unknown): void;
|
|
18
18
|
/** @inheritdoc */
|
package/src/OtelSdkHolder.js
CHANGED
|
@@ -24,11 +24,11 @@ let OtelSdkHolder = OtelSdkHolder_1 = class OtelSdkHolder {
|
|
|
24
24
|
// #region Methods
|
|
25
25
|
/**
|
|
26
26
|
* Stores the SDK reference so it can be shut down later.
|
|
27
|
-
* Can only be called once
|
|
27
|
+
* Can only be called once - subsequent calls are ignored.
|
|
28
28
|
*/
|
|
29
29
|
setSdk(sdk) {
|
|
30
30
|
if (this._sdk) {
|
|
31
|
-
this._logger.warn('OtelSdkHolder.setSdk() called more than once
|
|
31
|
+
this._logger.warn('OtelSdkHolder.setSdk() called more than once - ignoring.');
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
34
|
this._sdk = sdk;
|
package/src/TelemetryModule.js
CHANGED
|
@@ -14,14 +14,14 @@ const MetricsService_1 = require("./metrics/MetricsService");
|
|
|
14
14
|
const TelemetryOptions_1 = require("./options/TelemetryOptions");
|
|
15
15
|
const OtelSdkHolder_1 = require("./OtelSdkHolder");
|
|
16
16
|
const TelemetryRuleEngine_1 = require("./rules/TelemetryRuleEngine");
|
|
17
|
-
const
|
|
17
|
+
const TelemetryTokens_1 = require("./tokens/TelemetryTokens");
|
|
18
18
|
let TelemetryModule = TelemetryModule_1 = class TelemetryModule {
|
|
19
19
|
static register(options) {
|
|
20
20
|
return {
|
|
21
21
|
module: TelemetryModule_1,
|
|
22
22
|
providers: [
|
|
23
23
|
{
|
|
24
|
-
provide:
|
|
24
|
+
provide: TelemetryTokens_1.TELEMETRY_OPTIONS,
|
|
25
25
|
useFactory: () => {
|
|
26
26
|
const merged = {
|
|
27
27
|
...TelemetryOptions_1.defaultTelemetryOptions,
|
|
@@ -32,21 +32,21 @@ let TelemetryModule = TelemetryModule_1 = class TelemetryModule {
|
|
|
32
32
|
},
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
|
-
provide:
|
|
36
|
-
inject: [
|
|
35
|
+
provide: TelemetryTokens_1.TELEMETRY_ENABLED,
|
|
36
|
+
inject: [TelemetryTokens_1.TELEMETRY_OPTIONS],
|
|
37
37
|
useFactory: (cfg) => cfg.enabled,
|
|
38
38
|
},
|
|
39
39
|
{
|
|
40
40
|
provide: TelemetryRuleEngine_1.TelemetryRuleEngine,
|
|
41
|
-
inject: [
|
|
41
|
+
inject: [TelemetryTokens_1.TELEMETRY_OPTIONS, MetricsService_1.MetricsService],
|
|
42
42
|
useFactory: (cfg, metricsService) => new TelemetryRuleEngine_1.TelemetryRuleEngine(cfg, metricsService),
|
|
43
43
|
},
|
|
44
44
|
TelemetryLoggerService_1.TelemetryLoggerService,
|
|
45
45
|
OtelSdkHolder_1.OtelSdkHolder,
|
|
46
46
|
MetricsService_1.MetricsService,
|
|
47
47
|
{
|
|
48
|
-
provide:
|
|
49
|
-
inject: [
|
|
48
|
+
provide: TelemetryTokens_1.TELEMETRY_FACADE,
|
|
49
|
+
inject: [TelemetryTokens_1.TELEMETRY_OPTIONS, TelemetryTokens_1.TELEMETRY_ENABLED, OtelSdkHolder_1.OtelSdkHolder],
|
|
50
50
|
useFactory: async (cfg, enabled, sdkHolder) => {
|
|
51
51
|
if (!enabled)
|
|
52
52
|
return new NoopTelemetryFacade_1.NoopTelemetryFacade();
|
|
@@ -63,13 +63,13 @@ let TelemetryModule = TelemetryModule_1 = class TelemetryModule {
|
|
|
63
63
|
},
|
|
64
64
|
{
|
|
65
65
|
provide: core_1.APP_INTERCEPTOR,
|
|
66
|
-
inject: [
|
|
66
|
+
inject: [TelemetryTokens_1.TELEMETRY_FACADE, TelemetryTokens_1.TELEMETRY_OPTIONS],
|
|
67
67
|
useFactory: (facade, cfg) => cfg.interceptor?.operation
|
|
68
68
|
? new OperationTelemetryInterceptor_1.OperationTelemetryInterceptor(facade)
|
|
69
69
|
: { intercept: (_, next) => next.handle() },
|
|
70
70
|
},
|
|
71
71
|
],
|
|
72
|
-
exports: [
|
|
72
|
+
exports: [TelemetryTokens_1.TELEMETRY_FACADE, MetricsService_1.MetricsService],
|
|
73
73
|
};
|
|
74
74
|
}
|
|
75
75
|
};
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.TelemetryCacheMetricsRecorder = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const common_1 = require("@nestjs/common");
|
|
6
|
-
const
|
|
6
|
+
const TelemetryTokens_1 = require("../tokens/TelemetryTokens");
|
|
7
7
|
// #endregion
|
|
8
8
|
/**
|
|
9
9
|
* Generic cache metrics recorder that forwards cache lifecycle events
|
|
@@ -56,7 +56,7 @@ let TelemetryCacheMetricsRecorder = class TelemetryCacheMetricsRecorder {
|
|
|
56
56
|
exports.TelemetryCacheMetricsRecorder = TelemetryCacheMetricsRecorder;
|
|
57
57
|
exports.TelemetryCacheMetricsRecorder = TelemetryCacheMetricsRecorder = tslib_1.__decorate([
|
|
58
58
|
(0, common_1.Injectable)(),
|
|
59
|
-
tslib_1.__param(0, (0, common_1.Inject)(
|
|
59
|
+
tslib_1.__param(0, (0, common_1.Inject)(TelemetryTokens_1.TELEMETRY_FACADE)),
|
|
60
60
|
tslib_1.__metadata("design:paramtypes", [Object])
|
|
61
61
|
], TelemetryCacheMetricsRecorder);
|
|
62
62
|
//# sourceMappingURL=TelemetryCacheMetricsRecorder.js.map
|
package/src/index.d.ts
CHANGED
package/src/index.js
CHANGED
|
@@ -13,5 +13,5 @@ Object.defineProperty(exports, "OtelSdkHolder", { enumerable: true, get: functio
|
|
|
13
13
|
tslib_1.__exportStar(require("./rules/TelemetryRuleEngine"), exports);
|
|
14
14
|
var TelemetryModule_1 = require("./TelemetryModule");
|
|
15
15
|
Object.defineProperty(exports, "TelemetryModule", { enumerable: true, get: function () { return TelemetryModule_1.TelemetryModule; } });
|
|
16
|
-
tslib_1.__exportStar(require("./tokens"), exports);
|
|
16
|
+
tslib_1.__exportStar(require("./tokens/TelemetryTokens"), exports);
|
|
17
17
|
//# sourceMappingURL=index.js.map
|
|
@@ -5,4 +5,4 @@ exports.TELEMETRY_ENABLED = exports.TELEMETRY_FACADE = exports.TELEMETRY_OPTIONS
|
|
|
5
5
|
exports.TELEMETRY_OPTIONS = Symbol('TELEMETRY_OPTIONS');
|
|
6
6
|
exports.TELEMETRY_FACADE = Symbol('TELEMETRY_FACADE');
|
|
7
7
|
exports.TELEMETRY_ENABLED = Symbol('TELEMETRY_ENABLED');
|
|
8
|
-
//# sourceMappingURL=
|
|
8
|
+
//# sourceMappingURL=TelemetryTokens.js.map
|
|
File without changes
|