@lucaapp/service-utils 1.10.0 → 1.12.0
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.
|
@@ -10,6 +10,7 @@ declare class KafkaClient {
|
|
|
10
10
|
private readonly topicSecrets;
|
|
11
11
|
private readonly admin;
|
|
12
12
|
private readonly producer;
|
|
13
|
+
private readonly consumers;
|
|
13
14
|
readonly serviceIdentity: ServiceIdentity;
|
|
14
15
|
constructor(parentLogger: Logger, kafkaConfig: KafkaConfiguration, topicSecrets: Partial<Record<KafkaTopic, string>>, serviceIdentity: ServiceIdentity);
|
|
15
16
|
connect: () => Promise<void>;
|
|
@@ -23,5 +24,6 @@ declare class KafkaClient {
|
|
|
23
24
|
private ensureTopics;
|
|
24
25
|
consume: <T extends KafkaTopic>(kafkaTopic: T, handler: EventPayloadHandler<T>, fromBeginning?: boolean) => Promise<Consumer>;
|
|
25
26
|
produce: <T extends KafkaTopic>(kafkaTopic: T, key: string, value: KafkaEvent<T>) => Promise<void>;
|
|
27
|
+
shutdown: () => Promise<void>;
|
|
26
28
|
}
|
|
27
29
|
export { KafkaClient };
|
|
@@ -159,6 +159,7 @@ class KafkaClient {
|
|
|
159
159
|
const groupId = `${this.environment.valueOf()}_${this.serviceIdentity.identityName}`;
|
|
160
160
|
try {
|
|
161
161
|
const consumer = this.kafkaClient.consumer({ groupId });
|
|
162
|
+
this.consumers.push(consumer);
|
|
162
163
|
await consumer.connect();
|
|
163
164
|
await consumer.subscribe({ topic, fromBeginning });
|
|
164
165
|
await consumer.run({
|
|
@@ -218,6 +219,19 @@ class KafkaClient {
|
|
|
218
219
|
throw (0, utils_1.logAndGetError)(this.logger, `Could not produce message for topic=${topic}`, error);
|
|
219
220
|
}
|
|
220
221
|
};
|
|
222
|
+
this.shutdown = async () => {
|
|
223
|
+
try {
|
|
224
|
+
for (const consumer of this.consumers) {
|
|
225
|
+
await consumer.disconnect();
|
|
226
|
+
}
|
|
227
|
+
await this.producer.disconnect();
|
|
228
|
+
await this.admin.disconnect();
|
|
229
|
+
this.logger.info('Disconnected kafka consumers and producer');
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
this.logger.error(error, 'Unable to properly disconnect kafka');
|
|
233
|
+
}
|
|
234
|
+
};
|
|
221
235
|
this.environment = kafkaConfig.environment;
|
|
222
236
|
this.logger = parentLogger.child({
|
|
223
237
|
kafkaClientId: kafkaConfig.clientId,
|
|
@@ -243,6 +257,7 @@ class KafkaClient {
|
|
|
243
257
|
});
|
|
244
258
|
this.admin = this.kafkaClient.admin();
|
|
245
259
|
this.producer = this.kafkaClient.producer();
|
|
260
|
+
this.consumers = [];
|
|
246
261
|
}
|
|
247
262
|
catch (error) {
|
|
248
263
|
throw (0, utils_1.logAndGetError)(this.logger, 'Unable to connect to Kafka', error);
|
package/dist/lib/logger/index.js
CHANGED
|
@@ -7,22 +7,22 @@ exports.LoggerFactory = void 0;
|
|
|
7
7
|
const pino_1 = __importDefault(require("pino"));
|
|
8
8
|
const pino_http_1 = __importDefault(require("pino-http"));
|
|
9
9
|
const pick_1 = __importDefault(require("lodash/pick"));
|
|
10
|
-
const
|
|
10
|
+
const requestTracer_1 = require("../requestTracer");
|
|
11
11
|
class LoggerFactory {
|
|
12
12
|
static getLogger(logLevel) {
|
|
13
|
-
return (0, pino_1.default)({ level: logLevel });
|
|
13
|
+
return (0, pino_1.default)({ level: logLevel, mixin: requestTracer_1.getRequestTracerMixin });
|
|
14
14
|
}
|
|
15
15
|
static getHttpLogger(options) {
|
|
16
16
|
const { requestSerializer, responseSerializer, errorSerializer, defaultHttpLogLevel, customMessage, } = new HttpLoggerHelpers(options);
|
|
17
17
|
const logger = this.getLogger(options.logLevel);
|
|
18
18
|
return (0, pino_http_1.default)({
|
|
19
|
-
logger
|
|
19
|
+
logger,
|
|
20
20
|
serializers: {
|
|
21
21
|
req: requestSerializer,
|
|
22
22
|
res: responseSerializer,
|
|
23
23
|
err: errorSerializer,
|
|
24
24
|
},
|
|
25
|
-
customLogLevel: (response, error) => {
|
|
25
|
+
customLogLevel: (_, response, error) => {
|
|
26
26
|
if (response.statusCode >= 400 && response.statusCode < 500)
|
|
27
27
|
return 'warn';
|
|
28
28
|
if (response.statusCode >= 500 || error)
|
|
@@ -30,8 +30,9 @@ class LoggerFactory {
|
|
|
30
30
|
return defaultHttpLogLevel;
|
|
31
31
|
},
|
|
32
32
|
customSuccessMessage: customMessage,
|
|
33
|
-
customErrorMessage:
|
|
34
|
-
|
|
33
|
+
customErrorMessage: customMessage,
|
|
34
|
+
mixin: requestTracer_1.getRequestTracerMixin,
|
|
35
|
+
genReqId: requestTracer_1.getRequestTracerId,
|
|
35
36
|
});
|
|
36
37
|
}
|
|
37
38
|
}
|
|
@@ -51,6 +52,7 @@ class HttpLoggerHelpers {
|
|
|
51
52
|
'x-forwarded-host',
|
|
52
53
|
'x-forwarded-port',
|
|
53
54
|
'x-scheme',
|
|
55
|
+
'x-request-id',
|
|
54
56
|
'user-agent',
|
|
55
57
|
'content-type',
|
|
56
58
|
'accept',
|
|
@@ -69,6 +71,7 @@ class HttpLoggerHelpers {
|
|
|
69
71
|
]);
|
|
70
72
|
return response;
|
|
71
73
|
};
|
|
74
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
72
75
|
this.errorSerializer = (error) => {
|
|
73
76
|
if (error?.parameters)
|
|
74
77
|
error.parameters = undefined;
|
|
@@ -78,12 +81,13 @@ class HttpLoggerHelpers {
|
|
|
78
81
|
error.original.parameters = undefined;
|
|
79
82
|
return error;
|
|
80
83
|
};
|
|
81
|
-
this.customMessage = (response) => {
|
|
82
|
-
const {
|
|
84
|
+
this.customMessage = (request, response) => {
|
|
85
|
+
const { method, originalUrl } = request;
|
|
86
|
+
const { statusCode } = response;
|
|
83
87
|
return `${statusCode} ${method} ${originalUrl}`;
|
|
84
88
|
};
|
|
85
|
-
this.debug =
|
|
86
|
-
this.e2e =
|
|
89
|
+
this.debug = debug;
|
|
90
|
+
this.e2e = e2e;
|
|
87
91
|
this.defaultHttpLogLevel = defaultHttpLogLevel || 'info';
|
|
88
92
|
}
|
|
89
93
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lucaapp/service-utils",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.12.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"files": [
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"kafkajs": "2.1.0",
|
|
44
44
|
"lodash": "^4.17.21",
|
|
45
45
|
"moment": "^2.29.4",
|
|
46
|
-
"pino-http": "
|
|
46
|
+
"pino-http": "8.2.1",
|
|
47
47
|
"prom-client": "14.1.0",
|
|
48
48
|
"uuid": "^9.0.0"
|
|
49
49
|
}
|