@nsshunt/stsappframework 3.1.209 → 3.1.210
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/build.sh +5 -0
- package/dist/index.js +0 -5
- package/dist/index.js.map +1 -1
- package/dist/masterprocessbase.js +3 -53
- package/dist/masterprocessbase.js.map +1 -1
- package/dist/processbase.js +4 -17
- package/dist/processbase.js.map +1 -1
- package/dist/testing/app.js +0 -457
- package/dist/testing/app.js.map +1 -1
- package/dist/workerprocessbase.js +1 -36
- package/dist/workerprocessbase.js.map +1 -1
- package/package.json +14 -13
- package/src/commonTypes.ts +2 -2
- package/src/index.ts +0 -5
- package/src/masterprocessbase.ts +4 -18
- package/src/processbase.ts +7 -22
- package/src/testing/app.ts +1 -530
- package/src/workerprocessbase.ts +1 -40
- package/types/commonTypes.d.ts +0 -2
- package/types/commonTypes.d.ts.map +1 -1
- package/types/index.d.ts +0 -5
- package/types/index.d.ts.map +1 -1
- package/types/masterprocessbase.d.ts.map +1 -1
- package/types/processbase.d.ts +0 -2
- package/types/processbase.d.ts.map +1 -1
- package/types/workerprocessbase.d.ts.map +1 -1
- package/dist/ipcMessageHandler.js +0 -189
- package/dist/ipcMessageHandler.js.map +0 -1
- package/dist/ipcMessageManager.js +0 -146
- package/dist/ipcMessageManager.js.map +0 -1
- package/dist/ipcMessageProcessorPrimary.js +0 -65
- package/dist/ipcMessageProcessorPrimary.js.map +0 -1
- package/dist/ipcMessageProcessorWorker.js +0 -61
- package/dist/ipcMessageProcessorWorker.js.map +0 -1
- package/dist/messagehandling/webWorkerMessageHandler.js +0 -280
- package/dist/messagehandling/webWorkerMessageHandler.js.map +0 -1
- package/dist/messagehandling/webWorkerSupport.js +0 -62
- package/dist/messagehandling/webWorkerSupport.js.map +0 -1
- package/dist/redisMessageHandler.js +0 -305
- package/dist/redisMessageHandler.js.map +0 -1
- package/dist/redisMessageHandler.test.js +0 -129
- package/dist/redisMessageHandler.test.js.map +0 -1
- package/dist/testing/app_ipc_legacy.js +0 -84
- package/dist/testing/app_ipc_legacy.js.map +0 -1
- package/dist/testing/app_ipcex.js +0 -69
- package/dist/testing/app_ipcex.js.map +0 -1
- package/dist/testing/app_ww.js +0 -54
- package/dist/testing/app_ww.js.map +0 -1
- package/src/ipcMessageHandler.ts +0 -201
- package/src/ipcMessageManager.ts +0 -171
- package/src/ipcMessageProcessorPrimary.ts +0 -76
- package/src/ipcMessageProcessorWorker.ts +0 -70
- package/src/messagehandling/webWorkerMessageHandler.ts +0 -341
- package/src/messagehandling/webWorkerSupport.ts +0 -66
- package/src/redisMessageHandler.test.ts +0 -157
- package/src/redisMessageHandler.ts +0 -371
- package/src/testing/app_ipc_legacy.ts +0 -87
- package/src/testing/app_ipcex.ts +0 -68
- package/src/testing/app_ww.ts +0 -68
- package/types/ipcMessageHandler.d.ts +0 -30
- package/types/ipcMessageHandler.d.ts.map +0 -1
- package/types/ipcMessageManager.d.ts +0 -30
- package/types/ipcMessageManager.d.ts.map +0 -1
- package/types/ipcMessageProcessorPrimary.d.ts +0 -26
- package/types/ipcMessageProcessorPrimary.d.ts.map +0 -1
- package/types/ipcMessageProcessorWorker.d.ts +0 -25
- package/types/ipcMessageProcessorWorker.d.ts.map +0 -1
- package/types/messagehandling/webWorkerMessageHandler.d.ts +0 -52
- package/types/messagehandling/webWorkerMessageHandler.d.ts.map +0 -1
- package/types/messagehandling/webWorkerSupport.d.ts +0 -6
- package/types/messagehandling/webWorkerSupport.d.ts.map +0 -1
- package/types/redisMessageHandler.d.ts +0 -51
- package/types/redisMessageHandler.d.ts.map +0 -1
- package/types/redisMessageHandler.test.d.ts +0 -2
- package/types/redisMessageHandler.test.d.ts.map +0 -1
- package/types/testing/app_ipc_legacy.d.ts +0 -2
- package/types/testing/app_ipc_legacy.d.ts.map +0 -1
- package/types/testing/app_ipcex.d.ts +0 -2
- package/types/testing/app_ipcex.d.ts.map +0 -1
- package/types/testing/app_ww.d.ts +0 -2
- package/types/testing/app_ww.d.ts.map +0 -1
package/src/masterprocessbase.ts
CHANGED
|
@@ -27,9 +27,7 @@ import { InstrumentDefinitions } from '@nsshunt/stsobservability'
|
|
|
27
27
|
import { IPCMessagePayload, IPCMessageCommand } from './commonTypes'
|
|
28
28
|
|
|
29
29
|
import { STSTransportLoggerWinston } from './stsTransportLoggerWinston'
|
|
30
|
-
import {
|
|
31
|
-
|
|
32
|
-
import { RedisMessageHandler } from './redisMessageHandler';
|
|
30
|
+
import { JSONObject } from "@nsshunt/stsutils";
|
|
33
31
|
|
|
34
32
|
import { GetFirstNetworkInterface } from './network';
|
|
35
33
|
|
|
@@ -619,27 +617,13 @@ export class MasterProcessBase extends ProcessBase implements IMasterProcessBase
|
|
|
619
617
|
}
|
|
620
618
|
|
|
621
619
|
/*
|
|
622
|
-
const stsServiceControl: RedisMessageHandler = new RedisMessageHandler({
|
|
623
|
-
logger: this.options.logger,
|
|
624
|
-
role: 'SERVER',
|
|
625
|
-
redisUrl: goptions.imRedisMessageProcessorUrl,
|
|
626
|
-
namespace: 'stsServiceControl',
|
|
627
|
-
groups: [ 'stsServiceControlGroup' ]
|
|
628
|
-
});
|
|
629
|
-
stsServiceControl.Start();
|
|
630
|
-
|
|
631
|
-
stsServiceControl.on('ping_ex', (pingData: JSONObject, callback: any) => {
|
|
632
|
-
console.log(chalk.yellow(`${process.pid}: stsServiceControl.on(ping): [${JSON.stringify(pingData)}]`));
|
|
633
|
-
callback({pingData, dateTime: new Date().getTime()})
|
|
634
|
-
});
|
|
635
|
-
*/
|
|
636
|
-
|
|
637
620
|
this.redisMessageHandler.AddGroup('primary');
|
|
638
621
|
|
|
639
622
|
this.redisMessageHandler.on('GetSystemInformation', async (args: JSONObject, callback: any) => {
|
|
640
623
|
const retVal = await this.#GetSystemInformation();
|
|
641
624
|
callback(retVal);
|
|
642
625
|
});
|
|
626
|
+
*/
|
|
643
627
|
|
|
644
628
|
this.MasterStarted();
|
|
645
629
|
|
|
@@ -661,6 +645,7 @@ export class MasterProcessBase extends ProcessBase implements IMasterProcessBase
|
|
|
661
645
|
}
|
|
662
646
|
}
|
|
663
647
|
|
|
648
|
+
/*
|
|
664
649
|
#GetSystemInformation = async (): Promise<JSONObject> => {
|
|
665
650
|
// https://systeminformation.io/
|
|
666
651
|
const valueObject = {
|
|
@@ -704,4 +689,5 @@ export class MasterProcessBase extends ProcessBase implements IMasterProcessBase
|
|
|
704
689
|
|
|
705
690
|
return sysInfo;
|
|
706
691
|
}
|
|
692
|
+
*/
|
|
707
693
|
}
|
package/src/processbase.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
/* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/no-unused-vars: 0 */ // --> OFF
|
|
2
2
|
import pidusage from 'pidusage'
|
|
3
3
|
import { memoryUsage } from 'process'
|
|
4
|
-
import path from 'node:path';
|
|
5
4
|
import cluster from 'node:cluster'
|
|
6
5
|
import si from 'systeminformation' // https://systeminformation.io/
|
|
7
6
|
import { GetFirstNetworkInterface } from './network'
|
|
8
7
|
|
|
9
8
|
import chalk from 'chalk';
|
|
10
9
|
|
|
11
|
-
import { Gauge,
|
|
10
|
+
import { Gauge, InstrumentBaseTelemetry, InstrumentGaugeTelemetry, InstrumentObjectTelemetry, InstrumentLogTelemetry } from '@nsshunt/stsobservability'
|
|
12
11
|
|
|
13
12
|
import { IDBAccessLayer, accessLayerType, DBAccessLayerManager, IDBAccessLayerEvents } from '@nsshunt/stsdatamanagement'
|
|
14
13
|
|
|
@@ -19,19 +18,14 @@ import { StatusCodes } from 'http-status-codes'
|
|
|
19
18
|
|
|
20
19
|
import { PublishInstrumentController, IPublishInstrumentControllerOptions, InstrumentDefinitions,
|
|
21
20
|
TransportType, IPublishTransportRESTServerOptions,
|
|
22
|
-
PublishTransportRESTServer, IPublisherTransport,
|
|
23
21
|
STSDefaultClientToServerEvents, STSDefaultServerToClientEvents, GetInstruments } from '@nsshunt/stsobservability'
|
|
24
22
|
|
|
25
23
|
import os from 'os';
|
|
26
24
|
|
|
27
25
|
import { IProcessBase, ISocketIoServerHelper, CreateServiceProcessContext, ProcessOptions, STSServerType } from './commonTypes'
|
|
28
26
|
|
|
29
|
-
import { RedisMessageHandler } from '
|
|
27
|
+
//@@import { RedisMessageHandler } from '@nsshunt/stsmessaging'
|
|
30
28
|
import { TinyEmitter } from 'tiny-emitter';
|
|
31
|
-
import { WorkerInstance } from './testertesting/workerInstance';
|
|
32
|
-
|
|
33
|
-
import { Worker } from 'worker_threads'
|
|
34
|
-
import { status } from '@grpc/grpc-js';
|
|
35
29
|
|
|
36
30
|
export abstract class ProcessBase extends TinyEmitter implements IProcessBase
|
|
37
31
|
{
|
|
@@ -40,7 +34,7 @@ export abstract class ProcessBase extends TinyEmitter implements IProcessBase
|
|
|
40
34
|
#systemInformationInterval: NodeJS.Timeout | null = null;
|
|
41
35
|
#socketIoServerHelper: ISocketIoServerHelper<STSDefaultClientToServerEvents, STSDefaultServerToClientEvents> | null = null;
|
|
42
36
|
#accessLayer: IDBAccessLayer | null = null;
|
|
43
|
-
|
|
37
|
+
//#redisMessageHandler: RedisMessageHandler | null = null;
|
|
44
38
|
|
|
45
39
|
constructor(options: ProcessOptions) {
|
|
46
40
|
super();
|
|
@@ -272,18 +266,7 @@ export abstract class ProcessBase extends TinyEmitter implements IProcessBase
|
|
|
272
266
|
const accessLayer = this.accessLayer;
|
|
273
267
|
}
|
|
274
268
|
|
|
275
|
-
this.LogInfoMessage(`RedisMessageHandler: redisUrl: [${goptions.imRedisMessageProcessorUrl}]`);
|
|
276
|
-
|
|
277
|
-
this.#redisMessageHandler = new RedisMessageHandler({
|
|
278
|
-
logger: this.options.logger,
|
|
279
|
-
role: 'CLIENT',
|
|
280
|
-
redisUrl: goptions.imRedisMessageProcessorUrl,
|
|
281
|
-
namespace: 'stsServiceControl',
|
|
282
|
-
groups: [ ],
|
|
283
|
-
ignoreEvents: [ 'ping' ],
|
|
284
|
-
processOptions: this.options
|
|
285
|
-
});
|
|
286
|
-
this.#redisMessageHandler.Start();
|
|
269
|
+
//@@this.LogInfoMessage(`RedisMessageHandler: redisUrl: [${goptions.imRedisMessageProcessorUrl}]`);
|
|
287
270
|
}
|
|
288
271
|
|
|
289
272
|
UpdateInstrument = (instrumentName: Gauge, telemetry: InstrumentBaseTelemetry) => {
|
|
@@ -312,7 +295,7 @@ export abstract class ProcessBase extends TinyEmitter implements IProcessBase
|
|
|
312
295
|
}
|
|
313
296
|
this.#systemInformationInterval = null;
|
|
314
297
|
|
|
315
|
-
this.#redisMessageHandler?.Stop();
|
|
298
|
+
//@@this.#redisMessageHandler?.Stop();
|
|
316
299
|
}
|
|
317
300
|
|
|
318
301
|
/**
|
|
@@ -445,7 +428,9 @@ export abstract class ProcessBase extends TinyEmitter implements IProcessBase
|
|
|
445
428
|
return msgcolor;
|
|
446
429
|
};
|
|
447
430
|
|
|
431
|
+
/*@@
|
|
448
432
|
get redisMessageHandler(): RedisMessageHandler {
|
|
449
433
|
return this.#redisMessageHandler as RedisMessageHandler;
|
|
450
434
|
}
|
|
435
|
+
*/
|
|
451
436
|
}
|
package/src/testing/app.ts
CHANGED
|
@@ -3,541 +3,12 @@ import { ServiceConfigOptions } from './appConfig'
|
|
|
3
3
|
import { MasterProcessBase } from './..'
|
|
4
4
|
import { WorkerProcess } from './appWorkerWSS'
|
|
5
5
|
|
|
6
|
-
import cluster
|
|
6
|
+
import cluster from 'node:cluster';
|
|
7
7
|
|
|
8
|
-
import { IPCMessageProcessorWorker } from './../ipcMessageProcessorWorker'
|
|
9
|
-
import { JSONObject, Sleep, defaultLogger } from '@nsshunt/stsutils';
|
|
10
|
-
|
|
11
|
-
import { IPCMessageProcessorPrimary } from './../ipcMessageProcessorPrimary'
|
|
12
|
-
|
|
13
|
-
import { IIPCMessageProcessorIPCPayload, IProcessBase } from './../commonTypes'
|
|
14
|
-
|
|
15
|
-
import chalk from 'chalk';
|
|
16
|
-
|
|
17
|
-
import { IPCMessageHandler } from './../ipcMessageHandler'
|
|
18
|
-
|
|
19
|
-
import { v4 as uuidv4 } from 'uuid';
|
|
20
|
-
import { RedisMessageHandler } from './../redisMessageHandler'
|
|
21
|
-
import { goptions } from '@nsshunt/stsconfig'
|
|
22
|
-
|
|
23
|
-
import si from 'systeminformation' // https://systeminformation.io/
|
|
24
|
-
import { GetFirstNetworkInterface } from './../network'
|
|
25
|
-
|
|
26
|
-
const sleepVal = 0;
|
|
27
|
-
const maxLoop = 100;
|
|
28
|
-
|
|
29
|
-
const zzz = async () => {
|
|
30
|
-
const ipc: IPCMessageProcessorPrimary[] = [ ];
|
|
31
|
-
for (const id in cluster.workers) {
|
|
32
|
-
const worker = cluster.workers[id] as Worker;
|
|
33
|
-
const p1 = new IPCMessageProcessorPrimary({
|
|
34
|
-
logger: defaultLogger,
|
|
35
|
-
namespace: 'zzz'
|
|
36
|
-
})
|
|
37
|
-
p1.Start(cluster.workers[id] as Worker);
|
|
38
|
-
ipc.push(p1);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
const promArray: Promise<JSONObject>[] = [ ];
|
|
42
|
-
ipc.forEach(v => promArray.push(v.SendMessage({id: v.worker?.id, cmd: 'cmd1'})));
|
|
43
|
-
const retVal = await Promise.all(promArray).catch(error => {
|
|
44
|
-
console.error(chalk.red(` ===>>> Error with promise.all: [${JSON.stringify(error)}]`))
|
|
45
|
-
});
|
|
46
|
-
if (retVal) {
|
|
47
|
-
console.log(chalk.green(JSON.stringify(retVal)));
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const StartTestPrimary = () => {
|
|
52
|
-
setTimeout(async () => {
|
|
53
|
-
for (const id in cluster.workers) {
|
|
54
|
-
const p1 = new IPCMessageProcessorPrimary({
|
|
55
|
-
logger: defaultLogger,
|
|
56
|
-
namespace: 'test1',
|
|
57
|
-
processPayload: async (payload: IIPCMessageProcessorIPCPayload) => {
|
|
58
|
-
return {
|
|
59
|
-
msg: `From PRIMARY: [${process.pid}]`,
|
|
60
|
-
yousent: payload.requestPayload,
|
|
61
|
-
hello1: `world1`,
|
|
62
|
-
pid: process.pid
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
})
|
|
66
|
-
|
|
67
|
-
const p2 = new IPCMessageProcessorPrimary({
|
|
68
|
-
logger: defaultLogger,
|
|
69
|
-
namespace: 'test2',
|
|
70
|
-
processPayload: async (payload: IIPCMessageProcessorIPCPayload) => {
|
|
71
|
-
return {
|
|
72
|
-
msg: `From PRIMARY: [${process.pid}]`,
|
|
73
|
-
yousent: payload.requestPayload,
|
|
74
|
-
hello2: `world2`,
|
|
75
|
-
pid: process.pid
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
})
|
|
79
|
-
|
|
80
|
-
p1.Start(cluster.workers[id] as Worker);
|
|
81
|
-
p2.Start(cluster.workers[id] as Worker);
|
|
82
|
-
|
|
83
|
-
setTimeout(async () => {
|
|
84
|
-
for (let i=0; i < maxLoop; i++) {
|
|
85
|
-
const retVal1 = await p1.SendMessage({
|
|
86
|
-
from1: 'text from PRIMARY 1',
|
|
87
|
-
loop1: i,
|
|
88
|
-
});
|
|
89
|
-
const retVal2 = await p2.SendMessage({
|
|
90
|
-
from2: 'text from PRIMARY 2',
|
|
91
|
-
loop2: i
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
console.log(`[${process.pid}] [${JSON.stringify(retVal1)}]`)
|
|
95
|
-
console.log(`[${process.pid}] [${JSON.stringify(retVal2)}]`)
|
|
96
|
-
|
|
97
|
-
await Sleep(sleepVal);
|
|
98
|
-
}
|
|
99
|
-
}, 1000);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
zzz();
|
|
103
|
-
|
|
104
|
-
}, 1000);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
const StartTestWorker = () => {
|
|
108
|
-
const w1 = new IPCMessageProcessorWorker({
|
|
109
|
-
logger: defaultLogger,
|
|
110
|
-
namespace: 'test1',
|
|
111
|
-
requestResponseMessageTimeout: 5000,
|
|
112
|
-
processPayload: async (payload) => {
|
|
113
|
-
return {
|
|
114
|
-
msg1: `From WORKER: [${process.pid}]`,
|
|
115
|
-
yousent1: payload.requestPayload,
|
|
116
|
-
pid1: process.pid
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
})
|
|
120
|
-
|
|
121
|
-
const w2 = new IPCMessageProcessorWorker({
|
|
122
|
-
logger: defaultLogger,
|
|
123
|
-
namespace: 'test2',
|
|
124
|
-
requestResponseMessageTimeout: 5000,
|
|
125
|
-
processPayload: async (payload) => {
|
|
126
|
-
return {
|
|
127
|
-
msg2: `From WORKER: [${process.pid}]`,
|
|
128
|
-
yousent2: payload.requestPayload,
|
|
129
|
-
pid2: process.pid
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
})
|
|
133
|
-
|
|
134
|
-
const w3 = new IPCMessageProcessorWorker({
|
|
135
|
-
logger: defaultLogger,
|
|
136
|
-
namespace: 'zzz',
|
|
137
|
-
requestResponseMessageTimeout: 5000,
|
|
138
|
-
processPayload: async (payload) => {
|
|
139
|
-
switch (payload.requestPayload.cmd) {
|
|
140
|
-
case 'cmd1' : return {
|
|
141
|
-
msg3: `COMMAND 1 From WORKER: [${process.pid}]`,
|
|
142
|
-
yousent3: payload.requestPayload,
|
|
143
|
-
pid3: process.pid
|
|
144
|
-
}
|
|
145
|
-
break;
|
|
146
|
-
case 'cmd2' :
|
|
147
|
-
return {
|
|
148
|
-
msg3: `COMMAND 2 From WORKER: [${process.pid}]`,
|
|
149
|
-
yousent3: payload.requestPayload,
|
|
150
|
-
pid3: process.pid
|
|
151
|
-
}
|
|
152
|
-
break;
|
|
153
|
-
}
|
|
154
|
-
return {
|
|
155
|
-
msg3: `COMMAND Unknown From WORKER: [${process.pid}]`,
|
|
156
|
-
yousent3: payload.requestPayload,
|
|
157
|
-
pid3: process.pid
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
})
|
|
161
|
-
|
|
162
|
-
w1.Start();
|
|
163
|
-
w2.Start();
|
|
164
|
-
w3.Start();
|
|
165
|
-
|
|
166
|
-
setTimeout(async () => {
|
|
167
|
-
for (let i=0; i < maxLoop; i++) {
|
|
168
|
-
const retVal1 = await w1.SendMessage({
|
|
169
|
-
hello1:`from WORKER 1: ${i}`
|
|
170
|
-
});
|
|
171
|
-
console.log(chalk.blue(` ==> [${process.pid}] [${JSON.stringify(retVal1)}]`));
|
|
172
|
-
|
|
173
|
-
const retVal2 = await w2.SendMessage({
|
|
174
|
-
hello2:`from WORKER 2: ${i}`
|
|
175
|
-
});
|
|
176
|
-
console.log(chalk.blue(` ==> [${process.pid}] [${JSON.stringify(retVal2)}]`));
|
|
177
|
-
|
|
178
|
-
await Sleep(sleepVal);
|
|
179
|
-
}
|
|
180
|
-
}, 1000);
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
const iterations = 0;
|
|
184
|
-
const delay = 100;
|
|
185
|
-
|
|
186
|
-
const GetNumCPUs = async (): Promise<number> => {
|
|
187
|
-
// https://systeminformation.io/
|
|
188
|
-
const valueObject = {
|
|
189
|
-
cpu: '*'
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
const sysinfo = await si.get(valueObject);
|
|
193
|
-
let numCPUs = 2;
|
|
194
|
-
if (goptions.useCPUs > 0) {
|
|
195
|
-
if (goptions.useCPUs >= 1) {
|
|
196
|
-
numCPUs = goptions.useCPUs;
|
|
197
|
-
} else {
|
|
198
|
-
numCPUs = Math.round(sysinfo.cpu.cores * goptions.useCPUs);
|
|
199
|
-
}
|
|
200
|
-
} else {
|
|
201
|
-
numCPUs = sysinfo.cpu.physicalCores;
|
|
202
|
-
}
|
|
203
|
-
return numCPUs;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
const LogInfoMessage = (message: string) => {
|
|
207
|
-
console.log(message);
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
const LogSystemTelemetry = async () => {
|
|
211
|
-
// https://systeminformation.io/
|
|
212
|
-
const valueObject = {
|
|
213
|
-
system: '*',
|
|
214
|
-
osInfo: '*',
|
|
215
|
-
cpu: '*',
|
|
216
|
-
mem: '*',
|
|
217
|
-
dockerInfo: '*',
|
|
218
|
-
//dockerImages: '*',
|
|
219
|
-
dockerContainers: '*',
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
const sysinfo = await si.get(valueObject);
|
|
223
|
-
const numCPUs = await GetNumCPUs();
|
|
224
|
-
const hostname = sysinfo.osInfo.hostname;
|
|
225
|
-
|
|
226
|
-
const hostaddr = GetFirstNetworkInterface();
|
|
227
|
-
if (hostaddr !== null) {
|
|
228
|
-
LogInfoMessage(`Host Address: ${hostaddr}`);
|
|
229
|
-
} else {
|
|
230
|
-
LogInfoMessage(`Unknown Host Address.`);
|
|
231
|
-
}
|
|
232
|
-
LogInfoMessage(`Server starting with ${numCPUs} Cores/Threads`);
|
|
233
|
-
|
|
234
|
-
LogInfoMessage(`Hostname: ${hostname}`);
|
|
235
|
-
LogInfoMessage(`System: ${JSON.stringify(sysinfo.system)}`);
|
|
236
|
-
LogInfoMessage(`OS Info: ${JSON.stringify(sysinfo.osInfo)}`);
|
|
237
|
-
LogInfoMessage(`CPU: ${JSON.stringify(sysinfo.cpu)}`);
|
|
238
|
-
LogInfoMessage(`Memory: ${JSON.stringify(sysinfo.mem)}`);
|
|
239
|
-
|
|
240
|
-
const promArray: Promise<any>[] = [ ];
|
|
241
|
-
|
|
242
|
-
sysinfo.dockerContainers.forEach((dc: { id: string; }) => {
|
|
243
|
-
LogInfoMessage(dc.id);
|
|
244
|
-
const dcs = promArray.push(si.dockerContainerStats(dc.id));
|
|
245
|
-
console.log(dcs);
|
|
246
|
-
});
|
|
247
|
-
const dockerContainerStats = await Promise.all(promArray);
|
|
248
|
-
|
|
249
|
-
const sysInfo = {
|
|
250
|
-
hostname,
|
|
251
|
-
numCPUs,
|
|
252
|
-
hostaddr,
|
|
253
|
-
system: sysinfo.system,
|
|
254
|
-
osInfo: sysinfo.osInfo,
|
|
255
|
-
cpu: sysinfo.cpu,
|
|
256
|
-
mem: sysinfo.mem,
|
|
257
|
-
dockerInfo: sysinfo.dockerInfo,
|
|
258
|
-
//dockerImages: sysinfo.dockerImages,
|
|
259
|
-
dockerContainers: sysinfo.dockerContainers,
|
|
260
|
-
dockerContainerStats
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
console.log(sysInfo);
|
|
264
|
-
|
|
265
|
-
console.log(JSON.stringify(sysInfo));
|
|
266
|
-
}
|
|
267
8
|
|
|
268
9
|
if (cluster.isPrimary) {
|
|
269
10
|
new MasterProcessBase(ServiceConfigOptions(true, cluster.isPrimary)).SetupServer();
|
|
270
|
-
//StartTestPrimary();
|
|
271
|
-
|
|
272
|
-
LogSystemTelemetry();
|
|
273
|
-
|
|
274
|
-
// This RedisMessageHandler is the master service controller. Created here for testing purposes.
|
|
275
|
-
// This code will be within the primary service controller. It will live in stsinstrumentmanager until the new service is created.
|
|
276
|
-
const stsServiceControl: RedisMessageHandler = new RedisMessageHandler({
|
|
277
|
-
logger: defaultLogger,
|
|
278
|
-
role: 'SERVER',
|
|
279
|
-
redisUrl: goptions.imRedisMessageProcessorUrl,
|
|
280
|
-
namespace: 'stsServiceControl',
|
|
281
|
-
groups: [ ]
|
|
282
|
-
});
|
|
283
|
-
stsServiceControl.Start();
|
|
284
|
-
|
|
285
|
-
setTimeout(() => {
|
|
286
|
-
const p: Record<string, IPCMessageHandler> = { };
|
|
287
|
-
/*
|
|
288
|
-
for (const id in cluster.workers) {
|
|
289
|
-
const worker = cluster.workers[id] as Worker;
|
|
290
|
-
|
|
291
|
-
const p1: IPCMessageHandler = new IPCMessageHandler({
|
|
292
|
-
logger: defaultLogger,
|
|
293
|
-
requestResponseMessageTimeout: 5000,
|
|
294
|
-
namespace: 'aabbcc'
|
|
295
|
-
});
|
|
296
|
-
p1.Start(worker);
|
|
297
|
-
|
|
298
|
-
p1.on('fromworker', (arg1: string, arg2: number, arg3: string, callback: any) => {
|
|
299
|
-
//callback(null);
|
|
300
|
-
callback({status: `response message from event = fromworker with args ${arg1} ${arg2} ${arg3}`})
|
|
301
|
-
});
|
|
302
|
-
|
|
303
|
-
p[worker.id] = p1;
|
|
304
|
-
}
|
|
305
|
-
*/
|
|
306
|
-
|
|
307
|
-
/*
|
|
308
|
-
const stsServiceControl: RedisMessageHandler = new RedisMessageHandler({
|
|
309
|
-
logger: defaultLogger,
|
|
310
|
-
role: 'SERVER',
|
|
311
|
-
redisUrl: goptions.imRedisMessageProcessorUrl,
|
|
312
|
-
namespace: 'stsServiceControl',
|
|
313
|
-
groups: [ ]
|
|
314
|
-
});
|
|
315
|
-
stsServiceControl.Start();
|
|
316
|
-
|
|
317
|
-
stsServiceControl.on('ping_ex', (pingData: JSONObject, callback: any) => {
|
|
318
|
-
console.log(chalk.yellow(`${process.pid}: stsServiceControl.on(ping): [${JSON.stringify(pingData)}]`));
|
|
319
|
-
callback({pingData, dateTime: new Date().getTime()})
|
|
320
|
-
});
|
|
321
|
-
|
|
322
|
-
setInterval(() => {
|
|
323
|
-
stsServiceControl.emit('GET_SYSTEM_TELEMETRY', { }, (response: any) => {
|
|
324
|
-
console.log(chalk.green(` ==>> ${process.pid}: Response(GET_SYSTEM_TELEMETRY): [${JSON.stringify(response)}]`));
|
|
325
|
-
});
|
|
326
|
-
}, 5000);
|
|
327
|
-
*/
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
const r1: RedisMessageHandler = new RedisMessageHandler({
|
|
332
|
-
logger: defaultLogger,
|
|
333
|
-
role: 'SERVER',
|
|
334
|
-
redisUrl: goptions.imRedisMessageProcessorUrl,
|
|
335
|
-
namespace: 'mytestapp',
|
|
336
|
-
groups: [ ]
|
|
337
|
-
});
|
|
338
|
-
r1.Start();
|
|
339
|
-
|
|
340
|
-
const RunTest = async (eventName: string, emitobj: JSONObject) => {
|
|
341
|
-
const start = performance.now();
|
|
342
|
-
try {
|
|
343
|
-
const response = await r1.emitex(eventName, emitobj);
|
|
344
|
-
const duration = performance.now() - start;
|
|
345
|
-
console.log(chalk.cyan(`${process.pid}: Duration: ${duration} Test: [test1] Response(${chalk.bold(eventName)}): [${JSON.stringify(response)}]`));
|
|
346
|
-
} catch (error) {
|
|
347
|
-
const duration = performance.now() - start;
|
|
348
|
-
console.log(chalk.cyan(`${process.pid}: Duration: ${duration} Test: [test1] Response(${chalk.bold(eventName)}): Error: [${JSON.stringify(error)}]`));
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
let i = 0;
|
|
353
|
-
let group = '';
|
|
354
|
-
const maxIterations = 20;
|
|
355
|
-
const xxx = () => {
|
|
356
|
-
setTimeout(() => {
|
|
357
|
-
i++;
|
|
358
|
-
|
|
359
|
-
if (i > maxIterations) {
|
|
360
|
-
return;
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
console.log(chalk.yellow(`Iteration: [${i}]`));
|
|
364
|
-
|
|
365
|
-
if (i % 2 === 0) {
|
|
366
|
-
group = 'even'
|
|
367
|
-
} else {
|
|
368
|
-
group = 'odd'
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
const promArray: Promise<void>[] = [ ];
|
|
372
|
-
const start = performance.now();
|
|
373
|
-
promArray.push(
|
|
374
|
-
RunTest('fromprimaryredis', { group, i: i, a: 'a', b: 'b' }),
|
|
375
|
-
RunTest('fromprimaryredis', { group: '2', i: i, a: 'a', b: 'b' }),
|
|
376
|
-
RunTest('fromprimaryredis', { group: '4', i: i, a: 'a', b: 'b' }),
|
|
377
|
-
RunTest('globalmessage', { i: i, a: 'a', b: 'b' })
|
|
378
|
-
);
|
|
379
|
-
(async () => {
|
|
380
|
-
await Promise.all(promArray);
|
|
381
|
-
const duration = performance.now() - start;
|
|
382
|
-
console.log(chalk.green(`${process.pid}: Duration: ${duration} Test: [All Tests Run]`));
|
|
383
|
-
console.log();
|
|
384
|
-
xxx();
|
|
385
|
-
})();
|
|
386
|
-
}, 250);
|
|
387
|
-
}
|
|
388
|
-
//setTimeout(() => xxx(), 1000);
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
/*
|
|
395
|
-
const r1: RedisMessageHandler = new RedisMessageHandler({
|
|
396
|
-
logger: defaultLogger,
|
|
397
|
-
role: 'SERVER',
|
|
398
|
-
redisUrl: goptions.imRedisMessageProcessorUrl,
|
|
399
|
-
namespace: 'mytestapp'
|
|
400
|
-
});
|
|
401
|
-
r1.Start();
|
|
402
|
-
|
|
403
|
-
r1.on('fromworkerredis', (arg1: string, arg2: number, arg3: string, callback: any) => {
|
|
404
|
-
console.log(chalk.magenta(`${process.pid}: fromworkerredis.ON: [${arg1} ${arg2} ${arg3}]`));
|
|
405
|
-
//callback(null);
|
|
406
|
-
callback({status: `response message from event = fromworkerredis with args ${arg1} ${arg2} ${arg3}`})
|
|
407
|
-
});
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
setTimeout(async () => {
|
|
411
|
-
for (let i=0; i < iterations; i++) {
|
|
412
|
-
|
|
413
|
-
const emitobj = { i: i, a: 'a', b: 'b' };
|
|
414
|
-
console.log(chalk.cyan(`${process.pid}: emit event fromprimaryredis fromprimary: [${JSON.stringify(emitobj)}`));
|
|
415
|
-
r1.emit('fromprimaryredis', emitobj, (response: any) => {
|
|
416
|
-
console.log(chalk.cyan(`${process.pid}: Response(fromprimaryredis): [${JSON.stringify(response)}]`));
|
|
417
|
-
});
|
|
418
|
-
|
|
419
|
-
await Sleep(delay);
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
}, 1000);
|
|
423
|
-
*/
|
|
424
|
-
}, 2000);
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
const ListClients = () => {
|
|
428
|
-
setTimeout(() => {
|
|
429
|
-
Object.values(stsServiceControl.clients).forEach(c => {
|
|
430
|
-
console.log(chalk.gray(`client id: [${c.id}]`));
|
|
431
|
-
console.log(chalk.gray(`client groups: [${c.groups}]`));
|
|
432
|
-
console.log(chalk.gray(`client pingCount: [${c.pingCount}]`));
|
|
433
|
-
console.log(chalk.gray(`client serviceProcessContext: [${JSON.stringify(c.serviceProcessContext)}]`));
|
|
434
|
-
});
|
|
435
|
-
ListClients();
|
|
436
|
-
}, 1000).unref();
|
|
437
|
-
}
|
|
438
|
-
//ListClients();
|
|
439
|
-
|
|
440
|
-
|
|
441
11
|
} else {
|
|
442
12
|
const worker = new WorkerProcess(ServiceConfigOptions(true, cluster.isPrimary));
|
|
443
13
|
worker.SetupServer();
|
|
444
|
-
//StartTestWorker();
|
|
445
|
-
|
|
446
|
-
setTimeout(async () => {
|
|
447
|
-
|
|
448
|
-
let group = '';
|
|
449
|
-
if (process.pid % 2 === 0) {
|
|
450
|
-
group = 'even'
|
|
451
|
-
} else {
|
|
452
|
-
group = 'odd'
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
let workerId = '0';
|
|
456
|
-
if (cluster.worker) {
|
|
457
|
-
console.log(chalk.blue(`Worker: [${cluster.worker?.id}]`));
|
|
458
|
-
workerId = cluster.worker?.id.toString();
|
|
459
|
-
}
|
|
460
|
-
|
|
461
|
-
const r1: RedisMessageHandler = new RedisMessageHandler({
|
|
462
|
-
logger: defaultLogger,
|
|
463
|
-
role: 'CLIENT',
|
|
464
|
-
redisUrl: goptions.imRedisMessageProcessorUrl,
|
|
465
|
-
namespace: 'mytestapp',
|
|
466
|
-
groups: [ group, workerId ],
|
|
467
|
-
ignoreEvents: [ 'ping' ]
|
|
468
|
-
});
|
|
469
|
-
r1.Start();
|
|
470
|
-
|
|
471
|
-
r1.on('fromprimaryredis', (arg1: JSONObject, callback: any) => {
|
|
472
|
-
callback( {
|
|
473
|
-
status: `PID: [${process.pid}]: response message from event = fromprimaryredis with args ${JSON.stringify(arg1)}`
|
|
474
|
-
})
|
|
475
|
-
});
|
|
476
|
-
|
|
477
|
-
r1.on('globalmessage', (arg1: JSONObject, callback: any) => {
|
|
478
|
-
callback( {
|
|
479
|
-
status: `PID: [${process.pid}]: response message from event = globalmessage with args ${JSON.stringify(arg1)}`
|
|
480
|
-
})
|
|
481
|
-
});
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
/*
|
|
485
|
-
const w1: IPCMessageHandler = new IPCMessageHandler({
|
|
486
|
-
logger: defaultLogger,
|
|
487
|
-
requestResponseMessageTimeout: 5000,
|
|
488
|
-
namespace: 'aabbcc'
|
|
489
|
-
});
|
|
490
|
-
w1.Start();
|
|
491
|
-
|
|
492
|
-
w1.on('fromprimary', (arg1: JSONObject, callback: any) => {
|
|
493
|
-
//callback();
|
|
494
|
-
callback({status: `response message from event = fromprimary with args ${JSON.stringify(arg1)}`})
|
|
495
|
-
});
|
|
496
|
-
*/
|
|
497
|
-
|
|
498
|
-
/*
|
|
499
|
-
const r1: RedisMessageHandler = new RedisMessageHandler({
|
|
500
|
-
logger: defaultLogger,
|
|
501
|
-
role: 'CLIENT',
|
|
502
|
-
redisUrl: goptions.imRedisMessageProcessorUrl,
|
|
503
|
-
namespace: 'mytestapp'
|
|
504
|
-
});
|
|
505
|
-
r1.Start();
|
|
506
|
-
|
|
507
|
-
r1.on('fromprimaryredis', (arg1: JSONObject, callback: any) => {
|
|
508
|
-
//callback();
|
|
509
|
-
console.log(chalk.yellow(`${process.pid}: fromprimaryredis.ON: [${JSON.stringify(arg1)}]`));
|
|
510
|
-
callback({status: `PID: [${process.pid}]: response message from event = fromprimaryredis with args ${JSON.stringify(arg1)}`})
|
|
511
|
-
});
|
|
512
|
-
|
|
513
|
-
setTimeout(async () => {
|
|
514
|
-
for (let i=0; i < iterations; i++) {
|
|
515
|
-
const id = uuidv4();
|
|
516
|
-
|
|
517
|
-
console.log(chalk.green(`${process.pid}: emit event fromworkerredis: [${id} ${i} Hello]`));
|
|
518
|
-
r1.emit('fromworkerredis', id, i, 'Hello', (response: any) => {
|
|
519
|
-
console.log(chalk.green(`${process.pid}: Response(fromworkerredis): [${JSON.stringify(response)}]`));
|
|
520
|
-
});
|
|
521
|
-
await Sleep(delay);
|
|
522
|
-
}
|
|
523
|
-
}, 1000);
|
|
524
|
-
*/
|
|
525
|
-
|
|
526
|
-
worker.redisMessageHandler.emit('GetSystemInformation', {
|
|
527
|
-
group: 'primary'
|
|
528
|
-
}, (response: any) => {
|
|
529
|
-
console.log(`------------------------------------------------------------------------`);
|
|
530
|
-
console.log(response);
|
|
531
|
-
});
|
|
532
|
-
|
|
533
|
-
worker.redisMessageHandler.emitWithError('GetSystemInformation', {
|
|
534
|
-
group: 'primary'
|
|
535
|
-
}, (response: any) => {
|
|
536
|
-
console.log(`************************************************************************`);
|
|
537
|
-
console.log(response);
|
|
538
|
-
}, (error: any) => {
|
|
539
|
-
console.log(chalk.red(`GetSystemInformation Error: [${error}]`));
|
|
540
|
-
});
|
|
541
|
-
|
|
542
|
-
}, 2000);
|
|
543
14
|
}
|