@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.
Files changed (81) hide show
  1. package/build.sh +5 -0
  2. package/dist/index.js +0 -5
  3. package/dist/index.js.map +1 -1
  4. package/dist/masterprocessbase.js +3 -53
  5. package/dist/masterprocessbase.js.map +1 -1
  6. package/dist/processbase.js +4 -17
  7. package/dist/processbase.js.map +1 -1
  8. package/dist/testing/app.js +0 -457
  9. package/dist/testing/app.js.map +1 -1
  10. package/dist/workerprocessbase.js +1 -36
  11. package/dist/workerprocessbase.js.map +1 -1
  12. package/package.json +14 -13
  13. package/src/commonTypes.ts +2 -2
  14. package/src/index.ts +0 -5
  15. package/src/masterprocessbase.ts +4 -18
  16. package/src/processbase.ts +7 -22
  17. package/src/testing/app.ts +1 -530
  18. package/src/workerprocessbase.ts +1 -40
  19. package/types/commonTypes.d.ts +0 -2
  20. package/types/commonTypes.d.ts.map +1 -1
  21. package/types/index.d.ts +0 -5
  22. package/types/index.d.ts.map +1 -1
  23. package/types/masterprocessbase.d.ts.map +1 -1
  24. package/types/processbase.d.ts +0 -2
  25. package/types/processbase.d.ts.map +1 -1
  26. package/types/workerprocessbase.d.ts.map +1 -1
  27. package/dist/ipcMessageHandler.js +0 -189
  28. package/dist/ipcMessageHandler.js.map +0 -1
  29. package/dist/ipcMessageManager.js +0 -146
  30. package/dist/ipcMessageManager.js.map +0 -1
  31. package/dist/ipcMessageProcessorPrimary.js +0 -65
  32. package/dist/ipcMessageProcessorPrimary.js.map +0 -1
  33. package/dist/ipcMessageProcessorWorker.js +0 -61
  34. package/dist/ipcMessageProcessorWorker.js.map +0 -1
  35. package/dist/messagehandling/webWorkerMessageHandler.js +0 -280
  36. package/dist/messagehandling/webWorkerMessageHandler.js.map +0 -1
  37. package/dist/messagehandling/webWorkerSupport.js +0 -62
  38. package/dist/messagehandling/webWorkerSupport.js.map +0 -1
  39. package/dist/redisMessageHandler.js +0 -305
  40. package/dist/redisMessageHandler.js.map +0 -1
  41. package/dist/redisMessageHandler.test.js +0 -129
  42. package/dist/redisMessageHandler.test.js.map +0 -1
  43. package/dist/testing/app_ipc_legacy.js +0 -84
  44. package/dist/testing/app_ipc_legacy.js.map +0 -1
  45. package/dist/testing/app_ipcex.js +0 -69
  46. package/dist/testing/app_ipcex.js.map +0 -1
  47. package/dist/testing/app_ww.js +0 -54
  48. package/dist/testing/app_ww.js.map +0 -1
  49. package/src/ipcMessageHandler.ts +0 -201
  50. package/src/ipcMessageManager.ts +0 -171
  51. package/src/ipcMessageProcessorPrimary.ts +0 -76
  52. package/src/ipcMessageProcessorWorker.ts +0 -70
  53. package/src/messagehandling/webWorkerMessageHandler.ts +0 -341
  54. package/src/messagehandling/webWorkerSupport.ts +0 -66
  55. package/src/redisMessageHandler.test.ts +0 -157
  56. package/src/redisMessageHandler.ts +0 -371
  57. package/src/testing/app_ipc_legacy.ts +0 -87
  58. package/src/testing/app_ipcex.ts +0 -68
  59. package/src/testing/app_ww.ts +0 -68
  60. package/types/ipcMessageHandler.d.ts +0 -30
  61. package/types/ipcMessageHandler.d.ts.map +0 -1
  62. package/types/ipcMessageManager.d.ts +0 -30
  63. package/types/ipcMessageManager.d.ts.map +0 -1
  64. package/types/ipcMessageProcessorPrimary.d.ts +0 -26
  65. package/types/ipcMessageProcessorPrimary.d.ts.map +0 -1
  66. package/types/ipcMessageProcessorWorker.d.ts +0 -25
  67. package/types/ipcMessageProcessorWorker.d.ts.map +0 -1
  68. package/types/messagehandling/webWorkerMessageHandler.d.ts +0 -52
  69. package/types/messagehandling/webWorkerMessageHandler.d.ts.map +0 -1
  70. package/types/messagehandling/webWorkerSupport.d.ts +0 -6
  71. package/types/messagehandling/webWorkerSupport.d.ts.map +0 -1
  72. package/types/redisMessageHandler.d.ts +0 -51
  73. package/types/redisMessageHandler.d.ts.map +0 -1
  74. package/types/redisMessageHandler.test.d.ts +0 -2
  75. package/types/redisMessageHandler.test.d.ts.map +0 -1
  76. package/types/testing/app_ipc_legacy.d.ts +0 -2
  77. package/types/testing/app_ipc_legacy.d.ts.map +0 -1
  78. package/types/testing/app_ipcex.d.ts +0 -2
  79. package/types/testing/app_ipcex.d.ts.map +0 -1
  80. package/types/testing/app_ww.d.ts +0 -2
  81. package/types/testing/app_ww.d.ts.map +0 -1
@@ -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 { ISTSLogger, JSONObject } from "@nsshunt/stsutils";
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
  }
@@ -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, GaugeTypes, InstrumentObjectOptions, InstrumentLogOptions, InstrumentGaugeOptions, InstrumentBaseTelemetry, InstrumentGaugeTelemetry, InstrumentObjectTelemetry, InstrumentLogTelemetry } from '@nsshunt/stsobservability'
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 './redisMessageHandler'
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
- #redisMessageHandler: RedisMessageHandler | null = null;
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
  }
@@ -3,541 +3,12 @@ import { ServiceConfigOptions } from './appConfig'
3
3
  import { MasterProcessBase } from './..'
4
4
  import { WorkerProcess } from './appWorkerWSS'
5
5
 
6
- import cluster, { Worker } from 'node: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
  }