@nsshunt/stsappframework 3.0.87 → 3.0.89

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.
@@ -4,11 +4,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.ServerNetworkMiddleware = exports.ServerNetworkMiddlewareEventName = void 0;
7
+ /* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/no-unused-vars: 0 */ // --> OFF
8
+ const chalk_1 = __importDefault(require("chalk")); // Note: Do NOT upgrade beyond 4.1.2 as the ESM version (5.0.0+) breaks this entire codebase
7
9
  const tiny_emitter_1 = require("tiny-emitter");
8
10
  const debug_1 = __importDefault(require("debug"));
9
11
  const stsutils_1 = require("@nsshunt/stsutils");
10
12
  const debug = (0, debug_1.default)(`proc:${process.pid}`);
11
13
  const uuid_1 = require("uuid");
14
+ const on_headers_1 = __importDefault(require("on-headers"));
12
15
  var ServerNetworkMiddlewareEventName;
13
16
  (function (ServerNetworkMiddlewareEventName) {
14
17
  ServerNetworkMiddlewareEventName["UpdateInstrument_SERVER_NET_VAL"] = "UpdateInstrument_SERVER_NET_VAL"; // request net stats
@@ -45,15 +48,33 @@ class ServerNetworkMiddleware extends stsutils_1.STSOptionsBase {
45
48
  workingSocketRecord.currentBytesWritten = req.socket.bytesWritten;
46
49
  workingSocketRecord.requestBytesRead = workingSocketRecord.currentBytesRead - workingSocketRecord.lastBytesRead;
47
50
  workingSocketRecord.requestBytesWritten = workingSocketRecord.currentBytesWritten - workingSocketRecord.lastBytesWritten;
48
- //this.#debug(`totalBytesRead: [${workingSocketRecord.id}] [${workingSocketRecord.originalUrl}] [${eventName}] [${workingSocketRecord.requestBytesRead}]`.grey);
49
- //this.#debug(`totalBytesWritten: [${workingSocketRecord.id}] [${workingSocketRecord.originalUrl}] [${eventName}] [${workingSocketRecord.requestBytesWritten}]`.grey);
51
+ //this.#debug(chalk.gray(`totalBytesRead: [${workingSocketRecord.id}] [${workingSocketRecord.originalUrl}] [${eventName}] [${workingSocketRecord.requestBytesRead}]`));
52
+ //this.#debug(chalk.gray(`totalBytesWritten: [${workingSocketRecord.id}] [${workingSocketRecord.originalUrl}] [${eventName}] [${workingSocketRecord.requestBytesWritten}]`));
50
53
  const workingSocketEventRecord = { ...workingSocketRecord };
51
54
  delete workingSocketEventRecord.socket;
52
- this.#debug(`Sending event: [${JSON.stringify(workingSocketEventRecord)}]`.grey);
55
+ this.#debug(chalk_1.default.gray(`Sending event: [${JSON.stringify(workingSocketEventRecord)}]`));
53
56
  this.#tinyEmitter.emit(ServerNetworkMiddlewareEventName.UpdateInstrument_SERVER_NET_VAL, workingSocketEventRecord);
54
57
  workingSocketRecord.lastBytesRead = workingSocketRecord.currentBytesRead;
55
58
  workingSocketRecord.lastBytesWritten = workingSocketRecord.currentBytesWritten;
56
59
  };
60
+ #GetRequestContentSize = (req) => {
61
+ try {
62
+ let contentLength = 0;
63
+ if (req['_contentLength']) {
64
+ contentLength = req['_contentLength'];
65
+ }
66
+ else {
67
+ if (req.headers['content-length']) {
68
+ contentLength = parseInt(req.headers['content-length']);
69
+ }
70
+ }
71
+ return contentLength;
72
+ }
73
+ catch (error) {
74
+ this.#debug(chalk_1.default.red(`ServerNetworkMiddleware:#GetRequestContentSize(): Error: [${error}]`));
75
+ return 0;
76
+ }
77
+ };
57
78
  Middleware = (req, res, next) => {
58
79
  let workingSocketRecord = null;
59
80
  workingSocketRecord = this.GetSocketRecord(req.socket);
@@ -72,94 +93,107 @@ class ServerNetworkMiddleware extends stsutils_1.STSOptionsBase {
72
93
  eventName: '',
73
94
  };
74
95
  this.#socketCollection[workingSocketRecord.id] = workingSocketRecord;
75
- this.#debug(`Adding new socket to recordset: ID: [${workingSocketRecord.id}], originalUrl: [${workingSocketRecord.originalUrl}]`.gray);
76
- if (res.socket) {
77
- const workingResSocketRecord = this.GetSocketRecord(res.socket);
78
- if (!workingResSocketRecord) {
79
- this.#debug(`Response socket is a different socket`.magenta);
80
- }
81
- else {
82
- this.#debug(`Response socket is the SAME socket`.green);
83
- }
84
- }
85
- else {
86
- this.#debug(`No response socket`.red);
87
- }
96
+ this.#debug(chalk_1.default.gray(`Adding new socket to recordset: ID: [${workingSocketRecord.id}], originalUrl: [${workingSocketRecord.originalUrl}]`));
88
97
  workingSocketRecord.socket.on('data', () => {
89
98
  const socketRecord = this.GetSocketRecord(workingSocketRecord.socket);
90
99
  if (socketRecord) {
91
- this.#debug(`Socket close event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`.gray);
100
+ this.#debug(chalk_1.default.gray(`Socket data event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`));
92
101
  this.UpdateNetworkStats(socketRecord, 'socket_data', req);
93
- this.#debug(`Socket removed from recordset: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`.gray);
94
102
  }
95
103
  else {
96
- this.#debug(`Socket close event: Could not find socket within recordset`.magenta);
104
+ this.#debug(chalk_1.default.magenta(`Socket data event: Could not find socket within recordset`));
97
105
  }
98
106
  });
99
107
  workingSocketRecord.socket.on('close', () => {
100
108
  const socketRecord = this.GetSocketRecord(workingSocketRecord.socket);
101
109
  if (socketRecord) {
102
- this.#debug(`Socket close event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`.gray);
110
+ this.#debug(chalk_1.default.gray(`Socket close event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`));
103
111
  this.UpdateNetworkStats(socketRecord, 'socket_close', req);
104
112
  delete this.#socketCollection[socketRecord.id];
105
- this.#debug(`Socket removed from recordset: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`.gray);
113
+ this.#debug(chalk_1.default.gray(`Socket removed from recordset: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`));
106
114
  }
107
115
  else {
108
- this.#debug(`Socket close event: Could not find socket within recordset`.magenta);
116
+ this.#debug(chalk_1.default.magenta(`Socket close event: Could not find socket within recordset`));
109
117
  }
110
118
  });
111
119
  workingSocketRecord.socket.on('end', () => {
112
120
  const socketRecord = this.GetSocketRecord(workingSocketRecord.socket);
113
121
  if (socketRecord) {
114
- this.#debug(`Socket end event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`.gray);
122
+ this.#debug(chalk_1.default.gray(`Socket end event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`));
115
123
  this.UpdateNetworkStats(socketRecord, 'socket_end', req);
116
124
  }
117
125
  else {
118
- this.#debug(`Socket end event: Could not find socket within recordset`.magenta);
126
+ this.#debug(chalk_1.default.magenta(`Socket end event: Could not find socket within recordset`));
119
127
  }
120
128
  });
121
129
  }
130
+ // The following gets the payload size from adding _contentLength or content-length to the header size.
131
+ // From brief observations, this appears to be about 80 bytes short from what is reported by the socket writtenBytes.
132
+ (0, on_headers_1.default)(res, () => {
133
+ let contentLength = 0;
134
+ if (res['_contentLength']) {
135
+ contentLength = res['_contentLength'];
136
+ }
137
+ else {
138
+ if (res.hasHeader('content-length')) {
139
+ contentLength = parseInt(res.getHeader('content-length'));
140
+ }
141
+ }
142
+ // Ensure that the client does NOT cache the response
143
+ res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate'); // HTTP 1.1
144
+ res.setHeader('Pragma', 'no-cache'); // HTTP 1.0
145
+ res.setHeader('Expires', '0'); // Proxies
146
+ const headerLength = JSON.stringify(res.getHeaders()).length;
147
+ const totalSize = contentLength + headerLength;
148
+ this.#debug(chalk_1.default.white.bgBlue(`contentLength: [${contentLength}], headerLength: [${headerLength}], total Size: [${totalSize}]`));
149
+ });
150
+ // This event is the one where bytesWritten is generally recorded
122
151
  req.on('end', () => {
123
152
  const socketRecord = this.GetSocketRecord(req.socket);
124
153
  if (socketRecord) {
125
- this.#debug(`Request end event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`.gray);
154
+ this.#debug(chalk_1.default.gray(`Request end event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`));
126
155
  this.UpdateNetworkStats(socketRecord, 'req_end', req);
127
156
  }
128
157
  else {
129
- this.#debug(`Request end event: Could not find socket within recordset`.magenta);
158
+ this.#debug(chalk_1.default.magenta(`Request end event: Could not find socket within recordset`));
130
159
  }
131
160
  });
132
161
  req.on('close', () => {
133
162
  const socketRecord = this.GetSocketRecord(req.socket);
134
163
  if (socketRecord) {
135
- this.#debug(`Request close event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`.gray);
164
+ this.#debug(chalk_1.default.gray(`Request close event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`));
136
165
  this.UpdateNetworkStats(socketRecord, 'req_close', req);
137
166
  }
138
167
  else {
139
- this.#debug(`Request close event: Could not find socket within recordset`.magenta);
168
+ this.#debug(chalk_1.default.magenta(`Request close event: Could not find socket within recordset`));
140
169
  }
141
170
  });
142
- /*
171
+ /* These methods are also available but from testing they provide no specific value add, i.e. the calculated numbers are always 0.
143
172
  req.on('data', () => {
144
173
  workingSocketRecord = this.GetSocketRecord(req.socket);
145
174
  if (workingSocketRecord) {
146
- this.#debug(`Request close event: ID: [${workingSocketRecord.id}], originalUrl: [${workingSocketRecord.originalUrl}]`.gray)
175
+ this.#debug(chalk.gray(`Request close event: ID: [${workingSocketRecord.id}], originalUrl: [${workingSocketRecord.originalUrl}]`));
147
176
  this.UpdateNetworkStats(workingSocketRecord, 'data', req);
148
177
  } else {
149
- this.#debug(`Request close event: Could not find socket within recordset`.magenta)
178
+ this.#debug(chalk.magenta(`Request close event: Could not find socket within recordset`));
150
179
  }
151
180
  });
152
181
 
153
182
  req.on('readable', () => {
154
183
  workingSocketRecord = this.GetSocketRecord(req.socket);
155
184
  if (workingSocketRecord) {
156
- this.#debug(`Request close event: ID: [${workingSocketRecord.id}], originalUrl: [${workingSocketRecord.originalUrl}]`.gray)
185
+ this.#debug(chalk.gray(`Request close event: ID: [${workingSocketRecord.id}], originalUrl: [${workingSocketRecord.originalUrl}]`));
157
186
  this.UpdateNetworkStats(workingSocketRecord, 'readable', req);
158
187
  } else {
159
- this.#debug(`Request close event: Could not find socket within recordset`.magenta)
188
+ this.#debug(chalk.magenta(`Request close event: Could not find socket within recordset`));
160
189
  }
161
190
  });
162
191
  */
192
+ const inHeadersLength = JSON.stringify(req.headers).length;
193
+ const inContentLength = this.#GetRequestContentSize(req);
194
+ const inTotal = inHeadersLength + inContentLength;
195
+ this.#debug(chalk_1.default.white.bgGray(`inHeadersLength: [${inHeadersLength}], inContentLength: [${inContentLength}], inTotal: [${inTotal}]`));
196
+ // This event is the one where bytesRead is generally recorded
163
197
  this.UpdateNetworkStats(workingSocketRecord, 'middleware', req);
164
198
  next();
165
199
  };
@@ -1 +1 @@
1
- {"version":3,"file":"serverNetworkMiddleware.js","sourceRoot":"","sources":["../../src/middleware/serverNetworkMiddleware.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"serverNetworkMiddleware.js","sourceRoot":"","sources":["../../src/middleware/serverNetworkMiddleware.ts"],"names":[],"mappings":"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"}
@@ -5,12 +5,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  };
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  const node_fs_1 = __importDefault(require("node:fs"));
8
+ const chalk_1 = __importDefault(require("chalk"));
8
9
  const oldResTx = [];
9
10
  const oldResRx = [];
10
11
  const newResRx = [];
11
12
  const newResTx = [];
12
13
  function getNetworkUsage(pidArray) {
13
14
  try {
15
+ console.log(chalk_1.default.white.bgCyan.bold('Hello World'));
14
16
  for (let i = 0; i < pidArray.length; i++) {
15
17
  const pid = pidArray[i];
16
18
  const filePath = `/proc/${pid}/net/dev`;
@@ -1 +1 @@
1
- {"version":3,"file":"appsolo.js","sourceRoot":"","sources":["../../src/testing/appsolo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"appsolo.js","sourceRoot":"","sources":["../../src/testing/appsolo.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nsshunt/stsappframework",
3
- "version": "3.0.87",
3
+ "version": "3.0.89",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "./types/index.d.ts",
@@ -56,9 +56,12 @@
56
56
  "@nsshunt/stsutils": "^1.16.17",
57
57
  "@socket.io/cluster-adapter": "^0.2.2",
58
58
  "@socket.io/redis-streams-adapter": "^0.1.0",
59
+ "@types/colors": "^1.2.1",
60
+ "@types/on-headers": "^1.0.3",
59
61
  "@types/pidusage": "^2.0.5",
60
62
  "@types/tough-cookie": "^4.0.5",
61
63
  "axios": "^1.6.2",
64
+ "chalk": "^4.1.2",
62
65
  "colors": "^1.4.0",
63
66
  "cookie-parser": "^1.4.6",
64
67
  "cors": "^2.8.5",
@@ -70,6 +73,7 @@
70
73
  "jwks-rsa": "^3.1.0",
71
74
  "jwt-decode": "^4.0.0",
72
75
  "kafkajs": "^2.2.4",
76
+ "on-headers": "^1.0.2",
73
77
  "pidusage": "^3.0.2",
74
78
  "prom-client": "^15.0.0",
75
79
  "redis": "^4.6.10",
@@ -1,14 +1,15 @@
1
1
  /* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/no-unused-vars: 0 */ // --> OFF
2
+ import chalk from 'chalk'; // Note: Do NOT upgrade beyond 4.1.2 as the ESM version (5.0.0+) breaks this entire codebase
2
3
  import { Request, Response, NextFunction } from 'express'
3
4
  import { Socket } from 'node:net'
4
5
  import { TinyEmitter } from 'tiny-emitter';
5
6
 
6
7
  import debugModule from 'debug'
7
8
  import { STSOptionsBase } from '@nsshunt/stsutils';
8
- import { CompareSTSInstrumentControllerPluginKey } from '@nsshunt/stspublisherserver';
9
9
  const debug = debugModule(`proc:${process.pid}`);
10
10
 
11
11
  import { v4 as uuidv4 } from 'uuid';
12
+ import onHeaders from 'on-headers';
12
13
 
13
14
  export enum ServerNetworkMiddlewareEventName {
14
15
  UpdateInstrument_SERVER_NET_VAL = 'UpdateInstrument_SERVER_NET_VAL' // request net stats
@@ -73,18 +74,35 @@ export class ServerNetworkMiddleware extends STSOptionsBase
73
74
  workingSocketRecord.requestBytesRead = workingSocketRecord.currentBytesRead - workingSocketRecord.lastBytesRead;
74
75
  workingSocketRecord.requestBytesWritten = workingSocketRecord.currentBytesWritten - workingSocketRecord.lastBytesWritten;
75
76
 
76
- //this.#debug(`totalBytesRead: [${workingSocketRecord.id}] [${workingSocketRecord.originalUrl}] [${eventName}] [${workingSocketRecord.requestBytesRead}]`.grey);
77
- //this.#debug(`totalBytesWritten: [${workingSocketRecord.id}] [${workingSocketRecord.originalUrl}] [${eventName}] [${workingSocketRecord.requestBytesWritten}]`.grey);
77
+ //this.#debug(chalk.gray(`totalBytesRead: [${workingSocketRecord.id}] [${workingSocketRecord.originalUrl}] [${eventName}] [${workingSocketRecord.requestBytesRead}]`));
78
+ //this.#debug(chalk.gray(`totalBytesWritten: [${workingSocketRecord.id}] [${workingSocketRecord.originalUrl}] [${eventName}] [${workingSocketRecord.requestBytesWritten}]`));
78
79
 
79
80
  const workingSocketEventRecord = { ...workingSocketRecord };
80
81
  delete (workingSocketEventRecord as any).socket;
81
- this.#debug(`Sending event: [${JSON.stringify(workingSocketEventRecord)}]`.grey);
82
+ this.#debug(chalk.gray(`Sending event: [${JSON.stringify(workingSocketEventRecord)}]`));
82
83
  this.#tinyEmitter.emit(ServerNetworkMiddlewareEventName.UpdateInstrument_SERVER_NET_VAL, workingSocketEventRecord);
83
84
 
84
85
  workingSocketRecord.lastBytesRead = workingSocketRecord.currentBytesRead;
85
86
  workingSocketRecord.lastBytesWritten = workingSocketRecord.currentBytesWritten;
86
87
  }
87
88
 
89
+ #GetRequestContentSize = (req: Request) => {
90
+ try {
91
+ let contentLength = 0;
92
+ if ((req as any)['_contentLength']) {
93
+ contentLength = (req as any)['_contentLength'];
94
+ } else {
95
+ if (req.headers['content-length']) {
96
+ contentLength = parseInt(req.headers['content-length'])
97
+ }
98
+ }
99
+ return contentLength;
100
+ } catch (error) {
101
+ this.#debug(chalk.red(`ServerNetworkMiddleware:#GetRequestContentSize(): Error: [${error}]`));
102
+ return 0;
103
+ }
104
+ }
105
+
88
106
  Middleware = (req: Request, res: Response, next: NextFunction) => {
89
107
  let workingSocketRecord: ISocketRecord | null = null;
90
108
 
@@ -107,96 +125,114 @@ export class ServerNetworkMiddleware extends STSOptionsBase
107
125
 
108
126
  this.#socketCollection[workingSocketRecord.id] = workingSocketRecord;
109
127
 
110
- this.#debug(`Adding new socket to recordset: ID: [${workingSocketRecord.id}], originalUrl: [${workingSocketRecord.originalUrl}]`.gray)
111
-
112
- if (res.socket) {
113
- const workingResSocketRecord = this.GetSocketRecord(res.socket);
114
- if (!workingResSocketRecord) {
115
- this.#debug(`Response socket is a different socket`.magenta);
116
- } else {
117
- this.#debug(`Response socket is the SAME socket`.green);
118
- }
119
- } else {
120
- this.#debug(`No response socket`.red);
121
- }
122
-
128
+ this.#debug(chalk.gray(`Adding new socket to recordset: ID: [${workingSocketRecord.id}], originalUrl: [${workingSocketRecord.originalUrl}]`));
123
129
 
124
130
  workingSocketRecord.socket.on('data', () => {
125
131
  const socketRecord = this.GetSocketRecord((workingSocketRecord as ISocketRecord).socket);
126
132
  if (socketRecord) {
127
- this.#debug(`Socket close event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`.gray)
133
+ this.#debug(chalk.gray(`Socket data event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`));
128
134
  this.UpdateNetworkStats(socketRecord, 'socket_data', req);
129
- this.#debug(`Socket removed from recordset: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`.gray)
130
135
  } else {
131
- this.#debug(`Socket close event: Could not find socket within recordset`.magenta)
136
+ this.#debug(chalk.magenta(`Socket data event: Could not find socket within recordset`));
132
137
  }
133
138
  });
134
139
 
135
140
  workingSocketRecord.socket.on('close', () => {
136
141
  const socketRecord = this.GetSocketRecord((workingSocketRecord as ISocketRecord).socket);
137
142
  if (socketRecord) {
138
- this.#debug(`Socket close event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`.gray)
143
+ this.#debug(chalk.gray(`Socket close event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`));
139
144
  this.UpdateNetworkStats(socketRecord, 'socket_close', req);
140
145
  delete this.#socketCollection[socketRecord.id];
141
- this.#debug(`Socket removed from recordset: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`.gray)
146
+ this.#debug(chalk.gray(`Socket removed from recordset: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`));
142
147
  } else {
143
- this.#debug(`Socket close event: Could not find socket within recordset`.magenta)
148
+ this.#debug(chalk.magenta(`Socket close event: Could not find socket within recordset`));
144
149
  }
145
150
  });
146
151
 
147
152
  workingSocketRecord.socket.on('end', () => {
148
153
  const socketRecord = this.GetSocketRecord((workingSocketRecord as ISocketRecord).socket);
149
154
  if (socketRecord) {
150
- this.#debug(`Socket end event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`.gray)
155
+ this.#debug(chalk.gray(`Socket end event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`));
151
156
  this.UpdateNetworkStats(socketRecord, 'socket_end', req);
152
157
  } else {
153
- this.#debug(`Socket end event: Could not find socket within recordset`.magenta)
158
+ this.#debug(chalk.magenta(`Socket end event: Could not find socket within recordset`));
154
159
  }
155
160
  });
156
161
  }
157
162
 
163
+ // The following gets the payload size from adding _contentLength or content-length to the header size.
164
+ // From brief observations, this appears to be about 80 bytes short from what is reported by the socket writtenBytes.
165
+ onHeaders(res, () => {
166
+ let contentLength = 0;
167
+ if ((res as any)['_contentLength']) {
168
+ contentLength = (res as any)['_contentLength'];
169
+ } else {
170
+ if (res.hasHeader('content-length')) {
171
+ contentLength = parseInt(res.getHeader('content-length') as string);
172
+ }
173
+ }
174
+
175
+ // Ensure that the client does NOT cache the response
176
+ res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate'); // HTTP 1.1
177
+ res.setHeader('Pragma', 'no-cache'); // HTTP 1.0
178
+ res.setHeader('Expires', '0'); // Proxies
179
+
180
+ const headerLength = JSON.stringify(res.getHeaders()).length;
181
+ const totalSize = contentLength + headerLength;
182
+
183
+ this.#debug(chalk.white.bgBlue(`contentLength: [${contentLength}], headerLength: [${headerLength}], total Size: [${totalSize}]`));
184
+ });
185
+
186
+ // This event is the one where bytesWritten is generally recorded
158
187
  req.on('end', () => {
159
188
  const socketRecord = this.GetSocketRecord(req.socket);
160
189
  if (socketRecord) {
161
- this.#debug(`Request end event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`.gray)
190
+ this.#debug(chalk.gray(`Request end event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`))
162
191
  this.UpdateNetworkStats(socketRecord, 'req_end', req);
163
192
  } else {
164
- this.#debug(`Request end event: Could not find socket within recordset`.magenta)
193
+ this.#debug(chalk.magenta(`Request end event: Could not find socket within recordset`));
165
194
  }
166
195
  });
167
196
 
168
197
  req.on('close', () => {
169
198
  const socketRecord = this.GetSocketRecord(req.socket);
170
199
  if (socketRecord) {
171
- this.#debug(`Request close event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`.gray)
200
+ this.#debug(chalk.gray(`Request close event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`));
172
201
  this.UpdateNetworkStats(socketRecord, 'req_close', req);
173
202
  } else {
174
- this.#debug(`Request close event: Could not find socket within recordset`.magenta)
203
+ this.#debug(chalk.magenta(`Request close event: Could not find socket within recordset`));
175
204
  }
176
205
  });
177
206
 
178
- /*
207
+ /* These methods are also available but from testing they provide no specific value add, i.e. the calculated numbers are always 0.
179
208
  req.on('data', () => {
180
209
  workingSocketRecord = this.GetSocketRecord(req.socket);
181
210
  if (workingSocketRecord) {
182
- this.#debug(`Request close event: ID: [${workingSocketRecord.id}], originalUrl: [${workingSocketRecord.originalUrl}]`.gray)
211
+ this.#debug(chalk.gray(`Request close event: ID: [${workingSocketRecord.id}], originalUrl: [${workingSocketRecord.originalUrl}]`));
183
212
  this.UpdateNetworkStats(workingSocketRecord, 'data', req);
184
213
  } else {
185
- this.#debug(`Request close event: Could not find socket within recordset`.magenta)
214
+ this.#debug(chalk.magenta(`Request close event: Could not find socket within recordset`));
186
215
  }
187
216
  });
188
217
 
189
218
  req.on('readable', () => {
190
219
  workingSocketRecord = this.GetSocketRecord(req.socket);
191
220
  if (workingSocketRecord) {
192
- this.#debug(`Request close event: ID: [${workingSocketRecord.id}], originalUrl: [${workingSocketRecord.originalUrl}]`.gray)
221
+ this.#debug(chalk.gray(`Request close event: ID: [${workingSocketRecord.id}], originalUrl: [${workingSocketRecord.originalUrl}]`));
193
222
  this.UpdateNetworkStats(workingSocketRecord, 'readable', req);
194
223
  } else {
195
- this.#debug(`Request close event: Could not find socket within recordset`.magenta)
224
+ this.#debug(chalk.magenta(`Request close event: Could not find socket within recordset`));
196
225
  }
197
226
  });
198
227
  */
199
228
 
229
+ const inHeadersLength = JSON.stringify(req.headers).length;
230
+ const inContentLength = this.#GetRequestContentSize(req);
231
+ const inTotal = inHeadersLength + inContentLength;
232
+
233
+ this.#debug(chalk.white.bgGray(`inHeadersLength: [${inHeadersLength}], inContentLength: [${inContentLength}], inTotal: [${inTotal}]`));
234
+
235
+ // This event is the one where bytesRead is generally recorded
200
236
  this.UpdateNetworkStats(workingSocketRecord, 'middleware', req);
201
237
 
202
238
  next();
@@ -1,6 +1,7 @@
1
1
  /* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/no-unused-vars: 0 */ // --> OFF
2
2
 
3
3
  import fs from 'node:fs'
4
+ import chalk from 'chalk';
4
5
 
5
6
  const oldResTx: number[] = []
6
7
  const oldResRx: number[] = []
@@ -11,6 +12,8 @@ const newResTx: number[] = []
11
12
  function getNetworkUsage(pidArray: number[]) {
12
13
  try {
13
14
 
15
+ console.log(chalk.white.bgCyan.bold('Hello World'));
16
+
14
17
  for (let i=0; i < pidArray.length; i++) {
15
18
 
16
19
  const pid = pidArray[i];
@@ -84,3 +87,7 @@ setInterval(function() {
84
87
  //getNetworkUsage()
85
88
 
86
89
  }, 1000)
90
+
91
+ export {
92
+
93
+ }
package/tsconfig.json CHANGED
@@ -11,6 +11,7 @@
11
11
  "declarationMap": true,
12
12
 
13
13
  "module": "commonjs",
14
+ //"module": "ES2022",
14
15
  "moduleResolution": "node"
15
16
  //"isolatedModules": true,
16
17
  //"allowSyntheticDefaultImports": true
@@ -1 +1 @@
1
- {"version":3,"file":"serverNetworkMiddleware.d.ts","sourceRoot":"","sources":["../../src/middleware/serverNetworkMiddleware.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAIjC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAMnD,oBAAY,gCAAgC;IACxC,+BAA+B,oCAAoC;CACtE;AAED,MAAM,WAAW,aAAa;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAA;IACxB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,MAAM,CAAA;IACxB,gBAAgB,EAAE,MAAM,CAAA;IACxB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,MAAM,gCAAgC,GAAG,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;AAE7E,MAAM,WAAW,wBAAwB;IACrC,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,OAAO,CAAA;CACvB;AAED,qBAAa,uBAAwB,SAAQ,cAAc;;gBAO3C,OAAO,EAAE,wBAAwB;IAS7C,EAAE,CAAC,SAAS,EAAE,gCAAgC,EAAE,UAAU,EAAE,gCAAgC;IAI5F,eAAe,WAAY,MAAM,KAAG,aAAa,GAAG,IAAI,CAOvD;IAED,kBAAkB,wBAAyB,aAAa,aAAa,MAAM,OAAO,OAAO,UAoBxF;IAED,UAAU,QAAS,OAAO,OAAO,QAAQ,QAAQ,YAAY,UAmH5D;CACJ"}
1
+ {"version":3,"file":"serverNetworkMiddleware.d.ts","sourceRoot":"","sources":["../../src/middleware/serverNetworkMiddleware.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAIjC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAMnD,oBAAY,gCAAgC;IACxC,+BAA+B,oCAAoC;CACtE;AAED,MAAM,WAAW,aAAa;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAA;IACxB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,MAAM,CAAA;IACxB,gBAAgB,EAAE,MAAM,CAAA;IACxB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,MAAM,gCAAgC,GAAG,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;AAE7E,MAAM,WAAW,wBAAwB;IACrC,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,OAAO,CAAA;CACvB;AAED,qBAAa,uBAAwB,SAAQ,cAAc;;gBAO3C,OAAO,EAAE,wBAAwB;IAS7C,EAAE,CAAC,SAAS,EAAE,gCAAgC,EAAE,UAAU,EAAE,gCAAgC;IAI5F,eAAe,WAAY,MAAM,KAAG,aAAa,GAAG,IAAI,CAOvD;IAED,kBAAkB,wBAAyB,aAAa,aAAa,MAAM,OAAO,OAAO,UAoBxF;IAmBD,UAAU,QAAS,OAAO,OAAO,QAAQ,QAAQ,YAAY,UAqI5D;CACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"appsolo.d.ts","sourceRoot":"","sources":["../../src/testing/appsolo.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"appsolo.d.ts","sourceRoot":"","sources":["../../src/testing/appsolo.ts"],"names":[],"mappings":";AA0FA,OAAO,EAEN,CAAA"}