@zintrust/core 0.4.28 → 0.4.30

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 (453) hide show
  1. package/bin/z.js +0 -0
  2. package/bin/zin.js +0 -0
  3. package/bin/zintrust.js +0 -0
  4. package/bin/zt.js +0 -0
  5. package/package.json +78 -23
  6. package/src/cli/commands/D1ProxyCommand.d.ts.map +1 -1
  7. package/src/cli/commands/D1ProxyCommand.js +69 -9
  8. package/src/cli/commands/KvProxyCommand.d.ts.map +1 -1
  9. package/src/cli/commands/KvProxyCommand.js +69 -9
  10. package/src/cli/commands/NewCommand.d.ts.map +1 -1
  11. package/src/cli/commands/NewCommand.js +8 -28
  12. package/src/cli/scaffolding/GovernanceScaffolder.d.ts.map +1 -1
  13. package/src/cli/scaffolding/GovernanceScaffolder.js +31 -4
  14. package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -1
  15. package/src/cli/scaffolding/ProjectScaffolder.js +31 -5
  16. package/src/cli/utils/DistPackager.d.ts +2 -2
  17. package/src/cli/utils/DistPackager.js +2 -2
  18. package/src/index.js +3 -3
  19. package/src/zintrust.plugins.js +1 -1
  20. package/app/Controllers/AuthController.d.ts +0 -10
  21. package/app/Controllers/AuthController.d.ts.map +0 -1
  22. package/app/Controllers/AuthController.js +0 -233
  23. package/app/Controllers/TestController.d.ts +0 -22
  24. package/app/Controllers/TestController.d.ts.map +0 -1
  25. package/app/Controllers/TestController.js +0 -188
  26. package/app/Controllers/UserController.d.ts +0 -9
  27. package/app/Controllers/UserController.d.ts.map +0 -1
  28. package/app/Controllers/UserController.js +0 -8
  29. package/app/Controllers/UserQueryBuilderController.d.ts +0 -16
  30. package/app/Controllers/UserQueryBuilderController.d.ts.map +0 -1
  31. package/app/Controllers/UserQueryBuilderController.js +0 -404
  32. package/app/Jobs/AdvancedEmailJobService.d.ts +0 -57
  33. package/app/Jobs/AdvancedEmailJobService.d.ts.map +0 -1
  34. package/app/Jobs/AdvancedEmailJobService.js +0 -185
  35. package/app/Jobs/EmailJobService.d.ts +0 -33
  36. package/app/Jobs/EmailJobService.d.ts.map +0 -1
  37. package/app/Jobs/EmailJobService.js +0 -113
  38. package/app/Middleware/AuthFailureResponder.d.ts +0 -3
  39. package/app/Middleware/AuthFailureResponder.d.ts.map +0 -1
  40. package/app/Middleware/AuthFailureResponder.js +0 -8
  41. package/app/Middleware/ProfilerMiddleware.d.ts +0 -12
  42. package/app/Middleware/ProfilerMiddleware.d.ts.map +0 -1
  43. package/app/Middleware/ProfilerMiddleware.js +0 -47
  44. package/app/Middleware/index.d.ts +0 -59
  45. package/app/Middleware/index.d.ts.map +0 -1
  46. package/app/Middleware/index.js +0 -216
  47. package/app/Models/Post.d.ts +0 -14
  48. package/app/Models/Post.d.ts.map +0 -1
  49. package/app/Models/Post.js +0 -27
  50. package/app/Models/User.d.ts +0 -14
  51. package/app/Models/User.d.ts.map +0 -1
  52. package/app/Models/User.js +0 -44
  53. package/app/Schedules/JobTracking.d.ts +0 -3
  54. package/app/Schedules/JobTracking.d.ts.map +0 -1
  55. package/app/Schedules/JobTracking.js +0 -13
  56. package/app/Schedules/index.d.ts +0 -2
  57. package/app/Schedules/index.d.ts.map +0 -1
  58. package/app/Schedules/index.js +0 -1
  59. package/app/Toolkit/Broadcast/sendBroadcast.d.ts +0 -6
  60. package/app/Toolkit/Broadcast/sendBroadcast.d.ts.map +0 -1
  61. package/app/Toolkit/Broadcast/sendBroadcast.js +0 -5
  62. package/app/Toolkit/Mail/sendWelcomeEmail.d.ts +0 -6
  63. package/app/Toolkit/Mail/sendWelcomeEmail.d.ts.map +0 -1
  64. package/app/Toolkit/Mail/sendWelcomeEmail.js +0 -20
  65. package/app/Toolkit/Notification/sendSlackNotification.d.ts +0 -8
  66. package/app/Toolkit/Notification/sendSlackNotification.d.ts.map +0 -1
  67. package/app/Toolkit/Notification/sendSlackNotification.js +0 -5
  68. package/app/Toolkit/Notification/sendSms.d.ts +0 -6
  69. package/app/Toolkit/Notification/sendSms.d.ts.map +0 -1
  70. package/app/Toolkit/Notification/sendSms.js +0 -5
  71. package/app/Types/controller.d.ts +0 -44
  72. package/app/Types/controller.d.ts.map +0 -1
  73. package/app/Types/controller.js +0 -1
  74. package/app/Workers/AdvancEmailWorker.d.ts +0 -44
  75. package/app/Workers/AdvancEmailWorker.d.ts.map +0 -1
  76. package/app/Workers/AdvancEmailWorker.js +0 -192
  77. package/app/Workers/EmailWorker.d.ts +0 -39
  78. package/app/Workers/EmailWorker.d.ts.map +0 -1
  79. package/app/Workers/EmailWorker.js +0 -199
  80. package/app/Workers/TestWorker.d.ts +0 -16
  81. package/app/Workers/TestWorker.d.ts.map +0 -1
  82. package/app/Workers/TestWorker.js +0 -153
  83. package/build-manifest.json +0 -6410
  84. package/config/broadcast.d.ts +0 -38
  85. package/config/broadcast.d.ts.map +0 -1
  86. package/config/broadcast.js +0 -37
  87. package/config/cache.d.ts +0 -40
  88. package/config/cache.d.ts.map +0 -1
  89. package/config/cache.js +0 -39
  90. package/config/database.d.ts +0 -58
  91. package/config/database.d.ts.map +0 -1
  92. package/config/database.js +0 -65
  93. package/config/mail.d.ts +0 -51
  94. package/config/mail.d.ts.map +0 -1
  95. package/config/mail.js +0 -69
  96. package/config/middleware.d.ts +0 -21
  97. package/config/middleware.d.ts.map +0 -1
  98. package/config/middleware.js +0 -61
  99. package/config/notification.d.ts +0 -33
  100. package/config/notification.d.ts.map +0 -1
  101. package/config/notification.js +0 -33
  102. package/config/queue.d.ts +0 -55
  103. package/config/queue.d.ts.map +0 -1
  104. package/config/queue.js +0 -87
  105. package/config/storage.d.ts +0 -59
  106. package/config/storage.d.ts.map +0 -1
  107. package/config/storage.js +0 -59
  108. package/config/workers.d.ts +0 -54
  109. package/config/workers.d.ts.map +0 -1
  110. package/config/workers.js +0 -83
  111. package/database/factories/UserFactory.d.ts +0 -40
  112. package/database/factories/UserFactory.d.ts.map +0 -1
  113. package/database/factories/UserFactory.js +0 -99
  114. package/database/migrations/20260109074544_create_users_table.d.ts +0 -7
  115. package/database/migrations/20260109074544_create_users_table.d.ts.map +0 -1
  116. package/database/migrations/20260109074544_create_users_table.js +0 -21
  117. package/database/migrations/20260109144731_create_tasks_table.d.ts +0 -7
  118. package/database/migrations/20260109144731_create_tasks_table.d.ts.map +0 -1
  119. package/database/migrations/20260109144731_create_tasks_table.js +0 -19
  120. package/database/migrations/20260109144735_add_done_tasks_table.d.ts +0 -11
  121. package/database/migrations/20260109144735_add_done_tasks_table.d.ts.map +0 -1
  122. package/database/migrations/20260109144735_add_done_tasks_table.js +0 -25
  123. package/database/migrations/20260109150837_add_start_tasks_table.d.ts +0 -11
  124. package/database/migrations/20260109150837_add_start_tasks_table.d.ts.map +0 -1
  125. package/database/migrations/20260109150837_add_start_tasks_table.js +0 -22
  126. package/database/migrations/20260109152114_add_way_tasks_table.d.ts +0 -11
  127. package/database/migrations/20260109152114_add_way_tasks_table.d.ts.map +0 -1
  128. package/database/migrations/20260109152114_add_way_tasks_table.js +0 -22
  129. package/database/migrations/20260218121500_create_jwt_revocations_table.d.ts +0 -7
  130. package/database/migrations/20260218121500_create_jwt_revocations_table.d.ts.map +0 -1
  131. package/database/migrations/20260218121500_create_jwt_revocations_table.js +0 -22
  132. package/database/migrations/20260222120000_add_kind_to_jwt_revocations_table.d.ts +0 -11
  133. package/database/migrations/20260222120000_add_kind_to_jwt_revocations_table.d.ts.map +0 -1
  134. package/database/migrations/20260222120000_add_kind_to_jwt_revocations_table.js +0 -20
  135. package/database/migrations/20260222123000_add_user_id_to_jwt_revocations_table.d.ts +0 -11
  136. package/database/migrations/20260222123000_add_user_id_to_jwt_revocations_table.d.ts.map +0 -1
  137. package/database/migrations/20260222123000_add_user_id_to_jwt_revocations_table.js +0 -20
  138. package/database/migrations/20260327112651_create_posts_table.d.ts +0 -11
  139. package/database/migrations/20260327112651_create_posts_table.d.ts.map +0 -1
  140. package/database/migrations/20260327112651_create_posts_table.js +0 -24
  141. package/database/seeders/DatabaseSeeder.d.ts +0 -5
  142. package/database/seeders/DatabaseSeeder.d.ts.map +0 -1
  143. package/database/seeders/DatabaseSeeder.js +0 -15
  144. package/database/seeders/UserSeeder.d.ts +0 -30
  145. package/database/seeders/UserSeeder.d.ts.map +0 -1
  146. package/database/seeders/UserSeeder.js +0 -97
  147. package/index.d.ts +0 -1
  148. package/index.js +0 -1
  149. package/packages/cache-redis/src/RedisProxyAdapter.d.ts +0 -6
  150. package/packages/cache-redis/src/RedisProxyAdapter.d.ts.map +0 -1
  151. package/packages/cache-redis/src/RedisProxyAdapter.js +0 -144
  152. package/packages/cache-redis/src/index.d.ts +0 -27
  153. package/packages/cache-redis/src/index.d.ts.map +0 -1
  154. package/packages/cache-redis/src/index.js +0 -153
  155. package/packages/db-d1/src/index.d.ts +0 -55
  156. package/packages/db-d1/src/index.d.ts.map +0 -1
  157. package/packages/db-d1/src/index.js +0 -118
  158. package/packages/db-d1/src/register.d.ts +0 -6
  159. package/packages/db-d1/src/register.d.ts.map +0 -1
  160. package/packages/db-d1/src/register.js +0 -8
  161. package/packages/db-mysql/src/common.d.ts +0 -7
  162. package/packages/db-mysql/src/common.d.ts.map +0 -1
  163. package/packages/db-mysql/src/common.js +0 -17
  164. package/packages/db-mysql/src/index.d.ts +0 -43
  165. package/packages/db-mysql/src/index.d.ts.map +0 -1
  166. package/packages/db-mysql/src/index.js +0 -265
  167. package/packages/db-mysql/src/register.d.ts +0 -6
  168. package/packages/db-mysql/src/register.d.ts.map +0 -1
  169. package/packages/db-mysql/src/register.js +0 -32
  170. package/packages/db-postgres/src/index.d.ts +0 -39
  171. package/packages/db-postgres/src/index.d.ts.map +0 -1
  172. package/packages/db-postgres/src/index.js +0 -179
  173. package/packages/db-postgres/src/register.d.ts +0 -6
  174. package/packages/db-postgres/src/register.d.ts.map +0 -1
  175. package/packages/db-postgres/src/register.js +0 -8
  176. package/packages/db-sqlite/src/index.d.ts +0 -9
  177. package/packages/db-sqlite/src/index.d.ts.map +0 -1
  178. package/packages/db-sqlite/src/index.js +0 -7
  179. package/packages/db-sqlite/src/register.d.ts +0 -6
  180. package/packages/db-sqlite/src/register.d.ts.map +0 -1
  181. package/packages/db-sqlite/src/register.js +0 -8
  182. package/packages/db-sqlserver/src/index.d.ts +0 -38
  183. package/packages/db-sqlserver/src/index.d.ts.map +0 -1
  184. package/packages/db-sqlserver/src/index.js +0 -73
  185. package/packages/db-sqlserver/src/register.d.ts +0 -6
  186. package/packages/db-sqlserver/src/register.d.ts.map +0 -1
  187. package/packages/db-sqlserver/src/register.js +0 -21
  188. package/packages/mail-sendgrid/src/register.d.ts +0 -6
  189. package/packages/mail-sendgrid/src/register.d.ts.map +0 -1
  190. package/packages/mail-sendgrid/src/register.js +0 -24
  191. package/packages/mail-smtp/src/register.d.ts +0 -6
  192. package/packages/mail-smtp/src/register.d.ts.map +0 -1
  193. package/packages/mail-smtp/src/register.js +0 -29
  194. package/packages/queue-monitor/src/QueueMonitoringService.d.ts +0 -35
  195. package/packages/queue-monitor/src/QueueMonitoringService.d.ts.map +0 -1
  196. package/packages/queue-monitor/src/QueueMonitoringService.js +0 -194
  197. package/packages/queue-monitor/src/connection.d.ts +0 -3
  198. package/packages/queue-monitor/src/connection.d.ts.map +0 -1
  199. package/packages/queue-monitor/src/connection.js +0 -1
  200. package/packages/queue-monitor/src/dashboard-ui.d.ts +0 -7
  201. package/packages/queue-monitor/src/dashboard-ui.d.ts.map +0 -1
  202. package/packages/queue-monitor/src/dashboard-ui.js +0 -997
  203. package/packages/queue-monitor/src/driver.d.ts +0 -15
  204. package/packages/queue-monitor/src/driver.d.ts.map +0 -1
  205. package/packages/queue-monitor/src/driver.js +0 -115
  206. package/packages/queue-monitor/src/index.d.ts +0 -71
  207. package/packages/queue-monitor/src/index.d.ts.map +0 -1
  208. package/packages/queue-monitor/src/index.js +0 -296
  209. package/packages/queue-monitor/src/metrics.d.ts +0 -27
  210. package/packages/queue-monitor/src/metrics.d.ts.map +0 -1
  211. package/packages/queue-monitor/src/metrics.js +0 -92
  212. package/packages/queue-monitor/src/worker.d.ts +0 -8
  213. package/packages/queue-monitor/src/worker.d.ts.map +0 -1
  214. package/packages/queue-monitor/src/worker.js +0 -35
  215. package/packages/queue-redis/src/BullMQRedisQueue.d.ts +0 -26
  216. package/packages/queue-redis/src/BullMQRedisQueue.d.ts.map +0 -1
  217. package/packages/queue-redis/src/BullMQRedisQueue.js +0 -465
  218. package/packages/queue-redis/src/HttpQueueDriver.d.ts +0 -18
  219. package/packages/queue-redis/src/HttpQueueDriver.d.ts.map +0 -1
  220. package/packages/queue-redis/src/HttpQueueDriver.js +0 -249
  221. package/packages/queue-redis/src/QueueHttpGateway.d.ts +0 -16
  222. package/packages/queue-redis/src/QueueHttpGateway.d.ts.map +0 -1
  223. package/packages/queue-redis/src/QueueHttpGateway.js +0 -217
  224. package/packages/queue-redis/src/RedisPublishClient.d.ts +0 -14
  225. package/packages/queue-redis/src/RedisPublishClient.d.ts.map +0 -1
  226. package/packages/queue-redis/src/RedisPublishClient.js +0 -251
  227. package/packages/queue-redis/src/index.d.ts +0 -12
  228. package/packages/queue-redis/src/index.d.ts.map +0 -1
  229. package/packages/queue-redis/src/index.js +0 -10
  230. package/packages/queue-redis/src/register.d.ts +0 -6
  231. package/packages/queue-redis/src/register.d.ts.map +0 -1
  232. package/packages/queue-redis/src/register.js +0 -21
  233. package/packages/workers/migrations/20260119100000_create_zintrust_workers_table.d.ts +0 -11
  234. package/packages/workers/migrations/20260119100000_create_zintrust_workers_table.d.ts.map +0 -1
  235. package/packages/workers/migrations/20260119100000_create_zintrust_workers_table.js +0 -32
  236. package/packages/workers/migrations/20260123180000_create_queue_jobs_table.d.ts +0 -11
  237. package/packages/workers/migrations/20260123180000_create_queue_jobs_table.d.ts.map +0 -1
  238. package/packages/workers/migrations/20260123180000_create_queue_jobs_table.js +0 -46
  239. package/packages/workers/migrations/20260213142000_create_zintrust_job_tracking_tables.d.ts +0 -7
  240. package/packages/workers/migrations/20260213142000_create_zintrust_job_tracking_tables.d.ts.map +0 -1
  241. package/packages/workers/migrations/20260213142000_create_zintrust_job_tracking_tables.js +0 -44
  242. package/packages/workers/migrations/20260213183000_expand_zintrust_job_tracking_reliability_tables.d.ts +0 -7
  243. package/packages/workers/migrations/20260213183000_expand_zintrust_job_tracking_reliability_tables.d.ts.map +0 -1
  244. package/packages/workers/migrations/20260213183000_expand_zintrust_job_tracking_reliability_tables.js +0 -104
  245. package/packages/workers/src/AnomalyDetection.d.ts +0 -107
  246. package/packages/workers/src/AnomalyDetection.d.ts.map +0 -1
  247. package/packages/workers/src/AnomalyDetection.js +0 -329
  248. package/packages/workers/src/AutoScaler.d.ts +0 -128
  249. package/packages/workers/src/AutoScaler.d.ts.map +0 -1
  250. package/packages/workers/src/AutoScaler.js +0 -425
  251. package/packages/workers/src/BroadcastWorker.d.ts +0 -29
  252. package/packages/workers/src/BroadcastWorker.d.ts.map +0 -1
  253. package/packages/workers/src/BroadcastWorker.js +0 -24
  254. package/packages/workers/src/CanaryController.d.ts +0 -104
  255. package/packages/workers/src/CanaryController.d.ts.map +0 -1
  256. package/packages/workers/src/CanaryController.js +0 -424
  257. package/packages/workers/src/ChaosEngineering.d.ts +0 -80
  258. package/packages/workers/src/ChaosEngineering.d.ts.map +0 -1
  259. package/packages/workers/src/ChaosEngineering.js +0 -229
  260. package/packages/workers/src/CircuitBreaker.d.ts +0 -107
  261. package/packages/workers/src/CircuitBreaker.d.ts.map +0 -1
  262. package/packages/workers/src/CircuitBreaker.js +0 -374
  263. package/packages/workers/src/ClusterLock.d.ts +0 -91
  264. package/packages/workers/src/ClusterLock.d.ts.map +0 -1
  265. package/packages/workers/src/ClusterLock.js +0 -397
  266. package/packages/workers/src/ComplianceManager.d.ts +0 -178
  267. package/packages/workers/src/ComplianceManager.d.ts.map +0 -1
  268. package/packages/workers/src/ComplianceManager.js +0 -556
  269. package/packages/workers/src/DatacenterOrchestrator.d.ts +0 -134
  270. package/packages/workers/src/DatacenterOrchestrator.d.ts.map +0 -1
  271. package/packages/workers/src/DatacenterOrchestrator.js +0 -404
  272. package/packages/workers/src/DeadLetterQueue.d.ts +0 -123
  273. package/packages/workers/src/DeadLetterQueue.d.ts.map +0 -1
  274. package/packages/workers/src/DeadLetterQueue.js +0 -544
  275. package/packages/workers/src/HealthMonitor.d.ts +0 -43
  276. package/packages/workers/src/HealthMonitor.d.ts.map +0 -1
  277. package/packages/workers/src/HealthMonitor.js +0 -312
  278. package/packages/workers/src/MultiQueueWorker.d.ts +0 -90
  279. package/packages/workers/src/MultiQueueWorker.d.ts.map +0 -1
  280. package/packages/workers/src/MultiQueueWorker.js +0 -282
  281. package/packages/workers/src/NotificationWorker.d.ts +0 -29
  282. package/packages/workers/src/NotificationWorker.d.ts.map +0 -1
  283. package/packages/workers/src/NotificationWorker.js +0 -23
  284. package/packages/workers/src/Observability.d.ts +0 -154
  285. package/packages/workers/src/Observability.d.ts.map +0 -1
  286. package/packages/workers/src/Observability.js +0 -538
  287. package/packages/workers/src/PluginManager.d.ts +0 -124
  288. package/packages/workers/src/PluginManager.d.ts.map +0 -1
  289. package/packages/workers/src/PluginManager.js +0 -392
  290. package/packages/workers/src/PriorityQueue.d.ts +0 -118
  291. package/packages/workers/src/PriorityQueue.d.ts.map +0 -1
  292. package/packages/workers/src/PriorityQueue.js +0 -276
  293. package/packages/workers/src/ResourceMonitor.d.ts +0 -165
  294. package/packages/workers/src/ResourceMonitor.d.ts.map +0 -1
  295. package/packages/workers/src/ResourceMonitor.js +0 -632
  296. package/packages/workers/src/SLAMonitor.d.ts +0 -111
  297. package/packages/workers/src/SLAMonitor.d.ts.map +0 -1
  298. package/packages/workers/src/SLAMonitor.js +0 -274
  299. package/packages/workers/src/WorkerFactory.d.ts +0 -226
  300. package/packages/workers/src/WorkerFactory.d.ts.map +0 -1
  301. package/packages/workers/src/WorkerFactory.js +0 -2551
  302. package/packages/workers/src/WorkerInit.d.ts +0 -103
  303. package/packages/workers/src/WorkerInit.d.ts.map +0 -1
  304. package/packages/workers/src/WorkerInit.js +0 -359
  305. package/packages/workers/src/WorkerMetrics.d.ts +0 -116
  306. package/packages/workers/src/WorkerMetrics.d.ts.map +0 -1
  307. package/packages/workers/src/WorkerMetrics.js +0 -570
  308. package/packages/workers/src/WorkerRegistry.d.ts +0 -152
  309. package/packages/workers/src/WorkerRegistry.d.ts.map +0 -1
  310. package/packages/workers/src/WorkerRegistry.js +0 -396
  311. package/packages/workers/src/WorkerShutdown.d.ts +0 -70
  312. package/packages/workers/src/WorkerShutdown.d.ts.map +0 -1
  313. package/packages/workers/src/WorkerShutdown.js +0 -185
  314. package/packages/workers/src/WorkerVersioning.d.ts +0 -108
  315. package/packages/workers/src/WorkerVersioning.d.ts.map +0 -1
  316. package/packages/workers/src/WorkerVersioning.js +0 -300
  317. package/packages/workers/src/config/workerConfig.d.ts +0 -5
  318. package/packages/workers/src/config/workerConfig.d.ts.map +0 -1
  319. package/packages/workers/src/config/workerConfig.js +0 -25
  320. package/packages/workers/src/createQueueWorker.d.ts +0 -31
  321. package/packages/workers/src/createQueueWorker.d.ts.map +0 -1
  322. package/packages/workers/src/createQueueWorker.js +0 -382
  323. package/packages/workers/src/dashboard/index.d.ts +0 -2
  324. package/packages/workers/src/dashboard/index.d.ts.map +0 -1
  325. package/packages/workers/src/dashboard/index.js +0 -1
  326. package/packages/workers/src/dashboard/types.d.ts +0 -123
  327. package/packages/workers/src/dashboard/types.d.ts.map +0 -1
  328. package/packages/workers/src/dashboard/types.js +0 -1
  329. package/packages/workers/src/dashboard/workers-api.d.ts +0 -5
  330. package/packages/workers/src/dashboard/workers-api.d.ts.map +0 -1
  331. package/packages/workers/src/dashboard/workers-api.js +0 -776
  332. package/packages/workers/src/helper/index.d.ts +0 -6
  333. package/packages/workers/src/helper/index.d.ts.map +0 -1
  334. package/packages/workers/src/helper/index.js +0 -10
  335. package/packages/workers/src/http/WorkerApiController.d.ts +0 -39
  336. package/packages/workers/src/http/WorkerApiController.d.ts.map +0 -1
  337. package/packages/workers/src/http/WorkerApiController.js +0 -313
  338. package/packages/workers/src/http/WorkerController.d.ts +0 -375
  339. package/packages/workers/src/http/WorkerController.d.ts.map +0 -1
  340. package/packages/workers/src/http/WorkerController.js +0 -1454
  341. package/packages/workers/src/http/WorkerMonitoringService.d.ts +0 -12
  342. package/packages/workers/src/http/WorkerMonitoringService.d.ts.map +0 -1
  343. package/packages/workers/src/http/WorkerMonitoringService.js +0 -89
  344. package/packages/workers/src/http/middleware/CustomValidation.d.ts +0 -93
  345. package/packages/workers/src/http/middleware/CustomValidation.d.ts.map +0 -1
  346. package/packages/workers/src/http/middleware/CustomValidation.js +0 -270
  347. package/packages/workers/src/http/middleware/DatacenterValidator.d.ts +0 -4
  348. package/packages/workers/src/http/middleware/DatacenterValidator.d.ts.map +0 -1
  349. package/packages/workers/src/http/middleware/DatacenterValidator.js +0 -94
  350. package/packages/workers/src/http/middleware/EditWorkerValidation.d.ts +0 -8
  351. package/packages/workers/src/http/middleware/EditWorkerValidation.d.ts.map +0 -1
  352. package/packages/workers/src/http/middleware/EditWorkerValidation.js +0 -56
  353. package/packages/workers/src/http/middleware/FeaturesValidator.d.ts +0 -4
  354. package/packages/workers/src/http/middleware/FeaturesValidator.d.ts.map +0 -1
  355. package/packages/workers/src/http/middleware/FeaturesValidator.js +0 -61
  356. package/packages/workers/src/http/middleware/InfrastructureValidator.d.ts +0 -32
  357. package/packages/workers/src/http/middleware/InfrastructureValidator.d.ts.map +0 -1
  358. package/packages/workers/src/http/middleware/InfrastructureValidator.js +0 -226
  359. package/packages/workers/src/http/middleware/OptionsValidator.d.ts +0 -4
  360. package/packages/workers/src/http/middleware/OptionsValidator.d.ts.map +0 -1
  361. package/packages/workers/src/http/middleware/OptionsValidator.js +0 -112
  362. package/packages/workers/src/http/middleware/PayloadSanitizer.d.ts +0 -8
  363. package/packages/workers/src/http/middleware/PayloadSanitizer.d.ts.map +0 -1
  364. package/packages/workers/src/http/middleware/PayloadSanitizer.js +0 -42
  365. package/packages/workers/src/http/middleware/ProcessorPathSanitizer.d.ts +0 -4
  366. package/packages/workers/src/http/middleware/ProcessorPathSanitizer.d.ts.map +0 -1
  367. package/packages/workers/src/http/middleware/ProcessorPathSanitizer.js +0 -140
  368. package/packages/workers/src/http/middleware/QueueNameSanitizer.d.ts +0 -4
  369. package/packages/workers/src/http/middleware/QueueNameSanitizer.d.ts.map +0 -1
  370. package/packages/workers/src/http/middleware/QueueNameSanitizer.js +0 -45
  371. package/packages/workers/src/http/middleware/ValidateDriver.d.ts +0 -8
  372. package/packages/workers/src/http/middleware/ValidateDriver.d.ts.map +0 -1
  373. package/packages/workers/src/http/middleware/ValidateDriver.js +0 -20
  374. package/packages/workers/src/http/middleware/VersionSanitizer.d.ts +0 -4
  375. package/packages/workers/src/http/middleware/VersionSanitizer.d.ts.map +0 -1
  376. package/packages/workers/src/http/middleware/VersionSanitizer.js +0 -25
  377. package/packages/workers/src/http/middleware/WorkerNameSanitizer.d.ts +0 -4
  378. package/packages/workers/src/http/middleware/WorkerNameSanitizer.d.ts.map +0 -1
  379. package/packages/workers/src/http/middleware/WorkerNameSanitizer.js +0 -46
  380. package/packages/workers/src/http/middleware/WorkerValidationChain.d.ts +0 -28
  381. package/packages/workers/src/http/middleware/WorkerValidationChain.d.ts.map +0 -1
  382. package/packages/workers/src/http/middleware/WorkerValidationChain.js +0 -186
  383. package/packages/workers/src/index.d.ts +0 -47
  384. package/packages/workers/src/index.d.ts.map +0 -1
  385. package/packages/workers/src/index.js +0 -48
  386. package/packages/workers/src/register.d.ts +0 -10
  387. package/packages/workers/src/register.d.ts.map +0 -1
  388. package/packages/workers/src/register.js +0 -43
  389. package/packages/workers/src/routes/workers.d.ts +0 -13
  390. package/packages/workers/src/routes/workers.d.ts.map +0 -1
  391. package/packages/workers/src/routes/workers.js +0 -126
  392. package/packages/workers/src/storage/WorkerStore.d.ts +0 -52
  393. package/packages/workers/src/storage/WorkerStore.d.ts.map +0 -1
  394. package/packages/workers/src/storage/WorkerStore.js +0 -259
  395. package/packages/workers/src/telemetry/api/TelemetryAPI.d.ts +0 -47
  396. package/packages/workers/src/telemetry/api/TelemetryAPI.d.ts.map +0 -1
  397. package/packages/workers/src/telemetry/api/TelemetryAPI.js +0 -219
  398. package/packages/workers/src/telemetry/api/TelemetryMonitoringService.d.ts +0 -18
  399. package/packages/workers/src/telemetry/api/TelemetryMonitoringService.d.ts.map +0 -1
  400. package/packages/workers/src/telemetry/api/TelemetryMonitoringService.js +0 -140
  401. package/packages/workers/src/telemetry/components/AlertPanel.d.ts +0 -2
  402. package/packages/workers/src/telemetry/components/AlertPanel.d.ts.map +0 -1
  403. package/packages/workers/src/telemetry/components/AlertPanel.js +0 -13
  404. package/packages/workers/src/telemetry/components/CostTracking.d.ts +0 -2
  405. package/packages/workers/src/telemetry/components/CostTracking.d.ts.map +0 -1
  406. package/packages/workers/src/telemetry/components/CostTracking.js +0 -14
  407. package/packages/workers/src/telemetry/components/ResourceUsageChart.d.ts +0 -2
  408. package/packages/workers/src/telemetry/components/ResourceUsageChart.d.ts.map +0 -1
  409. package/packages/workers/src/telemetry/components/ResourceUsageChart.js +0 -11
  410. package/packages/workers/src/telemetry/components/WorkerHealthChart.d.ts +0 -2
  411. package/packages/workers/src/telemetry/components/WorkerHealthChart.d.ts.map +0 -1
  412. package/packages/workers/src/telemetry/components/WorkerHealthChart.js +0 -11
  413. package/packages/workers/src/telemetry/index.d.ts +0 -16
  414. package/packages/workers/src/telemetry/index.d.ts.map +0 -1
  415. package/packages/workers/src/telemetry/index.js +0 -60
  416. package/packages/workers/src/telemetry/routes/dashboard.d.ts +0 -7
  417. package/packages/workers/src/telemetry/routes/dashboard.d.ts.map +0 -1
  418. package/packages/workers/src/telemetry/routes/dashboard.js +0 -608
  419. package/packages/workers/src/type.d.ts +0 -77
  420. package/packages/workers/src/type.d.ts.map +0 -1
  421. package/packages/workers/src/type.js +0 -1
  422. package/packages/workers/src/ui/router/EmbeddedAssets.d.ts +0 -5
  423. package/packages/workers/src/ui/router/EmbeddedAssets.d.ts.map +0 -1
  424. package/packages/workers/src/ui/router/EmbeddedAssets.js +0 -13
  425. package/packages/workers/src/ui/router/ui.d.ts +0 -4
  426. package/packages/workers/src/ui/router/ui.d.ts.map +0 -1
  427. package/packages/workers/src/ui/router/ui.js +0 -208
  428. package/packages/workers/src/ui/types/worker-ui.d.ts +0 -230
  429. package/packages/workers/src/ui/types/worker-ui.d.ts.map +0 -1
  430. package/packages/workers/src/ui/types/worker-ui.js +0 -5
  431. package/routes/DirectTestRoutes.d.ts +0 -25
  432. package/routes/DirectTestRoutes.d.ts.map +0 -1
  433. package/routes/DirectTestRoutes.js +0 -480
  434. package/routes/TestRoutes.d.ts +0 -11
  435. package/routes/TestRoutes.d.ts.map +0 -1
  436. package/routes/TestRoutes.js +0 -25
  437. package/routes/api.d.ts +0 -7
  438. package/routes/api.d.ts.map +0 -1
  439. package/routes/api.js +0 -136
  440. package/routes/apiDev.d.ts +0 -7
  441. package/routes/apiDev.d.ts.map +0 -1
  442. package/routes/apiDev.js +0 -92
  443. package/routes/broadcast.d.ts +0 -9
  444. package/routes/broadcast.d.ts.map +0 -1
  445. package/routes/broadcast.js +0 -27
  446. package/routes/mail.d.ts +0 -12
  447. package/routes/mail.d.ts.map +0 -1
  448. package/routes/mail.js +0 -138
  449. package/routes/storage.d.ts +0 -4
  450. package/routes/storage.d.ts.map +0 -1
  451. package/routes/storage.js +0 -35
  452. package/start.d.ts +0 -1
  453. package/start.js +0 -1
@@ -1,570 +0,0 @@
1
- /**
2
- * Worker Metrics Manager
3
- * Time-series metrics persistence with Redis Sorted Sets
4
- * Sealed namespace for immutability
5
- */
6
- import { ErrorFactory, Logger, RedisKeys, createRedisConnection, } from '../../../src/index.js';
7
- // Retention periods (in seconds)
8
- const RETENTION = {
9
- hourly: 7 * 24 * 60 * 60, // 7 days
10
- daily: 30 * 24 * 60 * 60, // 30 days
11
- monthly: 365 * 24 * 60 * 60, // 1 year
12
- };
13
- const runInBatches = async (items, handler, batchSize = 10) => {
14
- for (let i = 0; i < items.length; i += batchSize) {
15
- const batch = items.slice(i, i + batchSize);
16
- // Batch processing is intentionally sequential to avoid overwhelming the system
17
- // eslint-disable-next-line no-await-in-loop
18
- await Promise.all(batch.map((item) => handler(item)));
19
- }
20
- };
21
- // Internal state
22
- let redisClient = null;
23
- let cachedConfig = null;
24
- let keepLoggin = 0;
25
- /**
26
- * Helper: Get valid Redis client
27
- */
28
- const getValidClient = async () => {
29
- if (!cachedConfig) {
30
- throw ErrorFactory.createWorkerError('WorkerMetrics not initialized. Call initialize() first.');
31
- }
32
- // If no client, create one
33
- if (!redisClient) {
34
- redisClient = createRedisConnection(cachedConfig);
35
- }
36
- const client = redisClient;
37
- if (!client) {
38
- throw ErrorFactory.createConnectionError('Failed to initialize Redis client');
39
- }
40
- return client;
41
- };
42
- /**
43
- * Helper: Get Redis key for metrics
44
- * Uses singleton RedisKeys for consistent key management
45
- */
46
- const getMetricsKey = (workerName, metricType, granularity) => {
47
- return RedisKeys.createMetricsKey(workerName, metricType, granularity);
48
- };
49
- /**
50
- * Helper: Get Redis key for health scores
51
- * Uses singleton RedisKeys for consistent key management
52
- */
53
- const getHealthKey = (workerName) => {
54
- return RedisKeys.createHealthKey(workerName);
55
- };
56
- /**
57
- * Helper: Round timestamp to granularity
58
- */
59
- const roundTimestamp = (date, granularity) => {
60
- const timestamp = date.getTime();
61
- switch (granularity) {
62
- case 'hourly':
63
- // Round to nearest hour
64
- return new Date(Math.floor(timestamp / (60 * 60 * 1000)) * 60 * 60 * 1000);
65
- case 'daily': {
66
- // Round to start of day (UTC)
67
- const d = new Date(timestamp);
68
- d.setUTCHours(0, 0, 0, 0);
69
- return d;
70
- }
71
- case 'monthly': {
72
- // Round to start of month (UTC)
73
- const m = new Date(timestamp);
74
- m.setUTCDate(1);
75
- m.setUTCHours(0, 0, 0, 0);
76
- return m;
77
- }
78
- }
79
- };
80
- /**
81
- * Helper: Clean up old metrics based on retention policy
82
- */
83
- const cleanupOldMetrics = async (client, key, granularity) => {
84
- try {
85
- const retentionSeconds = RETENTION[granularity];
86
- const cutoffTimestamp = Date.now() - retentionSeconds * 1000;
87
- // Remove entries older than retention period
88
- await client.zremrangebyscore(key, '-inf', cutoffTimestamp);
89
- // Set expiry on the key (2x retention period for safety)
90
- await client.expire(key, retentionSeconds * 2);
91
- }
92
- catch (error) {
93
- Logger.error(`Failed to cleanup old metrics for key "${key}"`, error);
94
- }
95
- };
96
- /**
97
- * Helper: Calculate health score based on metrics
98
- */
99
- const calculateHealthScore = (metrics) => {
100
- // Error rate factor (0-100, lower is better)
101
- // 0% errors = 100, 10%+ errors = 0
102
- const errorRateFactor = Math.max(0, 100 - metrics.errorRate * 1000);
103
- // Throughput factor (0-100, higher is better)
104
- // Normalized: >100 jobs/min = 100, 0 jobs/min = 0
105
- const throughputFactor = Math.min(100, metrics.throughput);
106
- // Latency factor (0-100, lower is better)
107
- // <1s = 100, >10s = 0
108
- const latencyFactor = Math.max(0, 100 - (metrics.avgDuration / 10000) * 100);
109
- // Resource usage factor (0-100, lower is better)
110
- // <50% = 100, >90% = 0
111
- const avgResourceUsage = (metrics.memoryUsage + metrics.cpuUsage) / 2;
112
- const resourceFactor = Math.max(0, 100 - Math.max(0, avgResourceUsage - 50) * 2.5);
113
- // Weighted average: errors are most important
114
- const score = errorRateFactor * 0.4 + throughputFactor * 0.2 + latencyFactor * 0.2 + resourceFactor * 0.2;
115
- let status;
116
- if (score >= 80) {
117
- status = 'healthy';
118
- }
119
- else if (score >= 50) {
120
- status = 'degraded';
121
- }
122
- else {
123
- status = 'unhealthy';
124
- }
125
- return {
126
- score: Math.round(score),
127
- status,
128
- factors: {
129
- errorRate: Math.round(errorRateFactor),
130
- throughput: Math.round(throughputFactor),
131
- latency: Math.round(latencyFactor),
132
- resourceUsage: Math.round(resourceFactor),
133
- },
134
- };
135
- };
136
- /**
137
- * Helper: Create empty metrics result for error cases
138
- */
139
- const createEmptyMetrics = (options, defaultStartDate) => ({
140
- workerName: options.workerName,
141
- metricType: options.metricType,
142
- period: {
143
- start: options.startDate ?? defaultStartDate ?? new Date(),
144
- end: options.endDate ?? new Date(),
145
- },
146
- total: 0,
147
- average: 0,
148
- min: 0,
149
- max: 0,
150
- count: 0,
151
- });
152
- /**
153
- * Helper: Handle uninitialized Redis client
154
- */
155
- const handleUninitializedMetrics = (optionsList) => {
156
- if (keepLoggin === 0) {
157
- keepLoggin = 1;
158
- Logger.warn(`[METRICS] WorkerMetrics not initialized globally. Make sure all workers running`);
159
- }
160
- return optionsList.map((options) => createEmptyMetrics(options));
161
- };
162
- /**
163
- * Helper: Build Redis pipeline for batch metrics query
164
- */
165
- const buildMetricsPipeline = (client, optionsList) => {
166
- const pipeline = client.pipeline();
167
- for (const options of optionsList) {
168
- const { workerName, metricType, granularity, startDate, endDate, limit = 1000 } = options;
169
- const key = getMetricsKey(workerName, metricType, granularity);
170
- const minScore = startDate ? startDate.getTime() : '-inf';
171
- const maxScore = endDate ? endDate.getTime() : '+inf';
172
- pipeline.zrangebyscore(key, minScore, maxScore, 'LIMIT', 0, limit);
173
- }
174
- return pipeline;
175
- };
176
- /**
177
- * Helper: Process batch results and calculate aggregations
178
- */
179
- const processBatchResults = (optionsList, results) => {
180
- return optionsList.map((options, index) => {
181
- const [err, data] = results[index];
182
- if (err) {
183
- Logger.error(`Error querying metrics for ${options.workerName}/${options.metricType}`, err);
184
- return createEmptyMetrics(options);
185
- }
186
- const points = data.map((d) => JSON.parse(d));
187
- if (points.length === 0) {
188
- return createEmptyMetrics(options, new Date(0));
189
- }
190
- const values = points.map((p) => p.value);
191
- const total = values.reduce((sum, val) => sum + val, 0);
192
- const average = total / values.length;
193
- const min = Math.min(...values);
194
- const max = Math.max(...values);
195
- return {
196
- workerName: options.workerName,
197
- metricType: options.metricType,
198
- period: {
199
- start: points[0].timestamp,
200
- end: points.at(-1)?.timestamp ?? new Date(),
201
- },
202
- total,
203
- average,
204
- min,
205
- max,
206
- count: values.length,
207
- };
208
- });
209
- };
210
- /**
211
- * Worker Metrics Manager - Sealed namespace
212
- */
213
- const WorkerMetrics = Object.freeze({
214
- /**
215
- * Initialize the metrics manager with Redis connection
216
- */
217
- initialize(config) {
218
- if (redisClient) {
219
- Logger.warn('WorkerMetrics already initialized');
220
- return;
221
- }
222
- cachedConfig = config;
223
- redisClient = createRedisConnection(config);
224
- Logger.info('WorkerMetrics initialized');
225
- },
226
- /**
227
- * Record a metric point
228
- */
229
- async record(workerName, metricType, value, metadata) {
230
- const client = await getValidClient();
231
- const now = new Date();
232
- // Record at all granularities
233
- const granularities = ['hourly', 'daily', 'monthly'];
234
- await Promise.all(granularities.map(async (granularity) => {
235
- const roundedTimestamp = roundTimestamp(now, granularity);
236
- const key = getMetricsKey(workerName, metricType, granularity);
237
- const point = {
238
- timestamp: roundedTimestamp,
239
- value,
240
- metadata,
241
- };
242
- // Store in sorted set with timestamp as score
243
- const score = roundedTimestamp.getTime();
244
- const data = JSON.stringify(point);
245
- await client.zadd(key, score, data);
246
- // Cleanup old metrics (lightweight: ~1% based on time slice)
247
- if (Date.now() % 100 === 0) {
248
- cleanupOldMetrics(client, key, granularity).catch((err) => {
249
- Logger.error('Failed to cleanup old metrics', err);
250
- });
251
- }
252
- }));
253
- Logger.debug(`Recorded metric: ${workerName}/${metricType} = ${value}`);
254
- },
255
- /**
256
- * Record multiple metrics at once (batch operation)
257
- */
258
- async recordBatch(workerName, metrics) {
259
- await runInBatches(metrics, async (m) => {
260
- await WorkerMetrics.record(workerName, m.metricType, m.value, m.metadata);
261
- });
262
- },
263
- /**
264
- * Query metrics for a time range
265
- */
266
- async query(options) {
267
- if (!cachedConfig) {
268
- Logger.warn(`[METRICS] WorkerMetrics not initialized for worker: ${options.workerName}. Please start the worker first to enable metrics collection.`);
269
- return {
270
- workerName: options.workerName,
271
- metricType: options.metricType,
272
- granularity: options.granularity,
273
- points: [],
274
- };
275
- }
276
- const { workerName, metricType, granularity, startDate, endDate, limit = 1000 } = options;
277
- const key = getMetricsKey(workerName, metricType, granularity);
278
- const minScore = startDate ? startDate.getTime() : '-inf';
279
- const maxScore = endDate ? endDate.getTime() : '+inf';
280
- try {
281
- const client = await getValidClient();
282
- // Get data from sorted set
283
- const results = await client.zrangebyscore(key, minScore, maxScore, 'LIMIT', 0, limit);
284
- const points = results.map((data) => JSON.parse(data));
285
- return {
286
- workerName,
287
- metricType,
288
- granularity,
289
- points,
290
- };
291
- }
292
- catch (error) {
293
- Logger.error(`Error querying metrics for ${workerName}/${metricType}`, error);
294
- throw error;
295
- }
296
- },
297
- /**
298
- * Get aggregated metrics for a time range
299
- */
300
- async aggregate(options) {
301
- const entry = await WorkerMetrics.query(options);
302
- if (entry.points.length === 0) {
303
- return {
304
- workerName: entry.workerName,
305
- metricType: entry.metricType,
306
- period: {
307
- start: options.startDate ?? new Date(0),
308
- end: options.endDate ?? new Date(),
309
- },
310
- total: 0,
311
- average: 0,
312
- min: 0,
313
- max: 0,
314
- count: 0,
315
- };
316
- }
317
- const values = entry.points.map((p) => p.value);
318
- const total = values.reduce((sum, val) => sum + val, 0);
319
- const average = total / values.length;
320
- const min = Math.min(...values);
321
- const max = Math.max(...values);
322
- return {
323
- workerName: entry.workerName,
324
- metricType: entry.metricType,
325
- period: {
326
- start: entry.points[0].timestamp,
327
- end: entry.points.at(-1)?.timestamp ?? new Date(),
328
- },
329
- total,
330
- average,
331
- min,
332
- max,
333
- count: values.length,
334
- };
335
- },
336
- async aggregateBatch(optionsList) {
337
- if (!cachedConfig) {
338
- return handleUninitializedMetrics(optionsList);
339
- }
340
- if (optionsList.length === 0)
341
- return [];
342
- const client = await getValidClient();
343
- const pipeline = buildMetricsPipeline(client, optionsList);
344
- const results = await pipeline.exec();
345
- if (!results) {
346
- throw ErrorFactory.createWorkerError('Failed to execute metrics pipeline');
347
- }
348
- return processBatchResults(optionsList, results);
349
- },
350
- /**
351
- * Calculate and store health score
352
- */
353
- async calculateHealth(workerName) {
354
- const client = await getValidClient();
355
- const now = new Date();
356
- const oneHourAgo = new Date(now.getTime() - 60 * 60 * 1000);
357
- try {
358
- // Get recent metrics (last hour)
359
- const [processed, errors, duration, memory, cpu] = await Promise.all([
360
- WorkerMetrics.aggregate({
361
- workerName,
362
- metricType: 'processed',
363
- granularity: 'hourly',
364
- startDate: oneHourAgo,
365
- endDate: now,
366
- }),
367
- WorkerMetrics.aggregate({
368
- workerName,
369
- metricType: 'errors',
370
- granularity: 'hourly',
371
- startDate: oneHourAgo,
372
- endDate: now,
373
- }),
374
- WorkerMetrics.aggregate({
375
- workerName,
376
- metricType: 'duration',
377
- granularity: 'hourly',
378
- startDate: oneHourAgo,
379
- endDate: now,
380
- }),
381
- WorkerMetrics.aggregate({
382
- workerName,
383
- metricType: 'memory',
384
- granularity: 'hourly',
385
- startDate: oneHourAgo,
386
- endDate: now,
387
- }),
388
- WorkerMetrics.aggregate({
389
- workerName,
390
- metricType: 'cpu',
391
- granularity: 'hourly',
392
- startDate: oneHourAgo,
393
- endDate: now,
394
- }),
395
- ]);
396
- const totalJobs = processed.total + errors.total;
397
- const errorRate = totalJobs > 0 ? errors.total / totalJobs : 0;
398
- const throughput = processed.total; // Jobs in last hour
399
- const avgDuration = duration.average || 0;
400
- const memoryUsage = memory.average || 0;
401
- const cpuUsage = cpu.average || 0;
402
- const healthData = calculateHealthScore({
403
- errorRate,
404
- throughput,
405
- avgDuration,
406
- memoryUsage,
407
- cpuUsage,
408
- });
409
- const healthScore = {
410
- workerName,
411
- timestamp: now,
412
- score: healthData.score,
413
- factors: healthData.factors,
414
- status: healthData.status,
415
- };
416
- // Store health score in sorted set (keep last 24 hours)
417
- const key = getHealthKey(workerName);
418
- const score = now.getTime();
419
- const data = JSON.stringify(healthScore);
420
- await client.zadd(key, score, data);
421
- // Keep only last 24 hours
422
- const cutoff = now.getTime() - 24 * 60 * 60 * 1000;
423
- await client.zremrangebyscore(key, '-inf', cutoff);
424
- // Set expiry (48 hours)
425
- await client.expire(key, 48 * 60 * 60);
426
- Logger.debug(`Health score for ${workerName}: ${healthScore.score} (${healthScore.status})`);
427
- return healthScore;
428
- }
429
- catch (error) {
430
- Logger.error(`Error calculating health score for ${workerName}`, error);
431
- throw error;
432
- }
433
- },
434
- /**
435
- * Get recent health scores
436
- */
437
- async getHealthHistory(workerName, hours = 24) {
438
- try {
439
- const client = await getValidClient();
440
- const key = getHealthKey(workerName);
441
- const now = Date.now();
442
- const startTime = now - hours * 60 * 60 * 1000;
443
- const results = await client.zrangebyscore(key, startTime, now);
444
- return results.map((data) => JSON.parse(data));
445
- }
446
- catch (error) {
447
- Logger.error(`Error retrieving health history for ${workerName}`, error);
448
- return [];
449
- }
450
- },
451
- /**
452
- * Get latest health score
453
- */
454
- async getLatestHealth(workerName) {
455
- try {
456
- const client = await getValidClient();
457
- const key = getHealthKey(workerName);
458
- // Get the most recent entry
459
- const results = await client.zrevrange(key, 0, 0);
460
- if (results.length === 0) {
461
- return null;
462
- }
463
- return JSON.parse(results[0]);
464
- }
465
- catch (error) {
466
- Logger.error(`Error retrieving latest health for ${workerName}`, error);
467
- return null;
468
- }
469
- },
470
- /**
471
- * Get metrics summary for all workers
472
- */
473
- async getAllWorkersSummary() {
474
- try {
475
- const client = await getValidClient();
476
- // Find all unique worker names from health keys
477
- const pattern = `${RedisKeys.healthPrefix}*`;
478
- const keys = await client.keys(pattern);
479
- const workerNames = keys.map((key) => key.replace(RedisKeys.healthPrefix, ''));
480
- const summaries = await Promise.all(workerNames.map(async (workerName) => {
481
- const now = new Date();
482
- const oneHourAgo = new Date(now.getTime() - 60 * 60 * 1000);
483
- const [health, processed, errors] = await Promise.all([
484
- WorkerMetrics.getLatestHealth(workerName),
485
- WorkerMetrics.aggregate({
486
- workerName,
487
- metricType: 'processed',
488
- granularity: 'hourly',
489
- startDate: oneHourAgo,
490
- endDate: now,
491
- }),
492
- WorkerMetrics.aggregate({
493
- workerName,
494
- metricType: 'errors',
495
- granularity: 'hourly',
496
- startDate: oneHourAgo,
497
- endDate: now,
498
- }),
499
- ]);
500
- const totalJobs = processed.total + errors.total;
501
- const errorRate = totalJobs > 0 ? errors.total / totalJobs : 0;
502
- return {
503
- workerName,
504
- health,
505
- metrics: {
506
- processed: processed.total,
507
- errors: errors.total,
508
- errorRate,
509
- },
510
- };
511
- }));
512
- return summaries;
513
- }
514
- catch (error) {
515
- Logger.error('Error retrieving all workers summary', error);
516
- return [];
517
- }
518
- },
519
- /**
520
- * Delete all metrics for a worker
521
- */
522
- async deleteWorkerMetrics(workerName) {
523
- const client = await getValidClient();
524
- try {
525
- const pattern = `${RedisKeys.metricsPrefix}${workerName}:*`;
526
- const keys = await client.keys(pattern);
527
- if (keys.length > 0) {
528
- await client.del(...keys);
529
- }
530
- // Also delete health scores
531
- const healthKey = getHealthKey(workerName);
532
- await client.del(healthKey);
533
- Logger.info(`Deleted all metrics for worker "${workerName}"`);
534
- }
535
- catch (error) {
536
- Logger.error(`Error deleting metrics for worker "${workerName}"`, error);
537
- throw error;
538
- }
539
- },
540
- /**
541
- * Shutdown and disconnect
542
- */
543
- async shutdown() {
544
- if (!redisClient) {
545
- return;
546
- }
547
- Logger.info('WorkerMetrics shutting down...');
548
- // Detach client immediately to allow re-initialization
549
- const client = redisClient;
550
- redisClient = null;
551
- try {
552
- // Attempt graceful quit
553
- await client.quit();
554
- }
555
- catch (error) {
556
- // If graceful quit fails, force disconnect
557
- Logger.warn('WorkerMetrics graceful shutdown failed, forcing disconnect', error);
558
- try {
559
- client.disconnect();
560
- }
561
- catch (disconnectError) {
562
- Logger.error('WorkerMetrics forced disconnect failed', disconnectError);
563
- // Ignore disconnect errors
564
- }
565
- }
566
- Logger.info('WorkerMetrics shutdown complete');
567
- },
568
- });
569
- export { WorkerMetrics };
570
- // Graceful shutdown handled by WorkerShutdown