@nsshunt/stsappframework 2.19.235 → 2.19.238
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/serverprocessbase.js +7 -7
- package/dist/serverprocessbase.js.map +1 -1
- package/dist/singleprocessbase.js +3 -3
- package/dist/singleprocessbase.js.map +1 -1
- package/dist/stslatencycontroller.js +5 -1
- package/dist/stslatencycontroller.js.map +1 -1
- package/dist/tcpserver/app.js +3 -2
- package/dist/tcpserver/app.js.map +1 -1
- package/dist/tcpserver/appConfig.js +2 -1
- package/dist/tcpserver/appConfig.js.map +1 -1
- package/dist/testing/app.js +4 -3
- package/dist/testing/app.js.map +1 -1
- package/dist/testing/appConfig.js +7 -4
- package/dist/testing/appConfig.js.map +1 -1
- package/dist/testing/appWorkerWSS.js +137 -0
- package/dist/testing/appWorkerWSS.js.map +1 -0
- package/dist/testing/singleservertest.test.js +121 -3
- package/dist/testing/singleservertest.test.js.map +1 -1
- package/dist/workerprocessbase.js.map +1 -1
- package/package.json +2 -1
- package/src/kafkatesting/produce.js +0 -1
- package/src/processoptions.ts +5 -0
- package/src/serverprocessbase.ts +7 -7
- package/src/singleprocessbase.ts +3 -3
- package/src/stslatencycontroller.ts +5 -1
- package/src/tcpserver/app.ts +2 -2
- package/src/tcpserver/appConfig.ts +2 -1
- package/src/testing/app.ts +4 -3
- package/src/testing/appConfig.ts +9 -5
- package/src/testing/appWorkerWSS.ts +153 -0
- package/src/testing/docker-compose.yml +20 -0
- package/src/testing/singleservertest.test.ts +145 -4
- package/src/workerprocessbase.ts +0 -1
- package/types/processoptions.d.ts +4 -0
- package/types/processoptions.d.ts.map +1 -1
- package/types/serverprocessbase.d.ts +1 -1
- package/types/serverprocessbase.d.ts.map +1 -1
- package/types/stslatencycontroller.d.ts.map +1 -1
- package/types/tcpserver/appConfig.d.ts +1 -1
- package/types/tcpserver/appConfig.d.ts.map +1 -1
- package/types/testing/appConfig.d.ts +1 -1
- package/types/testing/appConfig.d.ts.map +1 -1
- package/types/testing/appWorkerWSS.d.ts +26 -0
- package/types/testing/appWorkerWSS.d.ts.map +1 -0
- package/types/workerprocessbase.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workerprocessbase.js","sourceRoot":"","sources":["../src/workerprocessbase.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA+B;AAC/B,MAAM,KAAK,GAAG,IAAA,eAAW,EAAC,QAAQ,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"workerprocessbase.js","sourceRoot":"","sources":["../src/workerprocessbase.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nsshunt/stsappframework",
|
|
3
|
-
"version": "2.19.
|
|
3
|
+
"version": "2.19.238",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "./types/index.d.ts",
|
|
@@ -50,6 +50,7 @@
|
|
|
50
50
|
"@nsshunt/stsdatamanagement": "^1.17.99",
|
|
51
51
|
"@nsshunt/stsinstrumentation": "^6.11.87",
|
|
52
52
|
"@nsshunt/stspublisherserver": "^1.15.84",
|
|
53
|
+
"@nsshunt/stssocketio-client": "^0.0.9",
|
|
53
54
|
"@nsshunt/stsutils": "^1.16.6",
|
|
54
55
|
"@socket.io/cluster-adapter": "^0.2.2",
|
|
55
56
|
"@socket.io/redis-streams-adapter": "^0.1.0",
|
package/src/processoptions.ts
CHANGED
package/src/serverprocessbase.ts
CHANGED
|
@@ -155,7 +155,7 @@ export class ServerProcessBase extends ProcessBase
|
|
|
155
155
|
});
|
|
156
156
|
}
|
|
157
157
|
|
|
158
|
-
#SetupWSSServer = async (
|
|
158
|
+
#SetupWSSServer = async (): Promise<void> => {
|
|
159
159
|
// socket.io
|
|
160
160
|
// WebSocket
|
|
161
161
|
const options: Partial<ServerOptions> = {
|
|
@@ -168,7 +168,7 @@ export class ServerProcessBase extends ProcessBase
|
|
|
168
168
|
//this.#io = require("socket.io")(this.#httpServer, options);
|
|
169
169
|
this.#io = new Server(this.#httpServer, options);
|
|
170
170
|
|
|
171
|
-
if (clusterMode) {
|
|
171
|
+
if (this.options.clusterMode) {
|
|
172
172
|
if (this.options.useRedisAdaptor) {
|
|
173
173
|
this.LogEx(`Using Redis for socket.io cluster management (worker)`);
|
|
174
174
|
if (this.options.redisAdaptorUrl) {
|
|
@@ -220,7 +220,7 @@ export class ServerProcessBase extends ProcessBase
|
|
|
220
220
|
this.#SetupPrometheusEndPoints((this.#expressServer as STSExpressServer).App);
|
|
221
221
|
}
|
|
222
222
|
if (this.options.wssServer === true) {
|
|
223
|
-
await this.#SetupWSSServer(
|
|
223
|
+
await this.#SetupWSSServer();
|
|
224
224
|
}
|
|
225
225
|
// https://stackoverflow.com/questions/21342828/node-express-unix-domain-socket-permissions
|
|
226
226
|
//@@httpServer.listen('/tmp/stsrest01.sock').on('listening', () =>
|
|
@@ -271,7 +271,7 @@ export class ServerProcessBase extends ProcessBase
|
|
|
271
271
|
// instrument timers (gauge etc.)
|
|
272
272
|
// publisher
|
|
273
273
|
// terminate UI (if loaded)
|
|
274
|
-
Terminate = async (
|
|
274
|
+
Terminate = async (clusterPerformExit: boolean, signal?: any): Promise<void> => {
|
|
275
275
|
if (this.#shuttingDown === false) {
|
|
276
276
|
this.#shuttingDown = true;
|
|
277
277
|
|
|
@@ -279,7 +279,7 @@ export class ServerProcessBase extends ProcessBase
|
|
|
279
279
|
|
|
280
280
|
await this.ProcessTerminating();
|
|
281
281
|
|
|
282
|
-
if (!clusterMode) {
|
|
282
|
+
if (!this.options.clusterMode) {
|
|
283
283
|
if (this.GetUIController() !== null)
|
|
284
284
|
{
|
|
285
285
|
this.LogEx('Destroy the user interface controller.');
|
|
@@ -324,7 +324,7 @@ export class ServerProcessBase extends ProcessBase
|
|
|
324
324
|
//await this.accessLayer.enddatabase();
|
|
325
325
|
}
|
|
326
326
|
|
|
327
|
-
if (clusterMode) {
|
|
327
|
+
if (this.options.clusterMode) {
|
|
328
328
|
this.LogEx(`Performing exit value: [${clusterPerformExit}]`);
|
|
329
329
|
if (clusterPerformExit) {
|
|
330
330
|
this.LogEx(`Process will self terminate with process.exit(0).`);
|
|
@@ -350,7 +350,7 @@ export class ServerProcessBase extends ProcessBase
|
|
|
350
350
|
|
|
351
351
|
await Sleep(1000); // Allow socket.io time to clean-up
|
|
352
352
|
|
|
353
|
-
if (clusterMode) {
|
|
353
|
+
if (this.options.clusterMode) {
|
|
354
354
|
if (clusterPerformExit) {
|
|
355
355
|
setTimeout(() => {
|
|
356
356
|
process.exit(0);
|
package/src/singleprocessbase.ts
CHANGED
|
@@ -87,11 +87,11 @@ export class SingleProcessBase extends ServerProcessBase implements ISingleProce
|
|
|
87
87
|
this.LogSystemTelemetry();
|
|
88
88
|
|
|
89
89
|
process.on('SIGINT', async () => {
|
|
90
|
-
await this.Terminate(false,
|
|
90
|
+
await this.Terminate(false, 'SIGINT');
|
|
91
91
|
});
|
|
92
92
|
|
|
93
93
|
process.on('SIGTERM', async () => {
|
|
94
|
-
await this.Terminate(false,
|
|
94
|
+
await this.Terminate(false, 'SIGTERM');
|
|
95
95
|
});
|
|
96
96
|
|
|
97
97
|
process.on('exit', (code) => {
|
|
@@ -111,6 +111,6 @@ export class SingleProcessBase extends ServerProcessBase implements ISingleProce
|
|
|
111
111
|
|
|
112
112
|
async TerminateApplication()
|
|
113
113
|
{
|
|
114
|
-
await this.Terminate(false,
|
|
114
|
+
await this.Terminate(false, 'SIGINT');
|
|
115
115
|
}
|
|
116
116
|
}
|
|
@@ -12,7 +12,11 @@ export class STSLatencyController extends STSControllerBase
|
|
|
12
12
|
async stslatency(req: any, res: any)
|
|
13
13
|
{
|
|
14
14
|
try {
|
|
15
|
-
const retVal = {
|
|
15
|
+
const retVal = {
|
|
16
|
+
data: `Ping Completed At: ${Date.now()}`,
|
|
17
|
+
pid: process.pid,
|
|
18
|
+
ppid: process.ppid
|
|
19
|
+
};
|
|
16
20
|
return res.status(StatusCodes.OK).send(retVal);
|
|
17
21
|
} catch (error) {
|
|
18
22
|
console.error(error);
|
package/src/tcpserver/app.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { AppMaster } from './appmaster'
|
|
|
5
5
|
import cluster from 'cluster';
|
|
6
6
|
|
|
7
7
|
if (cluster.isPrimary) {
|
|
8
|
-
new AppMaster(ServiceConfigOptions(cluster.isPrimary)).SetupServer();
|
|
8
|
+
new AppMaster(ServiceConfigOptions(true, cluster.isPrimary)).SetupServer();
|
|
9
9
|
} else {
|
|
10
|
-
|
|
10
|
+
new WorkerProcessBase(ServiceConfigOptions(true, cluster.isPrimary)).SetupServer();
|
|
11
11
|
}
|
|
@@ -24,12 +24,13 @@ ${process.pid}${ModelDelimeter.COMPONENT_SEPERATOR}${(isMaster ? process.pid : p
|
|
|
24
24
|
}
|
|
25
25
|
*/
|
|
26
26
|
|
|
27
|
-
export function ServiceConfigOptions(isMaster: boolean): ProcessOptions {
|
|
27
|
+
export function ServiceConfigOptions(clusterMode: boolean, isMaster: boolean): ProcessOptions {
|
|
28
28
|
if (isMaster === true) {
|
|
29
29
|
const serviceInstanceId = uuidv4();
|
|
30
30
|
const data: ProcessOptions = {
|
|
31
31
|
serverType: STSServerType.TCPRAW_TLS,
|
|
32
32
|
|
|
33
|
+
clusterMode: clusterMode,
|
|
33
34
|
wssServer: false,
|
|
34
35
|
useLatency: false,
|
|
35
36
|
httpsServerKeyPath: goptions.httpsserverkeypath,
|
package/src/testing/app.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { ServiceConfigOptions } from './appConfig
|
|
1
|
+
import { ServiceConfigOptions } from './appConfig'
|
|
2
2
|
import { MasterProcessBase, WorkerProcessBase } from './..'
|
|
3
|
+
import { WorkerProcess } from './appWorkerWSS'
|
|
3
4
|
|
|
4
5
|
import cluster from 'cluster';
|
|
5
6
|
|
|
6
7
|
if (cluster.isPrimary) {
|
|
7
|
-
new MasterProcessBase(ServiceConfigOptions(cluster.isPrimary)).SetupServer();
|
|
8
|
+
new MasterProcessBase(ServiceConfigOptions(true, cluster.isPrimary)).SetupServer();
|
|
8
9
|
} else {
|
|
9
|
-
new
|
|
10
|
+
new WorkerProcess(ServiceConfigOptions(true, cluster.isPrimary)).SetupServer();
|
|
10
11
|
}
|
package/src/testing/appConfig.ts
CHANGED
|
@@ -26,11 +26,12 @@ ${process.pid}${ModelDelimeter.COMPONENT_SEPERATOR}${(isMaster ? process.pid : p
|
|
|
26
26
|
}
|
|
27
27
|
*/
|
|
28
28
|
|
|
29
|
-
export function ServiceConfigOptions(isMaster: boolean): ProcessOptions {
|
|
29
|
+
export function ServiceConfigOptions(clusterMode: boolean, isMaster: boolean): ProcessOptions {
|
|
30
30
|
if (isMaster === true) {
|
|
31
31
|
const serviceInstanceId = uuidv4();
|
|
32
32
|
const data: ProcessOptions = {
|
|
33
33
|
serverType: STSServerType.EXPRESS_TLS,
|
|
34
|
+
clusterMode: clusterMode,
|
|
34
35
|
wssServer: true,
|
|
35
36
|
useLatency: true,
|
|
36
37
|
httpsServerKeyPath: goptions.httpsserverkeypath,
|
|
@@ -51,10 +52,6 @@ export function ServiceConfigOptions(isMaster: boolean): ProcessOptions {
|
|
|
51
52
|
serviceVersion: goptions.rest01serviceversion,
|
|
52
53
|
consoleLogging: true,
|
|
53
54
|
instrumentLogging: true,
|
|
54
|
-
|
|
55
|
-
expressServerRouteFactory: (app: express.Express, stsApp: IProcessBase) => {
|
|
56
|
-
return new STSExpressRouteFactory(app, stsApp);
|
|
57
|
-
},
|
|
58
55
|
|
|
59
56
|
instrumentationObservationInterval: goptions.instrumentationObservationInterval,
|
|
60
57
|
instrumentationTimeWindow: goptions.instrumentationTimeWindow,
|
|
@@ -62,6 +59,13 @@ export function ServiceConfigOptions(isMaster: boolean): ProcessOptions {
|
|
|
62
59
|
useRedisAdaptor: false,
|
|
63
60
|
workerExec: './dist/testing/app.js'
|
|
64
61
|
}
|
|
62
|
+
|
|
63
|
+
if (!clusterMode) {
|
|
64
|
+
data.expressServerRouteFactory = (app: express.Express, stsApp: IProcessBase) => {
|
|
65
|
+
return new STSExpressRouteFactory(app, stsApp);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
65
69
|
return data;
|
|
66
70
|
} else {
|
|
67
71
|
const data: ProcessOptions = JSON.parse(process.env['STS_GSD_SII'] as string) as ProcessOptions;
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import debugModule from 'debug'
|
|
2
|
+
const debug = debugModule(`proc:${process.pid}`);
|
|
3
|
+
|
|
4
|
+
import { Socket } from 'socket.io'
|
|
5
|
+
import cluster from 'node:cluster';
|
|
6
|
+
|
|
7
|
+
import { WorkerProcessBase, STSNamespace, STSRoom, SocketIoServerHelper, ServerSocketEvent,
|
|
8
|
+
STSEvent, IProcessBase, STSSocketIONamespace } from './../index'
|
|
9
|
+
|
|
10
|
+
import { Sleep } from '@nsshunt/stsutils';
|
|
11
|
+
|
|
12
|
+
export enum InstrumentManagerEventName {
|
|
13
|
+
CONNECT = 'connect', //@@ should come from socketiohelper
|
|
14
|
+
|
|
15
|
+
SUBSCRIBE = 'stsInstrumentManager-Subscribe',
|
|
16
|
+
UNSUBSCRIBE = 'stsInstrumentManager-Unsubscribe',
|
|
17
|
+
SUBSCRIBE_KEEP_ALIVE = 'stsInstrumentManager-Subscribe-KeepAlive'
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface IIPCSocketMessage {
|
|
21
|
+
socketId: string
|
|
22
|
+
workerId: number
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
24
|
+
data: any
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export enum InstrumentManagerSubCommand {
|
|
28
|
+
OUTPUT_SUBSCRIPTION = 'stsInstrumentManager-OutputSubscriptions'
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export enum IPCCommands {
|
|
32
|
+
PUBLISH_INSTRUMENT_DATA = 'PUBLISH_INSTRUMENT_DATA'
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export class WorkerProcess extends WorkerProcessBase
|
|
36
|
+
{
|
|
37
|
+
#terminate = false;
|
|
38
|
+
|
|
39
|
+
constructor(options: any)
|
|
40
|
+
{
|
|
41
|
+
super(options);
|
|
42
|
+
|
|
43
|
+
//this.socketIoHelper = new SocketIoHelper(this as IProcessBase);
|
|
44
|
+
this.socketIoServerHelper = new SocketIoServerHelper({
|
|
45
|
+
logger: this.LogEx
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
50
|
+
ReceivedMessageFromMaster = async (messageData: any) => {
|
|
51
|
+
// Only response to these message types (note should be part of generic pub/sub pattern in framework)
|
|
52
|
+
if (messageData.subCommand) {
|
|
53
|
+
if (messageData.subCommand.localeCompare(InstrumentManagerSubCommand.OUTPUT_SUBSCRIPTION) === 0) {
|
|
54
|
+
//console.log(`WorkerProcess.ReceivedMessageFromMaster: messageData: [${JSON.stringify(messageData)}]`.grey);
|
|
55
|
+
console.log(`WorkerProcess.ReceivedMessageFromMaster`.grey);
|
|
56
|
+
const { socketId, workerId, model } = messageData; //@@ type
|
|
57
|
+
|
|
58
|
+
if (cluster.worker && cluster.worker.id !== workerId) {
|
|
59
|
+
// Invalid data - this workerId must match
|
|
60
|
+
console.log(`WorkerProcess.ReceivedMessageFromMaster: Invalid workerId: [${workerId}]. Should have been: [${cluster.worker.id}].`.red);
|
|
61
|
+
} else {
|
|
62
|
+
const workerProcess: WorkerProcess = this as WorkerProcess;
|
|
63
|
+
if (workerProcess.stsMonitorNamespace !== null) {
|
|
64
|
+
const stsMonitorNamespace = workerProcess.stsMonitorNamespace.socketionamespace;
|
|
65
|
+
const sockets = await stsMonitorNamespace.fetchSockets();
|
|
66
|
+
for (const socket of sockets) {
|
|
67
|
+
if (socket.id.localeCompare(socketId) === 0) {
|
|
68
|
+
console.log(`WorkerProcess.ReceivedMessageFromMaster: Sending payload to subscribed client.`.green);
|
|
69
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
70
|
+
socket.emit(STSEvent.STSSubInstrumentData as any, model);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
console.log(`WorkerProcess.ReceivedMessageFromMaster: Invalid socketId. Expecting socket to existing in socket namespace collection.`.red);
|
|
75
|
+
// Invalid - could not find matching socketid to send to
|
|
76
|
+
} else {
|
|
77
|
+
console.log(`WorkerProcess.ReceivedMessageFromMaster: Invalid workerProcess.stsMonitorNamespace is null. Expecting non-null value.`.red);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
#SendIPCMessageToMaster(socket: Socket, eventName: any, data: any): void {
|
|
85
|
+
try {
|
|
86
|
+
if (cluster.worker) {
|
|
87
|
+
console.log(`WorkerProcess.#SendIPCMessageToMaster: eventName: [${eventName}]`.grey);
|
|
88
|
+
const payload: IIPCSocketMessage = {
|
|
89
|
+
socketId: socket.id,
|
|
90
|
+
workerId: cluster.worker.id,
|
|
91
|
+
data: data
|
|
92
|
+
}
|
|
93
|
+
//console.log(`WorkerProcess.#SendIPCMessageToMaster: payload: [${JSON.stringify(payload)}]`.grey);
|
|
94
|
+
console.log(`WorkerProcess.#SendIPCMessageToMaster`.grey);
|
|
95
|
+
(process as any).send( { command: eventName, payload }, null, { swallowErrors: true }, (error: any) => {
|
|
96
|
+
if (error) {
|
|
97
|
+
console.error(`Error with WorkerProcess:SendIPCMessageToMaster(1): [${error}]`.red);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
} catch (error) {
|
|
102
|
+
console.error(`Error with WorkerProcess:SendIPCMessageToMaster(2): [${error}]`.red);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
#GetServerSocketEvent(eventName: any): ServerSocketEvent {
|
|
107
|
+
return {
|
|
108
|
+
serverEventName: eventName,
|
|
109
|
+
serverEventCb: (socket, data): void => this.#SendIPCMessageToMaster(socket, eventName, data)
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
WorkerStarted(): any
|
|
114
|
+
{
|
|
115
|
+
let socketIoNamespace: STSSocketIONamespace | null = null;
|
|
116
|
+
if (this.socketIoServerHelper) {
|
|
117
|
+
socketIoNamespace = this.socketIoServerHelper.SetupNamespace(this.io as any, STSNamespace.STSMonitor, [
|
|
118
|
+
STSRoom.STSInstrumentDataRoom,
|
|
119
|
+
STSRoom.STSRunnerRoom
|
|
120
|
+
],
|
|
121
|
+
false,
|
|
122
|
+
[
|
|
123
|
+
this.#GetServerSocketEvent(InstrumentManagerEventName.SUBSCRIBE),
|
|
124
|
+
this.#GetServerSocketEvent(InstrumentManagerEventName.UNSUBSCRIBE),
|
|
125
|
+
this.#GetServerSocketEvent(InstrumentManagerEventName.SUBSCRIBE_KEEP_ALIVE),
|
|
126
|
+
{
|
|
127
|
+
serverEventName: InstrumentManagerEventName.CONNECT,
|
|
128
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
129
|
+
serverEventCb: (socket, data): void => {
|
|
130
|
+
console.log(`WorkerProcess.#SendIPCMessageToMaster: eventName: [${ InstrumentManagerEventName.CONNECT}]`.grey);
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
serverEventName: 'sts_connect',
|
|
135
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
136
|
+
serverEventCb: (socket, data): void => {
|
|
137
|
+
console.log(`WorkerProcess.#SendIPCMessageToMaster: eventName: [${ InstrumentManagerEventName.CONNECT}]`.grey);
|
|
138
|
+
socket.emit('sts_connect_reply', { someData: 'hello world'});
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
]);
|
|
142
|
+
} else {
|
|
143
|
+
throw new Error('WorkerProcess:WorkerStarted(): this.socketIoHelper is null')
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
get stsMonitorNamespace(): STSSocketIONamespace | null {
|
|
148
|
+
if (this.socketIoServerHelper !== null) {
|
|
149
|
+
return this.socketIoServerHelper.GetNamespace(STSNamespace.STSMonitor);
|
|
150
|
+
}
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
version: '2'
|
|
2
|
+
services:
|
|
3
|
+
zookeeper:
|
|
4
|
+
image: wurstmeister/zookeeper
|
|
5
|
+
ports:
|
|
6
|
+
- "2181:2181"
|
|
7
|
+
restart: unless-stopped
|
|
8
|
+
|
|
9
|
+
kafka:
|
|
10
|
+
image: wurstmeister/kafka
|
|
11
|
+
ports:
|
|
12
|
+
- "9092:9092"
|
|
13
|
+
environment:
|
|
14
|
+
DOCKER_API_VERSION: 1.22
|
|
15
|
+
KAFKA_ADVERTISED_HOST_NAME: 192.168.14.92
|
|
16
|
+
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
|
|
17
|
+
KAFKA_CREATE_TOPICS: "topic-name2:3:1"
|
|
18
|
+
volumes:
|
|
19
|
+
- /var/run/docker.sock:/var/run/docker.sock
|
|
20
|
+
restart: unless-stopped
|
|
@@ -15,13 +15,48 @@ import * as https from 'node:https'
|
|
|
15
15
|
|
|
16
16
|
import { it, beforeAll, afterAll, test, describe, expect } from 'vitest';
|
|
17
17
|
|
|
18
|
+
import { ISocketDetail, SocketIoClientHelper, ISocketIoClientHelperOptions } from '@nsshunt/stssocketio-client'
|
|
19
|
+
|
|
20
|
+
import { WorkerProcessBase, STSNamespace, STSRoom, SocketIoServerHelper, ServerSocketEvent,
|
|
21
|
+
STSEvent, IProcessBase, STSSocketIONamespace, STSClientSocket } from './../index'
|
|
22
|
+
|
|
23
|
+
//const { Kafka } = require('kafkajs')
|
|
24
|
+
|
|
25
|
+
import { DockerComposeEnvironment, Wait, AlwaysPullPolicy } from 'testcontainers'
|
|
26
|
+
|
|
18
27
|
describe("Single Server Test", () =>
|
|
19
28
|
{
|
|
29
|
+
/*
|
|
30
|
+
const kafka = new Kafka({
|
|
31
|
+
clientId: 'my-app',
|
|
32
|
+
brokers: ['192.168.14.92:9092']
|
|
33
|
+
//brokers: ['localhost:9092', 'kafka2:9092'],
|
|
34
|
+
})
|
|
35
|
+
let producer: any;
|
|
36
|
+
let environment: any;
|
|
37
|
+
*/
|
|
38
|
+
|
|
20
39
|
let app: SingleProcessBase | MasterProcessBase | null = null;
|
|
21
40
|
let httpsAgent: https.Agent | null = null;
|
|
22
41
|
|
|
23
42
|
const endpoint = 'https://localhost'
|
|
24
43
|
|
|
44
|
+
const socketUtilsoptions: ISocketIoClientHelperOptions = {
|
|
45
|
+
agentOptions: {
|
|
46
|
+
keepAlive: goptions.keepAlive,
|
|
47
|
+
maxSockets: goptions.maxSockets,
|
|
48
|
+
maxTotalSockets: goptions.maxTotalSockets,
|
|
49
|
+
maxFreeSockets: goptions.maxFreeSockets,
|
|
50
|
+
timeout: 30000, //@@ config
|
|
51
|
+
rejectUnauthorized: goptions.isProduction // Allows self signed certs in non production mode(s)
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const socketUtils = new SocketIoClientHelper(socketUtilsoptions);
|
|
56
|
+
|
|
57
|
+
const instrumentManagerAddress =
|
|
58
|
+
`${endpoint}:${goptions.rest01port}/${STSNamespace.STSMonitor}/`;
|
|
59
|
+
|
|
25
60
|
const HandleError = (error: any) => {
|
|
26
61
|
debug(`Error: [${error}]`.red)
|
|
27
62
|
if (axios.isAxiosError(error)) {
|
|
@@ -69,8 +104,6 @@ describe("Single Server Test", () =>
|
|
|
69
104
|
,httpsAgent: httpsAgent
|
|
70
105
|
});
|
|
71
106
|
|
|
72
|
-
//debug(retVal.data);
|
|
73
|
-
|
|
74
107
|
return retVal;
|
|
75
108
|
} catch (error: any) {
|
|
76
109
|
HandleError(error);
|
|
@@ -78,10 +111,77 @@ describe("Single Server Test", () =>
|
|
|
78
111
|
}
|
|
79
112
|
}
|
|
80
113
|
|
|
114
|
+
/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars */
|
|
115
|
+
/*
|
|
116
|
+
const socketDetail: ISocketDetail = socketUtils.SetupClientSideSocket('STSUITerm', instrumentManagerAddress, [
|
|
117
|
+
{
|
|
118
|
+
eventName: 'hello',
|
|
119
|
+
eventCb: (socket: any, data: any): void => {
|
|
120
|
+
debug(`Received: [hello:${data}]`);
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
eventName: 'goodbye',
|
|
125
|
+
eventCb: (socket: any, data: any) => {
|
|
126
|
+
debug(`Received: [goodbye:${data}]`);
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
eventName: 'registerEcho',
|
|
131
|
+
eventCb: (socket: any, data: any) => {
|
|
132
|
+
debug(`Received: [registerEcho:${JSON.stringify(data)}]`);
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
eventName: STSEvent.connect,
|
|
137
|
+
eventCb: (socket: STSClientSocket, data: any) => {
|
|
138
|
+
socket.emit('joinRoom', STSRoom.STSInstrumentDataRoom);
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
eventName: 'sts_connect_reply',
|
|
143
|
+
eventCb: (socket: STSClientSocket, data: any) => {
|
|
144
|
+
debug(`Received: [sts_connect_reply:${JSON.stringify(data)}]`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
]);
|
|
148
|
+
*/
|
|
81
149
|
|
|
82
150
|
beforeAll(async () =>
|
|
83
151
|
{
|
|
84
|
-
|
|
152
|
+
/*
|
|
153
|
+
const composeFilePath = "/home/marcusbettens/projects/stsappframework/src/testing";
|
|
154
|
+
const composeFile = "docker-compose.yml";
|
|
155
|
+
try {
|
|
156
|
+
environment = await new DockerComposeEnvironment(composeFilePath, composeFile)
|
|
157
|
+
.withWaitStrategy("kafka", Wait.forLogMessage("[KafkaServer id=1001] started (kafka.server.KafkaServer)"))
|
|
158
|
+
.withPullPolicy(new AlwaysPullPolicy())
|
|
159
|
+
.up()
|
|
160
|
+
} catch (error) {
|
|
161
|
+
console.error(error)
|
|
162
|
+
throw error;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
console.log('done'.green)
|
|
166
|
+
console.log('done'.green)
|
|
167
|
+
console.log('done'.green)
|
|
168
|
+
console.log('done'.green)
|
|
169
|
+
console.log('done'.green)
|
|
170
|
+
console.log('done'.green)
|
|
171
|
+
console.log('done'.green)
|
|
172
|
+
console.log('done'.green)
|
|
173
|
+
console.log('done'.green)
|
|
174
|
+
console.log('done'.green)
|
|
175
|
+
console.log('done'.green)
|
|
176
|
+
console.log('done'.green)
|
|
177
|
+
console.log('done'.green)
|
|
178
|
+
console.log('done'.green)
|
|
179
|
+
*/
|
|
180
|
+
|
|
181
|
+
/*
|
|
182
|
+
producer = kafka.producer()
|
|
183
|
+
await producer.connect()
|
|
184
|
+
*/
|
|
85
185
|
|
|
86
186
|
/*
|
|
87
187
|
process.env.AS_ENDPOINT = testHelper.authHost;
|
|
@@ -95,7 +195,7 @@ describe("Single Server Test", () =>
|
|
|
95
195
|
//goptions.asport = testHelper.authPort;
|
|
96
196
|
*/
|
|
97
197
|
|
|
98
|
-
const appOptions = ServiceConfigOptions(true);
|
|
198
|
+
const appOptions = ServiceConfigOptions(true, true);
|
|
99
199
|
appOptions.processExitOnTerminate = false;
|
|
100
200
|
//app = new SingleProcessBase(appOptions)
|
|
101
201
|
app = new MasterProcessBase(appOptions)
|
|
@@ -107,6 +207,11 @@ describe("Single Server Test", () =>
|
|
|
107
207
|
{
|
|
108
208
|
await Sleep(500);
|
|
109
209
|
|
|
210
|
+
// Kafka disconnect
|
|
211
|
+
//await producer.disconnect()
|
|
212
|
+
|
|
213
|
+
//@@await environment.down();
|
|
214
|
+
|
|
110
215
|
//await (app as SingleProcessBase).TerminateApplication();
|
|
111
216
|
await Sleep(1000);
|
|
112
217
|
app = null;
|
|
@@ -131,11 +236,47 @@ describe("Single Server Test", () =>
|
|
|
131
236
|
const num = 50;
|
|
132
237
|
expect.assertions(num * 2);
|
|
133
238
|
for (let i=0; i < num; i++) {
|
|
239
|
+
|
|
240
|
+
/*
|
|
241
|
+
const retValKafka = await producer.send({
|
|
242
|
+
topic: 'topic-name2',
|
|
243
|
+
messages: [
|
|
244
|
+
{ key: 'key1', value: `hello world - ${i}` },
|
|
245
|
+
],
|
|
246
|
+
})
|
|
247
|
+
*/
|
|
248
|
+
|
|
134
249
|
const retVal = await getLatency();
|
|
135
250
|
const retValObj = retVal?.data.data;
|
|
136
251
|
expect(retValObj).toMatch('Ping Completed At:');
|
|
137
252
|
expect(retVal && retVal.status).toEqual(200);
|
|
138
253
|
}
|
|
139
254
|
}, 10000);
|
|
255
|
+
|
|
256
|
+
test('client socket testing', async () =>
|
|
257
|
+
{
|
|
258
|
+
expect.assertions(1);
|
|
259
|
+
|
|
260
|
+
let complete = false;
|
|
261
|
+
|
|
262
|
+
const socketDetail: ISocketDetail = socketUtils.SetupClientSideSocket('STSUITerm', instrumentManagerAddress, [
|
|
263
|
+
{
|
|
264
|
+
eventName: 'sts_connect_reply',
|
|
265
|
+
eventCb: (socket: STSClientSocket, data: any) => {
|
|
266
|
+
debug(`Received: [sts_connect_reply:${JSON.stringify(data)}]`);
|
|
267
|
+
expect(1).toEqual(1);
|
|
268
|
+
complete = true;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
]);
|
|
272
|
+
|
|
273
|
+
socketDetail.socket?.emit('sts_connect')
|
|
274
|
+
|
|
275
|
+
while (!complete) {
|
|
276
|
+
await Sleep(100);
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
//expect(1).toEqual(1);
|
|
280
|
+
}, 3000);
|
|
140
281
|
});
|
|
141
282
|
|
package/src/workerprocessbase.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import debugModule from 'debug'
|
|
2
2
|
const debug = debugModule(`proc:${process.pid}`);
|
|
3
3
|
|
|
4
|
-
|
|
5
4
|
import { Gauge, InstrumentGaugeTelemetry } from '@nsshunt/stsinstrumentation'
|
|
6
5
|
import { JSONObject } from '@nsshunt/stsutils'
|
|
7
6
|
import { ProcessOptions } from './processoptions'
|
|
@@ -121,5 +121,9 @@ export interface ProcessOptions {
|
|
|
121
121
|
useRedisInstrumentationTransport?: boolean;
|
|
122
122
|
redisInstrumentationTransportUrl?: string;
|
|
123
123
|
workerExec?: string;
|
|
124
|
+
/**
|
|
125
|
+
* Is this application using nodejs cluster mode?
|
|
126
|
+
*/
|
|
127
|
+
clusterMode: boolean;
|
|
124
128
|
}
|
|
125
129
|
//# sourceMappingURL=processoptions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processoptions.d.ts","sourceRoot":"","sources":["../src/processoptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAEpE,OAAO,OAAO,MAAM,SAAS,CAAA;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,MAAM,WAAW,gBAAgB;IAChC,IAAI,GAAG,IAAI,OAAO,CAAC,OAAO,CAAA;CAC1B;AAED;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,KAAK,IAAI,CAAA;AAEtF,oBAAY,aAAa;IACrB,IAAI,SAAS;IACb,OAAO,YAAY;IACnB,WAAW,gBAAgB;IAC9B,UAAU,eAAe;IACtB,YAAY,gBAAgB;CAC/B;AAGD,MAAM,WAAW,cAAc;IACvB;;GAED;IACH,QAAQ,EAAE,OAAO,CAAA;IAEjB;;OAEG;IACN,iBAAiB,EAAE,MAAM,CAAA;IAItB,UAAU,EAAE,aAAa,CAAA;IAE5B;;OAEG;IACA,kBAAkB,EAAE,MAAM,CAAA;IAE7B;;OAEG;IACA,0BAA0B,EAAE,MAAM,CAAA;IAElC;;OAEG;IACH,sBAAsB,EAAE,OAAO,CAAA;IAE/B;;OAEG;IACH,SAAS,EAAE,OAAO,CAAA;IAErB;;OAEG;IACA,iBAAiB,EAAE,OAAO,CAAA;IAE7B;;OAEG;IACA,QAAQ,EAAE,MAAM,CAAA;IAEnB;;OAEG;IACA,OAAO,EAAE,MAAM,CAAA;IAEf;;;;;;;;;;;OAWG;IACH,UAAU,EAAE,MAAM,CAAA;IAElB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IAEf;;OAEG;IACA,qBAAqB,EAAE,MAAM,CAAA;IAEhC;;OAEG;IACA,WAAW,EAAE,MAAM,CAAA;IAEnB;;OAEA;IACA,cAAc,EAAE,MAAM,CAAA;IAEtB;;OAEG;IACH,cAAc,EAAE,OAAO,CAAA;IAEvB;;OAEG;IACH,iBAAiB,EAAE,OAAO,CAAA;IAI1B,qBAAqB,CAAC,EAAE,sBAAsB,CAAA;IAE9C;;;OAGG;IACH,yBAAyB,CAAC,EAAE,mBAAmB,CAAA;IAE/C;;;OAGG;IACH,+BAA+B,CAAC,EAAE,mBAAmB,CAAA;IAErD;;;OAGG;IACH,UAAU,EAAE,OAAO,CAAA;IAEnB;;OAEG;IACH,WAAW,EAAE,OAAO,CAAA;IAEpB;;OAEG;IACH,yBAAyB,EAAE,OAAO,CAAA;IAElC,kCAAkC,EAAE,MAAM,CAAA;IAE1C,yBAAyB,EAAE,MAAM,CAAA;IAEjC,eAAe,EAAE,OAAO,CAAA;IAExB,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB,gCAAgC,CAAC,EAAE,OAAO,CAAA;IAE1C,gCAAgC,CAAC,EAAE,MAAM,CAAA;IAEzC,UAAU,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"processoptions.d.ts","sourceRoot":"","sources":["../src/processoptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAEpE,OAAO,OAAO,MAAM,SAAS,CAAA;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,MAAM,WAAW,gBAAgB;IAChC,IAAI,GAAG,IAAI,OAAO,CAAC,OAAO,CAAA;CAC1B;AAED;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,KAAK,IAAI,CAAA;AAEtF,oBAAY,aAAa;IACrB,IAAI,SAAS;IACb,OAAO,YAAY;IACnB,WAAW,gBAAgB;IAC9B,UAAU,eAAe;IACtB,YAAY,gBAAgB;CAC/B;AAGD,MAAM,WAAW,cAAc;IACvB;;GAED;IACH,QAAQ,EAAE,OAAO,CAAA;IAEjB;;OAEG;IACN,iBAAiB,EAAE,MAAM,CAAA;IAItB,UAAU,EAAE,aAAa,CAAA;IAE5B;;OAEG;IACA,kBAAkB,EAAE,MAAM,CAAA;IAE7B;;OAEG;IACA,0BAA0B,EAAE,MAAM,CAAA;IAElC;;OAEG;IACH,sBAAsB,EAAE,OAAO,CAAA;IAE/B;;OAEG;IACH,SAAS,EAAE,OAAO,CAAA;IAErB;;OAEG;IACA,iBAAiB,EAAE,OAAO,CAAA;IAE7B;;OAEG;IACA,QAAQ,EAAE,MAAM,CAAA;IAEnB;;OAEG;IACA,OAAO,EAAE,MAAM,CAAA;IAEf;;;;;;;;;;;OAWG;IACH,UAAU,EAAE,MAAM,CAAA;IAElB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IAEf;;OAEG;IACA,qBAAqB,EAAE,MAAM,CAAA;IAEhC;;OAEG;IACA,WAAW,EAAE,MAAM,CAAA;IAEnB;;OAEA;IACA,cAAc,EAAE,MAAM,CAAA;IAEtB;;OAEG;IACH,cAAc,EAAE,OAAO,CAAA;IAEvB;;OAEG;IACH,iBAAiB,EAAE,OAAO,CAAA;IAI1B,qBAAqB,CAAC,EAAE,sBAAsB,CAAA;IAE9C;;;OAGG;IACH,yBAAyB,CAAC,EAAE,mBAAmB,CAAA;IAE/C;;;OAGG;IACH,+BAA+B,CAAC,EAAE,mBAAmB,CAAA;IAErD;;;OAGG;IACH,UAAU,EAAE,OAAO,CAAA;IAEnB;;OAEG;IACH,WAAW,EAAE,OAAO,CAAA;IAEpB;;OAEG;IACH,yBAAyB,EAAE,OAAO,CAAA;IAElC,kCAAkC,EAAE,MAAM,CAAA;IAE1C,yBAAyB,EAAE,MAAM,CAAA;IAEjC,eAAe,EAAE,OAAO,CAAA;IAExB,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB,gCAAgC,CAAC,EAAE,OAAO,CAAA;IAE1C,gCAAgC,CAAC,EAAE,MAAM,CAAA;IAEzC,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;OAEG;IACH,WAAW,EAAE,OAAO,CAAA;CACvB"}
|
|
@@ -15,7 +15,7 @@ export declare class ServerProcessBase extends ProcessBase {
|
|
|
15
15
|
get expressServer(): STSExpressServer | null;
|
|
16
16
|
set expressServer(val: STSExpressServer | null);
|
|
17
17
|
ProcessTerminating: () => Promise<void>;
|
|
18
|
-
Terminate: (
|
|
18
|
+
Terminate: (clusterPerformExit: boolean, signal?: any) => Promise<void>;
|
|
19
19
|
SetupSTSServer: () => Promise<void>;
|
|
20
20
|
}
|
|
21
21
|
//# sourceMappingURL=serverprocessbase.d.ts.map
|