@abyss-project/monitor 1.0.56 → 1.0.57
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.
|
@@ -3,18 +3,33 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.setupGracefulShutdown = void 0;
|
|
4
4
|
const request_tracker_utils_1 = require("../utils/request-tracker.utils");
|
|
5
5
|
const graceful_shutdown_types_1 = require("../types/graceful-shutdown.types");
|
|
6
|
+
const types_1 = require("../types");
|
|
6
7
|
const DEFAULT_SHUTDOWN_TIMEOUT = 30000;
|
|
7
8
|
const DEFAULT_REQUESTS_TIMEOUT = 25000;
|
|
8
9
|
const DEFAULT_CHECK_INTERVAL = 100;
|
|
10
|
+
const createGracefulShutdownLogger = (baseLogger) => {
|
|
11
|
+
const defaultPayload = {
|
|
12
|
+
context: 'GracefulShutdown',
|
|
13
|
+
scenario: types_1.LogScenario.SYSTEM_STARTUP,
|
|
14
|
+
};
|
|
15
|
+
const wrappedLogger = Object.create(baseLogger);
|
|
16
|
+
wrappedLogger.log = (message, payload, options) => baseLogger.log(message, { ...defaultPayload, ...payload }, options);
|
|
17
|
+
wrappedLogger.info = (message, payload, options) => baseLogger.info(message, { ...defaultPayload, ...payload }, options);
|
|
18
|
+
wrappedLogger.debug = (message, payload, options) => baseLogger.debug(message, { ...defaultPayload, ...payload }, options);
|
|
19
|
+
wrappedLogger.warn = (message, payload, options) => baseLogger.warn(message, { ...defaultPayload, ...payload }, options);
|
|
20
|
+
wrappedLogger.error = (message, payload, options) => baseLogger.error(message, { ...defaultPayload, ...payload }, options);
|
|
21
|
+
return wrappedLogger;
|
|
22
|
+
};
|
|
9
23
|
const setupGracefulShutdown = (config) => {
|
|
10
|
-
const { logger, httpServer, databases = [], messageQueues = [], caches = [], otherResources = [], shutdownTimeout = DEFAULT_SHUTDOWN_TIMEOUT, requestsTimeout = DEFAULT_REQUESTS_TIMEOUT, checkInterval = DEFAULT_CHECK_INTERVAL, } = config;
|
|
24
|
+
const { logger: baseLogger, httpServer, databases = [], messageQueues = [], caches = [], otherResources = [], shutdownTimeout = DEFAULT_SHUTDOWN_TIMEOUT, requestsTimeout = DEFAULT_REQUESTS_TIMEOUT, checkInterval = DEFAULT_CHECK_INTERVAL, } = config;
|
|
25
|
+
const logger = createGracefulShutdownLogger(baseLogger);
|
|
11
26
|
const gracefulShutdown = async (signal) => {
|
|
12
27
|
if ((0, request_tracker_utils_1.getIsShuttingDown)()) {
|
|
13
28
|
logger.warn(`Already shutting down, ignoring ${signal}`);
|
|
14
29
|
return;
|
|
15
30
|
}
|
|
16
31
|
(0, request_tracker_utils_1.setIsShuttingDown)(true);
|
|
17
|
-
logger.
|
|
32
|
+
logger.log(`Received ${signal}, starting graceful shutdown...`, {
|
|
18
33
|
data: {
|
|
19
34
|
activeRequests: (0, request_tracker_utils_1.getActiveRequestsCount)(),
|
|
20
35
|
},
|
|
@@ -31,7 +46,7 @@ const setupGracefulShutdown = (config) => {
|
|
|
31
46
|
try {
|
|
32
47
|
const activeRequests = (0, request_tracker_utils_1.getActiveRequestsCount)();
|
|
33
48
|
if (activeRequests > 0) {
|
|
34
|
-
logger.
|
|
49
|
+
logger.log(`Waiting for ${activeRequests} active requests to complete...`, {
|
|
35
50
|
data: {
|
|
36
51
|
activeRequests,
|
|
37
52
|
timeoutMs: requestsTimeout,
|
|
@@ -60,7 +75,7 @@ const setupGracefulShutdown = (config) => {
|
|
|
60
75
|
reject(err);
|
|
61
76
|
}
|
|
62
77
|
else {
|
|
63
|
-
logger.
|
|
78
|
+
logger.log('HTTP server closed, no longer accepting new connections');
|
|
64
79
|
resolve();
|
|
65
80
|
}
|
|
66
81
|
});
|
|
@@ -70,7 +85,7 @@ const setupGracefulShutdown = (config) => {
|
|
|
70
85
|
await Promise.allSettled(messageQueues.map(async (mq) => {
|
|
71
86
|
try {
|
|
72
87
|
await mq.close();
|
|
73
|
-
logger.
|
|
88
|
+
logger.log(`Message queue connection closed${mq.name ? `: ${mq.name}` : ''}`);
|
|
74
89
|
}
|
|
75
90
|
catch (error) {
|
|
76
91
|
logger.error(`Error closing message queue connection${mq.name ? `: ${mq.name}` : ''}`, {
|
|
@@ -86,7 +101,7 @@ const setupGracefulShutdown = (config) => {
|
|
|
86
101
|
await Promise.allSettled(caches.map(async (cache) => {
|
|
87
102
|
try {
|
|
88
103
|
await cache.close();
|
|
89
|
-
logger.
|
|
104
|
+
logger.log(`Cache connection closed${cache.name ? `: ${cache.name}` : ''}`);
|
|
90
105
|
}
|
|
91
106
|
catch (error) {
|
|
92
107
|
logger.error(`Error closing cache connection${cache.name ? `: ${cache.name}` : ''}`, {
|
|
@@ -102,7 +117,7 @@ const setupGracefulShutdown = (config) => {
|
|
|
102
117
|
await Promise.allSettled(databases.map(async (db) => {
|
|
103
118
|
try {
|
|
104
119
|
await db.close();
|
|
105
|
-
logger.
|
|
120
|
+
logger.log(`Database connection closed${db.name ? `: ${db.name}` : ''}`);
|
|
106
121
|
}
|
|
107
122
|
catch (error) {
|
|
108
123
|
logger.error(`Error closing database connection${db.name ? `: ${db.name}` : ''}`, {
|
|
@@ -118,7 +133,7 @@ const setupGracefulShutdown = (config) => {
|
|
|
118
133
|
await Promise.allSettled(otherResources.map(async (resource) => {
|
|
119
134
|
try {
|
|
120
135
|
await resource.close();
|
|
121
|
-
logger.
|
|
136
|
+
logger.log(`Resource closed${resource.name ? `: ${resource.name}` : ''}`);
|
|
122
137
|
}
|
|
123
138
|
catch (error) {
|
|
124
139
|
logger.error(`Error closing resource${resource.name ? `: ${resource.name}` : ''}`, {
|
|
@@ -130,7 +145,7 @@ const setupGracefulShutdown = (config) => {
|
|
|
130
145
|
}
|
|
131
146
|
}));
|
|
132
147
|
}
|
|
133
|
-
logger.
|
|
148
|
+
logger.log('Graceful shutdown completed successfully');
|
|
134
149
|
clearTimeout(forceShutdownTimer);
|
|
135
150
|
process.exit(0);
|
|
136
151
|
}
|
|
@@ -164,6 +179,6 @@ const setupGracefulShutdown = (config) => {
|
|
|
164
179
|
});
|
|
165
180
|
gracefulShutdown('unhandledRejection');
|
|
166
181
|
});
|
|
167
|
-
logger.
|
|
182
|
+
logger.log('Graceful shutdown handlers registered');
|
|
168
183
|
};
|
|
169
184
|
exports.setupGracefulShutdown = setupGracefulShutdown;
|
|
@@ -25,7 +25,7 @@ const waitForActiveRequests = async (timeout = 30000, checkInterval = 100, logge
|
|
|
25
25
|
return new Promise((resolve, reject) => {
|
|
26
26
|
const check = () => {
|
|
27
27
|
if (activeRequests === 0) {
|
|
28
|
-
logger === null || logger === void 0 ? void 0 : logger.
|
|
28
|
+
logger === null || logger === void 0 ? void 0 : logger.log('All active requests completed');
|
|
29
29
|
resolve();
|
|
30
30
|
return;
|
|
31
31
|
}
|