@nsshunt/stsappframework 3.1.233 → 3.1.235

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.
Files changed (51) hide show
  1. package/.github/workflows/npm-publish.yml +18 -29
  2. package/build.sh +12 -9
  3. package/eslint.config.mjs +7 -0
  4. package/package.json +18 -21
  5. package/.eslintrc.json +0 -27
  6. package/babel.config.json +0 -6
  7. package/dist/commonTypes.js +0 -69
  8. package/dist/commonTypes.js.map +0 -1
  9. package/dist/controller/stscontrollerbase.js +0 -14
  10. package/dist/controller/stscontrollerbase.js.map +0 -1
  11. package/dist/controller/stslatencycontroller.js +0 -28
  12. package/dist/controller/stslatencycontroller.js.map +0 -1
  13. package/dist/index.js.map +0 -1
  14. package/dist/logger/stsTransportLoggerWinston.js +0 -22
  15. package/dist/logger/stsTransportLoggerWinston.js.map +0 -1
  16. package/dist/logger/stsTransportWinston.js +0 -43
  17. package/dist/logger/stsTransportWinston.js.map +0 -1
  18. package/dist/middleware/serverNetworkMiddleware.js +0 -199
  19. package/dist/middleware/serverNetworkMiddleware.js.map +0 -1
  20. package/dist/network.js +0 -38
  21. package/dist/network.js.map +0 -1
  22. package/dist/process/masterprocessbase.js +0 -558
  23. package/dist/process/masterprocessbase.js.map +0 -1
  24. package/dist/process/processbase.js +0 -411
  25. package/dist/process/processbase.js.map +0 -1
  26. package/dist/process/serverprocessbase.js +0 -401
  27. package/dist/process/serverprocessbase.js.map +0 -1
  28. package/dist/process/singleprocessbase.js +0 -55
  29. package/dist/process/singleprocessbase.js.map +0 -1
  30. package/dist/process/workerprocessbase.js +0 -210
  31. package/dist/process/workerprocessbase.js.map +0 -1
  32. package/dist/publishertransports/publishTransportUtils.js +0 -47
  33. package/dist/publishertransports/publishTransportUtils.js.map +0 -1
  34. package/dist/route/stslatencyroute.js +0 -15
  35. package/dist/route/stslatencyroute.js.map +0 -1
  36. package/dist/route/stsrouterbase.js +0 -21
  37. package/dist/route/stsrouterbase.js.map +0 -1
  38. package/dist/stsexpressserver.js +0 -115
  39. package/dist/stsexpressserver.js.map +0 -1
  40. package/dist/validation/errors.js +0 -10
  41. package/dist/validation/errors.js.map +0 -1
  42. package/dist/vitesttesting/appConfig.js +0 -93
  43. package/dist/vitesttesting/appConfig.js.map +0 -1
  44. package/dist/vitesttesting/appSingleWSS.js +0 -122
  45. package/dist/vitesttesting/appSingleWSS.js.map +0 -1
  46. package/dist/vitesttesting/server.js +0 -15
  47. package/dist/vitesttesting/server.js.map +0 -1
  48. package/dist/vitesttesting/singleservertest.test.js +0 -286
  49. package/dist/vitesttesting/singleservertest.test.js.map +0 -1
  50. package/dist/vitesttesting/wsevents.js +0 -3
  51. package/dist/vitesttesting/wsevents.js.map +0 -1
@@ -1,411 +0,0 @@
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;
28
- //#redisMessageHandler: RedisMessageHandler | null = null;
29
- constructor(options) {
30
- super();
31
- this.#options = options;
32
- if (options.serviceName) {
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);
34
- }
35
- }
36
- #GetFormattedLogMessage(message) {
37
- let prefix = '';
38
- let col = null;
39
- const appName = this.options.serviceName;
40
- if (node_cluster_1.default.isPrimary) {
41
- prefix = 'M';
42
- col = chalk_1.default.bold.cyan;
43
- }
44
- else {
45
- prefix = 'W';
46
- col = chalk_1.default.green;
47
- }
48
- return col(`${prefix}(${process.pid}) [${appName}]: ${message}`);
49
- }
50
- LogErrorMessage(message) {
51
- this.options.logger.error(this.#GetFormattedLogMessage(message));
52
- }
53
- LogInfoMessage(message) {
54
- this.options.logger.info(this.#GetFormattedLogMessage(message));
55
- }
56
- LogMessageToLoggerInstrument(message) {
57
- this.UpdateInstrument(stsobservability_1.Gauge.LOGGER, {
58
- LogMessage: this.#GetFormattedLogMessage(message)
59
- });
60
- }
61
- get options() {
62
- return this.#options;
63
- }
64
- get shuttingDown() {
65
- return false;
66
- }
67
- SetupInstrumentation() {
68
- if (!this.options.serviceProcessContext) {
69
- return;
70
- }
71
- let publishTransportOptions = null;
72
- if (stsconfig_1.goptions.observabilityPublishMode.localeCompare('PROXY') === 0) {
73
- publishTransportOptions = {
74
- transportType: stsobservability_2.TransportType.RESTAPI,
75
- url: `${stsconfig_1.goptions.imendpoint}:${stsconfig_1.goptions.import}${stsconfig_1.goptions.imapiroot}/publishmessage`,
76
- // socketPath: '/var/run/sts/stsrest01.sock'
77
- agentOptions: {
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)
84
- },
85
- logger: this.options.publisherLogger
86
- };
87
- }
88
- else {
89
- // Currently, now other types are supported
90
- return;
91
- }
92
- const httpServer = (stsconfig_1.goptions.STSServerType.localeCompare('EXPRESS') === 0) || (stsconfig_1.goptions.STSServerType.localeCompare('EXPRESS_TLS') === 0);
93
- //const fileName = './dist/publishInstrumentsWebWorker.js';
94
- //const worker = new Worker(fileName);
95
- const instrumentControllerOptions = {
96
- processContext: this.options.serviceProcessContext,
97
- //payloadType: InstrumentPayloadType.service,
98
- consoleLogging: this.options.consoleLogging,
99
- instrumentLogging: this.options.instrumentLogging,
100
- httpServer,
101
- instrumentationObservationInterval: this.options.instrumentationObservationInterval,
102
- instrumentationTimeWindow: this.options.instrumentationTimeWindow,
103
- logger: this.options.publisherLogger,
104
- publishInterval: this.options.publishInterval,
105
- publishPostFailInterval: 5000, //@@
106
- instrumentDefinitions: (0, stsobservability_2.GetInstruments)('service'),
107
- publishTransportBaseOptions: publishTransportOptions,
108
- autoStart: true
109
- /*
110
- [
111
- ...this.#GetDefaultServiceInstruments(httpServer),
112
- ...this.GetAdditionalInstruments()
113
- ]
114
- */
115
- };
116
- this.#instrumentController = new stsobservability_2.PublishInstrumentController(instrumentControllerOptions);
117
- }
118
- /*
119
- #GetDefaultServiceInstruments(httpServer: boolean): InstrumentDefinitions {
120
- const standardInstruments: InstrumentDefinitions = [
121
- [ Gauge.TIMER_GAUGE, GaugeTypes.INSTRUMENT_TIMER ],
122
- [ Gauge.LOGGER, GaugeTypes.INSTRUMENT_LOG, {
123
- consoleLogging: this.options.consoleLogging,
124
- instrumentLogging: this.options.instrumentLogging } as InstrumentLogOptions],
125
- [ Gauge.NETWORK_RX_GAUGE , GaugeTypes.INSTRUMENT_VELOCITY ],
126
- [ Gauge.NETWORK_TX_GAUGE, GaugeTypes.INSTRUMENT_VELOCITY ],
127
- [ Gauge.CPU_LOAD_GAUGE, GaugeTypes.INSTRUMENT_GAUGE, {
128
- interval: this.options.instrumentationObservationInterval,
129
- sampleSize: this.options.instrumentationTimeWindow } as InstrumentGaugeOptions],
130
- [ Gauge.OBJECT_GAUGE, GaugeTypes.INSTRUMENT_OBJECT, {
131
- label:'InstrumentObjectMaster' } as InstrumentObjectOptions]
132
- ];
133
-
134
- let httpServerInstruments: InstrumentDefinitions = [ ];
135
- if (httpServer) {
136
- httpServerInstruments = [
137
- [ Gauge.REQUEST_COUNT_GAUGE, GaugeTypes.INSTRUMENT_GAUGE ], // Total number of requests serviced
138
- [ Gauge.AUTHENTICATION_COUNT_GAUGE, GaugeTypes.INSTRUMENT_GAUGE ], // Total number of new token requests
139
- [ Gauge.AUTHENTICATION_ERROR_COUNT_GAUGE, GaugeTypes.INSTRUMENT_GAUGE ], // Total number of new token requests errors
140
- [ Gauge.AUTHENTICATION_RETRY_COUNT_GAUGE, GaugeTypes.INSTRUMENT_GAUGE ], // Total number of new token requests retries
141
-
142
- [ Gauge.ACTIVE_REQUEST_GAUGE, GaugeTypes.INSTRUMENT_GAUGE, {
143
- interval: this.options.instrumentationObservationInterval,
144
- sampleSize: this.options.instrumentationTimeWindow } as InstrumentGaugeOptions],
145
- [ Gauge.DURATION_GAUGE, GaugeTypes.INSTRUMENT_GAUGE, {
146
- interval: this.options.instrumentationObservationInterval,
147
- sampleSize: this.options.instrumentationTimeWindow } as InstrumentGaugeOptions],
148
- [ Gauge.DURATION_HISTOGRAM_GAUGE, GaugeTypes.INSTRUMENT_HISTOGRAM ],
149
- [ Gauge.CONNECTION_COUNT_GAUGE, GaugeTypes.INSTRUMENT_GAUGE, {
150
- interval: this.options.instrumentationObservationInterval,
151
- sampleSize: this.options.instrumentationTimeWindow } as InstrumentGaugeOptions],
152
-
153
- [ Gauge.CONNECTION_POOL_TOTAL_GAUGE, GaugeTypes.INSTRUMENT_GAUGE ],
154
- [ Gauge.CONNECTION_POOL_IDLE_GAUGE, GaugeTypes.INSTRUMENT_GAUGE ],
155
- [ Gauge.CONNECTION_POOL_WAITING_GAUGE, GaugeTypes.INSTRUMENT_GAUGE ],
156
- [ Gauge.VELOCITY_GAUGE, GaugeTypes.INSTRUMENT_VELOCITY ], // Requests per second
157
- [ Gauge.ERROR_COUNT_GAUGE, GaugeTypes.INSTRUMENT_GAUGE ],
158
- [ Gauge.RETRY_COUNT_GAUGE, GaugeTypes.INSTRUMENT_GAUGE ],
159
- [ Gauge.LATENCY_GAUGE, GaugeTypes.INSTRUMENT_GAUGE, {
160
- interval: this.options.instrumentationObservationInterval,
161
- sampleSize: this.options.instrumentationTimeWindow } as InstrumentGaugeOptions],
162
- [ Gauge.LATENCY_HISTOGRAM_GAUGE, GaugeTypes.INSTRUMENT_HISTOGRAM ],
163
- [ Gauge.CORE_COUNT_GAUGE, GaugeTypes.INSTRUMENT_GAUGE ]
164
- ]
165
- }
166
- return [
167
- ...standardInstruments,
168
- ...httpServerInstruments
169
- ]
170
- }
171
- */
172
- GetAdditionalInstruments() {
173
- return [];
174
- }
175
- CollectAdditionalTelemetry() {
176
- }
177
- ProcessStartup = () => {
178
- // use this as well
179
- // performance.eventLoopUtilization([utilization1[, utilization2]])
180
- // https://nodejs.org/api/perf_hooks.html#perf_hooksmonitoreventloopdelayoptions
181
- const ExecuteGetStats = async () => {
182
- const startTime = performance.now();
183
- if (this.#instrumentController) {
184
- const stats = await (0, pidusage_1.default)(process.pid);
185
- let useStatsCpu = stats.cpu;
186
- if (useStatsCpu < 0.01) {
187
- useStatsCpu = 0.01; //@@ Endure we record something about 0. 0's are filtered from monitoring tools.
188
- }
189
- this.#instrumentController.UpdateInstrument(stsobservability_1.Gauge.CPU_LOAD_GAUGE, {
190
- val: useStatsCpu
191
- });
192
- }
193
- ;
194
- /*
195
- pidusage(process.pid, (err, stats) => {
196
- if (this.#instrumentController) {
197
- let useStatsCpu = stats.cpu;
198
- if (useStatsCpu < 3) {
199
- useStatsCpu = 3; //@@ Endure we record something about 0. 0's are filtered from monitoring tools.
200
- }
201
- this.#instrumentController.UpdateInstrument(Gauge.CPU_LOAD_GAUGE, {
202
- val: useStatsCpu
203
- } as InstrumentGaugeTelemetry);
204
- }
205
- });
206
- */
207
- // https://nodejs.org/api/process.html#processmemoryusage
208
- const usage = (0, process_1.memoryUsage)();
209
- const telemetry = {
210
- r: usage.rss,
211
- t: usage.heapTotal,
212
- u: usage.heapUsed,
213
- x: usage.external,
214
- a: usage.arrayBuffers,
215
- };
216
- this.UpdateInstrument(stsobservability_1.Gauge.OBJECT_GAUGE, {
217
- val: telemetry
218
- });
219
- this.CollectAdditionalTelemetry();
220
- const totalTime = performance.now() - startTime;
221
- const nextLoopTime = stsconfig_1.goptions.systemInformationInterval - totalTime;
222
- this.#systemInformationInterval = setTimeout(ExecuteGetStats, nextLoopTime).unref();
223
- };
224
- this.#systemInformationInterval = setTimeout(ExecuteGetStats, stsconfig_1.goptions.systemInformationInterval).unref();
225
- if (this.options.useDatabase) {
226
- // Get the accessLayer to force DB connection test
227
- const accessLayer = this.accessLayer;
228
- }
229
- //@@this.LogInfoMessage(`RedisMessageHandler: redisUrl: [${goptions.imRedisMessageProcessorUrl}]`);
230
- };
231
- UpdateInstrument = (instrumentName, telemetry) => {
232
- if (this.#instrumentController) {
233
- this.#instrumentController.UpdateInstrument(instrumentName, telemetry);
234
- }
235
- };
236
- ProcessExit = (processExitDelay) => {
237
- if (this.options.processExitOnTerminate && this.options.processExitOnTerminate === true) {
238
- setTimeout(() => {
239
- this.LogInfoMessage(`Performing process.exit(0).`);
240
- process.exit(0);
241
- }, processExitDelay); // Give the workers time to terminate gracefully
242
- }
243
- else {
244
- this.LogInfoMessage(`Performing process.exit(0) - Immediate.`);
245
- }
246
- };
247
- TerminateInstrumentController = () => {
248
- if (this.InstrumentController) {
249
- this.LogInfoMessage(`ProcessBase:TerminateInstrumentController()`);
250
- setTimeout(() => {
251
- if (this.InstrumentController) {
252
- this.InstrumentController.EndPublish();
253
- }
254
- }, 100);
255
- }
256
- };
257
- get InstrumentController() {
258
- return this.#instrumentController;
259
- }
260
- InstrumentExists(instrumentName) {
261
- if (this.#instrumentController) {
262
- return this.#instrumentController.InstrumentExists(instrumentName);
263
- }
264
- return false;
265
- }
266
- TerminateUIController = () => {
267
- if (this.GetUIController() !== null) {
268
- this.LogInfoMessage('ProcessBase:TerminateUIController(): Destroy the user interface controller.');
269
- this.GetUIController().DestroyUI();
270
- }
271
- };
272
- async ProcessTerminate() {
273
- this.emit('ProcessTerminate');
274
- if (this.#systemInformationInterval) {
275
- clearTimeout(this.#systemInformationInterval);
276
- }
277
- this.#systemInformationInterval = null;
278
- //@@this.#redisMessageHandler?.Stop();
279
- }
280
- /**
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() {
285
- return null;
286
- }
287
- get socketIoServerHelper() {
288
- return this.#socketIoServerHelper;
289
- }
290
- set socketIoServerHelper(value) {
291
- this.#socketIoServerHelper = value;
292
- }
293
- #UpdatePGPoolManagerInstrument = (data) => {
294
- this.UpdateInstrument(stsobservability_1.Gauge.CONNECTION_POOL_TOTAL_GAUGE, {
295
- val: data.totalCount
296
- });
297
- this.UpdateInstrument(stsobservability_1.Gauge.CONNECTION_POOL_IDLE_GAUGE, {
298
- val: data.idleCount
299
- });
300
- this.UpdateInstrument(stsobservability_1.Gauge.CONNECTION_POOL_WAITING_GAUGE, {
301
- val: data.waitingCount
302
- });
303
- };
304
- async TerminateDatabase() {
305
- if (this.#accessLayer) {
306
- const logPrefix = `ProcessBase:TerminateDatabase():${process.pid}:`;
307
- this.LogInfoMessage(`${logPrefix} Ending database connections and pools.`);
308
- this.#accessLayer.off(stsdatamanagement_1.IDBAccessLayerEvents.UpdateInstruments, this.#UpdatePGPoolManagerInstrument);
309
- await this.#accessLayer.EndDatabase();
310
- }
311
- }
312
- get accessLayer() {
313
- if (this.options.useDatabase) {
314
- if (this.#accessLayer === null) {
315
- this.#accessLayer = new stsdatamanagement_1.DBAccessLayerManager().CreateAccessLayer({
316
- accessLayerType: stsdatamanagement_1.accessLayerType.postgresql,
317
- accessLayerOptions: {
318
- logger: this.options.logger,
319
- usedefaultdb: false
320
- }
321
- });
322
- this.#accessLayer.on(stsdatamanagement_1.IDBAccessLayerEvents.UpdateInstruments, this.#UpdatePGPoolManagerInstrument);
323
- (async () => {
324
- try {
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)}]`));
328
- }
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}]`));
335
- }
336
- })();
337
- }
338
- return this.#accessLayer;
339
- }
340
- return null;
341
- }
342
- GetNumCPUs = async () => {
343
- // https://systeminformation.io/
344
- const valueObject = {
345
- cpu: '*'
346
- };
347
- const sysinfo = await systeminformation_1.default.get(valueObject);
348
- let numCPUs = 2;
349
- if (stsconfig_1.goptions.useCPUs > 0) {
350
- if (stsconfig_1.goptions.useCPUs >= 1) {
351
- numCPUs = stsconfig_1.goptions.useCPUs;
352
- }
353
- else {
354
- numCPUs = Math.round(sysinfo.cpu.cores * stsconfig_1.goptions.useCPUs);
355
- }
356
- }
357
- else {
358
- numCPUs = sysinfo.cpu.physicalCores;
359
- }
360
- return numCPUs;
361
- };
362
- LogSystemTelemetry = async () => {
363
- // https://systeminformation.io/
364
- const valueObject = {
365
- system: '*',
366
- osInfo: '*',
367
- cpu: '*',
368
- mem: '*'
369
- };
370
- const sysinfo = await systeminformation_1.default.get(valueObject);
371
- const numCPUs = await this.GetNumCPUs();
372
- const hostname = sysinfo.osInfo.hostname;
373
- const hostaddr = (0, network_1.GetFirstNetworkInterface)();
374
- if (hostaddr !== null) {
375
- this.LogInfoMessage(`Host Address: ${hostaddr}`);
376
- }
377
- else {
378
- this.LogInfoMessage(`Unknown Host Address.`);
379
- }
380
- this.LogInfoMessage(`Server starting with ${numCPUs} Cores/Threads`);
381
- this.LogInfoMessage(`Hostname: ${hostname}`);
382
- this.LogInfoMessage(`System: ${JSON.stringify(sysinfo.system)}`);
383
- this.LogInfoMessage(`OS Info: ${JSON.stringify(sysinfo.osInfo)}`);
384
- this.LogInfoMessage(`CPU: ${JSON.stringify(sysinfo.cpu)}`);
385
- this.LogInfoMessage(`Memory: ${JSON.stringify(sysinfo.mem)}`);
386
- };
387
- GetSignalColour = (signal) => {
388
- let msgcolor = null;
389
- if (signal === 'SIGINT') {
390
- msgcolor = chalk_1.default.yellow;
391
- }
392
- else {
393
- msgcolor = chalk_1.default.red;
394
- }
395
- return msgcolor;
396
- };
397
- emit(event, ...arg) {
398
- super.emit(event, arg);
399
- return this;
400
- }
401
- on(event, callback) {
402
- super.on(event, callback);
403
- return this;
404
- }
405
- off(event, callback) {
406
- super.off(event, callback);
407
- return this;
408
- }
409
- }
410
- exports.ProcessBase = ProcessBase;
411
- //# sourceMappingURL=processbase.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"processbase.js","sourceRoot":"","sources":["../../src/process/processbase.ts"],"names":[],"mappings":"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"}