@nsshunt/stsappframework 3.3.184 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/README.md +300 -319
  2. package/dist/commonTypes.js +1 -12
  3. package/dist/commonTypes.js.map +1 -1
  4. package/dist/exampleapp/app.js +238 -0
  5. package/dist/exampleapp/app.js.map +1 -0
  6. package/dist/index.js +11 -7
  7. package/dist/index.js.map +1 -1
  8. package/dist/logger/stsTransportLoggerSocket.js +5 -0
  9. package/dist/logger/stsTransportLoggerSocket.js.map +1 -1
  10. package/dist/{process → plugins}/clusterworkermanager.js +37 -36
  11. package/dist/plugins/clusterworkermanager.js.map +1 -0
  12. package/dist/plugins/pgpoolmanager.js +186 -0
  13. package/dist/plugins/pgpoolmanager.js.map +1 -0
  14. package/dist/{process → plugins}/servertypes/serverUtils.js.map +1 -1
  15. package/dist/{process → plugins}/servertypes/stsexpressserver.js +44 -19
  16. package/dist/plugins/servertypes/stsexpressserver.js.map +1 -0
  17. package/dist/{process → plugins}/servertypes/stsjsonrpcserver.js +2 -3
  18. package/dist/plugins/servertypes/stsjsonrpcserver.js.map +1 -0
  19. package/dist/{process → plugins}/servertypes/stsserverfactory.js +2 -2
  20. package/dist/plugins/servertypes/stsserverfactory.js.map +1 -0
  21. package/dist/{process → plugins}/servertypes/ststcprawserver.js +2 -2
  22. package/dist/plugins/servertypes/ststcprawserver.js.map +1 -0
  23. package/dist/plugins/stsclusterworkermanagerplugin.js +54 -0
  24. package/dist/plugins/stsclusterworkermanagerplugin.js.map +1 -0
  25. package/dist/plugins/stsconfigplugin.js +16 -0
  26. package/dist/plugins/stsconfigplugin.js.map +1 -0
  27. package/dist/plugins/stsexpresscontrollerplugin.js +47 -0
  28. package/dist/plugins/stsexpresscontrollerplugin.js.map +1 -0
  29. package/dist/plugins/stsinstrumentmanagerplugin.js +102 -0
  30. package/dist/plugins/stsinstrumentmanagerplugin.js.map +1 -0
  31. package/dist/plugins/stslatencymanager.js +122 -0
  32. package/dist/plugins/stslatencymanager.js.map +1 -0
  33. package/dist/plugins/stslatencyplugin.js +29 -0
  34. package/dist/plugins/stslatencyplugin.js.map +1 -0
  35. package/dist/plugins/stslifecycleplugin.js +48 -0
  36. package/dist/plugins/stslifecycleplugin.js.map +1 -0
  37. package/dist/plugins/stsloggerplugin.js +60 -0
  38. package/dist/plugins/stsloggerplugin.js.map +1 -0
  39. package/dist/{process/metrics.js → plugins/stsmetricsplugin.js} +33 -9
  40. package/dist/plugins/stsmetricsplugin.js.map +1 -0
  41. package/dist/plugins/stspgpoolmanagerplugin.js +67 -0
  42. package/dist/plugins/stspgpoolmanagerplugin.js.map +1 -0
  43. package/dist/plugins/stsserverplugin.js +89 -0
  44. package/dist/plugins/stsserverplugin.js.map +1 -0
  45. package/dist/route/stsrootroute.js +10 -0
  46. package/dist/route/stsrootroute.js.map +1 -0
  47. package/dist/stsapp.js +190 -0
  48. package/dist/stsapp.js.map +1 -0
  49. package/package.json +16 -23
  50. package/types/commonTypes.d.ts +28 -203
  51. package/types/commonTypes.d.ts.map +1 -1
  52. package/types/exampleapp/app.d.ts +2 -0
  53. package/types/exampleapp/app.d.ts.map +1 -0
  54. package/types/index.d.ts +11 -7
  55. package/types/index.d.ts.map +1 -1
  56. package/types/logger/stsTransportLoggerSocket.d.ts +1 -0
  57. package/types/logger/stsTransportLoggerSocket.d.ts.map +1 -1
  58. package/types/{process → plugins}/clusterworkermanager.d.ts +5 -1
  59. package/types/plugins/clusterworkermanager.d.ts.map +1 -0
  60. package/types/plugins/pgpoolmanager.d.ts +34 -0
  61. package/types/plugins/pgpoolmanager.d.ts.map +1 -0
  62. package/types/{process → plugins}/servertypes/serverUtils.d.ts.map +1 -1
  63. package/types/plugins/servertypes/stsexpressserver.d.ts +22 -0
  64. package/types/plugins/servertypes/stsexpressserver.d.ts.map +1 -0
  65. package/types/{process → plugins}/servertypes/stsjsonrpcserver.d.ts +1 -9
  66. package/types/plugins/servertypes/stsjsonrpcserver.d.ts.map +1 -0
  67. package/types/{process → plugins}/servertypes/stsserverfactory.d.ts +2 -4
  68. package/types/plugins/servertypes/stsserverfactory.d.ts.map +1 -0
  69. package/types/{process → plugins}/servertypes/ststcprawserver.d.ts +1 -9
  70. package/types/plugins/servertypes/ststcprawserver.d.ts.map +1 -0
  71. package/types/plugins/stsclusterworkermanagerplugin.d.ts +16 -0
  72. package/types/plugins/stsclusterworkermanagerplugin.d.ts.map +1 -0
  73. package/types/plugins/stsconfigplugin.d.ts +10 -0
  74. package/types/plugins/stsconfigplugin.d.ts.map +1 -0
  75. package/types/plugins/stsexpresscontrollerplugin.d.ts +25 -0
  76. package/types/plugins/stsexpresscontrollerplugin.d.ts.map +1 -0
  77. package/types/plugins/stsinstrumentmanagerplugin.d.ts +31 -0
  78. package/types/plugins/stsinstrumentmanagerplugin.d.ts.map +1 -0
  79. package/types/plugins/stslatencymanager.d.ts +24 -0
  80. package/types/plugins/stslatencymanager.d.ts.map +1 -0
  81. package/types/plugins/stslatencyplugin.d.ts +12 -0
  82. package/types/plugins/stslatencyplugin.d.ts.map +1 -0
  83. package/types/plugins/stslifecycleplugin.d.ts +25 -0
  84. package/types/plugins/stslifecycleplugin.d.ts.map +1 -0
  85. package/types/plugins/stsloggerplugin.d.ts +19 -0
  86. package/types/plugins/stsloggerplugin.d.ts.map +1 -0
  87. package/types/{process/metrics.d.ts → plugins/stsmetricsplugin.d.ts} +12 -5
  88. package/types/plugins/stsmetricsplugin.d.ts.map +1 -0
  89. package/types/plugins/stspgpoolmanagerplugin.d.ts +14 -0
  90. package/types/plugins/stspgpoolmanagerplugin.d.ts.map +1 -0
  91. package/types/plugins/stsserverplugin.d.ts +16 -0
  92. package/types/plugins/stsserverplugin.d.ts.map +1 -0
  93. package/types/route/stsrootroute.d.ts +5 -0
  94. package/types/route/stsrootroute.d.ts.map +1 -0
  95. package/types/stsapp.d.ts +16 -0
  96. package/types/stsapp.d.ts.map +1 -0
  97. package/dist/grpc/grpcServer.js +0 -415
  98. package/dist/grpc/grpcServer.js.map +0 -1
  99. package/dist/process/clusterworkermanager.js.map +0 -1
  100. package/dist/process/datamanager.js +0 -78
  101. package/dist/process/datamanager.js.map +0 -1
  102. package/dist/process/latencyManager.js +0 -56
  103. package/dist/process/latencyManager.js.map +0 -1
  104. package/dist/process/logManager.js +0 -36
  105. package/dist/process/logManager.js.map +0 -1
  106. package/dist/process/masterprocessbase.js +0 -154
  107. package/dist/process/masterprocessbase.js.map +0 -1
  108. package/dist/process/metrics.js.map +0 -1
  109. package/dist/process/processbase.js +0 -203
  110. package/dist/process/processbase.js.map +0 -1
  111. package/dist/process/prometheusmanager.js +0 -112
  112. package/dist/process/prometheusmanager.js.map +0 -1
  113. package/dist/process/serverprocessbase.js +0 -204
  114. package/dist/process/serverprocessbase.js.map +0 -1
  115. package/dist/process/servertypes/stsexpressserver.js.map +0 -1
  116. package/dist/process/servertypes/stsjsonrpcserver.js.map +0 -1
  117. package/dist/process/servertypes/stsserverfactory.js.map +0 -1
  118. package/dist/process/servertypes/ststcprawserver.js.map +0 -1
  119. package/dist/process/singleprocessbase.js +0 -48
  120. package/dist/process/singleprocessbase.js.map +0 -1
  121. package/dist/process/sysinfo.js +0 -56
  122. package/dist/process/sysinfo.js.map +0 -1
  123. package/dist/process/workerprocessbase.js +0 -35
  124. package/dist/process/workerprocessbase.js.map +0 -1
  125. package/dist/publishertransports/publishTransportUtils.js +0 -43
  126. package/dist/publishertransports/publishTransportUtils.js.map +0 -1
  127. package/dist/sysinfo/network.js +0 -31
  128. package/dist/sysinfo/network.js.map +0 -1
  129. package/dist/validation/errors.js +0 -7
  130. package/dist/validation/errors.js.map +0 -1
  131. package/types/grpc/grpcServer.d.ts +0 -31
  132. package/types/grpc/grpcServer.d.ts.map +0 -1
  133. package/types/process/clusterworkermanager.d.ts.map +0 -1
  134. package/types/process/datamanager.d.ts +0 -15
  135. package/types/process/datamanager.d.ts.map +0 -1
  136. package/types/process/latencyManager.d.ts +0 -10
  137. package/types/process/latencyManager.d.ts.map +0 -1
  138. package/types/process/logManager.d.ts +0 -9
  139. package/types/process/logManager.d.ts.map +0 -1
  140. package/types/process/masterprocessbase.d.ts +0 -13
  141. package/types/process/masterprocessbase.d.ts.map +0 -1
  142. package/types/process/metrics.d.ts.map +0 -1
  143. package/types/process/processbase.d.ts +0 -19
  144. package/types/process/processbase.d.ts.map +0 -1
  145. package/types/process/prometheusmanager.d.ts +0 -10
  146. package/types/process/prometheusmanager.d.ts.map +0 -1
  147. package/types/process/serverprocessbase.d.ts +0 -18
  148. package/types/process/serverprocessbase.d.ts.map +0 -1
  149. package/types/process/servertypes/stsexpressserver.d.ts +0 -34
  150. package/types/process/servertypes/stsexpressserver.d.ts.map +0 -1
  151. package/types/process/servertypes/stsjsonrpcserver.d.ts.map +0 -1
  152. package/types/process/servertypes/stsserverfactory.d.ts.map +0 -1
  153. package/types/process/servertypes/ststcprawserver.d.ts.map +0 -1
  154. package/types/process/singleprocessbase.d.ts +0 -14
  155. package/types/process/singleprocessbase.d.ts.map +0 -1
  156. package/types/process/sysinfo.d.ts +0 -8
  157. package/types/process/sysinfo.d.ts.map +0 -1
  158. package/types/process/workerprocessbase.d.ts +0 -8
  159. package/types/process/workerprocessbase.d.ts.map +0 -1
  160. package/types/publishertransports/publishTransportUtils.d.ts +0 -5
  161. package/types/publishertransports/publishTransportUtils.d.ts.map +0 -1
  162. package/types/sysinfo/network.d.ts +0 -4
  163. package/types/sysinfo/network.d.ts.map +0 -1
  164. package/types/validation/errors.d.ts +0 -7
  165. package/types/validation/errors.d.ts.map +0 -1
  166. /package/dist/{process → plugins}/servertypes/serverUtils.js +0 -0
  167. /package/types/{process → plugins}/servertypes/serverUtils.d.ts +0 -0
@@ -1,154 +0,0 @@
1
- // masterprocessbase.ts
2
- /* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/no-unused-vars: 0 */ // --> OFF
3
- import si from "systeminformation"; // https://systeminformation.io/
4
- import chalk from "chalk";
5
- import { goptions } from "@nsshunt/stsconfig";
6
- import { Gauge, } from "@nsshunt/stsobservability";
7
- import { ProcessBase } from "./processbase.js";
8
- import { ProcessMetricsToken, STSTransportLoggerWinstonToken, DataManagerToken, LatencyManagerToken, LogManagerToken, } from "./../commonTypes.js";
9
- import { Sleep } from "@nsshunt/stsutils";
10
- import { SysInfo } from "./sysinfo.js";
11
- import { ClusterWorkerManager } from "./clusterworkermanager.js";
12
- //@@ refactor todo items
13
- //@@ ------------------------------------------------------------
14
- //@@ this needs a worker manager to handle add/remove of workers
15
- //@@ move prom support to a promManageer
16
- //@@ latencyManager (or health check)
17
- //@@ remove ipc message handling and replace with stsmessaging
18
- //@@ remove TerminateUIController - does not appear to be used by anything
19
- export class MasterProcessBase extends ProcessBase {
20
- #masterProcessExitTime = goptions.masterProcessExitTime;
21
- #childProcessExitTime = goptions.childProcessExitTime;
22
- #siValueObject = {
23
- currentLoad: "currentLoad",
24
- };
25
- #httpServer = null; // Prometheus cluster server. See https://github.com/siimon/prom-client/blob/master/example/cluster.js
26
- #checkLatency = null;
27
- #shuttingDown = false;
28
- #clusterWorkerManager;
29
- #logManager;
30
- constructor(options) {
31
- super(options);
32
- this.#logManager = this.ProcessBaseInjector().get(LogManagerToken);
33
- this.ProcessBaseInjector().runInContext(() => {
34
- this.#clusterWorkerManager = new ClusterWorkerManager();
35
- });
36
- this.#clusterWorkerManager?.on("workerExit", (code, signal) => {
37
- this.emit("workerExit", code, signal);
38
- });
39
- this.#clusterWorkerManager?.on("workerError", (error) => {
40
- this.emit("workerError", error);
41
- });
42
- this.#clusterWorkerManager?.on("workerAdded", (workerId) => {
43
- this.emit("workerAdded", workerId);
44
- });
45
- }
46
- #CollectAdditionalTelemetry = () => {
47
- const metrics = this.ProcessBaseInjector().get(ProcessMetricsToken);
48
- metrics.AddMetricsProvider(async () => {
49
- try {
50
- si.get(this.#siValueObject).then((data) => {
51
- metrics.UpdateInstrument(Gauge.CPU_SYSTEM_LOAD_GAUGE, {
52
- val: data.currentLoad.currentLoad,
53
- });
54
- });
55
- }
56
- catch (error) { }
57
- });
58
- };
59
- MasterStarted() {
60
- const transport = this.ProcessBaseInjector().get(STSTransportLoggerWinstonToken);
61
- setTimeout(() => {
62
- this.options.logger.add(transport);
63
- }, 0);
64
- }
65
- get shuttingDown() {
66
- return this.#shuttingDown;
67
- }
68
- SetupServer = async () => {
69
- this.ProcessStartup();
70
- this.#logManager.LogInfoMessage(`Service instance starting. Instance Id: [${this.options.serviceInstanceId}]`);
71
- const sysInfo = new SysInfo(this.ProcessBaseInjector().get(LogManagerToken));
72
- sysInfo.LogSystemTelemetry();
73
- const numCPUs = await sysInfo.GetNumCPUs();
74
- for (let i = 0; i < numCPUs; i++) {
75
- this.#clusterWorkerManager.SpawnWorker();
76
- }
77
- process.on("SIGINT", async () => {
78
- this.emit("processSigint");
79
- await this.Terminate("SIGINT");
80
- });
81
- process.on("SIGTERM", async () => {
82
- this.emit("processSigterm");
83
- await this.Terminate("SIGTERM");
84
- });
85
- process.on("exit", (code) => {
86
- this.emit("processExit", code);
87
- if (code === 0) {
88
- this.#logManager.LogInfoMessage(chalk.green(`Main Process: ${process.pid} terminated gracefully with code: ${code}`));
89
- }
90
- else {
91
- this.#logManager.LogInfoMessage(chalk.red(`Main Process: ${process.pid} terminated with code: ${code}`));
92
- }
93
- });
94
- if (this.options.useLatency) {
95
- this.#checkLatency = setInterval(() => {
96
- this.ProcessBaseInjector()
97
- .get(LatencyManagerToken)
98
- .CheckLatency();
99
- }, 1000).unref();
100
- }
101
- this.#CollectAdditionalTelemetry();
102
- this.MasterStarted();
103
- this.#logManager.LogInfoMessage(chalk.green(`Master process:${process.pid} started`));
104
- };
105
- TerminateLatency = () => {
106
- if (this.#checkLatency) {
107
- clearInterval(this.#checkLatency);
108
- this.#checkLatency = null;
109
- }
110
- };
111
- TerminateHTTPServer = async () => {
112
- if (this.#httpServer !== null) {
113
- const logPrefix = `ServerProcessBase:TerminateHTTPServer():${process.pid}:`;
114
- this.#logManager.LogInfoMessage(`${logPrefix} Closing httpServer.`);
115
- await this.#httpServer.close();
116
- this.#httpServer = null;
117
- }
118
- };
119
- // Terminate in order;
120
- // forked worker threads (send signal)
121
- // De-Register service
122
- // systeminformation observers
123
- // instrument timers (gauge etc.)
124
- // publisher
125
- // terminate UI (if loaded)
126
- Terminate = async (signal) => {
127
- const logPrefix = `MasterProcessBase:Terminate():${process.pid}:`;
128
- if (this.#shuttingDown === false) {
129
- this.#shuttingDown = true;
130
- if (signal) {
131
- this.#logManager.LogInfoMessage(this.GetSignalColour(signal)(`${logPrefix} Received signal: ${signal}`));
132
- }
133
- else {
134
- this.#logManager.LogInfoMessage(this.GetSignalColour(null)(`${logPrefix} Received Terminate without signal.`));
135
- }
136
- this.TerminateLatency();
137
- await this.ProcessTerminate();
138
- this.#logManager.LogInfoMessage(`${logPrefix} De-Registering service.`);
139
- //@@ De-register here ...
140
- await this.TerminateHTTPServer();
141
- this.#clusterWorkerManager?.KillWorkers(signal);
142
- await this.ProcessBaseInjector()
143
- .get(DataManagerToken)
144
- ?.TerminateDatabase();
145
- this.TerminateInstrumentController();
146
- await Sleep(1000);
147
- this.ProcessExit(this.#childProcessExitTime + this.#masterProcessExitTime);
148
- }
149
- else {
150
- this.#logManager.LogInfoMessage(`${logPrefix} Process already terminating.`);
151
- }
152
- };
153
- }
154
- //# sourceMappingURL=masterprocessbase.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"masterprocessbase.js","sourceRoot":"","sources":["../../src/process/masterprocessbase.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/process/metrics.ts"],"names":[],"mappings":"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"}
@@ -1,203 +0,0 @@
1
- // processbase.ts
2
- /* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/no-unused-vars: 0 */ // --> OFF
3
- import { STSTransportLoggerWinston } from "./../logger/stsTransportLoggerWinston.js";
4
- import chalk from "chalk";
5
- import { goptions } from "@nsshunt/stsconfig";
6
- import { createAgentManager, inject } from "@nsshunt/stsutils";
7
- import { PublishInstrumentController, TransportType, GetInstruments, } from "@nsshunt/stsinstrumentmanagerclient";
8
- import { getCurrentInjector } from "@nsshunt/stsutils";
9
- import os from "os";
10
- import { CreateServiceProcessContext, ProcessOptionsToken, AgentManagerToken, PublishInstrumentControllerToken, STSLoggerToken, ProcessBaseToken, ProcessMetricsToken, STSTransportLoggerWinstonToken, DataManagerToken, LatencyManagerToken, LogManagerToken, } from "./../commonTypes.js";
11
- import { TinyEmitter } from "tiny-emitter";
12
- import http from "node:http";
13
- import https from "node:https";
14
- import { Metrics } from "./metrics.js";
15
- import { DataManager } from "./datamanager.js";
16
- import { LatencyManager } from "./latencyManager.js";
17
- import { LogManager } from "./logManager.js";
18
- export class ProcessBase extends TinyEmitter {
19
- #processBaseInjector;
20
- options;
21
- constructor(options) {
22
- super();
23
- this.options = options;
24
- if (options.serviceName) {
25
- options.serviceProcessContext = CreateServiceProcessContext(options.serviceName, options.serviceVersion, options.serviceInstanceId, os.hostname(), process.pid, options.isMaster ? process.pid : process.ppid);
26
- }
27
- this.#processBaseInjector = getCurrentInjector().createChild([
28
- {
29
- provide: ProcessBaseToken,
30
- useValue: this,
31
- },
32
- {
33
- provide: STSLoggerToken,
34
- useValue: options.logger,
35
- },
36
- {
37
- provide: ProcessOptionsToken,
38
- useValue: options,
39
- },
40
- {
41
- provide: DataManagerToken,
42
- useFactory: this.#CreateDataManager,
43
- },
44
- {
45
- provide: AgentManagerToken,
46
- useFactory: this.#CreateAgentManager,
47
- },
48
- {
49
- provide: PublishInstrumentControllerToken,
50
- useFactory: this.#CreatePublishInstrumentController,
51
- },
52
- {
53
- provide: ProcessMetricsToken,
54
- useClass: Metrics,
55
- },
56
- {
57
- provide: STSTransportLoggerWinstonToken,
58
- useFactory: () => new STSTransportLoggerWinston(inject(ProcessMetricsToken)),
59
- },
60
- {
61
- provide: LatencyManagerToken,
62
- useClass: LatencyManager,
63
- },
64
- {
65
- provide: LogManagerToken,
66
- useClass: LogManager,
67
- },
68
- ]);
69
- }
70
- #CreateDataManager = () => {
71
- const options = inject(ProcessOptionsToken);
72
- if (!options.useDatabase) {
73
- return undefined;
74
- }
75
- return new DataManager();
76
- };
77
- #CreateAgentManager = () => {
78
- return createAgentManager({
79
- agentOptions: {
80
- keepAlive: false, // Use basic defaults. This agent will not use keep-alive.
81
- maxFreeSockets: goptions.maxFreeSockets,
82
- maxSockets: goptions.maxSockets,
83
- maxTotalSockets: goptions.maxTotalSockets,
84
- timeout: goptions.timeout,
85
- rejectUnauthorized: goptions.isProduction, // Allows self-signed certificates if non-production
86
- },
87
- httpAgentFactory(options) {
88
- return new http.Agent(options);
89
- },
90
- httpsAgentFactory(options) {
91
- return new https.Agent(options);
92
- },
93
- });
94
- };
95
- #CreatePublishInstrumentController = () => {
96
- if (!this.options.serviceProcessContext) {
97
- return undefined;
98
- }
99
- let publishTransportOptions = null;
100
- if (goptions.observabilityPublishMode.localeCompare("PROXY") === 0) {
101
- publishTransportOptions = {
102
- transportType: TransportType.RESTAPI,
103
- url: `${goptions.imendpoint}:${goptions.import}${goptions.imapiroot}/publishmessage`,
104
- agentManager: inject(AgentManagerToken),
105
- // Use this for sockets: socketPath: '/var/run/sts/stsrest01.sock'
106
- logger: this.options.publisherLogger,
107
- };
108
- }
109
- else {
110
- // Currently, now other types are supported
111
- return;
112
- }
113
- const httpServer = goptions.STSServerType.localeCompare("EXPRESS") === 0 ||
114
- goptions.STSServerType.localeCompare("EXPRESS_TLS") === 0;
115
- const instrumentControllerOptions = {
116
- processContext: this.options.serviceProcessContext,
117
- consoleLogging: this.options.consoleLogging,
118
- instrumentLogging: this.options.instrumentLogging,
119
- httpServer,
120
- instrumentationObservationInterval: this.options.instrumentationObservationInterval,
121
- instrumentationTimeWindow: this.options.instrumentationTimeWindow,
122
- logger: this.options.publisherLogger,
123
- publishInterval: this.options.publishInterval,
124
- publishPostFailInterval: 5000, //@@
125
- instrumentDefinitions: GetInstruments("service"),
126
- publishTransportBaseOptions: publishTransportOptions,
127
- autoStart: true,
128
- };
129
- return new PublishInstrumentController(instrumentControllerOptions);
130
- };
131
- ProcessBaseInjector = () => {
132
- return this.#processBaseInjector;
133
- };
134
- get shuttingDown() {
135
- return false;
136
- }
137
- ProcessStartup = () => {
138
- this.#processBaseInjector.get(ProcessMetricsToken).Start();
139
- if (this.options.useDatabase) {
140
- // Get the accessLayer to force DB connection test
141
- this.#processBaseInjector.get(DataManagerToken)?.StartDatabase();
142
- }
143
- };
144
- ProcessExit = (processExitDelay) => {
145
- const lm = this.#processBaseInjector.get(LogManagerToken);
146
- if (this.options.processExitOnTerminate &&
147
- this.options.processExitOnTerminate === true) {
148
- setTimeout(() => {
149
- lm.LogInfoMessage(`Performing process.exit(0).`);
150
- process.exit(0);
151
- }, processExitDelay); // Give the workers time to terminate gracefully
152
- }
153
- else {
154
- lm.LogInfoMessage(`Performing process.exit(0) - Immediate.`);
155
- }
156
- };
157
- TerminateInstrumentController = () => {
158
- const ic = this.#processBaseInjector.get(PublishInstrumentControllerToken);
159
- if (ic) {
160
- this.#processBaseInjector
161
- .get(LogManagerToken)
162
- .LogInfoMessage(`ProcessBase:TerminateInstrumentController()`);
163
- setTimeout(async () => {
164
- if (ic) {
165
- await ic.EndPublish();
166
- setTimeout(() => {
167
- const am = this.#processBaseInjector.get(AgentManagerToken);
168
- if (am) {
169
- am.Terminate();
170
- }
171
- }, 50);
172
- }
173
- }, 100);
174
- }
175
- };
176
- async ProcessTerminate() {
177
- this.emit("ProcessTerminate");
178
- this.#processBaseInjector.get(ProcessMetricsToken).Stop();
179
- }
180
- GetSignalColour = (signal) => {
181
- let msgcolor = null;
182
- if (signal === "SIGINT") {
183
- msgcolor = chalk.yellow;
184
- }
185
- else {
186
- msgcolor = chalk.red;
187
- }
188
- return msgcolor;
189
- };
190
- emit(event, ...arg) {
191
- super.emit(event, ...arg);
192
- return this;
193
- }
194
- on(event, callback) {
195
- super.on(event, callback);
196
- return this;
197
- }
198
- off(event, callback) {
199
- super.off(event, callback);
200
- return this;
201
- }
202
- }
203
- //# sourceMappingURL=processbase.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"processbase.js","sourceRoot":"","sources":["../../src/process/processbase.ts"],"names":[],"mappings":"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"}
@@ -1,112 +0,0 @@
1
- // prometheusmanager.ts
2
- /* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/no-unused-vars: 0 */ // --> OFF
3
- import fs from "node:fs";
4
- import { createServer as createServerHttps } from "node:https";
5
- import { createServer } from "node:http";
6
- import { goptions } from "@nsshunt/stsconfig";
7
- import { LogManagerToken, ProcessOptionsToken } from "./../commonTypes.js";
8
- import { inject } from "@nsshunt/stsutils";
9
- import { TinyEmitter } from "tiny-emitter";
10
- import express from "express";
11
- import { register, Counter, collectDefaultMetrics, AggregatorRegistry, } from "prom-client";
12
- const PROMETHEUS_CLUSTER_PATH = "/cluster_metrics";
13
- export class PrometheusManager extends TinyEmitter {
14
- #httpServer = null; // Prometheus cluster server. See https://github.com/siimon/prom-client/blob/master/example/cluster.js
15
- #metricsServer = null;
16
- #aggregatorRegistry = null;
17
- options = inject(ProcessOptionsToken);
18
- logManager = inject(LogManagerToken);
19
- constructor() {
20
- super();
21
- }
22
- // https://github.com/siimon/prom-client/blob/master/example/cluster.js
23
- SetupPrometheusForMaster = () => {
24
- this.#metricsServer = express();
25
- this.#aggregatorRegistry = new AggregatorRegistry();
26
- switch (goptions.STSServerType) {
27
- case "EXPRESS_TLS":
28
- {
29
- const options = {
30
- key: fs.readFileSync(this.options.httpsServerKeyPath),
31
- cert: fs.readFileSync(this.options.httpsServerCertificatePath),
32
- };
33
- this.#httpServer = createServerHttps(options, this.#metricsServer);
34
- }
35
- break;
36
- case "EXPRESS": {
37
- this.#httpServer = createServer(this.#metricsServer);
38
- }
39
- }
40
- this.#metricsServer.get(PROMETHEUS_CLUSTER_PATH, async (req, res) => {
41
- try {
42
- const metrics = await this.#aggregatorRegistry.clusterMetrics();
43
- res.set("Content-Type", this.#aggregatorRegistry.contentType);
44
- res.send(metrics);
45
- }
46
- catch (ex) {
47
- res.statusCode = 500;
48
- res.send(ex.message);
49
- }
50
- });
51
- try {
52
- // https://stackoverflow.com/questions/21342828/node-express-unix-domain-socket-permissions
53
- //@@httpServer.listen('/tmp/stsrest01.sock').on('listening', () =>
54
- //@@httpServer.listen('/var/run/sts/stsrest01.sock').on('listening', () =>
55
- //@@httpServer.listen('/var/lib/sts/stsrest01.sock').on('listening', () =>
56
- this.#httpServer
57
- .listen(this.options.prometheusClusterPort, () => {
58
- //@@chmodSync(this.options.port, 511);
59
- })
60
- .on("listening", () => {
61
- this.emit("prometheusScrapesListening", `${this.options.endpoint}:${this.options.prometheusClusterPort}${PROMETHEUS_CLUSTER_PATH}`, this.options.endpoint, this.options.prometheusClusterPort);
62
- this.logManager.LogInfoMessage(`Prometheus scrapes ready and live on ${this.options.endpoint}:${this.options.prometheusClusterPort}${PROMETHEUS_CLUSTER_PATH}`);
63
- });
64
- }
65
- catch (error) {
66
- this.logManager.LogErrorMessage(`SetupPrometheusForMaster(): Error: [${error}]`);
67
- throw error;
68
- }
69
- this.SetupPrometheusEndPoints(this.#metricsServer);
70
- };
71
- // Setup server to Prometheus scrapes:
72
- SetupPrometheusEndPoints = (expressServer) => {
73
- // AggregatorRegistry is required here in the worker as well as the master in order for prom-client to work correctly.
74
- new AggregatorRegistry();
75
- const prefix = "sts_";
76
- collectDefaultMetrics({
77
- labels: { NODE_APP_INSTANCE: process.pid },
78
- prefix: prefix,
79
- });
80
- const c = new Counter({
81
- name: "sts_test_counter",
82
- help: "Example of a counter",
83
- labelNames: ["code"],
84
- });
85
- setInterval(() => {
86
- c.inc({ code: 200 });
87
- }, 1000).unref();
88
- setInterval(() => {
89
- c.inc({ code: 400 });
90
- c.inc({ code: "worker_" + process.pid });
91
- }, 500).unref();
92
- expressServer.get("/metrics", async (req, res) => {
93
- try {
94
- res.set("Content-Type", register.contentType);
95
- res.end(await register.metrics());
96
- }
97
- catch (ex) {
98
- res.status(500).end(ex);
99
- }
100
- });
101
- expressServer.get("/metrics/counter", async (req, res) => {
102
- try {
103
- res.set("Content-Type", register.contentType);
104
- res.end(await register.getSingleMetricAsString("test_counter"));
105
- }
106
- catch (ex) {
107
- res.status(500).end(ex);
108
- }
109
- });
110
- };
111
- }
112
- //# sourceMappingURL=prometheusmanager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prometheusmanager.js","sourceRoot":"","sources":["../../src/process/prometheusmanager.ts"],"names":[],"mappings":"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"}