@nsshunt/stsappframework 3.0.69 → 3.0.71

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/server.js CHANGED
@@ -14,6 +14,8 @@ const goptions = (0, stsconfig_1.$Options)();
14
14
  const stsinstrumentation_1 = require("@nsshunt/stsinstrumentation");
15
15
  class STSExpressServer {
16
16
  #app;
17
+ #totalBytesRead = 0;
18
+ #totalBytesWritten = 0;
17
19
  constructor(options, stsApp) {
18
20
  // Standard RequestLoggerMiddleware for all STS services
19
21
  const requestLoggerMiddleware = new stspublisherserver_1.RequestLoggerMiddleware({
@@ -51,6 +53,22 @@ class STSExpressServer {
51
53
  });
52
54
  }
53
55
  });
56
+ requestLoggerMiddleware.on(stspublisherserver_1.RequestLoggerMiddlewareEventName.UpdateInstrument_RX_VAL, (bytesRead) => {
57
+ console.log(`Bytes Read: [${bytesRead}]`.magenta);
58
+ /*
59
+ stsApp.UpdateInstrument(Gauge.DURATION_GAUGE, {
60
+ val: timeInMs
61
+ } as InstrumentHistogramTelemetry);
62
+ */
63
+ });
64
+ requestLoggerMiddleware.on(stspublisherserver_1.RequestLoggerMiddlewareEventName.UpdateInstrument_TX_VAL, (bytesWritten) => {
65
+ console.log(`Bytes Read: [${bytesWritten}]`.cyan);
66
+ /*
67
+ stsApp.UpdateInstrument(Gauge.DURATION_GAUGE, {
68
+ val: timeInMs
69
+ } as InstrumentHistogramTelemetry);
70
+ */
71
+ });
54
72
  const app = (0, express_1.default)();
55
73
  this.#app = app;
56
74
  // https://stackoverflow.com/questions/19743396/cors-cannot-use-wildcard-in-access-control-allow-origin-when-credentials-flag-i
@@ -70,6 +88,11 @@ class STSExpressServer {
70
88
  options.expressServerRouteStaticFactory(app, stsApp);
71
89
  }
72
90
  app.use(requestLoggerMiddleware.Middleware.bind(requestLoggerMiddleware));
91
+ app.use(async (err, req, res, next) => {
92
+ this.#totalBytesRead += req.socket.bytesRead;
93
+ this.#totalBytesWritten += req.socket.bytesWritten;
94
+ next();
95
+ });
73
96
  if (options.expressServerRouteFactory) {
74
97
  options.expressServerRouteFactory(app, stsApp);
75
98
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -7,8 +7,14 @@ const appConfig_1 = require("./appConfig");
7
7
  const __1 = require("./..");
8
8
  const appWorkerWSS_1 = require("./appWorkerWSS");
9
9
  const cluster_1 = __importDefault(require("cluster"));
10
+ const systeminformation_1 = __importDefault(require("systeminformation")); // https://systeminformation.io/
10
11
  if (cluster_1.default.isPrimary) {
11
12
  new __1.MasterProcessBase((0, appConfig_1.ServiceConfigOptions)(true, cluster_1.default.isPrimary)).SetupServer();
13
+ setInterval(function () {
14
+ systeminformation_1.default.networkStats().then(data => {
15
+ console.log(data);
16
+ });
17
+ }, 1000);
12
18
  }
13
19
  else {
14
20
  new appWorkerWSS_1.WorkerProcess((0, appConfig_1.ServiceConfigOptions)(true, cluster_1.default.isPrimary)).SetupServer();
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/testing/app.ts"],"names":[],"mappings":";;;;;AAAA,2CAAkD;AAClD,4BAAwC;AACxC,iDAA8C;AAE9C,sDAA8B;AAE9B,IAAI,iBAAO,CAAC,SAAS,EAAE;IACnB,IAAI,qBAAiB,CAAC,IAAA,gCAAoB,EAAC,IAAI,EAAE,iBAAO,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;CACtF;KAAM;IACH,IAAI,4BAAa,CAAC,IAAA,gCAAoB,EAAC,IAAI,EAAE,iBAAO,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;CAClF"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/testing/app.ts"],"names":[],"mappings":";;;;;AAAA,2CAAkD;AAClD,4BAAwC;AACxC,iDAA8C;AAE9C,sDAA8B;AAE9B,0EAAkC,CAAC,gCAAgC;AAEnE,IAAI,iBAAO,CAAC,SAAS,EAAE;IACnB,IAAI,qBAAiB,CAAC,IAAA,gCAAoB,EAAC,IAAI,EAAE,iBAAO,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAEnF,WAAW,CAAC;QACR,2BAAE,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC1B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC,CAAC,CAAA;IACN,CAAC,EAAE,IAAI,CAAC,CAAA;CAEX;KAAM;IACH,IAAI,4BAAa,CAAC,IAAA,gCAAoB,EAAC,IAAI,EAAE,iBAAO,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;CAClF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nsshunt/stsappframework",
3
- "version": "3.0.69",
3
+ "version": "3.0.71",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "./types/index.d.ts",
@@ -51,7 +51,7 @@
51
51
  "@nsshunt/stsconfig": "^1.25.60",
52
52
  "@nsshunt/stsdatamanagement": "^1.17.130",
53
53
  "@nsshunt/stsinstrumentation": "^7.0.5",
54
- "@nsshunt/stspublisherserver": "^2.0.27",
54
+ "@nsshunt/stspublisherserver": "^2.0.30",
55
55
  "@nsshunt/stssocketio-client": "^0.0.84",
56
56
  "@nsshunt/stsutils": "^1.16.15",
57
57
  "@socket.io/cluster-adapter": "^0.2.2",
package/src/server.ts CHANGED
@@ -18,6 +18,8 @@ import { Gauge, InstrumentGaugeTelemetry, InstrumentHistogramTelemetry, Instrume
18
18
  export class STSExpressServer
19
19
  {
20
20
  #app: Express;
21
+ #totalBytesRead = 0;
22
+ #totalBytesWritten = 0;
21
23
 
22
24
  constructor(options: ProcessOptions, stsApp: IProcessBase)
23
25
  {
@@ -64,6 +66,24 @@ export class STSExpressServer
64
66
  }
65
67
  });
66
68
 
69
+ requestLoggerMiddleware.on(RequestLoggerMiddlewareEventName.UpdateInstrument_RX_VAL, (bytesRead) => {
70
+ console.log(`Bytes Read: [${bytesRead}]`.magenta);
71
+ /*
72
+ stsApp.UpdateInstrument(Gauge.DURATION_GAUGE, {
73
+ val: timeInMs
74
+ } as InstrumentHistogramTelemetry);
75
+ */
76
+ });
77
+
78
+ requestLoggerMiddleware.on(RequestLoggerMiddlewareEventName.UpdateInstrument_TX_VAL, (bytesWritten) => {
79
+ console.log(`Bytes Read: [${bytesWritten}]`.cyan);
80
+ /*
81
+ stsApp.UpdateInstrument(Gauge.DURATION_GAUGE, {
82
+ val: timeInMs
83
+ } as InstrumentHistogramTelemetry);
84
+ */
85
+ });
86
+
67
87
  const app = express();
68
88
  this.#app = app;
69
89
 
@@ -91,6 +111,12 @@ export class STSExpressServer
91
111
 
92
112
  app.use(requestLoggerMiddleware.Middleware.bind(requestLoggerMiddleware));
93
113
 
114
+ app.use(async (err: any, req: Request, res: Response, next: NextFunction) => {
115
+ this.#totalBytesRead += req.socket.bytesRead;
116
+ this.#totalBytesWritten += req.socket.bytesWritten;
117
+ next();
118
+ });
119
+
94
120
  if (options.expressServerRouteFactory) {
95
121
  options.expressServerRouteFactory(app, stsApp);
96
122
  }
@@ -4,8 +4,17 @@ import { WorkerProcess } from './appWorkerWSS'
4
4
 
5
5
  import cluster from 'cluster';
6
6
 
7
+ import si from 'systeminformation' // https://systeminformation.io/
8
+
7
9
  if (cluster.isPrimary) {
8
10
  new MasterProcessBase(ServiceConfigOptions(true, cluster.isPrimary)).SetupServer();
11
+
12
+ setInterval(function() {
13
+ si.networkStats().then(data => {
14
+ console.log(data);
15
+ })
16
+ }, 1000)
17
+
9
18
  } else {
10
19
  new WorkerProcess(ServiceConfigOptions(true, cluster.isPrimary)).SetupServer();
11
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAgB,EAAE,OAAO,EAAmC,MAAM,SAAS,CAAC;AAO5E,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAKjD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAI5C,qBAAa,gBAAgB;;gBAIb,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY;IAgGzD,IAAI,GAAG,IAAI,OAAO,CAGjB;CACJ"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAgB,EAAE,OAAO,EAAmC,MAAM,SAAS,CAAC;AAO5E,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAKjD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAI5C,qBAAa,gBAAgB;;gBAMb,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY;IAwHzD,IAAI,GAAG,IAAI,OAAO,CAGjB;CACJ"}