@nsshunt/stsappframework 3.1.117 → 3.1.120
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/authutilsnode.js +9 -10
- package/dist/authutilsnode.js.map +1 -1
- package/dist/influxdb/influxDBManager.js +9 -10
- package/dist/influxdb/influxDBManager.js.map +1 -1
- package/dist/ipcMessageHandler.js +171 -0
- package/dist/ipcMessageHandler.js.map +1 -0
- package/dist/ipcMessageManager.js +15 -5
- package/dist/ipcMessageManager.js.map +1 -1
- package/dist/ipcMessageProcessorPrimary.js +1 -0
- package/dist/ipcMessageProcessorPrimary.js.map +1 -1
- package/dist/ipcMessageProcessorWorker.js +1 -0
- package/dist/ipcMessageProcessorWorker.js.map +1 -1
- package/dist/kafka/IMKafkaManager.js +13 -14
- package/dist/kafka/IMKafkaManager.js.map +1 -1
- package/dist/masterprocessbase.js +7 -8
- package/dist/masterprocessbase.js.map +1 -1
- package/dist/processbase.js +13 -14
- package/dist/processbase.js.map +1 -1
- package/dist/redisMessageHandler.js +212 -0
- package/dist/redisMessageHandler.js.map +1 -0
- package/dist/redisMessageHandler.test.js +127 -0
- package/dist/redisMessageHandler.test.js.map +1 -0
- package/dist/server.js +3 -4
- package/dist/server.js.map +1 -1
- package/dist/serverprocessbase.js +1 -2
- package/dist/serverprocessbase.js.map +1 -1
- package/dist/singleprocessbase.js +2 -3
- package/dist/singleprocessbase.js.map +1 -1
- package/dist/tcpserver/appConfig.js +12 -13
- package/dist/tcpserver/appConfig.js.map +1 -1
- package/dist/testHelpers.js +11 -13
- package/dist/testHelpers.js.map +1 -1
- package/dist/testing/app.js +112 -5
- package/dist/testing/app.js.map +1 -1
- package/dist/testing/appConfig.js +13 -14
- package/dist/testing/appConfig.js.map +1 -1
- package/dist/testing/server.js +1 -2
- package/dist/testing/server.js.map +1 -1
- package/dist/vitesttesting/appConfig.js +13 -14
- package/dist/vitesttesting/appConfig.js.map +1 -1
- package/dist/vitesttesting/server.js +1 -2
- package/dist/vitesttesting/server.js.map +1 -1
- package/dist/vitesttesting/singleservertest.test.js +12 -13
- package/dist/vitesttesting/singleservertest.test.js.map +1 -1
- package/package.json +3 -3
- package/runtest2.sh +1 -1
- package/src/authutilsnode.ts +1 -2
- package/src/commonTypes.ts +1 -0
- package/src/influxdb/influxDBManager.ts +1 -2
- package/src/ipcMessageHandler.ts +181 -0
- package/src/ipcMessageManager.ts +19 -9
- package/src/ipcMessageProcessorPrimary.ts +1 -0
- package/src/ipcMessageProcessorWorker.ts +1 -0
- package/src/kafka/IMKafkaManager.ts +1 -2
- package/src/masterprocessbase.ts +1 -2
- package/src/processbase.ts +1 -2
- package/src/redisMessageHandler.test.ts +155 -0
- package/src/redisMessageHandler.ts +256 -0
- package/src/server.ts +1 -2
- package/src/serverprocessbase.ts +1 -2
- package/src/singleprocessbase.ts +1 -2
- package/src/tcpserver/appConfig.ts +1 -2
- package/src/testHelpers.ts +1 -3
- package/src/testing/app.ts +132 -8
- package/src/testing/appConfig.ts +1 -2
- package/src/testing/server.ts +1 -2
- package/src/vitesttesting/appConfig.ts +1 -2
- package/src/vitesttesting/server.ts +1 -2
- package/src/vitesttesting/singleservertest.test.ts +1 -2
- package/types/authutilsnode.d.ts.map +1 -1
- package/types/commonTypes.d.ts +1 -0
- package/types/commonTypes.d.ts.map +1 -1
- package/types/influxdb/influxDBManager.d.ts.map +1 -1
- package/types/ipcMessageHandler.d.ts +24 -0
- package/types/ipcMessageHandler.d.ts.map +1 -0
- package/types/ipcMessageManager.d.ts +4 -3
- package/types/ipcMessageManager.d.ts.map +1 -1
- package/types/ipcMessageProcessorPrimary.d.ts.map +1 -1
- package/types/ipcMessageProcessorWorker.d.ts.map +1 -1
- package/types/kafka/IMKafkaManager.d.ts.map +1 -1
- package/types/masterprocessbase.d.ts.map +1 -1
- package/types/processbase.d.ts.map +1 -1
- package/types/redisMessageHandler.d.ts +35 -0
- package/types/redisMessageHandler.d.ts.map +1 -0
- package/types/redisMessageHandler.test.d.ts +2 -0
- package/types/redisMessageHandler.test.d.ts.map +1 -0
- package/types/server.d.ts.map +1 -1
- package/types/serverprocessbase.d.ts.map +1 -1
- package/types/singleprocessbase.d.ts.map +1 -1
- package/types/tcpserver/appConfig.d.ts.map +1 -1
- package/types/testHelpers.d.ts.map +1 -1
- package/types/testing/appConfig.d.ts.map +1 -1
- package/types/testing/server.d.ts.map +1 -1
- package/types/vitesttesting/appConfig.d.ts.map +1 -1
- package/types/vitesttesting/server.d.ts.map +1 -1
|
@@ -34,7 +34,6 @@ const stsutils_1 = require("@nsshunt/stsutils");
|
|
|
34
34
|
const appSingleWSS_1 = require("./appSingleWSS");
|
|
35
35
|
const appConfig_1 = require("./appConfig");
|
|
36
36
|
const stsconfig_1 = require("@nsshunt/stsconfig");
|
|
37
|
-
const goptions = (0, stsconfig_1.$Options)();
|
|
38
37
|
const https = __importStar(require("node:https"));
|
|
39
38
|
const vitest_1 = require("vitest");
|
|
40
39
|
const stsobservability_1 = require("@nsshunt/stsobservability");
|
|
@@ -45,16 +44,16 @@ const index_1 = require("./../index");
|
|
|
45
44
|
const endpoint = 'https://localhost';
|
|
46
45
|
const socketUtilsoptions = {
|
|
47
46
|
agentOptions: {
|
|
48
|
-
keepAlive: goptions.keepAlive,
|
|
49
|
-
maxSockets: goptions.maxSockets,
|
|
50
|
-
maxTotalSockets: goptions.maxTotalSockets,
|
|
51
|
-
maxFreeSockets: goptions.maxFreeSockets,
|
|
47
|
+
keepAlive: stsconfig_1.goptions.keepAlive,
|
|
48
|
+
maxSockets: stsconfig_1.goptions.maxSockets,
|
|
49
|
+
maxTotalSockets: stsconfig_1.goptions.maxTotalSockets,
|
|
50
|
+
maxFreeSockets: stsconfig_1.goptions.maxFreeSockets,
|
|
52
51
|
timeout: 30000, //@@ config
|
|
53
|
-
rejectUnauthorized: goptions.isProduction // Allows self signed certs in non production mode(s)
|
|
52
|
+
rejectUnauthorized: stsconfig_1.goptions.isProduction // Allows self signed certs in non production mode(s)
|
|
54
53
|
}
|
|
55
54
|
};
|
|
56
55
|
const socketUtils = new stsobservability_1.SocketIoClientHelper(socketUtilsoptions);
|
|
57
|
-
const instrumentManagerAddress = `${endpoint}:${goptions.rest01port}/${index_1.STSNamespace.STSMonitor}/`;
|
|
56
|
+
const instrumentManagerAddress = `${endpoint}:${stsconfig_1.goptions.rest01port}/${index_1.STSNamespace.STSMonitor}/`;
|
|
58
57
|
const LogInfoMessage = (message) => console.log(chalk_1.default.green(`info: ${message}`));
|
|
59
58
|
const LogErrorMessage = (message) => console.error(chalk_1.default.red(`error: ${message}`));
|
|
60
59
|
const LogDebugMessage = (message) => console.log(chalk_1.default.blue(`debug: ${message}`));
|
|
@@ -85,15 +84,15 @@ const index_1 = require("./../index");
|
|
|
85
84
|
}
|
|
86
85
|
};
|
|
87
86
|
httpsAgent = new https.Agent({
|
|
88
|
-
keepAlive: goptions.keepAlive,
|
|
89
|
-
maxSockets: goptions.maxSockets,
|
|
90
|
-
maxTotalSockets: goptions.maxTotalSockets,
|
|
91
|
-
maxFreeSockets: goptions.maxFreeSockets,
|
|
92
|
-
timeout: goptions.timeout,
|
|
87
|
+
keepAlive: stsconfig_1.goptions.keepAlive,
|
|
88
|
+
maxSockets: stsconfig_1.goptions.maxSockets,
|
|
89
|
+
maxTotalSockets: stsconfig_1.goptions.maxTotalSockets,
|
|
90
|
+
maxFreeSockets: stsconfig_1.goptions.maxFreeSockets,
|
|
91
|
+
timeout: stsconfig_1.goptions.timeout,
|
|
93
92
|
rejectUnauthorized: false
|
|
94
93
|
});
|
|
95
94
|
const getLatency = async () => {
|
|
96
|
-
const url = `${endpoint}:${goptions.rest01port}${goptions.rest01apiroot}/latency`;
|
|
95
|
+
const url = `${endpoint}:${stsconfig_1.goptions.rest01port}${stsconfig_1.goptions.rest01apiroot}/latency`;
|
|
97
96
|
try {
|
|
98
97
|
const headers = {
|
|
99
98
|
'Content-Type': 'application/json',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"singleservertest.test.js","sourceRoot":"","sources":["../../src/vitesttesting/singleservertest.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAAkD,CAAE,UAAU;AAC9D,kDAA0B;AAE1B,kDAAyD;AAEzD,gDAAyC;AACzC,6DAA6D;AAE7D,iDAA6C;AAE7C,2CAAkD;AAElD,kDAA6C;
|
|
1
|
+
{"version":3,"file":"singleservertest.test.js","sourceRoot":"","sources":["../../src/vitesttesting/singleservertest.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAAkD,CAAE,UAAU;AAC9D,kDAA0B;AAE1B,kDAAyD;AAEzD,gDAAyC;AACzC,6DAA6D;AAE7D,iDAA6C;AAE7C,2CAAkD;AAElD,kDAA6C;AAE7C,kDAAmC;AAEnC,mCAAqE;AAErE,gEAA8F;AAE9F,sCAAyC;AAKzC,IAAA,iBAAQ,EAAC,oBAAoB,EAAE,GAAG,EAAE;IAEhC,IAAI,GAAG,GAAwB,IAAI,CAAC;IACpC,IAAI,UAAU,GAAuB,IAAI,CAAC;IAE1C,MAAM,QAAQ,GAAG,mBAAmB,CAAA;IAEpC,MAAM,kBAAkB,GAAiC;QACrD,YAAY,EAAE;YACV,SAAS,EAAE,oBAAQ,CAAC,SAAS;YAC7B,UAAU,EAAE,oBAAQ,CAAC,UAAU;YAC/B,eAAe,EAAE,oBAAQ,CAAC,eAAe;YACzC,cAAc,EAAE,oBAAQ,CAAC,cAAc;YACvC,OAAO,EAAE,KAAK,EAAE,WAAW;YAC3B,kBAAkB,EAAE,oBAAQ,CAAC,YAAY,CAAC,qDAAqD;SAClG;KACJ,CAAA;IAED,MAAM,WAAW,GAAG,IAAI,uCAAoB,CAA6C,kBAAkB,CAAC,CAAC;IAE7G,MAAM,wBAAwB,GAC1B,GAAG,QAAQ,IAAI,oBAAQ,CAAC,UAAU,IAAI,oBAAY,CAAC,UAAU,GAAG,CAAC;IAErE,MAAM,cAAc,GAAG,CAAC,OAAY,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC,CAAC;IACtF,MAAM,eAAe,GAAG,CAAC,OAAY,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC,CAAC;IACxF,MAAM,eAAe,GAAG,CAAC,OAAY,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC,CAAC;IAEvF,MAAM,WAAW,GAAG,CAAC,KAAU,EAAE,EAAE;QAC/B,eAAe,CAAC,eAAK,CAAC,GAAG,CAAC,0BAA0B,KAAK,GAAG,CAAC,CAAC,CAAC;QAC/D,IAAI,eAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,UAAU,GAAe,KAAK,CAAC;YACrC,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;gBACtB,eAAe,CAAC,eAAK,CAAC,GAAG,CAAC,kCAAkC,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC5F,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;oBAC9B,cAAc,CAAC,eAAK,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC7F,CAAC;gBACD,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;oBAC3B,cAAc,CAAC,eAAK,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvF,CAAC;gBACD,IAAI,CAAC;oBACD,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;wBAC7B,cAAc,CAAC,eAAK,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC3F,CAAC;gBACL,CAAC;gBAAC,OAAO,UAAe,EAAE,CAAC;oBACvB,cAAc,CAAC,eAAK,CAAC,GAAG,CAAC,4CAA4C,UAAU,GAAG,CAAC,CAAC,CAAC;gBACzF,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,eAAe,CAAC,eAAK,CAAC,GAAG,CAAC,iCAAiC,UAAU,GAAG,CAAC,CAAC,CAAC;YAC/E,CAAC;QACL,CAAC;IACL,CAAC,CAAA;IAED,UAAU,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC;QACzB,SAAS,EAAE,oBAAQ,CAAC,SAAS;QAC7B,UAAU,EAAE,oBAAQ,CAAC,UAAU;QAC/B,eAAe,EAAE,oBAAQ,CAAC,eAAe;QACzC,cAAc,EAAE,oBAAQ,CAAC,cAAc;QACvC,OAAO,EAAE,oBAAQ,CAAC,OAAO;QACzB,kBAAkB,EAAE,KAAK;KAC5B,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,KAAK,IAAmC,EAAE;QACzD,MAAM,GAAG,GAAG,GAAG,QAAQ,IAAI,oBAAQ,CAAC,UAAU,GAAG,oBAAQ,CAAC,aAAa,UAAU,CAAC;QAClF,IAAI,CAAC;YACD,MAAM,OAAO,GAAG;gBACZ,cAAc,EAAE,kBAAkB;aACrC,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,IAAA,eAAK,EAAC;gBACvB,GAAG,EAAE,GAAG;gBACP,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,OAAO;gBAChB,UAAU,EAAE,UAAU;aAC1B,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAClB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,WAAW,CAAC,KAAK,CAAC,CAAC;YACnB,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC,CAAA;IAED,IAAA,kBAAS,EAAC,KAAK,IAAI,EAAE;QAEjB,MAAM,UAAU,GAAG,IAAA,gCAAoB,EAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACrD,UAAU,CAAC,sBAAsB,GAAG,KAAK,CAAC;QAC1C,GAAG,GAAG,IAAI,2BAAY,CAAC,UAAU,CAAC,CAAA;QAClC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,IAAA,gBAAK,EAAC,IAAI,CAAC,CAAC;IACtB,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,IAAA,iBAAQ,EAAC,KAAK,IAAI,EAAE;QAEhB,MAAM,IAAA,gBAAK,EAAC,GAAG,CAAC,CAAC;QAEjB,MAAM,IAAA,gBAAK,EAAC,IAAI,CAAC,CAAC;QAClB,GAAG,GAAG,IAAI,CAAC;IACf,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,IAAA,aAAI,EAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;QAE9B,eAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACrB,IAAA,eAAM,EAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,IAAA,aAAI,EAAC,cAAc,EAAE,KAAK,IAAI,EAAE;QAC5B,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,eAAM,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;YACpC,IAAA,eAAM,EAAC,SAAS,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;YAChD,IAAA,eAAM,EAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjD,CAAC;IACL,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,IAAA,aAAI,EAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QAErC,eAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAErB,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,MAAM,MAAM,GAAG,WAAW,CAAC,qBAAqB,CAAC,WAAW;QACxD,2EAA2E;QAC3E,wBAAwB;QACxB,sBAAsB;QACtB,8DAA8D;QAC9D,CAAC,MAA0D,EAAE,EAAE;YAC3D,eAAe,CAAC,eAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;YAC9C,IAAA,eAAM,EAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;QACD,gBAAgB;QAChB,CAAC,MAA0D,EAAE,EAAE;YAC3D,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,IAAS,EAAE,EAAE;gBACpC,eAAe,CAAC,eAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;gBAC9C,IAAA,eAAM,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,IAAS,EAAE,EAAE;gBACtC,eAAe,CAAC,eAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;gBAChD,IAAA,eAAM,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAC9C,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,IAAS,EAAE,EAAE;gBAC7C,eAAe,CAAC,eAAK,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC;gBACvD,IAAA,eAAM,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;gBAC5B,eAAe,CAAC,eAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;gBACzC,IAAA,eAAM,EAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACrB,MAAM,IAAA,gBAAK,EAAC,GAAG,CAAC,CAAC;gBACjB,QAAQ,GAAG,IAAI,CAAC;YACpB,CAAC,CAAC,CAAC;QACP,CAAC,EACD,CAAC,KAAY,EAAE,EAAE;YACb,eAAe,CAAC,qCAAqC,KAAK,GAAG,CAAC,CAAC;QACnE,CAAC,CACJ,CAAA;QAED,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QAEzE,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,YAAY,EAAC,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,YAAY,EAAC,CAAC,CAAC;QAEhD,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,YAAY,EAAC,CAAC,CAAC;QAElD,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC;QAEjD,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAC,CAAC,CAAA;QAC1F,sBAAsB;QAEtB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACjD,IAAI,GAAG,EAAE,CAAC;gBACN,cAAc,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACJ,IAAA,eAAM,EAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAClD,IAAI,GAAG,EAAE,CAAC;gBACN,cAAc,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACJ,IAAA,eAAM,EAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACjC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,QAAQ,EAAE,CAAC;YACf,MAAM,IAAA,gBAAK,EAAC,GAAG,CAAC,CAAC;QACrB,CAAC;IAEL,CAAC,EAAE,IAAI,CAAC,CAAC;AACb,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nsshunt/stsappframework",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.120",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "./types/index.d.ts",
|
|
@@ -48,8 +48,8 @@
|
|
|
48
48
|
"@grpc/proto-loader": "^0.7.13",
|
|
49
49
|
"@influxdata/influxdb-client": "^1.33.2",
|
|
50
50
|
"@influxdata/influxdb-client-apis": "^1.33.2",
|
|
51
|
-
"@nsshunt/stsconfig": "^1.25.
|
|
52
|
-
"@nsshunt/stsdatamanagement": "^1.18.
|
|
51
|
+
"@nsshunt/stsconfig": "^1.25.130",
|
|
52
|
+
"@nsshunt/stsdatamanagement": "^1.18.41",
|
|
53
53
|
"@nsshunt/stsobservability": "^1.0.28",
|
|
54
54
|
"@nsshunt/stsutils": "^1.16.59",
|
|
55
55
|
"@socket.io/cluster-adapter": "^0.2.2",
|
package/runtest2.sh
CHANGED
package/src/authutilsnode.ts
CHANGED
|
@@ -6,8 +6,7 @@ import jwksClient from 'jwks-rsa';
|
|
|
6
6
|
|
|
7
7
|
import axios from 'axios';
|
|
8
8
|
|
|
9
|
-
import {
|
|
10
|
-
const goptions = $Options()
|
|
9
|
+
import { goptions } from '@nsshunt/stsconfig'
|
|
11
10
|
|
|
12
11
|
import { GetErrorPayload, ISTSLogger, JSONObject } from '@nsshunt/stsutils'
|
|
13
12
|
|
package/src/commonTypes.ts
CHANGED
|
@@ -6,9 +6,8 @@ import { Agent } from 'http'
|
|
|
6
6
|
|
|
7
7
|
import chalk from 'chalk';
|
|
8
8
|
|
|
9
|
-
import {
|
|
9
|
+
import { goptions } from '@nsshunt/stsconfig'
|
|
10
10
|
import { ISTSLogger, JSONObject } from '@nsshunt/stsutils'
|
|
11
|
-
const goptions = $Options()
|
|
12
11
|
|
|
13
12
|
import { InfluxDBManagerBase } from './influxDBManagerBase'
|
|
14
13
|
import { InfluxDBManagerService} from './influxDBManagerService'
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/no-unused-vars: 0 */ // --> OFF */ // --> OFF
|
|
2
|
+
import { TinyEmitter } from "tiny-emitter";
|
|
3
|
+
import cluster, { Worker } from 'node:cluster'
|
|
4
|
+
import { ISTSLogger, JSONObject, defaultLogger } from '@nsshunt/stsutils'
|
|
5
|
+
|
|
6
|
+
import { IIPCMessageProcessorIPCPayload } from './commonTypes'
|
|
7
|
+
|
|
8
|
+
import { IPCMessageManager, IPCMessageManagerOptions } from './ipcMessageManager'
|
|
9
|
+
|
|
10
|
+
export interface IPCMessageHandlerOptions {
|
|
11
|
+
logger: ISTSLogger
|
|
12
|
+
requestResponseMessageTimeout: number
|
|
13
|
+
namespace: string
|
|
14
|
+
//processPayload?: (payload: IIPCMessageProcessorIPCPayload, options: any) => Promise<JSONObject>
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export class IPCMessageHandler extends TinyEmitter {
|
|
18
|
+
#ipcMessageManager: IPCMessageManager | null = null;
|
|
19
|
+
#options: IPCMessageHandlerOptions;
|
|
20
|
+
#worker: Worker | null = null;
|
|
21
|
+
#events: JSONObject = { };
|
|
22
|
+
|
|
23
|
+
constructor(options: IPCMessageHandlerOptions) {
|
|
24
|
+
super();
|
|
25
|
+
this.#options = options;
|
|
26
|
+
if (cluster.isPrimary) {
|
|
27
|
+
this.SetupPrimary();
|
|
28
|
+
} else {
|
|
29
|
+
this.SetupWorker();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
get __events() {
|
|
34
|
+
return this.#events;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
SetupPrimary = () => {
|
|
38
|
+
const ipcMessageManagerOptions: IPCMessageManagerOptions = {
|
|
39
|
+
logger: defaultLogger,
|
|
40
|
+
requestResponseMessageTimeout: 2000,
|
|
41
|
+
namespace: this.#options.namespace,
|
|
42
|
+
role: 'SERVER',
|
|
43
|
+
messageSender: (payload: IIPCMessageProcessorIPCPayload, options: any) => {
|
|
44
|
+
(options.worker as any).send(payload);
|
|
45
|
+
},
|
|
46
|
+
ProcessRequestMessage: async (payload: IIPCMessageProcessorIPCPayload, options: any): Promise<JSONObject> => {
|
|
47
|
+
return this.#processPayload(payload, options);
|
|
48
|
+
},
|
|
49
|
+
messageReceiverStart: (options: any) => {
|
|
50
|
+
// Receive a message to process from a worker
|
|
51
|
+
const worker = (options.worker as Worker);
|
|
52
|
+
worker.on('message', (payload) => this.#ipcMessageManager?.ProcessMessage(payload, { worker }));
|
|
53
|
+
},
|
|
54
|
+
messageReceiverStop: (options: any) => {
|
|
55
|
+
const worker = (options.worker as Worker);
|
|
56
|
+
worker.off('message', (payload) => this.#ipcMessageManager?.ProcessMessage(payload, { worker }));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
this.#ipcMessageManager = new IPCMessageManager(ipcMessageManagerOptions);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
SetupWorker = () => {
|
|
63
|
+
const ipcMessageManagerOptions: IPCMessageManagerOptions = {
|
|
64
|
+
logger: defaultLogger,
|
|
65
|
+
requestResponseMessageTimeout: this.#options.requestResponseMessageTimeout,
|
|
66
|
+
namespace: this.#options.namespace,
|
|
67
|
+
role: 'CLIENT',
|
|
68
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars
|
|
69
|
+
messageSender: (payload: IIPCMessageProcessorIPCPayload, options: any) => {
|
|
70
|
+
// Options not required for sending payloads to the master process
|
|
71
|
+
(process as any).send(payload);
|
|
72
|
+
},
|
|
73
|
+
ProcessRequestMessage: async (payload: IIPCMessageProcessorIPCPayload, options: any): Promise<JSONObject> => {
|
|
74
|
+
return this.#processPayload(payload, options);
|
|
75
|
+
},
|
|
76
|
+
messageReceiverStart: (options: any) => {
|
|
77
|
+
// Receive a message response back from the primary thread
|
|
78
|
+
process.on('message', (payload) => this.#ipcMessageManager?.ProcessMessage(payload, options));
|
|
79
|
+
},
|
|
80
|
+
messageReceiverStop: (options: any) => {
|
|
81
|
+
process.off('message', (payload) => this.#ipcMessageManager?.ProcessMessage(payload, options));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
this.#ipcMessageManager = new IPCMessageManager(ipcMessageManagerOptions);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
SendMessage = async (payload: JSONObject): Promise<JSONObject> => {
|
|
88
|
+
if (this.#ipcMessageManager) {
|
|
89
|
+
if (this.#worker) {
|
|
90
|
+
return this.#ipcMessageManager?.SendMessage(payload, { worker: this.#worker });
|
|
91
|
+
} else {
|
|
92
|
+
return this.#ipcMessageManager?.SendMessage(payload, { });
|
|
93
|
+
}
|
|
94
|
+
} else {
|
|
95
|
+
// Error state - no #ipcMessageManager set
|
|
96
|
+
return { };
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
#processPayload = (payload: IIPCMessageProcessorIPCPayload, options: any): Promise<JSONObject> => {
|
|
101
|
+
// check the event name from the collection and invoke that function
|
|
102
|
+
return new Promise<JSONObject>((resolve, reject) => {
|
|
103
|
+
if (payload.messageType.localeCompare('REQUEST') === 0) {
|
|
104
|
+
if (payload.requestPayload['__eventName']) {
|
|
105
|
+
const eventName = payload.requestPayload['__eventName'];
|
|
106
|
+
if (this.#events[eventName]) {
|
|
107
|
+
try {
|
|
108
|
+
//const retVal = this.#events[eventName].callback(payload.requestPayload.args, payload, options, this.#events[eventName].ctx);
|
|
109
|
+
this.#events[eventName].callback(...payload.requestPayload.args, (responseMessage: any) => {
|
|
110
|
+
resolve(responseMessage);
|
|
111
|
+
});
|
|
112
|
+
} catch (error) {
|
|
113
|
+
reject(error);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// p.on('fromworker', (arg1: number, arg2: string, callback: any) => {
|
|
122
|
+
override on(event: string, callback: any, ctx?: any): this {
|
|
123
|
+
if (this.#events[event]) {
|
|
124
|
+
// Update the event with the same name
|
|
125
|
+
delete this.#events[event];
|
|
126
|
+
}
|
|
127
|
+
const eventObject = {
|
|
128
|
+
event,
|
|
129
|
+
callback,
|
|
130
|
+
ctx
|
|
131
|
+
}
|
|
132
|
+
this.#events[eventObject.event] = eventObject;
|
|
133
|
+
return this;
|
|
134
|
+
//return super.on(event, callback, ctx);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
override off(event: string, callback?: any): this {
|
|
138
|
+
if (this.#events[event]) {
|
|
139
|
+
delete this.#events[event];
|
|
140
|
+
}
|
|
141
|
+
return this;
|
|
142
|
+
//return super.off(event, callback);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
Start = (worker?: Worker) => {
|
|
146
|
+
if (worker) {
|
|
147
|
+
this.#ipcMessageManager?.Start({ worker });
|
|
148
|
+
this.#worker = worker;
|
|
149
|
+
} else {
|
|
150
|
+
this.#ipcMessageManager?.Start({ });
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
Stop = () => {
|
|
155
|
+
if (this.#worker) {
|
|
156
|
+
this.#ipcMessageManager?.Stop({ worker: this.#worker });
|
|
157
|
+
this.#worker = null;
|
|
158
|
+
} else {
|
|
159
|
+
this.#ipcMessageManager?.Stop({ });
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
get worker(): Worker | null {
|
|
164
|
+
return this.#worker;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
override emit(event: string, ...args: any[]): this {
|
|
168
|
+
|
|
169
|
+
const sendMessage = async () => {
|
|
170
|
+
const retVal = await this.SendMessage({
|
|
171
|
+
__eventName: event,
|
|
172
|
+
args: args.slice(0, args.length-1)
|
|
173
|
+
});
|
|
174
|
+
// Invoke the response callback
|
|
175
|
+
args[args.length-1](retVal);
|
|
176
|
+
};
|
|
177
|
+
sendMessage();
|
|
178
|
+
return this;
|
|
179
|
+
//return super.emit(event, ...args);
|
|
180
|
+
}
|
|
181
|
+
}
|
package/src/ipcMessageManager.ts
CHANGED
|
@@ -11,6 +11,7 @@ export interface IPCMessageManagerOptions {
|
|
|
11
11
|
logger: ISTSLogger
|
|
12
12
|
requestResponseMessageTimeout: number
|
|
13
13
|
namespace: string
|
|
14
|
+
role: 'SERVER' | 'CLIENT'
|
|
14
15
|
messageSender: (payload: IIPCMessageProcessorIPCPayload, options: any) => void
|
|
15
16
|
ProcessRequestMessage: (payload: IIPCMessageProcessorIPCPayload, options: any) => Promise<JSONObject>
|
|
16
17
|
ProcessResponseMessage?: (reesponses: Record<string, IIPCMessageProcessorIPCPayload>, options: any) => Promise<boolean>
|
|
@@ -48,7 +49,7 @@ export class IPCMessageManager
|
|
|
48
49
|
// Override in subclass if required
|
|
49
50
|
}
|
|
50
51
|
|
|
51
|
-
SendMessage = (payload: JSONObject, options
|
|
52
|
+
SendMessage = (payload: JSONObject, options?: any): Promise<JSONObject> => {
|
|
52
53
|
return new Promise((resolve, reject) => {
|
|
53
54
|
this.#SendMessage(payload, options,
|
|
54
55
|
(payload: IIPCMessageProcessorIPCPayload) => {
|
|
@@ -69,6 +70,7 @@ export class IPCMessageManager
|
|
|
69
70
|
header: this.#messageHeader,
|
|
70
71
|
messageId,
|
|
71
72
|
senderId: this.#id,
|
|
73
|
+
senderRole: this.#options.role,
|
|
72
74
|
requestPayload: payload,
|
|
73
75
|
responsePayload: { },
|
|
74
76
|
pid: process.pid.toString(),
|
|
@@ -77,6 +79,7 @@ export class IPCMessageManager
|
|
|
77
79
|
const messageRecord = {
|
|
78
80
|
messageId,
|
|
79
81
|
senderId: this.#id,
|
|
82
|
+
senderRole: this.#options.role,
|
|
80
83
|
requestPayload,
|
|
81
84
|
responses: { }, // record
|
|
82
85
|
startTime: performance.now(),
|
|
@@ -105,26 +108,33 @@ export class IPCMessageManager
|
|
|
105
108
|
let completed = true; // Defaults to true
|
|
106
109
|
if (this.#options.ProcessResponseMessage) {
|
|
107
110
|
completed = await this.#options.ProcessResponseMessage(inFlightMessageRecord.responses, options);
|
|
108
|
-
|
|
109
|
-
|
|
111
|
+
if (completed) {
|
|
112
|
+
inFlightMessageRecord.endTime = performance.now();
|
|
113
|
+
clearTimeout(inFlightMessageRecord.timeout as NodeJS.Timer);
|
|
114
|
+
inFlightMessageRecord.callBack({
|
|
115
|
+
responsePayload: Object.values(inFlightMessageRecord.responses).map(r => r.responsePayload)
|
|
116
|
+
} as any, options) //
|
|
117
|
+
delete this.#inflightMessages[message.messageId];
|
|
118
|
+
}
|
|
119
|
+
} else if (completed) {
|
|
110
120
|
inFlightMessageRecord.endTime = performance.now();
|
|
111
121
|
clearTimeout(inFlightMessageRecord.timeout as NodeJS.Timer);
|
|
112
|
-
|
|
113
|
-
inFlightMessageRecord.callBack(
|
|
122
|
+
inFlightMessageRecord.callBack(message, options) // inFlightMessageRecord.responses
|
|
123
|
+
//@@inFlightMessageRecord.callBack(Object.values(inFlightMessageRecord.responses), options) //
|
|
114
124
|
delete this.#inflightMessages[message.messageId];
|
|
115
125
|
}
|
|
116
126
|
} else {
|
|
117
|
-
throw new Error(`Could not find Request/Response message with id: [${message.messageId}]`);
|
|
127
|
+
//throw new Error(`Could not find Request/Response message with id: [${message.messageId}]`); //@@
|
|
118
128
|
}
|
|
119
129
|
}
|
|
120
130
|
}
|
|
121
131
|
|
|
122
|
-
Start = (options
|
|
132
|
+
Start = (options?: any) => {
|
|
123
133
|
this.#messageHeader = `__STS__${this.#options.namespace}__${uuidv4()}`;
|
|
124
134
|
this.#options.messageReceiverStart(options);
|
|
125
135
|
}
|
|
126
136
|
|
|
127
|
-
Stop = (options
|
|
137
|
+
Stop = (options?: any) => {
|
|
128
138
|
// Kill in-flight messages
|
|
129
139
|
this.#options.messageReceiverStop(options);
|
|
130
140
|
|
|
@@ -139,7 +149,7 @@ export class IPCMessageManager
|
|
|
139
149
|
// Process a message recieved from a worker
|
|
140
150
|
ProcessMessage = async (msg: any, options: any) => {
|
|
141
151
|
if (msg.header) {
|
|
142
|
-
const checkName = `__STS__${this.#options.namespace}__`;
|
|
152
|
+
const checkName = `__STS__${this.#options.namespace}__`; //@@ this is a broadcast becuase the unique uuid is not part of the header test
|
|
143
153
|
if ((msg.header as string).includes(checkName)) {
|
|
144
154
|
const message = (msg as IIPCMessageProcessorIPCPayload);
|
|
145
155
|
if (msg.messageType.localeCompare('REQUEST') === 0) {
|
|
@@ -23,6 +23,7 @@ export class IPCMessageProcessorPrimary
|
|
|
23
23
|
logger: defaultLogger,
|
|
24
24
|
requestResponseMessageTimeout: 2000,
|
|
25
25
|
namespace: classOptions.namespace,
|
|
26
|
+
role: 'SERVER',
|
|
26
27
|
messageSender: (payload: IIPCMessageProcessorIPCPayload, options: any) => {
|
|
27
28
|
(options.worker as any).send(payload);
|
|
28
29
|
},
|
|
@@ -20,6 +20,7 @@ export class IPCMessageProcessorWorker {
|
|
|
20
20
|
logger: defaultLogger,
|
|
21
21
|
requestResponseMessageTimeout: classOptions.requestResponseMessageTimeout,
|
|
22
22
|
namespace: classOptions.namespace,
|
|
23
|
+
role: 'CLIENT',
|
|
23
24
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars
|
|
24
25
|
messageSender: (payload: IIPCMessageProcessorIPCPayload, options: any) => {
|
|
25
26
|
// Options not required for sending payloads to the master process
|
|
@@ -9,8 +9,7 @@ import { v4 as uuidv4 } from 'uuid';
|
|
|
9
9
|
|
|
10
10
|
import chalk from 'chalk';
|
|
11
11
|
|
|
12
|
-
import {
|
|
13
|
-
const goptions = $Options()
|
|
12
|
+
import { goptions } from '@nsshunt/stsconfig'
|
|
14
13
|
|
|
15
14
|
export interface IMKafkaManagerOptions {
|
|
16
15
|
logger: ISTSLogger
|
package/src/masterprocessbase.ts
CHANGED
|
@@ -16,8 +16,7 @@ import { createServer as createServerHttps } from 'https'
|
|
|
16
16
|
import { createServer } from 'http'
|
|
17
17
|
import { AggregatorRegistry } from 'prom-client'
|
|
18
18
|
|
|
19
|
-
import {
|
|
20
|
-
const goptions = $Options()
|
|
19
|
+
import { goptions } from '@nsshunt/stsconfig'
|
|
21
20
|
|
|
22
21
|
import { Gauge, GaugeTypes, InstrumentGaugeTelemetry, InstrumentGaugeOptions, InstrumentHistogramTelemetry } from '@nsshunt/stsobservability'
|
|
23
22
|
|
package/src/processbase.ts
CHANGED
|
@@ -12,8 +12,7 @@ import { Gauge, GaugeTypes, InstrumentObjectOptions, InstrumentLogOptions, Instr
|
|
|
12
12
|
|
|
13
13
|
import { IDBAccessLayer, accessLayerType, DBAccessLayerManager, IDBAccessLayerEvents } from '@nsshunt/stsdatamanagement'
|
|
14
14
|
|
|
15
|
-
import {
|
|
16
|
-
const goptions = $Options()
|
|
15
|
+
import { goptions } from '@nsshunt/stsconfig'
|
|
17
16
|
|
|
18
17
|
import { ProcessOptions, STSServerType } from './processoptions'
|
|
19
18
|
import { STSOptionsBase, JSONObject } from '@nsshunt/stsutils'
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF
|
|
2
|
+
import { beforeAll, afterAll, test, describe, expect } from 'vitest';
|
|
3
|
+
|
|
4
|
+
import { RedisMessageHandler } from './redisMessageHandler'
|
|
5
|
+
|
|
6
|
+
import { JSONObject, Sleep, defaultLogger } from '@nsshunt/stsutils';
|
|
7
|
+
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
|
|
10
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
11
|
+
|
|
12
|
+
import { GenericContainer } from "testcontainers";
|
|
13
|
+
|
|
14
|
+
describe("Redis Message Handler Test", () =>
|
|
15
|
+
{
|
|
16
|
+
let ioRedisContainer: any;
|
|
17
|
+
let ioRedisMessageProcessorUrl = '';
|
|
18
|
+
|
|
19
|
+
beforeAll(async () => {
|
|
20
|
+
// --- [ioRedis ] -------------------------------------------------------------------------
|
|
21
|
+
|
|
22
|
+
ioRedisContainer = await new GenericContainer("redis")
|
|
23
|
+
.withExposedPorts(6379)
|
|
24
|
+
.start();
|
|
25
|
+
ioRedisMessageProcessorUrl = `redis://${ioRedisContainer.getHost()}:${ioRedisContainer.getMappedPort(6379)}`;
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
afterAll(async () => {
|
|
29
|
+
if (ioRedisContainer) {
|
|
30
|
+
await ioRedisContainer.stop();
|
|
31
|
+
}
|
|
32
|
+
}, 5000);
|
|
33
|
+
|
|
34
|
+
class Server {
|
|
35
|
+
#r1: RedisMessageHandler;
|
|
36
|
+
|
|
37
|
+
constructor() {
|
|
38
|
+
this.#r1 = new RedisMessageHandler({
|
|
39
|
+
logger: defaultLogger,
|
|
40
|
+
role: 'SERVER',
|
|
41
|
+
redisUrl: ioRedisMessageProcessorUrl, // goptions.imRedisMessageProcessorUrl,
|
|
42
|
+
namespace: 'redistestingstsframework'
|
|
43
|
+
});
|
|
44
|
+
this.#r1.Start();
|
|
45
|
+
|
|
46
|
+
this.#r1.on('fromworkerredis', (arg1: string, arg2: number, arg3: string, callback: any) => {
|
|
47
|
+
console.log(chalk.magenta(`${process.pid}: fromworkerredis.ON: [${arg1} ${arg2} ${arg3}]`));
|
|
48
|
+
//callback(null);
|
|
49
|
+
callback({status: `response message from event = fromworkerredis with args ${arg1} ${arg2} ${arg3}`})
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
Start = async (expectedResponses: number, iterations: number, delay: number) => {
|
|
54
|
+
for (let i=0; i < iterations; i++) {
|
|
55
|
+
/*
|
|
56
|
+
Object.keys(p).forEach(async (pKey) => {
|
|
57
|
+
const emitobj = { i: i, a: 'a', b: 'b', worker: pKey };
|
|
58
|
+
console.log(chalk.green(`${process.pid}: emit event to worker: [${pKey}] fromprimary: [${JSON.stringify(emitobj)}`));
|
|
59
|
+
p[pKey].emit('fromprimary', emitobj, (response: any) => {
|
|
60
|
+
console.log(chalk.green(`${process.pid}: ${JSON.stringify(response)}`));
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
*/
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
const emitobj = { i: i, a: 'a', b: 'b' };
|
|
67
|
+
console.log(chalk.cyan(`${process.pid}: emit event fromprimaryredis fromprimary: [${JSON.stringify(emitobj)}`));
|
|
68
|
+
this.#r1.emit('fromprimaryredis', emitobj, (response: any) => {
|
|
69
|
+
console.log(chalk.cyan(`${process.pid}: Response(fromprimaryredis): Count: [${response.length}] [${JSON.stringify(response)}]`));
|
|
70
|
+
expect(response.length).toEqual(expectedResponses);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
await Sleep(delay);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
Stop = () => {
|
|
78
|
+
this.#r1.Stop();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
class Client {
|
|
83
|
+
#r1: RedisMessageHandler;
|
|
84
|
+
|
|
85
|
+
constructor() {
|
|
86
|
+
this.#r1 = new RedisMessageHandler({
|
|
87
|
+
logger: defaultLogger,
|
|
88
|
+
role: 'CLIENT',
|
|
89
|
+
redisUrl: ioRedisMessageProcessorUrl, // goptions.imRedisMessageProcessorUrl,
|
|
90
|
+
namespace: 'redistestingstsframework'
|
|
91
|
+
});
|
|
92
|
+
this.#r1.Start();
|
|
93
|
+
|
|
94
|
+
this.#r1.on('fromprimaryredis', (arg1: JSONObject, callback: any) => {
|
|
95
|
+
//callback();
|
|
96
|
+
console.log(chalk.yellow(`${process.pid}: fromprimaryredis.ON: [${JSON.stringify(arg1)}]`));
|
|
97
|
+
callback({status: `PID: [${process.pid}]: response message from event = fromprimaryredis with args ${JSON.stringify(arg1)}`})
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
Start = async (iterations: number, delay: number) => {
|
|
102
|
+
for (let i=0; i < iterations; i++) {
|
|
103
|
+
const id = uuidv4();
|
|
104
|
+
/*
|
|
105
|
+
console.log(chalk.yellow(`${process.pid}: emit event fromworker: [${id} ${i} Hello]`));
|
|
106
|
+
w1.emit('fromworker', id, i, 'Hello', (response: any) => {
|
|
107
|
+
console.log(chalk.yellow(`${process.pid}: ${JSON.stringify(response)}`));
|
|
108
|
+
});
|
|
109
|
+
*/
|
|
110
|
+
|
|
111
|
+
console.log(chalk.green(`${process.pid}: emit event fromworkerredis: [${id} ${i} Hello]`));
|
|
112
|
+
this.#r1.emit('fromworkerredis', id, i, 'Hello', (response: any) => {
|
|
113
|
+
console.log(chalk.green(`${process.pid}: Response(fromworkerredis): [${JSON.stringify(response)}]`));
|
|
114
|
+
});
|
|
115
|
+
await Sleep(delay);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
Stop = () => {
|
|
120
|
+
this.#r1.Stop();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
test('Test 1', async () =>
|
|
126
|
+
{
|
|
127
|
+
const clientCount = 20;
|
|
128
|
+
const iterations = 5;
|
|
129
|
+
const delay = 100;
|
|
130
|
+
|
|
131
|
+
expect.assertions(iterations);
|
|
132
|
+
|
|
133
|
+
// Setup new server and clients
|
|
134
|
+
const server = new Server();
|
|
135
|
+
const clients: Client[] = [ ];
|
|
136
|
+
for (let i=0; i < clientCount; i++) {
|
|
137
|
+
clients.push(new Client());
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Need this delay to ensure the pings are all sent and received between the clients and the server
|
|
141
|
+
await Sleep(2000);
|
|
142
|
+
|
|
143
|
+
// Start sending messages
|
|
144
|
+
server.Start(clientCount, iterations, delay);
|
|
145
|
+
clients.forEach(c => c.Start(iterations, delay));
|
|
146
|
+
|
|
147
|
+
// Allow time to process
|
|
148
|
+
await Sleep(3000);
|
|
149
|
+
|
|
150
|
+
// All done, stop.
|
|
151
|
+
clients.forEach(c => c.Stop());
|
|
152
|
+
server.Stop();
|
|
153
|
+
}, 30000);
|
|
154
|
+
});
|
|
155
|
+
|