@nsshunt/stsappframework 3.2.1 → 3.2.2
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/commonTypes.js +69 -0
- package/dist/commonTypes.js.map +1 -0
- package/dist/controller/stscontrollerbase.js +14 -0
- package/dist/controller/stscontrollerbase.js.map +1 -0
- package/dist/controller/stslatencycontroller.js +28 -0
- package/dist/controller/stslatencycontroller.js.map +1 -0
- package/dist/index.js.map +1 -0
- package/dist/logger/stsTransportLoggerWinston.js +22 -0
- package/dist/logger/stsTransportLoggerWinston.js.map +1 -0
- package/dist/logger/stsTransportWinston.js +43 -0
- package/dist/logger/stsTransportWinston.js.map +1 -0
- package/{src/middleware/serverNetworkMiddleware.ts → dist/middleware/serverNetworkMiddleware.js} +80 -124
- package/dist/middleware/serverNetworkMiddleware.js.map +1 -0
- package/dist/network.js +38 -0
- package/dist/network.js.map +1 -0
- package/dist/process/masterprocessbase.js +558 -0
- package/dist/process/masterprocessbase.js.map +1 -0
- package/{src/process/processbase.ts → dist/process/processbase.js} +150 -222
- package/dist/process/processbase.js.map +1 -0
- package/{src/process/serverprocessbase.ts → dist/process/serverprocessbase.js} +158 -212
- package/dist/process/serverprocessbase.js.map +1 -0
- package/dist/process/singleprocessbase.js +55 -0
- package/dist/process/singleprocessbase.js.map +1 -0
- package/{src/process/workerprocessbase.ts → dist/process/workerprocessbase.js} +93 -107
- package/dist/process/workerprocessbase.js.map +1 -0
- package/{src/publishertransports/publishTransportUtils.ts → dist/publishertransports/publishTransportUtils.js} +18 -24
- package/dist/publishertransports/publishTransportUtils.js.map +1 -0
- package/dist/route/stslatencyroute.js +15 -0
- package/dist/route/stslatencyroute.js.map +1 -0
- package/dist/route/stsrouterbase.js +21 -0
- package/dist/route/stsrouterbase.js.map +1 -0
- package/dist/stsexpressserver.js +115 -0
- package/dist/stsexpressserver.js.map +1 -0
- package/dist/validation/errors.js +10 -0
- package/dist/validation/errors.js.map +1 -0
- package/dist/vitesttesting/appConfig.js +93 -0
- package/dist/vitesttesting/appConfig.js.map +1 -0
- package/dist/vitesttesting/appSingleWSS.js +122 -0
- package/dist/vitesttesting/appSingleWSS.js.map +1 -0
- package/dist/vitesttesting/server.js +15 -0
- package/dist/vitesttesting/server.js.map +1 -0
- package/dist/vitesttesting/singleservertest.test.js +286 -0
- package/dist/vitesttesting/singleservertest.test.js.map +1 -0
- package/dist/vitesttesting/wsevents.js +3 -0
- package/dist/vitesttesting/wsevents.js.map +1 -0
- package/package.json +7 -3
- package/.github/dependabot.yml +0 -13
- package/.github/workflows/npm-publish.yml +0 -47
- package/.gitignore copy +0 -108
- package/build.sh +0 -37
- package/esbuild.config.js +0 -81
- package/eslint.config.mjs +0 -55
- package/jest/setEnvVars.js +0 -19
- package/keys/server.cert +0 -21
- package/keys/server.key +0 -28
- package/local-redis-stack.conf +0 -2
- package/run-grpc-client.sh +0 -2
- package/run-grpc-server.sh +0 -2
- package/run1.sh +0 -20
- package/run2.sh +0 -20
- package/run3.sh +0 -20
- package/runc1.sh +0 -19
- package/runc2.sh +0 -19
- package/runkafka.sh +0 -19
- package/runkafkaconsume01.sh +0 -21
- package/runkafkaconsume02.sh +0 -21
- package/runpromise.sh +0 -5
- package/runredis.sh +0 -5
- package/runredis1.sh +0 -4
- package/runredis2.sh +0 -24
- package/runredis3.sh +0 -4
- package/runtest1.sh +0 -19
- package/runtest2.sh +0 -19
- package/runtest_ipc_legacy.sh +0 -19
- package/runtest_ipcex.sh +0 -19
- package/runtest_redis.sh +0 -19
- package/runtest_ww.sh +0 -19
- package/src/commonTypes.ts +0 -374
- package/src/controller/stscontrollerbase.ts +0 -14
- package/src/controller/stslatencycontroller.ts +0 -26
- package/src/index.ts +0 -13
- package/src/logger/stsTransportLoggerWinston.ts +0 -24
- package/src/logger/stsTransportWinston.ts +0 -48
- package/src/network.ts +0 -36
- package/src/process/masterprocessbase.ts +0 -674
- package/src/process/singleprocessbase.ts +0 -63
- package/src/route/stslatencyroute.ts +0 -15
- package/src/route/stsrouterbase.ts +0 -21
- package/src/stsexpressserver.ts +0 -137
- package/src/validation/errors.ts +0 -6
- package/src/vitesttesting/appConfig.ts +0 -111
- package/src/vitesttesting/appSingleWSS.ts +0 -142
- package/src/vitesttesting/server.ts +0 -17
- package/src/vitesttesting/singleservertest.test.ts +0 -352
- package/src/vitesttesting/wsevents.ts +0 -44
- package/tsconfig.json +0 -42
- package/vite.config.ts +0 -19
|
@@ -1,123 +1,98 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
import { ISocketIoServerHelper } from '@nsshunt/stssocketioutils'
|
|
30
|
-
|
|
31
|
-
export abstract class ProcessBase extends TinyEmitter implements IProcessBase
|
|
32
|
-
{
|
|
33
|
-
#options: ProcessOptions;
|
|
34
|
-
#instrumentController: PublishInstrumentController | null = null;
|
|
35
|
-
#systemInformationInterval: NodeJS.Timeout | null = null;
|
|
36
|
-
#socketIoServerHelper: ISocketIoServerHelper<STSDefaultClientToServerEvents, STSDefaultServerToClientEvents> | null = null;
|
|
37
|
-
#accessLayer: IDBAccessLayer | null = null;
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ProcessBase = void 0;
|
|
7
|
+
/* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/no-unused-vars: 0 */ // --> OFF
|
|
8
|
+
const pidusage_1 = __importDefault(require("pidusage"));
|
|
9
|
+
const process_1 = require("process");
|
|
10
|
+
const node_cluster_1 = __importDefault(require("node:cluster"));
|
|
11
|
+
const systeminformation_1 = __importDefault(require("systeminformation")); // https://systeminformation.io/
|
|
12
|
+
const network_1 = require("./../network");
|
|
13
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
14
|
+
const stsobservability_1 = require("@nsshunt/stsobservability");
|
|
15
|
+
const stsdatamanagement_1 = require("@nsshunt/stsdatamanagement");
|
|
16
|
+
const stsconfig_1 = require("@nsshunt/stsconfig");
|
|
17
|
+
const http_status_codes_1 = require("http-status-codes");
|
|
18
|
+
const stsobservability_2 = require("@nsshunt/stsobservability");
|
|
19
|
+
const os_1 = __importDefault(require("os"));
|
|
20
|
+
const commonTypes_1 = require("./../commonTypes");
|
|
21
|
+
const tiny_emitter_1 = require("tiny-emitter");
|
|
22
|
+
class ProcessBase extends tiny_emitter_1.TinyEmitter {
|
|
23
|
+
#options;
|
|
24
|
+
#instrumentController = null;
|
|
25
|
+
#systemInformationInterval = null;
|
|
26
|
+
#socketIoServerHelper = null;
|
|
27
|
+
#accessLayer = null;
|
|
38
28
|
//#redisMessageHandler: RedisMessageHandler | null = null;
|
|
39
|
-
|
|
40
|
-
constructor(options: ProcessOptions) {
|
|
29
|
+
constructor(options) {
|
|
41
30
|
super();
|
|
42
31
|
this.#options = options;
|
|
43
|
-
|
|
44
32
|
if (options.serviceName) {
|
|
45
|
-
this.options.serviceProcessContext = CreateServiceProcessContext(options.serviceName, options.serviceVersion, options.serviceInstanceId,
|
|
46
|
-
os.hostname(), process.pid, options.isMaster ? process.pid : process.ppid)
|
|
33
|
+
this.options.serviceProcessContext = (0, commonTypes_1.CreateServiceProcessContext)(options.serviceName, options.serviceVersion, options.serviceInstanceId, os_1.default.hostname(), process.pid, options.isMaster ? process.pid : process.ppid);
|
|
47
34
|
}
|
|
48
35
|
}
|
|
49
|
-
|
|
50
|
-
#GetFormattedLogMessage(message: string): string {
|
|
36
|
+
#GetFormattedLogMessage(message) {
|
|
51
37
|
let prefix = '';
|
|
52
38
|
let col = null;
|
|
53
39
|
const appName = this.options.serviceName;
|
|
54
|
-
|
|
55
|
-
if (cluster.isPrimary) {
|
|
40
|
+
if (node_cluster_1.default.isPrimary) {
|
|
56
41
|
prefix = 'M';
|
|
57
|
-
col =
|
|
58
|
-
}
|
|
42
|
+
col = chalk_1.default.bold.cyan;
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
59
45
|
prefix = 'W';
|
|
60
|
-
col =
|
|
46
|
+
col = chalk_1.default.green;
|
|
61
47
|
}
|
|
62
48
|
return col(`${prefix}(${process.pid}) [${appName}]: ${message}`);
|
|
63
49
|
}
|
|
64
|
-
|
|
65
|
-
LogErrorMessage(message: any) {
|
|
50
|
+
LogErrorMessage(message) {
|
|
66
51
|
this.options.logger.error(this.#GetFormattedLogMessage(message));
|
|
67
52
|
}
|
|
68
|
-
|
|
69
|
-
LogInfoMessage(message: any) {
|
|
53
|
+
LogInfoMessage(message) {
|
|
70
54
|
this.options.logger.info(this.#GetFormattedLogMessage(message));
|
|
71
55
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
this.UpdateInstrument(Gauge.LOGGER, {
|
|
56
|
+
LogMessageToLoggerInstrument(message) {
|
|
57
|
+
this.UpdateInstrument(stsobservability_1.Gauge.LOGGER, {
|
|
75
58
|
LogMessage: this.#GetFormattedLogMessage(message)
|
|
76
|
-
}
|
|
59
|
+
});
|
|
77
60
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
return this.#options as ProcessOptions;
|
|
61
|
+
get options() {
|
|
62
|
+
return this.#options;
|
|
81
63
|
}
|
|
82
|
-
|
|
83
|
-
get shuttingDown(): boolean {
|
|
64
|
+
get shuttingDown() {
|
|
84
65
|
return false;
|
|
85
66
|
}
|
|
86
|
-
|
|
87
|
-
SetupInstrumentation()
|
|
88
|
-
{
|
|
67
|
+
SetupInstrumentation() {
|
|
89
68
|
if (!this.options.serviceProcessContext) {
|
|
90
69
|
return;
|
|
91
70
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
if (goptions.observabilityPublishMode.localeCompare('PROXY') === 0) {
|
|
71
|
+
let publishTransportOptions = null;
|
|
72
|
+
if (stsconfig_1.goptions.observabilityPublishMode.localeCompare('PROXY') === 0) {
|
|
95
73
|
publishTransportOptions = {
|
|
96
|
-
transportType: TransportType.RESTAPI,
|
|
97
|
-
url: `${goptions.imendpoint}:${goptions.import}${goptions.imapiroot}/publishmessage`,
|
|
74
|
+
transportType: stsobservability_2.TransportType.RESTAPI,
|
|
75
|
+
url: `${stsconfig_1.goptions.imendpoint}:${stsconfig_1.goptions.import}${stsconfig_1.goptions.imapiroot}/publishmessage`,
|
|
98
76
|
// socketPath: '/var/run/sts/stsrest01.sock'
|
|
99
77
|
agentOptions: {
|
|
100
|
-
keepAlive: goptions.keepAlive,
|
|
101
|
-
maxSockets: goptions.maxSockets,
|
|
102
|
-
maxTotalSockets: goptions.maxTotalSockets,
|
|
103
|
-
maxFreeSockets: goptions.maxFreeSockets,
|
|
104
|
-
timeout: goptions.timeout,
|
|
105
|
-
rejectUnauthorized: goptions.isProduction // Allows self signed certs in non production mode(s)
|
|
78
|
+
keepAlive: stsconfig_1.goptions.keepAlive,
|
|
79
|
+
maxSockets: stsconfig_1.goptions.maxSockets,
|
|
80
|
+
maxTotalSockets: stsconfig_1.goptions.maxTotalSockets,
|
|
81
|
+
maxFreeSockets: stsconfig_1.goptions.maxFreeSockets,
|
|
82
|
+
timeout: stsconfig_1.goptions.timeout,
|
|
83
|
+
rejectUnauthorized: stsconfig_1.goptions.isProduction // Allows self signed certs in non production mode(s)
|
|
106
84
|
},
|
|
107
85
|
logger: this.options.publisherLogger
|
|
108
86
|
};
|
|
109
|
-
}
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
110
89
|
// Currently, now other types are supported
|
|
111
90
|
return;
|
|
112
91
|
}
|
|
113
|
-
|
|
114
|
-
const httpServer: boolean = (goptions.STSServerType.localeCompare('EXPRESS') === 0) || (goptions.STSServerType.localeCompare('EXPRESS_TLS') === 0);
|
|
115
|
-
|
|
92
|
+
const httpServer = (stsconfig_1.goptions.STSServerType.localeCompare('EXPRESS') === 0) || (stsconfig_1.goptions.STSServerType.localeCompare('EXPRESS_TLS') === 0);
|
|
116
93
|
//const fileName = './dist/publishInstrumentsWebWorker.js';
|
|
117
94
|
//const worker = new Worker(fileName);
|
|
118
|
-
|
|
119
|
-
const instrumentControllerOptions: IPublishInstrumentControllerOptions = {
|
|
120
|
-
|
|
95
|
+
const instrumentControllerOptions = {
|
|
121
96
|
processContext: this.options.serviceProcessContext,
|
|
122
97
|
//payloadType: InstrumentPayloadType.service,
|
|
123
98
|
consoleLogging: this.options.consoleLogging,
|
|
@@ -128,7 +103,7 @@ export abstract class ProcessBase extends TinyEmitter implements IProcessBase
|
|
|
128
103
|
logger: this.options.publisherLogger,
|
|
129
104
|
publishInterval: this.options.publishInterval,
|
|
130
105
|
publishPostFailInterval: 5000, //@@
|
|
131
|
-
instrumentDefinitions: GetInstruments('service'),
|
|
106
|
+
instrumentDefinitions: (0, stsobservability_2.GetInstruments)('service'),
|
|
132
107
|
publishTransportBaseOptions: publishTransportOptions,
|
|
133
108
|
autoStart: true
|
|
134
109
|
/*
|
|
@@ -137,11 +112,9 @@ export abstract class ProcessBase extends TinyEmitter implements IProcessBase
|
|
|
137
112
|
...this.GetAdditionalInstruments()
|
|
138
113
|
]
|
|
139
114
|
*/
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
this.#instrumentController = new PublishInstrumentController(instrumentControllerOptions);
|
|
115
|
+
};
|
|
116
|
+
this.#instrumentController = new stsobservability_2.PublishInstrumentController(instrumentControllerOptions);
|
|
143
117
|
}
|
|
144
|
-
|
|
145
118
|
/*
|
|
146
119
|
#GetDefaultServiceInstruments(httpServer: boolean): InstrumentDefinitions {
|
|
147
120
|
const standardInstruments: InstrumentDefinitions = [
|
|
@@ -152,7 +125,7 @@ export abstract class ProcessBase extends TinyEmitter implements IProcessBase
|
|
|
152
125
|
[ Gauge.NETWORK_RX_GAUGE , GaugeTypes.INSTRUMENT_VELOCITY ],
|
|
153
126
|
[ Gauge.NETWORK_TX_GAUGE, GaugeTypes.INSTRUMENT_VELOCITY ],
|
|
154
127
|
[ Gauge.CPU_LOAD_GAUGE, GaugeTypes.INSTRUMENT_GAUGE, {
|
|
155
|
-
interval: this.options.instrumentationObservationInterval,
|
|
128
|
+
interval: this.options.instrumentationObservationInterval,
|
|
156
129
|
sampleSize: this.options.instrumentationTimeWindow } as InstrumentGaugeOptions],
|
|
157
130
|
[ Gauge.OBJECT_GAUGE, GaugeTypes.INSTRUMENT_OBJECT, {
|
|
158
131
|
label:'InstrumentObjectMaster' } as InstrumentObjectOptions]
|
|
@@ -167,14 +140,14 @@ export abstract class ProcessBase extends TinyEmitter implements IProcessBase
|
|
|
167
140
|
[ Gauge.AUTHENTICATION_RETRY_COUNT_GAUGE, GaugeTypes.INSTRUMENT_GAUGE ], // Total number of new token requests retries
|
|
168
141
|
|
|
169
142
|
[ Gauge.ACTIVE_REQUEST_GAUGE, GaugeTypes.INSTRUMENT_GAUGE, {
|
|
170
|
-
interval: this.options.instrumentationObservationInterval,
|
|
143
|
+
interval: this.options.instrumentationObservationInterval,
|
|
171
144
|
sampleSize: this.options.instrumentationTimeWindow } as InstrumentGaugeOptions],
|
|
172
145
|
[ Gauge.DURATION_GAUGE, GaugeTypes.INSTRUMENT_GAUGE, {
|
|
173
146
|
interval: this.options.instrumentationObservationInterval,
|
|
174
147
|
sampleSize: this.options.instrumentationTimeWindow } as InstrumentGaugeOptions],
|
|
175
148
|
[ Gauge.DURATION_HISTOGRAM_GAUGE, GaugeTypes.INSTRUMENT_HISTOGRAM ],
|
|
176
|
-
[ Gauge.CONNECTION_COUNT_GAUGE, GaugeTypes.INSTRUMENT_GAUGE, {
|
|
177
|
-
interval: this.options.instrumentationObservationInterval,
|
|
149
|
+
[ Gauge.CONNECTION_COUNT_GAUGE, GaugeTypes.INSTRUMENT_GAUGE, {
|
|
150
|
+
interval: this.options.instrumentationObservationInterval,
|
|
178
151
|
sampleSize: this.options.instrumentationTimeWindow } as InstrumentGaugeOptions],
|
|
179
152
|
|
|
180
153
|
[ Gauge.CONNECTION_POOL_TOTAL_GAUGE, GaugeTypes.INSTRUMENT_GAUGE ],
|
|
@@ -196,34 +169,28 @@ export abstract class ProcessBase extends TinyEmitter implements IProcessBase
|
|
|
196
169
|
]
|
|
197
170
|
}
|
|
198
171
|
*/
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
return [ ];
|
|
172
|
+
GetAdditionalInstruments() {
|
|
173
|
+
return [];
|
|
202
174
|
}
|
|
203
|
-
|
|
204
|
-
CollectAdditionalTelemetry(): void { // eslint-disable @typescript-eslint/no-empty-function
|
|
205
|
-
|
|
175
|
+
CollectAdditionalTelemetry() {
|
|
206
176
|
}
|
|
207
|
-
|
|
208
177
|
ProcessStartup = () => {
|
|
209
178
|
// use this as well
|
|
210
179
|
// performance.eventLoopUtilization([utilization1[, utilization2]])
|
|
211
180
|
// https://nodejs.org/api/perf_hooks.html#perf_hooksmonitoreventloopdelayoptions
|
|
212
|
-
|
|
213
181
|
const ExecuteGetStats = async () => {
|
|
214
182
|
const startTime = performance.now();
|
|
215
|
-
|
|
216
183
|
if (this.#instrumentController) {
|
|
217
|
-
const stats = await
|
|
184
|
+
const stats = await (0, pidusage_1.default)(process.pid);
|
|
218
185
|
let useStatsCpu = stats.cpu;
|
|
219
186
|
if (useStatsCpu < 0.01) {
|
|
220
187
|
useStatsCpu = 0.01; //@@ Endure we record something about 0. 0's are filtered from monitoring tools.
|
|
221
188
|
}
|
|
222
|
-
this.#instrumentController.UpdateInstrument(Gauge.CPU_LOAD_GAUGE, {
|
|
189
|
+
this.#instrumentController.UpdateInstrument(stsobservability_1.Gauge.CPU_LOAD_GAUGE, {
|
|
223
190
|
val: useStatsCpu
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
;
|
|
227
194
|
/*
|
|
228
195
|
pidusage(process.pid, (err, stats) => {
|
|
229
196
|
if (this.#instrumentController) {
|
|
@@ -237,56 +204,46 @@ export abstract class ProcessBase extends TinyEmitter implements IProcessBase
|
|
|
237
204
|
}
|
|
238
205
|
});
|
|
239
206
|
*/
|
|
240
|
-
|
|
241
207
|
// https://nodejs.org/api/process.html#processmemoryusage
|
|
242
|
-
const usage = memoryUsage();
|
|
243
|
-
const telemetry
|
|
208
|
+
const usage = (0, process_1.memoryUsage)();
|
|
209
|
+
const telemetry = {
|
|
244
210
|
r: usage.rss,
|
|
245
211
|
t: usage.heapTotal,
|
|
246
212
|
u: usage.heapUsed,
|
|
247
213
|
x: usage.external,
|
|
248
214
|
a: usage.arrayBuffers,
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
this.UpdateInstrument(Gauge.OBJECT_GAUGE, {
|
|
215
|
+
};
|
|
216
|
+
this.UpdateInstrument(stsobservability_1.Gauge.OBJECT_GAUGE, {
|
|
252
217
|
val: telemetry
|
|
253
|
-
}
|
|
254
|
-
|
|
218
|
+
});
|
|
255
219
|
this.CollectAdditionalTelemetry();
|
|
256
|
-
|
|
257
220
|
const totalTime = performance.now() - startTime;
|
|
258
|
-
const nextLoopTime = goptions.systemInformationInterval - totalTime;
|
|
259
|
-
|
|
221
|
+
const nextLoopTime = stsconfig_1.goptions.systemInformationInterval - totalTime;
|
|
260
222
|
this.#systemInformationInterval = setTimeout(ExecuteGetStats, nextLoopTime).unref();
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
this.#systemInformationInterval = setTimeout(ExecuteGetStats, goptions.systemInformationInterval).unref();
|
|
264
|
-
|
|
223
|
+
};
|
|
224
|
+
this.#systemInformationInterval = setTimeout(ExecuteGetStats, stsconfig_1.goptions.systemInformationInterval).unref();
|
|
265
225
|
if (this.options.useDatabase) {
|
|
266
226
|
// Get the accessLayer to force DB connection test
|
|
267
227
|
const accessLayer = this.accessLayer;
|
|
268
228
|
}
|
|
269
|
-
|
|
270
229
|
//@@this.LogInfoMessage(`RedisMessageHandler: redisUrl: [${goptions.imRedisMessageProcessorUrl}]`);
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
UpdateInstrument = (instrumentName: Gauge, telemetry: InstrumentBaseTelemetry) => {
|
|
230
|
+
};
|
|
231
|
+
UpdateInstrument = (instrumentName, telemetry) => {
|
|
274
232
|
if (this.#instrumentController) {
|
|
275
233
|
this.#instrumentController.UpdateInstrument(instrumentName, telemetry);
|
|
276
234
|
}
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
ProcessExit = (processExitDelay: number) => {
|
|
235
|
+
};
|
|
236
|
+
ProcessExit = (processExitDelay) => {
|
|
280
237
|
if (this.options.processExitOnTerminate && this.options.processExitOnTerminate === true) {
|
|
281
238
|
setTimeout(() => {
|
|
282
239
|
this.LogInfoMessage(`Performing process.exit(0).`);
|
|
283
240
|
process.exit(0);
|
|
284
241
|
}, processExitDelay); // Give the workers time to terminate gracefully
|
|
285
|
-
}
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
286
244
|
this.LogInfoMessage(`Performing process.exit(0) - Immediate.`);
|
|
287
245
|
}
|
|
288
|
-
}
|
|
289
|
-
|
|
246
|
+
};
|
|
290
247
|
TerminateInstrumentController = () => {
|
|
291
248
|
if (this.InstrumentController) {
|
|
292
249
|
this.LogInfoMessage(`ProcessBase:TerminateInstrumentController()`);
|
|
@@ -296,104 +253,85 @@ export abstract class ProcessBase extends TinyEmitter implements IProcessBase
|
|
|
296
253
|
}
|
|
297
254
|
}, 100);
|
|
298
255
|
}
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
get InstrumentController(): PublishInstrumentController | null {
|
|
256
|
+
};
|
|
257
|
+
get InstrumentController() {
|
|
302
258
|
return this.#instrumentController;
|
|
303
259
|
}
|
|
304
|
-
|
|
305
|
-
InstrumentExists(instrumentName: Gauge): boolean
|
|
306
|
-
{
|
|
260
|
+
InstrumentExists(instrumentName) {
|
|
307
261
|
if (this.#instrumentController) {
|
|
308
262
|
return this.#instrumentController.InstrumentExists(instrumentName);
|
|
309
263
|
}
|
|
310
264
|
return false;
|
|
311
265
|
}
|
|
312
|
-
|
|
313
266
|
TerminateUIController = () => {
|
|
314
267
|
if (this.GetUIController() !== null) {
|
|
315
268
|
this.LogInfoMessage('ProcessBase:TerminateUIController(): Destroy the user interface controller.');
|
|
316
269
|
this.GetUIController().DestroyUI();
|
|
317
270
|
}
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
async ProcessTerminate(): Promise<void> {
|
|
271
|
+
};
|
|
272
|
+
async ProcessTerminate() {
|
|
321
273
|
this.emit('ProcessTerminate');
|
|
322
|
-
|
|
323
274
|
if (this.#systemInformationInterval) {
|
|
324
275
|
clearTimeout(this.#systemInformationInterval);
|
|
325
276
|
}
|
|
326
277
|
this.#systemInformationInterval = null;
|
|
327
|
-
|
|
328
278
|
//@@this.#redisMessageHandler?.Stop();
|
|
329
279
|
}
|
|
330
|
-
|
|
331
280
|
/**
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
GetUIController()
|
|
281
|
+
* UIController (instance of UIController) to manage a console based user interface associated for this node application.
|
|
282
|
+
* @returns UIController instance to manage a console based user interface associated for this node application.
|
|
283
|
+
*/
|
|
284
|
+
GetUIController() {
|
|
336
285
|
return null;
|
|
337
286
|
}
|
|
338
|
-
|
|
339
|
-
get socketIoServerHelper(): ISocketIoServerHelper<STSDefaultClientToServerEvents, STSDefaultServerToClientEvents> | null
|
|
340
|
-
{
|
|
287
|
+
get socketIoServerHelper() {
|
|
341
288
|
return this.#socketIoServerHelper;
|
|
342
289
|
}
|
|
343
|
-
|
|
344
|
-
set socketIoServerHelper(value: ISocketIoServerHelper<STSDefaultClientToServerEvents, STSDefaultServerToClientEvents> | null)
|
|
345
|
-
{
|
|
290
|
+
set socketIoServerHelper(value) {
|
|
346
291
|
this.#socketIoServerHelper = value;
|
|
347
292
|
}
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
this.UpdateInstrument(Gauge.CONNECTION_POOL_TOTAL_GAUGE, {
|
|
293
|
+
#UpdatePGPoolManagerInstrument = (data) => {
|
|
294
|
+
this.UpdateInstrument(stsobservability_1.Gauge.CONNECTION_POOL_TOTAL_GAUGE, {
|
|
351
295
|
val: data.totalCount
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
this.UpdateInstrument(Gauge.CONNECTION_POOL_IDLE_GAUGE, {
|
|
296
|
+
});
|
|
297
|
+
this.UpdateInstrument(stsobservability_1.Gauge.CONNECTION_POOL_IDLE_GAUGE, {
|
|
355
298
|
val: data.idleCount
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
this.UpdateInstrument(Gauge.CONNECTION_POOL_WAITING_GAUGE, {
|
|
299
|
+
});
|
|
300
|
+
this.UpdateInstrument(stsobservability_1.Gauge.CONNECTION_POOL_WAITING_GAUGE, {
|
|
359
301
|
val: data.waitingCount
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
async TerminateDatabase(): Promise<void> {
|
|
302
|
+
});
|
|
303
|
+
};
|
|
304
|
+
async TerminateDatabase() {
|
|
364
305
|
if (this.#accessLayer) {
|
|
365
306
|
const logPrefix = `ProcessBase:TerminateDatabase():${process.pid}:`;
|
|
366
307
|
this.LogInfoMessage(`${logPrefix} Ending database connections and pools.`);
|
|
367
|
-
this.#accessLayer.off(IDBAccessLayerEvents.UpdateInstruments, this.#UpdatePGPoolManagerInstrument)
|
|
308
|
+
this.#accessLayer.off(stsdatamanagement_1.IDBAccessLayerEvents.UpdateInstruments, this.#UpdatePGPoolManagerInstrument);
|
|
368
309
|
await this.#accessLayer.EndDatabase();
|
|
369
310
|
}
|
|
370
311
|
}
|
|
371
|
-
|
|
372
|
-
get accessLayer(): IDBAccessLayer | null
|
|
373
|
-
{
|
|
312
|
+
get accessLayer() {
|
|
374
313
|
if (this.options.useDatabase) {
|
|
375
314
|
if (this.#accessLayer === null) {
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
accessLayerType: accessLayerType.postgresql,
|
|
315
|
+
this.#accessLayer = new stsdatamanagement_1.DBAccessLayerManager().CreateAccessLayer({
|
|
316
|
+
accessLayerType: stsdatamanagement_1.accessLayerType.postgresql,
|
|
379
317
|
accessLayerOptions: {
|
|
380
318
|
logger: this.options.logger,
|
|
381
319
|
usedefaultdb: false
|
|
382
320
|
}
|
|
383
321
|
});
|
|
384
|
-
|
|
385
|
-
this.#accessLayer.on(IDBAccessLayerEvents.UpdateInstruments, this.#UpdatePGPoolManagerInstrument);
|
|
386
|
-
|
|
322
|
+
this.#accessLayer.on(stsdatamanagement_1.IDBAccessLayerEvents.UpdateInstruments, this.#UpdatePGPoolManagerInstrument);
|
|
387
323
|
(async () => {
|
|
388
324
|
try {
|
|
389
|
-
const retVal = await
|
|
390
|
-
if (retVal.status !== StatusCodes.OK) {
|
|
391
|
-
this.LogInfoMessage(
|
|
392
|
-
} else {
|
|
393
|
-
this.LogInfoMessage(chalk.green(`Database connection successful. Resources: [${retVal.detail}]`));
|
|
325
|
+
const retVal = await this.accessLayer.GetResourceCount();
|
|
326
|
+
if (retVal.status !== http_status_codes_1.StatusCodes.OK) {
|
|
327
|
+
this.LogInfoMessage(chalk_1.default.red(`Unable to get resources from the database. Is the database running? [${JSON.stringify(retVal)}]`));
|
|
394
328
|
}
|
|
395
|
-
|
|
396
|
-
|
|
329
|
+
else {
|
|
330
|
+
this.LogInfoMessage(chalk_1.default.green(`Database connection successful. Resources: [${retVal.detail}]`));
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
catch (error) {
|
|
334
|
+
this.LogInfoMessage(chalk_1.default.red(`Unable to get resources from the database. Is the database running? Error: [${error}]`));
|
|
397
335
|
}
|
|
398
336
|
})();
|
|
399
337
|
}
|
|
@@ -401,27 +339,26 @@ export abstract class ProcessBase extends TinyEmitter implements IProcessBase
|
|
|
401
339
|
}
|
|
402
340
|
return null;
|
|
403
341
|
}
|
|
404
|
-
|
|
405
|
-
GetNumCPUs = async (): Promise<number> => {
|
|
342
|
+
GetNumCPUs = async () => {
|
|
406
343
|
// https://systeminformation.io/
|
|
407
344
|
const valueObject = {
|
|
408
345
|
cpu: '*'
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
const sysinfo = await si.get(valueObject);
|
|
346
|
+
};
|
|
347
|
+
const sysinfo = await systeminformation_1.default.get(valueObject);
|
|
412
348
|
let numCPUs = 2;
|
|
413
|
-
if (goptions.useCPUs > 0) {
|
|
414
|
-
if (goptions.useCPUs >= 1) {
|
|
415
|
-
numCPUs = goptions.useCPUs;
|
|
416
|
-
} else {
|
|
417
|
-
numCPUs = Math.round(sysinfo.cpu.cores * goptions.useCPUs);
|
|
349
|
+
if (stsconfig_1.goptions.useCPUs > 0) {
|
|
350
|
+
if (stsconfig_1.goptions.useCPUs >= 1) {
|
|
351
|
+
numCPUs = stsconfig_1.goptions.useCPUs;
|
|
418
352
|
}
|
|
419
|
-
|
|
353
|
+
else {
|
|
354
|
+
numCPUs = Math.round(sysinfo.cpu.cores * stsconfig_1.goptions.useCPUs);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
else {
|
|
420
358
|
numCPUs = sysinfo.cpu.physicalCores;
|
|
421
359
|
}
|
|
422
360
|
return numCPUs;
|
|
423
|
-
}
|
|
424
|
-
|
|
361
|
+
};
|
|
425
362
|
LogSystemTelemetry = async () => {
|
|
426
363
|
// https://systeminformation.io/
|
|
427
364
|
const valueObject = {
|
|
@@ -429,55 +366,46 @@ export abstract class ProcessBase extends TinyEmitter implements IProcessBase
|
|
|
429
366
|
osInfo: '*',
|
|
430
367
|
cpu: '*',
|
|
431
368
|
mem: '*'
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
const sysinfo = await si.get(valueObject);
|
|
369
|
+
};
|
|
370
|
+
const sysinfo = await systeminformation_1.default.get(valueObject);
|
|
435
371
|
const numCPUs = await this.GetNumCPUs();
|
|
436
372
|
const hostname = sysinfo.osInfo.hostname;
|
|
437
|
-
|
|
438
|
-
const hostaddr = GetFirstNetworkInterface();
|
|
373
|
+
const hostaddr = (0, network_1.GetFirstNetworkInterface)();
|
|
439
374
|
if (hostaddr !== null) {
|
|
440
375
|
this.LogInfoMessage(`Host Address: ${hostaddr}`);
|
|
441
|
-
}
|
|
376
|
+
}
|
|
377
|
+
else {
|
|
442
378
|
this.LogInfoMessage(`Unknown Host Address.`);
|
|
443
379
|
}
|
|
444
380
|
this.LogInfoMessage(`Server starting with ${numCPUs} Cores/Threads`);
|
|
445
|
-
|
|
446
381
|
this.LogInfoMessage(`Hostname: ${hostname}`);
|
|
447
382
|
this.LogInfoMessage(`System: ${JSON.stringify(sysinfo.system)}`);
|
|
448
383
|
this.LogInfoMessage(`OS Info: ${JSON.stringify(sysinfo.osInfo)}`);
|
|
449
384
|
this.LogInfoMessage(`CPU: ${JSON.stringify(sysinfo.cpu)}`);
|
|
450
385
|
this.LogInfoMessage(`Memory: ${JSON.stringify(sysinfo.mem)}`);
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
GetSignalColour = (signal: any) => {
|
|
386
|
+
};
|
|
387
|
+
GetSignalColour = (signal) => {
|
|
454
388
|
let msgcolor = null;
|
|
455
389
|
if (signal === 'SIGINT') {
|
|
456
|
-
msgcolor =
|
|
457
|
-
}
|
|
458
|
-
|
|
390
|
+
msgcolor = chalk_1.default.yellow;
|
|
391
|
+
}
|
|
392
|
+
else {
|
|
393
|
+
msgcolor = chalk_1.default.red;
|
|
459
394
|
}
|
|
460
395
|
return msgcolor;
|
|
461
396
|
};
|
|
462
|
-
|
|
463
|
-
emit<K extends keyof IProcessBaseEvents>(event: K, ...arg: IProcessBaseEvents[K]): this {
|
|
397
|
+
emit(event, ...arg) {
|
|
464
398
|
super.emit(event, arg);
|
|
465
399
|
return this;
|
|
466
400
|
}
|
|
467
|
-
|
|
468
|
-
on<K extends keyof IProcessBaseEvents>(event: K, callback: (...arg: IProcessBaseEvents[K]) => void): this {
|
|
401
|
+
on(event, callback) {
|
|
469
402
|
super.on(event, callback);
|
|
470
403
|
return this;
|
|
471
404
|
}
|
|
472
|
-
|
|
473
|
-
off<K extends keyof IProcessBaseEvents>(event: K, callback: (...arg: IProcessBaseEvents[K]) => void): this {
|
|
405
|
+
off(event, callback) {
|
|
474
406
|
super.off(event, callback);
|
|
475
407
|
return this;
|
|
476
408
|
}
|
|
477
|
-
|
|
478
|
-
/*@@
|
|
479
|
-
get redisMessageHandler(): RedisMessageHandler {
|
|
480
|
-
return this.#redisMessageHandler as RedisMessageHandler;
|
|
481
|
-
}
|
|
482
|
-
*/
|
|
483
409
|
}
|
|
410
|
+
exports.ProcessBase = ProcessBase;
|
|
411
|
+
//# sourceMappingURL=processbase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processbase.js","sourceRoot":"","sources":["../../src/process/processbase.ts"],"names":[],"mappings":"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"}
|