sm-utility 2.4.24 → 2.4.26
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/general/command.abstract.d.ts +32 -9
- package/general/command.abstract.js +87 -14
- package/package.json +1 -1
- package/request/axios-custom-client.js +3 -6
- package/request/interceptors/error.interceptor.d.ts +1 -2
- package/request/interceptors/error.interceptor.js +2 -2
- package/request/interceptors/request.interceptor.d.ts +1 -2
- package/request/interceptors/request.interceptor.js +2 -2
- package/request/interceptors/response.interceptor.d.ts +1 -2
- package/request/interceptors/response.interceptor.js +2 -2
- package/request/loggers/error.logger.d.ts +1 -2
- package/request/loggers/error.logger.js +11 -2
- package/request/loggers/request.logger.d.ts +1 -2
- package/request/loggers/request.logger.js +11 -2
- package/request/loggers/response.logger.d.ts +1 -2
- package/request/loggers/response.logger.js +11 -2
- package/request/types.d.ts +1 -6
- package/tracing/index.d.ts +1 -0
- package/tracing/index.js +3 -1
- package/tracing/tracingContextProvider.d.ts +10 -0
- package/tracing/tracingContextProvider.js +23 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { MetadataModel } from './metadata.model';
|
|
2
|
-
import { LeveledLogMethod } from 'winston';
|
|
2
|
+
import { LeveledLogMethod, Logger } from 'winston';
|
|
3
3
|
type LogData<T> = {
|
|
4
4
|
context?: T;
|
|
5
5
|
};
|
|
@@ -10,9 +10,10 @@ type EnhancedLogParams<T, E> = {
|
|
|
10
10
|
error?: E;
|
|
11
11
|
};
|
|
12
12
|
export declare abstract class Command {
|
|
13
|
-
protected
|
|
14
|
-
protected
|
|
15
|
-
|
|
13
|
+
protected className?: string | undefined;
|
|
14
|
+
protected metadata?: MetadataModel | undefined;
|
|
15
|
+
private loggerInstance;
|
|
16
|
+
private lastTime;
|
|
16
17
|
private startTime;
|
|
17
18
|
/**
|
|
18
19
|
* Creates a new instance of the Command class.
|
|
@@ -21,7 +22,7 @@ export declare abstract class Command {
|
|
|
21
22
|
* @param metadata - (Optional) A metadata model containing additional information for the command.
|
|
22
23
|
* If not provided, a new `MetadataModel` will be created with a randomly generated `auditUuid`.
|
|
23
24
|
*/
|
|
24
|
-
constructor(className
|
|
25
|
+
constructor(className?: string | undefined, metadata?: MetadataModel | undefined);
|
|
25
26
|
/**
|
|
26
27
|
* Executes the command logic. This method must be implemented by any class extending the Command base class.
|
|
27
28
|
*
|
|
@@ -48,6 +49,19 @@ export declare abstract class Command {
|
|
|
48
49
|
* }
|
|
49
50
|
*/
|
|
50
51
|
abstract execute(params?: any): Promise<any>;
|
|
52
|
+
/**
|
|
53
|
+
* Sets the logger of the command.
|
|
54
|
+
* @param logger - The logger to be used for the command.
|
|
55
|
+
* @returns The command instance.
|
|
56
|
+
*/
|
|
57
|
+
withLogger(customLogger: Logger): this;
|
|
58
|
+
protected get logger(): Logger;
|
|
59
|
+
/**
|
|
60
|
+
* Sets the metadata of the command that will be included in log messages.
|
|
61
|
+
* @param metadata - The metadata of the command.
|
|
62
|
+
* @returns The command instance.
|
|
63
|
+
*/
|
|
64
|
+
withMetadata(metadata: MetadataModel): this;
|
|
51
65
|
/**
|
|
52
66
|
* Logs that the command has been initiated.
|
|
53
67
|
* @param logData Optional contextual data for the log.
|
|
@@ -64,6 +78,14 @@ export declare abstract class Command {
|
|
|
64
78
|
* @param logData Optional contextual data for the log.
|
|
65
79
|
*/
|
|
66
80
|
protected logUnexpectedFailed<T>(error: Error, logData?: LogData<T>): void;
|
|
81
|
+
protected logExpectedFailed<T>(error: Error, logData?: LogData<T>): void;
|
|
82
|
+
/**
|
|
83
|
+
* Logs that the command has been interrupted.
|
|
84
|
+
* @param error The error that was thrown.
|
|
85
|
+
* @param logData Optional contextual data for the log.
|
|
86
|
+
*/
|
|
87
|
+
protected logInterruptionError<T>(error: Error, logData?: LogData<T>): void;
|
|
88
|
+
protected logEarlyFinish<T>(logData?: LogData<T>): void;
|
|
67
89
|
/**
|
|
68
90
|
* Logs detailed information about the current operation, optionally including execution time and error details.
|
|
69
91
|
*
|
|
@@ -84,7 +106,7 @@ export declare abstract class Command {
|
|
|
84
106
|
* @example
|
|
85
107
|
* // Log a successful operation
|
|
86
108
|
* this.enhancedLog({
|
|
87
|
-
* logMethod: this.logger.info,
|
|
109
|
+
* logMethod: this.logger.info.bind(this.logger),
|
|
88
110
|
* message: 'Operation finished successfully',
|
|
89
111
|
* logData: { userId: '12345' },
|
|
90
112
|
* });
|
|
@@ -92,7 +114,7 @@ export declare abstract class Command {
|
|
|
92
114
|
* @example
|
|
93
115
|
* // Log a failed operation with an error
|
|
94
116
|
* this.enhancedLog({
|
|
95
|
-
* logMethod: this.logger.error,
|
|
117
|
+
* logMethod: this.logger.error.bind(this.logger),
|
|
96
118
|
* message: 'Operation failed',
|
|
97
119
|
* logData: { userId: '12345' },
|
|
98
120
|
* error: new Error('Unexpected error'),
|
|
@@ -101,12 +123,13 @@ export declare abstract class Command {
|
|
|
101
123
|
* @example
|
|
102
124
|
* // Log an initiated operation
|
|
103
125
|
* this.enhancedLog({
|
|
104
|
-
* logMethod: this.logger.info,
|
|
126
|
+
* logMethod: this.logger.info.bind(this.logger),
|
|
105
127
|
* message: 'Operation initiated',
|
|
106
128
|
* });
|
|
107
129
|
*/
|
|
108
130
|
protected enhancedLog<T, E>({ logMethod, message, logData, error, }: EnhancedLogParams<T, E>): void;
|
|
109
|
-
|
|
131
|
+
getAccumulatedExecutionTime(): string;
|
|
132
|
+
getExecutionTimeSinceLastTimestamp(): string;
|
|
110
133
|
private buildLogData;
|
|
111
134
|
}
|
|
112
135
|
export {};
|
|
@@ -4,6 +4,7 @@ exports.Command = void 0;
|
|
|
4
4
|
const logger_1 = require("../logger");
|
|
5
5
|
const metadata_model_1 = require("./metadata.model");
|
|
6
6
|
const uuid_1 = require("uuid");
|
|
7
|
+
const tracing_1 = require("../tracing");
|
|
7
8
|
class Command {
|
|
8
9
|
/**
|
|
9
10
|
* Creates a new instance of the Command class.
|
|
@@ -12,13 +13,48 @@ class Command {
|
|
|
12
13
|
* @param metadata - (Optional) A metadata model containing additional information for the command.
|
|
13
14
|
* If not provided, a new `MetadataModel` will be created with a randomly generated `auditUuid`.
|
|
14
15
|
*/
|
|
15
|
-
constructor(className, metadata
|
|
16
|
-
auditUuid: (0, uuid_1.v4)(),
|
|
17
|
-
})) {
|
|
16
|
+
constructor(className, metadata) {
|
|
18
17
|
this.className = className;
|
|
19
18
|
this.metadata = metadata;
|
|
20
|
-
this.
|
|
21
|
-
this.
|
|
19
|
+
this.className = this.constructor.name;
|
|
20
|
+
if (!this.metadata) {
|
|
21
|
+
this.metadata = new metadata_model_1.MetadataModel({
|
|
22
|
+
auditUuid: (0, uuid_1.v4)(),
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
const startTime = performance.now();
|
|
26
|
+
this.startTime = startTime;
|
|
27
|
+
this.lastTime = startTime;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Sets the logger of the command.
|
|
31
|
+
* @param logger - The logger to be used for the command.
|
|
32
|
+
* @returns The command instance.
|
|
33
|
+
*/
|
|
34
|
+
withLogger(customLogger) {
|
|
35
|
+
this.loggerInstance = customLogger.child({
|
|
36
|
+
'command.name': this.className,
|
|
37
|
+
});
|
|
38
|
+
return this;
|
|
39
|
+
}
|
|
40
|
+
get logger() {
|
|
41
|
+
if (!this.loggerInstance) {
|
|
42
|
+
this.loggerInstance = logger_1.logger.child({
|
|
43
|
+
'command.name': this.className,
|
|
44
|
+
'trace.id': tracing_1.TracingContextProvider.getTraceId(),
|
|
45
|
+
'span.id': tracing_1.TracingContextProvider.getSpanId(),
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
return this.loggerInstance;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Sets the metadata of the command that will be included in log messages.
|
|
52
|
+
* @param metadata - The metadata of the command.
|
|
53
|
+
* @returns The command instance.
|
|
54
|
+
*/
|
|
55
|
+
withMetadata(metadata) {
|
|
56
|
+
this.metadata = metadata;
|
|
57
|
+
return this;
|
|
22
58
|
}
|
|
23
59
|
/**
|
|
24
60
|
* Logs that the command has been initiated.
|
|
@@ -26,7 +62,7 @@ class Command {
|
|
|
26
62
|
*/
|
|
27
63
|
logInitiated(logData) {
|
|
28
64
|
this.enhancedLog({
|
|
29
|
-
logMethod: this.logger.info,
|
|
65
|
+
logMethod: this.logger.info.bind(this.logger),
|
|
30
66
|
message: `${this.className} initiated`,
|
|
31
67
|
logData,
|
|
32
68
|
});
|
|
@@ -37,7 +73,7 @@ class Command {
|
|
|
37
73
|
*/
|
|
38
74
|
logFinished(logData) {
|
|
39
75
|
this.enhancedLog({
|
|
40
|
-
logMethod: this.logger.info,
|
|
76
|
+
logMethod: this.logger.info.bind(this.logger),
|
|
41
77
|
message: `${this.className} finished`,
|
|
42
78
|
logData,
|
|
43
79
|
});
|
|
@@ -49,12 +85,40 @@ class Command {
|
|
|
49
85
|
*/
|
|
50
86
|
logUnexpectedFailed(error, logData) {
|
|
51
87
|
this.enhancedLog({
|
|
52
|
-
logMethod: this.logger.error,
|
|
53
|
-
message: `${this.className} failed`,
|
|
88
|
+
logMethod: this.logger.error.bind(this.logger),
|
|
89
|
+
message: `${this.className} unexpected failed`,
|
|
90
|
+
logData,
|
|
91
|
+
error,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
logExpectedFailed(error, logData) {
|
|
95
|
+
this.enhancedLog({
|
|
96
|
+
logMethod: this.logger.error.bind(this.logger),
|
|
97
|
+
message: `${this.className} expected failed`,
|
|
54
98
|
logData,
|
|
55
99
|
error,
|
|
56
100
|
});
|
|
57
101
|
}
|
|
102
|
+
/**
|
|
103
|
+
* Logs that the command has been interrupted.
|
|
104
|
+
* @param error The error that was thrown.
|
|
105
|
+
* @param logData Optional contextual data for the log.
|
|
106
|
+
*/
|
|
107
|
+
logInterruptionError(error, logData) {
|
|
108
|
+
this.enhancedLog({
|
|
109
|
+
logMethod: this.logger.error.bind(this.logger),
|
|
110
|
+
message: `${this.className} interrupted`,
|
|
111
|
+
logData,
|
|
112
|
+
error,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
logEarlyFinish(logData) {
|
|
116
|
+
this.enhancedLog({
|
|
117
|
+
logMethod: this.logger.info.bind(this.logger),
|
|
118
|
+
message: `${this.className} finished early`,
|
|
119
|
+
logData,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
58
122
|
/**
|
|
59
123
|
* Logs detailed information about the current operation, optionally including execution time and error details.
|
|
60
124
|
*
|
|
@@ -75,7 +139,7 @@ class Command {
|
|
|
75
139
|
* @example
|
|
76
140
|
* // Log a successful operation
|
|
77
141
|
* this.enhancedLog({
|
|
78
|
-
* logMethod: this.logger.info,
|
|
142
|
+
* logMethod: this.logger.info.bind(this.logger),
|
|
79
143
|
* message: 'Operation finished successfully',
|
|
80
144
|
* logData: { userId: '12345' },
|
|
81
145
|
* });
|
|
@@ -83,7 +147,7 @@ class Command {
|
|
|
83
147
|
* @example
|
|
84
148
|
* // Log a failed operation with an error
|
|
85
149
|
* this.enhancedLog({
|
|
86
|
-
* logMethod: this.logger.error,
|
|
150
|
+
* logMethod: this.logger.error.bind(this.logger),
|
|
87
151
|
* message: 'Operation failed',
|
|
88
152
|
* logData: { userId: '12345' },
|
|
89
153
|
* error: new Error('Unexpected error'),
|
|
@@ -92,7 +156,7 @@ class Command {
|
|
|
92
156
|
* @example
|
|
93
157
|
* // Log an initiated operation
|
|
94
158
|
* this.enhancedLog({
|
|
95
|
-
* logMethod: this.logger.info,
|
|
159
|
+
* logMethod: this.logger.info.bind(this.logger),
|
|
96
160
|
* message: 'Operation initiated',
|
|
97
161
|
* });
|
|
98
162
|
*/
|
|
@@ -102,7 +166,7 @@ class Command {
|
|
|
102
166
|
};
|
|
103
167
|
//* Add `executionTime` if the message is not about initiation
|
|
104
168
|
if (!message.includes('initiated')) {
|
|
105
|
-
logPayload.executionTime = this.
|
|
169
|
+
logPayload.executionTime = this.getAccumulatedExecutionTime();
|
|
106
170
|
}
|
|
107
171
|
//* Add error details if present
|
|
108
172
|
if (error) {
|
|
@@ -111,7 +175,7 @@ class Command {
|
|
|
111
175
|
//* Log the message with the appropriate level
|
|
112
176
|
logMethod(message, logPayload);
|
|
113
177
|
}
|
|
114
|
-
|
|
178
|
+
getAccumulatedExecutionTime() {
|
|
115
179
|
const executionTime = performance.now() - this.startTime;
|
|
116
180
|
if (executionTime >= 1000) {
|
|
117
181
|
//* Converting to seconds if the execution time is greater than 1000ms
|
|
@@ -119,6 +183,15 @@ class Command {
|
|
|
119
183
|
}
|
|
120
184
|
return `${executionTime.toFixed(2)}ms`;
|
|
121
185
|
}
|
|
186
|
+
getExecutionTimeSinceLastTimestamp() {
|
|
187
|
+
const now = performance.now();
|
|
188
|
+
const executionTime = now - this.lastTime;
|
|
189
|
+
this.lastTime = now;
|
|
190
|
+
if (executionTime >= 1000) {
|
|
191
|
+
return `${(executionTime / 1000).toFixed(2)}s`;
|
|
192
|
+
}
|
|
193
|
+
return `${executionTime.toFixed(2)}ms`;
|
|
194
|
+
}
|
|
122
195
|
buildLogData(logData) {
|
|
123
196
|
var _a;
|
|
124
197
|
return {
|
package/package.json
CHANGED
|
@@ -5,16 +5,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.createApi = void 0;
|
|
7
7
|
const axios_1 = __importDefault(require("axios"));
|
|
8
|
-
const logger_1 = require("../logger");
|
|
9
8
|
const request_interceptor_1 = require("./interceptors/request.interceptor");
|
|
10
9
|
const response_interceptor_1 = require("./interceptors/response.interceptor");
|
|
11
10
|
const error_interceptor_1 = require("./interceptors/error.interceptor");
|
|
12
11
|
function createApi(axiosConfig) {
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
axiosApi.interceptors.request.use((0, request_interceptor_1.createRequestInterceptor)(scopedLogger), (0, error_interceptor_1.createErrorInterceptor)(scopedLogger));
|
|
17
|
-
axiosApi.interceptors.response.use((0, response_interceptor_1.createResponseInterceptor)(scopedLogger), (0, error_interceptor_1.createErrorInterceptor)(scopedLogger));
|
|
12
|
+
const axiosApi = axios_1.default.create(axiosConfig);
|
|
13
|
+
axiosApi.interceptors.request.use((0, request_interceptor_1.createRequestInterceptor)(), (0, error_interceptor_1.createErrorInterceptor)());
|
|
14
|
+
axiosApi.interceptors.response.use((0, response_interceptor_1.createResponseInterceptor)(), (0, error_interceptor_1.createErrorInterceptor)());
|
|
18
15
|
return axiosApi;
|
|
19
16
|
}
|
|
20
17
|
exports.createApi = createApi;
|
|
@@ -3,12 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createErrorInterceptor = void 0;
|
|
4
4
|
const loggers_1 = require("../loggers");
|
|
5
5
|
const utils_1 = require("../utils");
|
|
6
|
-
function createErrorInterceptor(
|
|
6
|
+
function createErrorInterceptor() {
|
|
7
7
|
return (error) => {
|
|
8
8
|
const { config, message, response } = error;
|
|
9
9
|
const { method, meta } = config || {};
|
|
10
10
|
const fullUrl = (0, utils_1.getFullUrlFromConfig)(config);
|
|
11
|
-
(0, loggers_1.logError)(meta === null || meta === void 0 ? void 0 : meta.requestId, method, fullUrl, response === null || response === void 0 ? void 0 : response.data, response === null || response === void 0 ? void 0 : response.status, message
|
|
11
|
+
(0, loggers_1.logError)(meta === null || meta === void 0 ? void 0 : meta.requestId, method, fullUrl, response === null || response === void 0 ? void 0 : response.data, response === null || response === void 0 ? void 0 : response.status, message);
|
|
12
12
|
throw error;
|
|
13
13
|
};
|
|
14
14
|
}
|
|
@@ -1,3 +1,2 @@
|
|
|
1
1
|
import { InternalAxiosRequestConfig } from "axios";
|
|
2
|
-
|
|
3
|
-
export declare function createRequestInterceptor(log?: Logger): (request: InternalAxiosRequestConfig) => InternalAxiosRequestConfig<any>;
|
|
2
|
+
export declare function createRequestInterceptor(): (request: InternalAxiosRequestConfig) => InternalAxiosRequestConfig<any>;
|
|
@@ -4,7 +4,7 @@ exports.createRequestInterceptor = void 0;
|
|
|
4
4
|
const uuid_1 = require("uuid");
|
|
5
5
|
const utils_1 = require("../utils");
|
|
6
6
|
const loggers_1 = require("../loggers");
|
|
7
|
-
function createRequestInterceptor(
|
|
7
|
+
function createRequestInterceptor() {
|
|
8
8
|
return (request) => {
|
|
9
9
|
if (request === null || request === void 0 ? void 0 : request.logRequest) {
|
|
10
10
|
const { data, params, method } = request;
|
|
@@ -12,7 +12,7 @@ function createRequestInterceptor(log) {
|
|
|
12
12
|
request.meta = request.meta || {};
|
|
13
13
|
request.meta.requestId = (0, uuid_1.v4)();
|
|
14
14
|
request.meta.requestStartedAt = new Date().getTime();
|
|
15
|
-
(0, loggers_1.logRequest)(request.meta.requestId, method, fullUrl, data, params
|
|
15
|
+
(0, loggers_1.logRequest)(request.meta.requestId, method, fullUrl, data, params);
|
|
16
16
|
}
|
|
17
17
|
return request;
|
|
18
18
|
};
|
|
@@ -1,3 +1,2 @@
|
|
|
1
1
|
import { AxiosResponse } from "axios";
|
|
2
|
-
|
|
3
|
-
export declare function createResponseInterceptor(log?: Logger): (response: AxiosResponse) => AxiosResponse<any, any>;
|
|
2
|
+
export declare function createResponseInterceptor(): (response: AxiosResponse) => AxiosResponse<any, any>;
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createResponseInterceptor = void 0;
|
|
4
4
|
const loggers_1 = require("../loggers");
|
|
5
5
|
const utils_1 = require("../utils");
|
|
6
|
-
function createResponseInterceptor(
|
|
6
|
+
function createResponseInterceptor() {
|
|
7
7
|
return (response) => {
|
|
8
8
|
var _a;
|
|
9
9
|
if ((_a = response.config) === null || _a === void 0 ? void 0 : _a.logResponse) {
|
|
@@ -11,7 +11,7 @@ function createResponseInterceptor(log) {
|
|
|
11
11
|
const { method, meta } = config;
|
|
12
12
|
const fullUrl = (0, utils_1.getFullUrlFromConfig)(config);
|
|
13
13
|
const responseTime = (0, utils_1.getResponseTimeFromConfig)(config);
|
|
14
|
-
(0, loggers_1.logResponse)(meta === null || meta === void 0 ? void 0 : meta.requestId, method, fullUrl, data, status, responseTime
|
|
14
|
+
(0, loggers_1.logResponse)(meta === null || meta === void 0 ? void 0 : meta.requestId, method, fullUrl, data, status, responseTime);
|
|
15
15
|
}
|
|
16
16
|
return response;
|
|
17
17
|
};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export declare function logError(id: string, method: string | undefined, url: string | undefined, data: unknown, status: any, message: any, log?: Logger): void;
|
|
1
|
+
export declare function logError(id: string, method: string | undefined, url: string | undefined, data: unknown, status: any, message: any): void;
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.logError = void 0;
|
|
4
4
|
const logger_1 = require("../../logger");
|
|
5
|
-
|
|
5
|
+
const tracing_1 = require("../../tracing");
|
|
6
|
+
function logError(id, method, url, data, status, message) {
|
|
6
7
|
const err = {
|
|
7
8
|
["context-id"]: id,
|
|
8
9
|
url,
|
|
@@ -11,6 +12,14 @@ function logError(id, method, url, data, status, message, log = logger_1.logger)
|
|
|
11
12
|
status,
|
|
12
13
|
message,
|
|
13
14
|
};
|
|
14
|
-
|
|
15
|
+
const traceId = tracing_1.TracingContextProvider.getTraceId();
|
|
16
|
+
if (traceId) {
|
|
17
|
+
err['trace.id'] = traceId;
|
|
18
|
+
}
|
|
19
|
+
const spanId = tracing_1.TracingContextProvider.getSpanId();
|
|
20
|
+
if (spanId) {
|
|
21
|
+
err['span.id'] = spanId;
|
|
22
|
+
}
|
|
23
|
+
logger_1.logger.error("sm-utility/api-error", { err });
|
|
15
24
|
}
|
|
16
25
|
exports.logError = logError;
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export declare function logRequest(id: string, method: string | undefined, url: string | undefined, body: unknown, params: string, log?: Logger): void;
|
|
1
|
+
export declare function logRequest(id: string, method: string | undefined, url: string | undefined, body: unknown, params: string): void;
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.logRequest = void 0;
|
|
4
4
|
const logger_1 = require("../../logger");
|
|
5
|
-
|
|
5
|
+
const tracing_1 = require("../../tracing");
|
|
6
|
+
function logRequest(id, method, url, body, params) {
|
|
6
7
|
const request = {
|
|
7
8
|
["context-id"]: id,
|
|
8
9
|
url,
|
|
@@ -10,6 +11,14 @@ function logRequest(id, method, url, body, params, log = logger_1.logger) {
|
|
|
10
11
|
params,
|
|
11
12
|
body,
|
|
12
13
|
};
|
|
13
|
-
|
|
14
|
+
const traceId = tracing_1.TracingContextProvider.getTraceId();
|
|
15
|
+
if (traceId) {
|
|
16
|
+
request['trace.id'] = traceId;
|
|
17
|
+
}
|
|
18
|
+
const spanId = tracing_1.TracingContextProvider.getSpanId();
|
|
19
|
+
if (spanId) {
|
|
20
|
+
request['span.id'] = spanId;
|
|
21
|
+
}
|
|
22
|
+
logger_1.logger.info("sm-utility/api-request", { request });
|
|
14
23
|
}
|
|
15
24
|
exports.logRequest = logRequest;
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export declare function logResponse(id: string, method: string | undefined, url: string | undefined, body: unknown, status: any, responseTime: string, log?: Logger): void;
|
|
1
|
+
export declare function logResponse(id: string, method: string | undefined, url: string | undefined, body: unknown, status: any, responseTime: string): void;
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.logResponse = void 0;
|
|
4
4
|
const logger_1 = require("../../logger");
|
|
5
|
-
|
|
5
|
+
const tracing_1 = require("../../tracing");
|
|
6
|
+
function logResponse(id, method, url, body, status, responseTime) {
|
|
6
7
|
const response = {
|
|
7
8
|
["context-id"]: id,
|
|
8
9
|
url,
|
|
@@ -11,6 +12,14 @@ function logResponse(id, method, url, body, status, responseTime, log = logger_1
|
|
|
11
12
|
status,
|
|
12
13
|
responseTime,
|
|
13
14
|
};
|
|
14
|
-
|
|
15
|
+
const traceId = tracing_1.TracingContextProvider.getTraceId();
|
|
16
|
+
if (traceId) {
|
|
17
|
+
response['trace.id'] = traceId;
|
|
18
|
+
}
|
|
19
|
+
const spanId = tracing_1.TracingContextProvider.getSpanId();
|
|
20
|
+
if (spanId) {
|
|
21
|
+
response['span.id'] = spanId;
|
|
22
|
+
}
|
|
23
|
+
logger_1.logger.info("sm-utility/api-response", { response });
|
|
15
24
|
}
|
|
16
25
|
exports.logResponse = logResponse;
|
package/request/types.d.ts
CHANGED
|
@@ -7,10 +7,5 @@ declare module 'axios' {
|
|
|
7
7
|
logResponse?: boolean;
|
|
8
8
|
}
|
|
9
9
|
}
|
|
10
|
-
export type
|
|
11
|
-
trace_id: string;
|
|
12
|
-
} & Record<string, any>;
|
|
13
|
-
export type CustomClientCreateApiParams = Omit<AxiosRequestConfig, 'meta'> & {
|
|
14
|
-
logContext?: LoggerContext;
|
|
15
|
-
};
|
|
10
|
+
export type CustomClientCreateApiParams = Omit<AxiosRequestConfig, 'meta'>;
|
|
16
11
|
export type SmAxiosInstance = ReturnType<typeof createApi>;
|
package/tracing/index.d.ts
CHANGED
package/tracing/index.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.OpenTelemetryTracer = void 0;
|
|
3
|
+
exports.TracingContextProvider = exports.OpenTelemetryTracer = void 0;
|
|
4
4
|
var opentelemetry_tracer_1 = require("./opentelemetry-tracer");
|
|
5
5
|
Object.defineProperty(exports, "OpenTelemetryTracer", { enumerable: true, get: function () { return opentelemetry_tracer_1.OpenTelemetryTracer; } });
|
|
6
|
+
var tracingContextProvider_1 = require("./tracingContextProvider");
|
|
7
|
+
Object.defineProperty(exports, "TracingContextProvider", { enumerable: true, get: function () { return tracingContextProvider_1.TracingContextProvider; } });
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare class TracingContextProvider {
|
|
2
|
+
/**
|
|
3
|
+
* Returns the canonical OpenTelemetry trace id (32 hex chars)
|
|
4
|
+
*/
|
|
5
|
+
static getTraceId(): string | undefined;
|
|
6
|
+
/**
|
|
7
|
+
* Returns the current span id (16 hex chars)
|
|
8
|
+
*/
|
|
9
|
+
static getSpanId(): string | undefined;
|
|
10
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TracingContextProvider = void 0;
|
|
4
|
+
const api_1 = require("@opentelemetry/api");
|
|
5
|
+
class TracingContextProvider {
|
|
6
|
+
/**
|
|
7
|
+
* Returns the canonical OpenTelemetry trace id (32 hex chars)
|
|
8
|
+
*/
|
|
9
|
+
static getTraceId() {
|
|
10
|
+
var _a;
|
|
11
|
+
const span = api_1.trace.getSpan(api_1.context.active());
|
|
12
|
+
return (_a = span === null || span === void 0 ? void 0 : span.spanContext()) === null || _a === void 0 ? void 0 : _a.traceId;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Returns the current span id (16 hex chars)
|
|
16
|
+
*/
|
|
17
|
+
static getSpanId() {
|
|
18
|
+
var _a;
|
|
19
|
+
const span = api_1.trace.getSpan(api_1.context.active());
|
|
20
|
+
return (_a = span === null || span === void 0 ? void 0 : span.spanContext()) === null || _a === void 0 ? void 0 : _a.spanId;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.TracingContextProvider = TracingContextProvider;
|