@zintrust/workers 0.1.27

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 (178) hide show
  1. package/README.md +861 -0
  2. package/dist/AnomalyDetection.d.ts +102 -0
  3. package/dist/AnomalyDetection.js +321 -0
  4. package/dist/AutoScaler.d.ts +127 -0
  5. package/dist/AutoScaler.js +425 -0
  6. package/dist/BroadcastWorker.d.ts +21 -0
  7. package/dist/BroadcastWorker.js +24 -0
  8. package/dist/CanaryController.d.ts +103 -0
  9. package/dist/CanaryController.js +380 -0
  10. package/dist/ChaosEngineering.d.ts +79 -0
  11. package/dist/ChaosEngineering.js +216 -0
  12. package/dist/CircuitBreaker.d.ts +106 -0
  13. package/dist/CircuitBreaker.js +374 -0
  14. package/dist/ClusterLock.d.ts +90 -0
  15. package/dist/ClusterLock.js +385 -0
  16. package/dist/ComplianceManager.d.ts +177 -0
  17. package/dist/ComplianceManager.js +556 -0
  18. package/dist/DatacenterOrchestrator.d.ts +133 -0
  19. package/dist/DatacenterOrchestrator.js +404 -0
  20. package/dist/DeadLetterQueue.d.ts +122 -0
  21. package/dist/DeadLetterQueue.js +539 -0
  22. package/dist/HealthMonitor.d.ts +42 -0
  23. package/dist/HealthMonitor.js +301 -0
  24. package/dist/MultiQueueWorker.d.ts +89 -0
  25. package/dist/MultiQueueWorker.js +277 -0
  26. package/dist/NotificationWorker.d.ts +21 -0
  27. package/dist/NotificationWorker.js +23 -0
  28. package/dist/Observability.d.ts +153 -0
  29. package/dist/Observability.js +530 -0
  30. package/dist/PluginManager.d.ts +123 -0
  31. package/dist/PluginManager.js +392 -0
  32. package/dist/PriorityQueue.d.ts +117 -0
  33. package/dist/PriorityQueue.js +244 -0
  34. package/dist/ResourceMonitor.d.ts +164 -0
  35. package/dist/ResourceMonitor.js +605 -0
  36. package/dist/SLAMonitor.d.ts +110 -0
  37. package/dist/SLAMonitor.js +274 -0
  38. package/dist/WorkerFactory.d.ts +193 -0
  39. package/dist/WorkerFactory.js +1507 -0
  40. package/dist/WorkerInit.d.ts +85 -0
  41. package/dist/WorkerInit.js +223 -0
  42. package/dist/WorkerMetrics.d.ts +114 -0
  43. package/dist/WorkerMetrics.js +509 -0
  44. package/dist/WorkerRegistry.d.ts +145 -0
  45. package/dist/WorkerRegistry.js +319 -0
  46. package/dist/WorkerShutdown.d.ts +61 -0
  47. package/dist/WorkerShutdown.js +159 -0
  48. package/dist/WorkerVersioning.d.ts +107 -0
  49. package/dist/WorkerVersioning.js +300 -0
  50. package/dist/build-manifest.json +462 -0
  51. package/dist/config/workerConfig.d.ts +3 -0
  52. package/dist/config/workerConfig.js +19 -0
  53. package/dist/createQueueWorker.d.ts +23 -0
  54. package/dist/createQueueWorker.js +113 -0
  55. package/dist/dashboard/index.d.ts +1 -0
  56. package/dist/dashboard/index.js +1 -0
  57. package/dist/dashboard/types.d.ts +117 -0
  58. package/dist/dashboard/types.js +1 -0
  59. package/dist/dashboard/workers-api.d.ts +4 -0
  60. package/dist/dashboard/workers-api.js +638 -0
  61. package/dist/dashboard/workers-dashboard-ui.d.ts +3 -0
  62. package/dist/dashboard/workers-dashboard-ui.js +1026 -0
  63. package/dist/dashboard/workers-dashboard.d.ts +4 -0
  64. package/dist/dashboard/workers-dashboard.js +904 -0
  65. package/dist/helper/index.d.ts +5 -0
  66. package/dist/helper/index.js +10 -0
  67. package/dist/http/WorkerApiController.d.ts +38 -0
  68. package/dist/http/WorkerApiController.js +312 -0
  69. package/dist/http/WorkerController.d.ts +374 -0
  70. package/dist/http/WorkerController.js +1351 -0
  71. package/dist/http/middleware/CustomValidation.d.ts +92 -0
  72. package/dist/http/middleware/CustomValidation.js +270 -0
  73. package/dist/http/middleware/DatacenterValidator.d.ts +3 -0
  74. package/dist/http/middleware/DatacenterValidator.js +94 -0
  75. package/dist/http/middleware/EditWorkerValidation.d.ts +7 -0
  76. package/dist/http/middleware/EditWorkerValidation.js +55 -0
  77. package/dist/http/middleware/FeaturesValidator.d.ts +3 -0
  78. package/dist/http/middleware/FeaturesValidator.js +60 -0
  79. package/dist/http/middleware/InfrastructureValidator.d.ts +31 -0
  80. package/dist/http/middleware/InfrastructureValidator.js +226 -0
  81. package/dist/http/middleware/OptionsValidator.d.ts +3 -0
  82. package/dist/http/middleware/OptionsValidator.js +112 -0
  83. package/dist/http/middleware/PayloadSanitizer.d.ts +7 -0
  84. package/dist/http/middleware/PayloadSanitizer.js +42 -0
  85. package/dist/http/middleware/ProcessorPathSanitizer.d.ts +3 -0
  86. package/dist/http/middleware/ProcessorPathSanitizer.js +74 -0
  87. package/dist/http/middleware/QueueNameSanitizer.d.ts +3 -0
  88. package/dist/http/middleware/QueueNameSanitizer.js +45 -0
  89. package/dist/http/middleware/ValidateDriver.d.ts +7 -0
  90. package/dist/http/middleware/ValidateDriver.js +20 -0
  91. package/dist/http/middleware/VersionSanitizer.d.ts +3 -0
  92. package/dist/http/middleware/VersionSanitizer.js +25 -0
  93. package/dist/http/middleware/WorkerNameSanitizer.d.ts +3 -0
  94. package/dist/http/middleware/WorkerNameSanitizer.js +46 -0
  95. package/dist/http/middleware/WorkerValidationChain.d.ts +27 -0
  96. package/dist/http/middleware/WorkerValidationChain.js +185 -0
  97. package/dist/index.d.ts +46 -0
  98. package/dist/index.js +48 -0
  99. package/dist/routes/workers.d.ts +12 -0
  100. package/dist/routes/workers.js +81 -0
  101. package/dist/storage/WorkerStore.d.ts +45 -0
  102. package/dist/storage/WorkerStore.js +195 -0
  103. package/dist/type.d.ts +76 -0
  104. package/dist/type.js +1 -0
  105. package/dist/ui/router/ui.d.ts +3 -0
  106. package/dist/ui/router/ui.js +83 -0
  107. package/dist/ui/types/worker-ui.d.ts +229 -0
  108. package/dist/ui/types/worker-ui.js +5 -0
  109. package/package.json +53 -0
  110. package/src/AnomalyDetection.ts +434 -0
  111. package/src/AutoScaler.ts +654 -0
  112. package/src/BroadcastWorker.ts +34 -0
  113. package/src/CanaryController.ts +531 -0
  114. package/src/ChaosEngineering.ts +301 -0
  115. package/src/CircuitBreaker.ts +495 -0
  116. package/src/ClusterLock.ts +499 -0
  117. package/src/ComplianceManager.ts +815 -0
  118. package/src/DatacenterOrchestrator.ts +561 -0
  119. package/src/DeadLetterQueue.ts +733 -0
  120. package/src/HealthMonitor.ts +390 -0
  121. package/src/MultiQueueWorker.ts +431 -0
  122. package/src/NotificationWorker.ts +33 -0
  123. package/src/Observability.ts +696 -0
  124. package/src/PluginManager.ts +551 -0
  125. package/src/PriorityQueue.ts +351 -0
  126. package/src/ResourceMonitor.ts +769 -0
  127. package/src/SLAMonitor.ts +408 -0
  128. package/src/WorkerFactory.ts +2108 -0
  129. package/src/WorkerInit.ts +313 -0
  130. package/src/WorkerMetrics.ts +709 -0
  131. package/src/WorkerRegistry.ts +443 -0
  132. package/src/WorkerShutdown.ts +210 -0
  133. package/src/WorkerVersioning.ts +422 -0
  134. package/src/config/workerConfig.ts +25 -0
  135. package/src/createQueueWorker.ts +174 -0
  136. package/src/dashboard/index.ts +6 -0
  137. package/src/dashboard/types.ts +141 -0
  138. package/src/dashboard/workers-api.ts +785 -0
  139. package/src/dashboard/zintrust.svg +30 -0
  140. package/src/helper/index.ts +11 -0
  141. package/src/http/WorkerApiController.ts +369 -0
  142. package/src/http/WorkerController.ts +1512 -0
  143. package/src/http/middleware/CustomValidation.ts +360 -0
  144. package/src/http/middleware/DatacenterValidator.ts +124 -0
  145. package/src/http/middleware/EditWorkerValidation.ts +74 -0
  146. package/src/http/middleware/FeaturesValidator.ts +82 -0
  147. package/src/http/middleware/InfrastructureValidator.ts +295 -0
  148. package/src/http/middleware/OptionsValidator.ts +144 -0
  149. package/src/http/middleware/PayloadSanitizer.ts +52 -0
  150. package/src/http/middleware/ProcessorPathSanitizer.ts +86 -0
  151. package/src/http/middleware/QueueNameSanitizer.ts +55 -0
  152. package/src/http/middleware/ValidateDriver.ts +29 -0
  153. package/src/http/middleware/VersionSanitizer.ts +30 -0
  154. package/src/http/middleware/WorkerNameSanitizer.ts +56 -0
  155. package/src/http/middleware/WorkerValidationChain.ts +230 -0
  156. package/src/index.ts +98 -0
  157. package/src/routes/workers.ts +154 -0
  158. package/src/storage/WorkerStore.ts +240 -0
  159. package/src/type.ts +89 -0
  160. package/src/types/queue-monitor.d.ts +38 -0
  161. package/src/types/queue-redis.d.ts +38 -0
  162. package/src/ui/README.md +13 -0
  163. package/src/ui/components/JsonEditor.js +670 -0
  164. package/src/ui/components/JsonViewer.js +387 -0
  165. package/src/ui/components/WorkerCard.js +178 -0
  166. package/src/ui/components/WorkerExpandPanel.js +257 -0
  167. package/src/ui/components/fetcher.js +42 -0
  168. package/src/ui/components/sla-scorecard.js +32 -0
  169. package/src/ui/components/styles.css +30 -0
  170. package/src/ui/components/table-expander.js +34 -0
  171. package/src/ui/integration/worker-ui-integration.js +565 -0
  172. package/src/ui/router/ui.ts +99 -0
  173. package/src/ui/services/workerApi.js +240 -0
  174. package/src/ui/types/worker-ui.ts +283 -0
  175. package/src/ui/utils/jsonValidator.js +444 -0
  176. package/src/ui/workers/index.html +202 -0
  177. package/src/ui/workers/main.js +1781 -0
  178. package/src/ui/workers/styles.css +1350 -0
@@ -0,0 +1,313 @@
1
+ /**
2
+ * Worker Management System Initializer
3
+ *
4
+ * Handles initialization and lifecycle management of the worker management system.
5
+ * - Registers shutdown handlers
6
+ * - Initializes monitoring and resource management
7
+ * - Sets up auto-scaling and health checks
8
+ * - Ensures graceful startup and shutdown
9
+ */
10
+
11
+ import { Env, Logger, workersConfig } from '@zintrust/core';
12
+ import { ResourceMonitor } from './ResourceMonitor';
13
+ import { WorkerFactory } from './WorkerFactory';
14
+ import { WorkerShutdown } from './WorkerShutdown';
15
+
16
+ // ============================================================================
17
+ // Types
18
+ // ============================================================================
19
+
20
+ export interface IWorkerInitOptions {
21
+ /**
22
+ * Whether to start resource monitoring on initialization
23
+ * @default true
24
+ */
25
+ enableResourceMonitoring?: boolean;
26
+
27
+ /**
28
+ * Whether to start health monitoring on initialization
29
+ * @default true
30
+ */
31
+ enableHealthMonitoring?: boolean;
32
+
33
+ /**
34
+ * Whether to start auto-scaling on initialization
35
+ * @default false - must be explicitly enabled
36
+ */
37
+ enableAutoScaling?: boolean;
38
+
39
+ /**
40
+ * Whether to register graceful shutdown handlers
41
+ * @default true
42
+ */
43
+ registerShutdownHandlers?: boolean;
44
+
45
+ /**
46
+ * Resource monitoring interval in milliseconds
47
+ * @default 60000 (1 minute)
48
+ */
49
+ resourceMonitoringInterval?: number;
50
+ }
51
+
52
+ interface IInitState {
53
+ initialized: boolean;
54
+ initializedAt: Date | null;
55
+ resourceMonitoring: boolean;
56
+ healthMonitoring: boolean;
57
+ autoScaling: boolean;
58
+ shutdownHandlersRegistered: boolean;
59
+ }
60
+
61
+ // ============================================================================
62
+ // State
63
+ // ============================================================================
64
+
65
+ const state: IInitState = {
66
+ initialized: false,
67
+ initializedAt: null,
68
+ resourceMonitoring: false,
69
+ healthMonitoring: false,
70
+ autoScaling: false,
71
+ shutdownHandlersRegistered: false,
72
+ };
73
+
74
+ // ============================================================================
75
+ // Implementation
76
+ // ============================================================================
77
+
78
+ /**
79
+ * Initialize resource monitoring based on environment and worker settings
80
+ */
81
+ function initializeResourceMonitoring(
82
+ enableResourceMonitoring: boolean,
83
+ resourceMonitoringInterval: number
84
+ ): boolean {
85
+ // Check global environment gate first
86
+ const globalResourceMonitoring = Env.getBool('WORKER_RESOURCE_MONITORING', false);
87
+
88
+ if (enableResourceMonitoring && globalResourceMonitoring) {
89
+ // Check if any workers have resourceMonitoring enabled
90
+ const shouldStart = shouldStartResourceMonitoring();
91
+
92
+ if (shouldStart) {
93
+ if (ResourceMonitor.isRunning() === false) {
94
+ ResourceMonitor.start(resourceMonitoringInterval / 1000);
95
+ }
96
+ Logger.debug('✓ Resource monitoring started (worker requested)');
97
+ return true;
98
+ } else {
99
+ Logger.debug('⏸️ Resource monitoring disabled (no workers requested it)');
100
+ }
101
+ } else if (!globalResourceMonitoring) {
102
+ Logger.debug('⏸️ Resource monitoring disabled (WORKER_RESOURCE_MONITORING=false)');
103
+ }
104
+
105
+ return false;
106
+ }
107
+
108
+ /**
109
+ * Check if any workers have resource monitoring enabled
110
+ */
111
+ function shouldStartResourceMonitoring(): boolean {
112
+ try {
113
+ const workerNames = WorkerFactory.list();
114
+ return workerNames.some((name) => {
115
+ const worker = WorkerFactory.get(name);
116
+ return worker?.config?.features?.resourceMonitoring === true;
117
+ });
118
+ } catch {
119
+ return false;
120
+ }
121
+ }
122
+
123
+ /**
124
+ * Initialize the worker management system
125
+ */
126
+ async function initialize(options: IWorkerInitOptions = {}): Promise<void> {
127
+ if (state.initialized) {
128
+ Logger.warn('Worker management system already initialized');
129
+ return;
130
+ }
131
+
132
+ const {
133
+ enableResourceMonitoring = true,
134
+ enableHealthMonitoring = true,
135
+ enableAutoScaling = false,
136
+ registerShutdownHandlers = true,
137
+ resourceMonitoringInterval = 60000,
138
+ } = options;
139
+
140
+ Logger.info('🚀 Initializing worker management system', {
141
+ enableResourceMonitoring,
142
+ enableHealthMonitoring,
143
+ enableAutoScaling,
144
+ registerShutdownHandlers,
145
+ });
146
+
147
+ try {
148
+ // 1. Register shutdown handlers first (so they're ready for any failures)
149
+ if (registerShutdownHandlers) {
150
+ WorkerShutdown.registerShutdownHandlers();
151
+ state.shutdownHandlersRegistered = true;
152
+ Logger.debug('✓ Shutdown handlers registered');
153
+ }
154
+
155
+ // 2. Start resource monitoring (important for scaling decisions)
156
+ state.resourceMonitoring = initializeResourceMonitoring(
157
+ enableResourceMonitoring,
158
+ resourceMonitoringInterval
159
+ );
160
+
161
+ // 3. Enable health monitoring (depends on workers being created)
162
+ if (enableHealthMonitoring) {
163
+ // Health checks will start automatically when workers are created
164
+ state.healthMonitoring = true;
165
+ Logger.debug('✓ Health monitoring enabled');
166
+ }
167
+
168
+ // 4. Start auto-scaling if explicitly enabled
169
+ if (enableAutoScaling) {
170
+ // Auto-scaling will evaluate workers when they are created
171
+ state.autoScaling = true;
172
+ Logger.debug('✓ Auto-scaling enabled');
173
+ }
174
+
175
+ state.initialized = true;
176
+ state.initializedAt = new Date();
177
+
178
+ Logger.info('✅ Worker management system initialized successfully', {
179
+ timestamp: state.initializedAt.toISOString(),
180
+ });
181
+ } catch (error) {
182
+ Logger.error('❌ Failed to initialize worker management system', error);
183
+ throw error;
184
+ }
185
+ }
186
+
187
+ async function autoStartPersistedWorkers(): Promise<void> {
188
+ // Check if auto-start is enabled globally via environment variable
189
+ Logger.debug('Auto-start check', {
190
+ envAutoStart: process.env['WORKER_AUTO_START'],
191
+ configAutoStart: workersConfig.defaultWorker?.autoStart,
192
+ });
193
+
194
+ if (workersConfig.defaultWorker?.autoStart !== true) {
195
+ Logger.debug('Auto-start disabled - WORKER_AUTO_START is not true');
196
+ return;
197
+ }
198
+
199
+ try {
200
+ const records = await WorkerFactory.listPersistedRecords();
201
+ Logger.debug('Found persisted records', {
202
+ count: records.length,
203
+ records: records.map((r) => ({ name: r.name, autoStart: r.autoStart })),
204
+ });
205
+
206
+ const candidates = records.filter((record) => {
207
+ // If autoStart is explicitly true, always include
208
+ if (record.autoStart === true) {
209
+ return true;
210
+ }
211
+ // If autoStart is null or undefined and global auto-start is enabled, include
212
+ if (
213
+ (record.autoStart === null || record.autoStart === undefined) &&
214
+ workersConfig.defaultWorker?.autoStart === true
215
+ ) {
216
+ return true;
217
+ }
218
+
219
+ return false;
220
+ });
221
+
222
+ Logger.debug('Auto-start candidates', {
223
+ count: candidates.length,
224
+ candidates: candidates.map((c) => c.name),
225
+ });
226
+ const results = await Promise.all(
227
+ candidates.map(async (record) => {
228
+ if (WorkerFactory.get(record.name)) {
229
+ return { name: record.name, started: false, skipped: true };
230
+ }
231
+ try {
232
+ await WorkerFactory.startFromPersisted(record.name);
233
+ return { name: record.name, started: true, skipped: false };
234
+ } catch (error) {
235
+ Logger.warn(`Auto-start failed for worker ${record.name}`, error as Error);
236
+ return { name: record.name, started: false, skipped: false };
237
+ }
238
+ })
239
+ );
240
+
241
+ const startedCount = results.filter((item) => item.started).length;
242
+ const skippedCount = results.filter((item) => item.skipped).length;
243
+ Logger.info('Auto-started persisted workers', {
244
+ total: candidates.length,
245
+ started: startedCount,
246
+ skipped: skippedCount,
247
+ });
248
+ } catch (error) {
249
+ Logger.warn('Auto-start persisted workers failed', error as Error);
250
+ }
251
+ }
252
+
253
+ /**
254
+ * Check if worker management system is initialized
255
+ */
256
+ function isInitialized(): boolean {
257
+ return state.initialized;
258
+ }
259
+
260
+ /**
261
+ * Get initialization state
262
+ */
263
+ function getInitState(): Readonly<IInitState> {
264
+ return { ...state };
265
+ }
266
+
267
+ /**
268
+ * Graceful shutdown of worker management system
269
+ * (convenience method that delegates to WorkerShutdown)
270
+ */
271
+ async function shutdown(): Promise<void> {
272
+ if (!state.initialized) {
273
+ Logger.warn('Worker management system not initialized, nothing to shutdown');
274
+ return;
275
+ }
276
+
277
+ await WorkerShutdown.shutdown();
278
+ state.initialized = false;
279
+ state.resourceMonitoring = false;
280
+ state.healthMonitoring = false;
281
+ state.autoScaling = false;
282
+ }
283
+
284
+ // ============================================================================
285
+ // Public API (Sealed Namespace)
286
+ // ============================================================================
287
+
288
+ export const WorkerInit = Object.freeze({
289
+ /**
290
+ * Initialize the worker management system
291
+ */
292
+ initialize,
293
+
294
+ /**
295
+ * Check if worker management system is initialized
296
+ */
297
+ isInitialized,
298
+
299
+ /**
300
+ * Get initialization state
301
+ */
302
+ getInitState,
303
+
304
+ /**
305
+ * Graceful shutdown of worker management system
306
+ */
307
+ shutdown,
308
+
309
+ /**
310
+ * Start persisted workers after boot completes
311
+ */
312
+ autoStartPersistedWorkers,
313
+ });