@codefresh-io/cf-telemetry 2.2.0-alpha.5 → 2.2.0-alpha.7
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/logs/nest/logger-module.js +24 -59
- package/dist/logs/nest/logger-module.js.map +1 -1
- package/dist/logs/nest/logger.js +18 -59
- package/dist/logs/nest/logger.js.map +1 -1
- package/dist/otel/cf-helpers.d.ts +8 -0
- package/dist/otel/cf-helpers.js +70 -1
- package/dist/otel/cf-helpers.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,37 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
var
|
|
6
|
-
|
|
7
|
-
var _, done = false;
|
|
8
|
-
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
9
|
-
var context = {};
|
|
10
|
-
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
11
|
-
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
12
|
-
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
13
|
-
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
14
|
-
if (kind === "accessor") {
|
|
15
|
-
if (result === void 0) continue;
|
|
16
|
-
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
17
|
-
if (_ = accept(result.get)) descriptor.get = _;
|
|
18
|
-
if (_ = accept(result.set)) descriptor.set = _;
|
|
19
|
-
if (_ = accept(result.init)) initializers.unshift(_);
|
|
20
|
-
}
|
|
21
|
-
else if (_ = accept(result)) {
|
|
22
|
-
if (kind === "field") initializers.unshift(_);
|
|
23
|
-
else descriptor[key] = _;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
27
|
-
done = true;
|
|
28
|
-
};
|
|
29
|
-
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
30
|
-
var useValue = arguments.length > 2;
|
|
31
|
-
for (var i = 0; i < initializers.length; i++) {
|
|
32
|
-
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
33
|
-
}
|
|
34
|
-
return useValue ? value : void 0;
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
35
7
|
};
|
|
36
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
9
|
exports.LoggerModule = void 0;
|
|
@@ -39,31 +11,24 @@ const common_1 = require("@nestjs/common");
|
|
|
39
11
|
const express_1 = require("../express");
|
|
40
12
|
const logger_1 = require("./logger");
|
|
41
13
|
// TODO: add options to configure the logger
|
|
42
|
-
let LoggerModule =
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
var LoggerModule = class {
|
|
51
|
-
static { _classThis = this; }
|
|
52
|
-
static {
|
|
53
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
54
|
-
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
55
|
-
LoggerModule = _classThis = _classDescriptor.value;
|
|
56
|
-
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
57
|
-
__runInitializers(_classThis, _classExtraInitializers);
|
|
58
|
-
}
|
|
59
|
-
configure(consumer) {
|
|
60
|
-
const middleware = (0, express_1.httpLoggerMiddlewareFactory)(new logger_1.Logger('http'), 'info');
|
|
61
|
-
consumer
|
|
62
|
-
.apply(middleware)
|
|
63
|
-
.forRoutes({ path: '*', method: common_1.RequestMethod.ALL });
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
return LoggerModule = _classThis;
|
|
67
|
-
})();
|
|
14
|
+
let LoggerModule = class LoggerModule {
|
|
15
|
+
configure(consumer) {
|
|
16
|
+
const middleware = (0, express_1.httpLoggerMiddlewareFactory)(new logger_1.Logger('http'), 'info');
|
|
17
|
+
consumer
|
|
18
|
+
.apply(middleware)
|
|
19
|
+
.forRoutes({ path: '*', method: common_1.RequestMethod.ALL });
|
|
20
|
+
}
|
|
21
|
+
};
|
|
68
22
|
exports.LoggerModule = LoggerModule;
|
|
23
|
+
exports.LoggerModule = LoggerModule = __decorate([
|
|
24
|
+
(0, common_1.Global)(),
|
|
25
|
+
(0, common_1.Module)({
|
|
26
|
+
providers: [logger_1.Logger],
|
|
27
|
+
exports: [logger_1.Logger],
|
|
28
|
+
})
|
|
29
|
+
/**
|
|
30
|
+
* LoggerModule is a global module that provides a logger service,
|
|
31
|
+
* and enables HTTP logging middleware.
|
|
32
|
+
*/
|
|
33
|
+
], LoggerModule);
|
|
69
34
|
//# sourceMappingURL=logger-module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger-module.js","sourceRoot":"","sources":["../../../src/logs/nest/logger-module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logger-module.js","sourceRoot":"","sources":["../../../src/logs/nest/logger-module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA+F;AAC/F,wCAAyD;AACzD,qCAAkC;AAElC,4CAA4C;AAWrC,IAAM,YAAY,GAAlB,MAAM,YAAY;IACvB,SAAS,CAAC,QAA4B;QACpC,MAAM,UAAU,GAAG,IAAA,qCAA2B,EAAC,IAAI,eAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;QAC3E,QAAQ;aACL,KAAK,CAAC,UAAU,CAAC;aACjB,SAAS,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,sBAAa,CAAC,GAAG,EAAE,CAAC,CAAC;IACzD,CAAC;CACF,CAAA;AAPY,oCAAY;uBAAZ,YAAY;IATxB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,eAAM,CAAC;QACnB,OAAO,EAAE,CAAC,eAAM,CAAC;KAClB,CAAC;IACF;;;OAGG;GACU,YAAY,CAOxB"}
|
package/dist/logs/nest/logger.js
CHANGED
|
@@ -1,69 +1,28 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
var
|
|
6
|
-
|
|
7
|
-
var _, done = false;
|
|
8
|
-
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
9
|
-
var context = {};
|
|
10
|
-
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
11
|
-
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
12
|
-
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
13
|
-
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
14
|
-
if (kind === "accessor") {
|
|
15
|
-
if (result === void 0) continue;
|
|
16
|
-
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
17
|
-
if (_ = accept(result.get)) descriptor.get = _;
|
|
18
|
-
if (_ = accept(result.set)) descriptor.set = _;
|
|
19
|
-
if (_ = accept(result.init)) initializers.unshift(_);
|
|
20
|
-
}
|
|
21
|
-
else if (_ = accept(result)) {
|
|
22
|
-
if (kind === "field") initializers.unshift(_);
|
|
23
|
-
else descriptor[key] = _;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
27
|
-
done = true;
|
|
28
|
-
};
|
|
29
|
-
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
30
|
-
var useValue = arguments.length > 2;
|
|
31
|
-
for (var i = 0; i < initializers.length; i++) {
|
|
32
|
-
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
33
|
-
}
|
|
34
|
-
return useValue ? value : void 0;
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
35
7
|
};
|
|
36
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
9
|
exports.Logger = void 0;
|
|
38
10
|
const common_1 = require("@nestjs/common");
|
|
39
11
|
const logger_1 = require("../logger");
|
|
40
|
-
let Logger =
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
let _classSuper = logger_1.Logger;
|
|
46
|
-
var Logger = class extends _classSuper {
|
|
47
|
-
static { _classThis = this; }
|
|
48
|
-
static {
|
|
49
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
50
|
-
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
51
|
-
Logger = _classThis = _classDescriptor.value;
|
|
52
|
-
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
53
|
-
__runInitializers(_classThis, _classExtraInitializers);
|
|
12
|
+
let Logger = class Logger extends logger_1.Logger {
|
|
13
|
+
constructor(...params) {
|
|
14
|
+
let options = params?.at(0);
|
|
15
|
+
if (typeof options === 'string') {
|
|
16
|
+
options = { scope: options, useLastArgAsScope: true };
|
|
54
17
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
if (typeof options === 'string') {
|
|
58
|
-
options = { scope: options, useLastArgAsScope: true };
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
options = { ...options, useLastArgAsScope: true };
|
|
62
|
-
}
|
|
63
|
-
super(options);
|
|
18
|
+
else {
|
|
19
|
+
options = { ...options, useLastArgAsScope: true };
|
|
64
20
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
21
|
+
super(options);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
68
24
|
exports.Logger = Logger;
|
|
25
|
+
exports.Logger = Logger = __decorate([
|
|
26
|
+
(0, common_1.Injectable)({ scope: common_1.Scope.TRANSIENT })
|
|
27
|
+
], Logger);
|
|
69
28
|
//# sourceMappingURL=logger.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/logs/nest/logger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/logs/nest/logger.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAmD;AACnD,sCAAiD;AAG1C,IAAM,MAAM,GAAZ,MAAM,MAAO,SAAQ,eAAU;IACpC,YAAY,GAAG,MAAgD;QAC7D,IAAI,OAAO,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;QACpD,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF,CAAA;AAVY,wBAAM;iBAAN,MAAM;IADlB,IAAA,mBAAU,EAAC,EAAE,KAAK,EAAE,cAAK,CAAC,SAAS,EAAE,CAAC;GAC1B,MAAM,CAUlB"}
|
|
@@ -6,3 +6,11 @@ import { api } from '@opentelemetry/sdk-node';
|
|
|
6
6
|
* Utility wrapper for {@link api.trace.getTracer|api.trace.getTracer}
|
|
7
7
|
**/
|
|
8
8
|
export declare const getTracer: () => api.Tracer;
|
|
9
|
+
/**
|
|
10
|
+
* Decorator wraps a class method in an active span.
|
|
11
|
+
*
|
|
12
|
+
* The span name is set to the `<ClassName> <methodName>`.
|
|
13
|
+
*
|
|
14
|
+
* @param kind {@link api.SpanKind|SpanKind}. Default is `SpanKind.INTERNAL`.
|
|
15
|
+
*/
|
|
16
|
+
export declare const Span: (kind?: api.SpanKind) => (target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<(...args: any[]) => any>) => TypedPropertyDescriptor<(...args: any[]) => any>;
|
package/dist/otel/cf-helpers.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getTracer = void 0;
|
|
3
|
+
exports.Span = exports.getTracer = void 0;
|
|
4
4
|
const sdk_node_1 = require("@opentelemetry/sdk-node");
|
|
5
5
|
const global_config_1 = require("../global-config");
|
|
6
6
|
/**
|
|
@@ -13,4 +13,73 @@ const getTracer = () => {
|
|
|
13
13
|
return sdk_node_1.api.trace.getTracer(global_config_1.globalConfig.serviceName, global_config_1.globalConfig.serviceVersion);
|
|
14
14
|
};
|
|
15
15
|
exports.getTracer = getTracer;
|
|
16
|
+
/**
|
|
17
|
+
* Decorator wraps a class method in an active span.
|
|
18
|
+
*
|
|
19
|
+
* The span name is set to the `<ClassName> <methodName>`.
|
|
20
|
+
*
|
|
21
|
+
* @param kind {@link api.SpanKind|SpanKind}. Default is `SpanKind.INTERNAL`.
|
|
22
|
+
*/
|
|
23
|
+
const Span = (kind = sdk_node_1.api.SpanKind.INTERNAL) => {
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/no-wrapper-object-types, @typescript-eslint/no-explicit-any
|
|
25
|
+
return (target, propertyKey, descriptor) => {
|
|
26
|
+
const originalMethod = descriptor.value;
|
|
27
|
+
descriptor.value = function (...args) {
|
|
28
|
+
return (0, exports.getTracer)().startActiveSpan(`${target.constructor.name} ${String(propertyKey)}`, { kind }, (span) => {
|
|
29
|
+
try {
|
|
30
|
+
const result = originalMethod.apply(this, args);
|
|
31
|
+
/**
|
|
32
|
+
* It is crucial to check for thenables instead of Promises,
|
|
33
|
+
* because multiple libs (like mongoose) use a custom Promise implementation.
|
|
34
|
+
*/
|
|
35
|
+
if (typeof result?.then === 'function') {
|
|
36
|
+
return result
|
|
37
|
+
.then((res) => {
|
|
38
|
+
// Async success handling
|
|
39
|
+
span.setStatus({ code: sdk_node_1.api.SpanStatusCode.OK });
|
|
40
|
+
span.end();
|
|
41
|
+
return res;
|
|
42
|
+
})
|
|
43
|
+
.catch((exception) => {
|
|
44
|
+
// Async error handling
|
|
45
|
+
if (exception instanceof Error) {
|
|
46
|
+
span.recordException(exception);
|
|
47
|
+
span.setStatus({
|
|
48
|
+
code: sdk_node_1.api.SpanStatusCode.ERROR,
|
|
49
|
+
message: exception.message,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
span.setStatus({ code: sdk_node_1.api.SpanStatusCode.ERROR });
|
|
54
|
+
}
|
|
55
|
+
span.end();
|
|
56
|
+
throw exception;
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
// Sync success handling
|
|
60
|
+
span.setStatus({ code: sdk_node_1.api.SpanStatusCode.OK });
|
|
61
|
+
span.end();
|
|
62
|
+
return result;
|
|
63
|
+
}
|
|
64
|
+
catch (exception) {
|
|
65
|
+
// Sync error handling
|
|
66
|
+
if (exception instanceof Error) {
|
|
67
|
+
span.recordException(exception);
|
|
68
|
+
span.setStatus({
|
|
69
|
+
code: sdk_node_1.api.SpanStatusCode.ERROR,
|
|
70
|
+
message: exception.message,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
span.setStatus({ code: sdk_node_1.api.SpanStatusCode.ERROR });
|
|
75
|
+
}
|
|
76
|
+
span.end();
|
|
77
|
+
throw exception;
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
};
|
|
81
|
+
return descriptor;
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
exports.Span = Span;
|
|
16
85
|
//# sourceMappingURL=cf-helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cf-helpers.js","sourceRoot":"","sources":["../../src/otel/cf-helpers.ts"],"names":[],"mappings":";;;AAAA,sDAA8C;AAC9C,oDAAgD;AAEhD;;;;;IAKI;AACG,MAAM,SAAS,GAAG,GAAG,EAAE;IAC5B,OAAO,cAAG,CAAC,KAAK,CAAC,SAAS,CAAC,4BAAY,CAAC,WAAW,EAAE,4BAAY,CAAC,cAAc,CAAC,CAAC;AACpF,CAAC,CAAC;AAFW,QAAA,SAAS,aAEpB"}
|
|
1
|
+
{"version":3,"file":"cf-helpers.js","sourceRoot":"","sources":["../../src/otel/cf-helpers.ts"],"names":[],"mappings":"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"}
|