atomic-queues 1.6.2 → 2.0.0

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 (337) hide show
  1. package/README.md +182 -411
  2. package/dist/cli/generators/json-schema.d.ts +3 -0
  3. package/dist/cli/generators/json-schema.d.ts.map +1 -0
  4. package/dist/cli/generators/json-schema.js +31 -0
  5. package/dist/cli/generators/json-schema.js.map +1 -0
  6. package/dist/cli/generators/typescript.d.ts +3 -0
  7. package/dist/cli/generators/typescript.d.ts.map +1 -0
  8. package/dist/cli/generators/typescript.js +62 -0
  9. package/dist/cli/generators/typescript.js.map +1 -0
  10. package/dist/cli/index.d.ts +3 -0
  11. package/dist/cli/index.d.ts.map +1 -0
  12. package/dist/cli/index.js +156 -0
  13. package/dist/cli/index.js.map +1 -0
  14. package/dist/decorators/actor.decorators.d.ts +4 -0
  15. package/dist/decorators/actor.decorators.d.ts.map +1 -0
  16. package/dist/decorators/actor.decorators.js +32 -0
  17. package/dist/decorators/actor.decorators.js.map +1 -0
  18. package/dist/decorators/constants.d.ts +5 -12
  19. package/dist/decorators/constants.d.ts.map +1 -1
  20. package/dist/decorators/constants.js +10 -16
  21. package/dist/decorators/constants.js.map +1 -1
  22. package/dist/decorators/index.d.ts +4 -4
  23. package/dist/decorators/index.d.ts.map +1 -1
  24. package/dist/decorators/index.js +4 -4
  25. package/dist/decorators/index.js.map +1 -1
  26. package/dist/decorators/interfaces.d.ts +18 -78
  27. package/dist/decorators/interfaces.d.ts.map +1 -1
  28. package/dist/decorators/metadata-readers.d.ts +5 -26
  29. package/dist/decorators/metadata-readers.d.ts.map +1 -1
  30. package/dist/decorators/metadata-readers.js +16 -33
  31. package/dist/decorators/metadata-readers.js.map +1 -1
  32. package/dist/decorators/schema.decorators.d.ts +2 -0
  33. package/dist/decorators/schema.decorators.d.ts.map +1 -0
  34. package/dist/decorators/schema.decorators.js +13 -0
  35. package/dist/decorators/schema.decorators.js.map +1 -0
  36. package/dist/domain/interfaces/config.interfaces.d.ts +52 -153
  37. package/dist/domain/interfaces/config.interfaces.d.ts.map +1 -1
  38. package/dist/domain/interfaces/index.d.ts +0 -7
  39. package/dist/domain/interfaces/index.d.ts.map +1 -1
  40. package/dist/domain/interfaces/index.js +0 -7
  41. package/dist/domain/interfaces/index.js.map +1 -1
  42. package/dist/domain/interfaces/job.interfaces.d.ts +32 -65
  43. package/dist/domain/interfaces/job.interfaces.d.ts.map +1 -1
  44. package/dist/index.d.ts +0 -34
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +0 -39
  47. package/dist/index.js.map +1 -1
  48. package/dist/module/atomic-queues.module.d.ts +0 -83
  49. package/dist/module/atomic-queues.module.d.ts.map +1 -1
  50. package/dist/module/atomic-queues.module.js +35 -134
  51. package/dist/module/atomic-queues.module.js.map +1 -1
  52. package/dist/services/actor-registry/actor-registry.service.d.ts +30 -0
  53. package/dist/services/actor-registry/actor-registry.service.d.ts.map +1 -0
  54. package/dist/services/actor-registry/actor-registry.service.js +186 -0
  55. package/dist/services/actor-registry/actor-registry.service.js.map +1 -0
  56. package/dist/services/actor-registry/index.d.ts +2 -0
  57. package/dist/services/actor-registry/index.d.ts.map +1 -0
  58. package/dist/services/actor-registry/index.js +18 -0
  59. package/dist/services/actor-registry/index.js.map +1 -0
  60. package/dist/services/actor-system/actor-system.service.d.ts +19 -0
  61. package/dist/services/actor-system/actor-system.service.d.ts.map +1 -0
  62. package/dist/services/actor-system/actor-system.service.js +86 -0
  63. package/dist/services/actor-system/actor-system.service.js.map +1 -0
  64. package/dist/services/actor-system/index.d.ts +2 -0
  65. package/dist/services/actor-system/index.d.ts.map +1 -0
  66. package/dist/services/{cron-manager → actor-system}/index.js +1 -1
  67. package/dist/services/actor-system/index.js.map +1 -0
  68. package/dist/services/command-discovery/command-discovery.service.d.ts +6 -53
  69. package/dist/services/command-discovery/command-discovery.service.d.ts.map +1 -1
  70. package/dist/services/command-discovery/command-discovery.service.js +0 -59
  71. package/dist/services/command-discovery/command-discovery.service.js.map +1 -1
  72. package/dist/services/constants.d.ts +2 -9
  73. package/dist/services/constants.d.ts.map +1 -1
  74. package/dist/services/constants.js +3 -10
  75. package/dist/services/constants.js.map +1 -1
  76. package/dist/services/executor-pool/executor-pool.service.d.ts +31 -0
  77. package/dist/services/executor-pool/executor-pool.service.d.ts.map +1 -0
  78. package/dist/services/executor-pool/executor-pool.service.js +147 -0
  79. package/dist/services/executor-pool/executor-pool.service.js.map +1 -0
  80. package/dist/services/executor-pool/index.d.ts +2 -0
  81. package/dist/services/executor-pool/index.d.ts.map +1 -0
  82. package/dist/services/{queue-manager → executor-pool}/index.js +1 -1
  83. package/dist/services/executor-pool/index.js.map +1 -0
  84. package/dist/services/gate/gate.service.d.ts +17 -0
  85. package/dist/services/gate/gate.service.d.ts.map +1 -0
  86. package/dist/services/gate/gate.service.js +66 -0
  87. package/dist/services/gate/gate.service.js.map +1 -0
  88. package/dist/services/gate/index.d.ts +2 -0
  89. package/dist/services/gate/index.d.ts.map +1 -0
  90. package/dist/services/{spawn-queue → gate}/index.js +1 -1
  91. package/dist/services/gate/index.js.map +1 -0
  92. package/dist/services/handler-executor/handler-executor.service.d.ts +32 -0
  93. package/dist/services/handler-executor/handler-executor.service.d.ts.map +1 -0
  94. package/dist/services/handler-executor/handler-executor.service.js +186 -0
  95. package/dist/services/handler-executor/handler-executor.service.js.map +1 -0
  96. package/dist/services/handler-executor/index.d.ts +2 -0
  97. package/dist/services/handler-executor/index.d.ts.map +1 -0
  98. package/dist/services/handler-executor/index.js +18 -0
  99. package/dist/services/handler-executor/index.js.map +1 -0
  100. package/dist/services/index.d.ts +11 -12
  101. package/dist/services/index.d.ts.map +1 -1
  102. package/dist/services/index.js +11 -12
  103. package/dist/services/index.js.map +1 -1
  104. package/dist/services/log/index.d.ts +2 -0
  105. package/dist/services/log/index.d.ts.map +1 -0
  106. package/dist/services/{index-manager → log}/index.js +1 -1
  107. package/dist/services/log/index.js.map +1 -0
  108. package/dist/services/log/log.service.d.ts +21 -0
  109. package/dist/services/log/log.service.d.ts.map +1 -0
  110. package/dist/services/log/log.service.js +92 -0
  111. package/dist/services/log/log.service.js.map +1 -0
  112. package/dist/services/queue-bus/index.d.ts +0 -4
  113. package/dist/services/queue-bus/index.d.ts.map +1 -1
  114. package/dist/services/queue-bus/index.js +0 -4
  115. package/dist/services/queue-bus/index.js.map +1 -1
  116. package/dist/services/queue-bus/queue-bus.service.d.ts +44 -198
  117. package/dist/services/queue-bus/queue-bus.service.d.ts.map +1 -1
  118. package/dist/services/queue-bus/queue-bus.service.js +103 -259
  119. package/dist/services/queue-bus/queue-bus.service.js.map +1 -1
  120. package/dist/services/queue-bus/queue-bus.utils.d.ts +0 -28
  121. package/dist/services/queue-bus/queue-bus.utils.d.ts.map +1 -1
  122. package/dist/services/queue-bus/queue-bus.utils.js +1 -41
  123. package/dist/services/queue-bus/queue-bus.utils.js.map +1 -1
  124. package/dist/services/registry/index.d.ts +4 -0
  125. package/dist/services/registry/index.d.ts.map +1 -0
  126. package/dist/services/{queue-events-manager → registry}/index.js +3 -1
  127. package/dist/services/registry/index.js.map +1 -0
  128. package/dist/services/registry/registry.service.d.ts +43 -0
  129. package/dist/services/registry/registry.service.d.ts.map +1 -0
  130. package/dist/services/registry/registry.service.js +379 -0
  131. package/dist/services/registry/registry.service.js.map +1 -0
  132. package/dist/services/registry/registry.types.d.ts +24 -0
  133. package/dist/services/registry/registry.types.d.ts.map +1 -0
  134. package/dist/{domain/interfaces/lock.interfaces.js → services/registry/registry.types.js} +1 -1
  135. package/dist/services/registry/registry.types.js.map +1 -0
  136. package/dist/services/registry/schema-converter.d.ts +2 -0
  137. package/dist/services/registry/schema-converter.d.ts.map +1 -0
  138. package/dist/services/registry/schema-converter.js +27 -0
  139. package/dist/services/registry/schema-converter.js.map +1 -0
  140. package/dist/services/result-collector/index.d.ts +2 -0
  141. package/dist/services/result-collector/index.d.ts.map +1 -0
  142. package/dist/services/result-collector/index.js +18 -0
  143. package/dist/services/result-collector/index.js.map +1 -0
  144. package/dist/services/result-collector/result-collector.service.d.ts +17 -0
  145. package/dist/services/result-collector/result-collector.service.d.ts.map +1 -0
  146. package/dist/services/result-collector/result-collector.service.js +92 -0
  147. package/dist/services/result-collector/result-collector.service.js.map +1 -0
  148. package/dist/services/scheduler/index.d.ts +2 -0
  149. package/dist/services/scheduler/index.d.ts.map +1 -0
  150. package/dist/services/{job-processor → scheduler}/index.js +1 -1
  151. package/dist/services/scheduler/index.js.map +1 -0
  152. package/dist/services/scheduler/scheduler.service.d.ts +17 -0
  153. package/dist/services/scheduler/scheduler.service.d.ts.map +1 -0
  154. package/dist/services/scheduler/scheduler.service.js +116 -0
  155. package/dist/services/scheduler/scheduler.service.js.map +1 -0
  156. package/dist/services/shutdown/index.d.ts +2 -0
  157. package/dist/services/shutdown/index.d.ts.map +1 -0
  158. package/dist/services/shutdown/index.js +18 -0
  159. package/dist/services/shutdown/index.js.map +1 -0
  160. package/dist/services/shutdown/shutdown.service.d.ts +8 -0
  161. package/dist/services/shutdown/shutdown.service.d.ts.map +1 -0
  162. package/dist/services/shutdown/shutdown.service.js +29 -0
  163. package/dist/services/shutdown/shutdown.service.js.map +1 -0
  164. package/dist/utils/index.d.ts +3 -1
  165. package/dist/utils/index.d.ts.map +1 -1
  166. package/dist/utils/index.js +3 -1
  167. package/dist/utils/index.js.map +1 -1
  168. package/dist/utils/naming.utils.d.ts +0 -16
  169. package/dist/utils/naming.utils.d.ts.map +1 -1
  170. package/dist/utils/naming.utils.js +0 -29
  171. package/dist/utils/naming.utils.js.map +1 -1
  172. package/package.json +19 -11
  173. package/dist/decorators/legacy.decorators.d.ts +0 -36
  174. package/dist/decorators/legacy.decorators.d.ts.map +0 -1
  175. package/dist/decorators/legacy.decorators.js +0 -61
  176. package/dist/decorators/legacy.decorators.js.map +0 -1
  177. package/dist/decorators/scaler.decorators.d.ts +0 -65
  178. package/dist/decorators/scaler.decorators.d.ts.map +0 -1
  179. package/dist/decorators/scaler.decorators.js +0 -103
  180. package/dist/decorators/scaler.decorators.js.map +0 -1
  181. package/dist/decorators/type-guards.d.ts +0 -18
  182. package/dist/decorators/type-guards.d.ts.map +0 -1
  183. package/dist/decorators/type-guards.js +0 -32
  184. package/dist/decorators/type-guards.js.map +0 -1
  185. package/dist/decorators/worker.decorators.d.ts +0 -58
  186. package/dist/decorators/worker.decorators.d.ts.map +0 -1
  187. package/dist/decorators/worker.decorators.js +0 -92
  188. package/dist/decorators/worker.decorators.js.map +0 -1
  189. package/dist/domain/interfaces/event.interfaces.d.ts +0 -71
  190. package/dist/domain/interfaces/event.interfaces.d.ts.map +0 -1
  191. package/dist/domain/interfaces/event.interfaces.js +0 -3
  192. package/dist/domain/interfaces/event.interfaces.js.map +0 -1
  193. package/dist/domain/interfaces/index-tracking.interfaces.d.ts +0 -69
  194. package/dist/domain/interfaces/index-tracking.interfaces.d.ts.map +0 -1
  195. package/dist/domain/interfaces/index-tracking.interfaces.js +0 -3
  196. package/dist/domain/interfaces/index-tracking.interfaces.js.map +0 -1
  197. package/dist/domain/interfaces/lock.interfaces.d.ts +0 -54
  198. package/dist/domain/interfaces/lock.interfaces.d.ts.map +0 -1
  199. package/dist/domain/interfaces/lock.interfaces.js.map +0 -1
  200. package/dist/domain/interfaces/process.interfaces.d.ts +0 -44
  201. package/dist/domain/interfaces/process.interfaces.d.ts.map +0 -1
  202. package/dist/domain/interfaces/process.interfaces.js +0 -3
  203. package/dist/domain/interfaces/process.interfaces.js.map +0 -1
  204. package/dist/domain/interfaces/queue.interfaces.d.ts +0 -46
  205. package/dist/domain/interfaces/queue.interfaces.d.ts.map +0 -1
  206. package/dist/domain/interfaces/queue.interfaces.js +0 -3
  207. package/dist/domain/interfaces/queue.interfaces.js.map +0 -1
  208. package/dist/domain/interfaces/scaling.interfaces.d.ts +0 -62
  209. package/dist/domain/interfaces/scaling.interfaces.d.ts.map +0 -1
  210. package/dist/domain/interfaces/scaling.interfaces.js +0 -3
  211. package/dist/domain/interfaces/scaling.interfaces.js.map +0 -1
  212. package/dist/domain/interfaces/worker.interfaces.d.ts +0 -120
  213. package/dist/domain/interfaces/worker.interfaces.d.ts.map +0 -1
  214. package/dist/domain/interfaces/worker.interfaces.js +0 -3
  215. package/dist/domain/interfaces/worker.interfaces.js.map +0 -1
  216. package/dist/services/cron-manager/cron-manager.service.d.ts +0 -199
  217. package/dist/services/cron-manager/cron-manager.service.d.ts.map +0 -1
  218. package/dist/services/cron-manager/cron-manager.service.js +0 -583
  219. package/dist/services/cron-manager/cron-manager.service.js.map +0 -1
  220. package/dist/services/cron-manager/index.d.ts +0 -2
  221. package/dist/services/cron-manager/index.d.ts.map +0 -1
  222. package/dist/services/cron-manager/index.js.map +0 -1
  223. package/dist/services/index-manager/index-manager.service.d.ts +0 -142
  224. package/dist/services/index-manager/index-manager.service.d.ts.map +0 -1
  225. package/dist/services/index-manager/index-manager.service.js +0 -325
  226. package/dist/services/index-manager/index-manager.service.js.map +0 -1
  227. package/dist/services/index-manager/index.d.ts +0 -2
  228. package/dist/services/index-manager/index.d.ts.map +0 -1
  229. package/dist/services/index-manager/index.js.map +0 -1
  230. package/dist/services/job-processor/index.d.ts +0 -2
  231. package/dist/services/job-processor/index.d.ts.map +0 -1
  232. package/dist/services/job-processor/index.js.map +0 -1
  233. package/dist/services/job-processor/job-processor.service.d.ts +0 -156
  234. package/dist/services/job-processor/job-processor.service.d.ts.map +0 -1
  235. package/dist/services/job-processor/job-processor.service.js +0 -331
  236. package/dist/services/job-processor/job-processor.service.js.map +0 -1
  237. package/dist/services/processor-discovery/decorator-discovery.service.d.ts +0 -40
  238. package/dist/services/processor-discovery/decorator-discovery.service.d.ts.map +0 -1
  239. package/dist/services/processor-discovery/decorator-discovery.service.js +0 -191
  240. package/dist/services/processor-discovery/decorator-discovery.service.js.map +0 -1
  241. package/dist/services/processor-discovery/index.d.ts +0 -6
  242. package/dist/services/processor-discovery/index.d.ts.map +0 -1
  243. package/dist/services/processor-discovery/index.js +0 -22
  244. package/dist/services/processor-discovery/index.js.map +0 -1
  245. package/dist/services/processor-discovery/processor-discovery.service.d.ts +0 -98
  246. package/dist/services/processor-discovery/processor-discovery.service.d.ts.map +0 -1
  247. package/dist/services/processor-discovery/processor-discovery.service.js +0 -258
  248. package/dist/services/processor-discovery/processor-discovery.service.js.map +0 -1
  249. package/dist/services/processor-discovery/processor-registry.d.ts +0 -58
  250. package/dist/services/processor-discovery/processor-registry.d.ts.map +0 -1
  251. package/dist/services/processor-discovery/processor-registry.js +0 -74
  252. package/dist/services/processor-discovery/processor-registry.js.map +0 -1
  253. package/dist/services/processor-discovery/scaling-registration.service.d.ts +0 -60
  254. package/dist/services/processor-discovery/scaling-registration.service.d.ts.map +0 -1
  255. package/dist/services/processor-discovery/scaling-registration.service.js +0 -261
  256. package/dist/services/processor-discovery/scaling-registration.service.js.map +0 -1
  257. package/dist/services/processor-discovery/worker-factory.service.d.ts +0 -54
  258. package/dist/services/processor-discovery/worker-factory.service.d.ts.map +0 -1
  259. package/dist/services/processor-discovery/worker-factory.service.js +0 -185
  260. package/dist/services/processor-discovery/worker-factory.service.js.map +0 -1
  261. package/dist/services/queue-bus/entity-target.d.ts +0 -58
  262. package/dist/services/queue-bus/entity-target.d.ts.map +0 -1
  263. package/dist/services/queue-bus/entity-target.js +0 -109
  264. package/dist/services/queue-bus/entity-target.js.map +0 -1
  265. package/dist/services/queue-bus/queue-bus.types.d.ts +0 -40
  266. package/dist/services/queue-bus/queue-bus.types.d.ts.map +0 -1
  267. package/dist/services/queue-bus/queue-bus.types.js +0 -3
  268. package/dist/services/queue-bus/queue-bus.types.js.map +0 -1
  269. package/dist/services/queue-bus/queue-target.d.ts +0 -61
  270. package/dist/services/queue-bus/queue-target.d.ts.map +0 -1
  271. package/dist/services/queue-bus/queue-target.js +0 -123
  272. package/dist/services/queue-bus/queue-target.js.map +0 -1
  273. package/dist/services/queue-events-manager/index.d.ts +0 -2
  274. package/dist/services/queue-events-manager/index.d.ts.map +0 -1
  275. package/dist/services/queue-events-manager/index.js.map +0 -1
  276. package/dist/services/queue-events-manager/queue-events-manager.service.d.ts +0 -120
  277. package/dist/services/queue-events-manager/queue-events-manager.service.d.ts.map +0 -1
  278. package/dist/services/queue-events-manager/queue-events-manager.service.js +0 -343
  279. package/dist/services/queue-events-manager/queue-events-manager.service.js.map +0 -1
  280. package/dist/services/queue-manager/index.d.ts +0 -2
  281. package/dist/services/queue-manager/index.d.ts.map +0 -1
  282. package/dist/services/queue-manager/index.js.map +0 -1
  283. package/dist/services/queue-manager/queue-manager.service.d.ts +0 -148
  284. package/dist/services/queue-manager/queue-manager.service.d.ts.map +0 -1
  285. package/dist/services/queue-manager/queue-manager.service.js +0 -348
  286. package/dist/services/queue-manager/queue-manager.service.js.map +0 -1
  287. package/dist/services/resource-lock/index.d.ts +0 -2
  288. package/dist/services/resource-lock/index.d.ts.map +0 -1
  289. package/dist/services/resource-lock/index.js +0 -18
  290. package/dist/services/resource-lock/index.js.map +0 -1
  291. package/dist/services/resource-lock/resource-lock.service.d.ts +0 -120
  292. package/dist/services/resource-lock/resource-lock.service.d.ts.map +0 -1
  293. package/dist/services/resource-lock/resource-lock.service.js +0 -367
  294. package/dist/services/resource-lock/resource-lock.service.js.map +0 -1
  295. package/dist/services/service-queue/index.d.ts +0 -3
  296. package/dist/services/service-queue/index.d.ts.map +0 -1
  297. package/dist/services/service-queue/index.js +0 -19
  298. package/dist/services/service-queue/index.js.map +0 -1
  299. package/dist/services/service-queue/service-queue.service.d.ts +0 -199
  300. package/dist/services/service-queue/service-queue.service.d.ts.map +0 -1
  301. package/dist/services/service-queue/service-queue.service.js +0 -617
  302. package/dist/services/service-queue/service-queue.service.js.map +0 -1
  303. package/dist/services/service-queue/service-queue.types.d.ts +0 -32
  304. package/dist/services/service-queue/service-queue.types.d.ts.map +0 -1
  305. package/dist/services/service-queue/service-queue.types.js +0 -27
  306. package/dist/services/service-queue/service-queue.types.js.map +0 -1
  307. package/dist/services/shutdown-state/index.d.ts +0 -2
  308. package/dist/services/shutdown-state/index.d.ts.map +0 -1
  309. package/dist/services/shutdown-state/index.js +0 -18
  310. package/dist/services/shutdown-state/index.js.map +0 -1
  311. package/dist/services/shutdown-state/shutdown-state.service.d.ts +0 -69
  312. package/dist/services/shutdown-state/shutdown-state.service.d.ts.map +0 -1
  313. package/dist/services/shutdown-state/shutdown-state.service.js +0 -127
  314. package/dist/services/shutdown-state/shutdown-state.service.js.map +0 -1
  315. package/dist/services/spawn-queue/index.d.ts +0 -2
  316. package/dist/services/spawn-queue/index.d.ts.map +0 -1
  317. package/dist/services/spawn-queue/index.js.map +0 -1
  318. package/dist/services/spawn-queue/spawn-queue.service.d.ts +0 -119
  319. package/dist/services/spawn-queue/spawn-queue.service.d.ts.map +0 -1
  320. package/dist/services/spawn-queue/spawn-queue.service.js +0 -273
  321. package/dist/services/spawn-queue/spawn-queue.service.js.map +0 -1
  322. package/dist/services/worker-manager/index.d.ts +0 -2
  323. package/dist/services/worker-manager/index.d.ts.map +0 -1
  324. package/dist/services/worker-manager/index.js +0 -18
  325. package/dist/services/worker-manager/index.js.map +0 -1
  326. package/dist/services/worker-manager/worker-manager.service.d.ts +0 -221
  327. package/dist/services/worker-manager/worker-manager.service.d.ts.map +0 -1
  328. package/dist/services/worker-manager/worker-manager.service.js +0 -591
  329. package/dist/services/worker-manager/worker-manager.service.js.map +0 -1
  330. package/dist/utils/helpers.d.ts +0 -5
  331. package/dist/utils/helpers.d.ts.map +0 -1
  332. package/dist/utils/helpers.js +0 -21
  333. package/dist/utils/helpers.js.map +0 -1
  334. package/dist/utils/job.utils.d.ts +0 -50
  335. package/dist/utils/job.utils.d.ts.map +0 -1
  336. package/dist/utils/job.utils.js +0 -89
  337. package/dist/utils/job.utils.js.map +0 -1
@@ -1,44 +0,0 @@
1
- /**
2
- * Atomic process status
3
- */
4
- export type AtomicProcessStatus = 'pending' | 'processing' | 'completed' | 'failed';
5
- /**
6
- * Atomic process state
7
- */
8
- export interface IAtomicProcessState {
9
- uuid: string;
10
- status: AtomicProcessStatus;
11
- entityId: string;
12
- entityType: string;
13
- commandName?: string;
14
- createdAt: Date;
15
- updatedAt: Date;
16
- result?: unknown;
17
- error?: string;
18
- }
19
- /**
20
- * Atomic process status tracker interface
21
- */
22
- export interface IAtomicProcessTracker {
23
- /**
24
- * Set process status
25
- */
26
- setStatus(uuid: string, status: AtomicProcessStatus): Promise<void>;
27
- /**
28
- * Get process status
29
- */
30
- getStatus(uuid: string): Promise<IAtomicProcessState | null>;
31
- /**
32
- * Set process result
33
- */
34
- setResult(uuid: string, result: unknown): Promise<void>;
35
- /**
36
- * Set process error
37
- */
38
- setError(uuid: string, error: string): Promise<void>;
39
- /**
40
- * Clean up old process states
41
- */
42
- cleanup(maxAgeMs?: number): Promise<number>;
43
- }
44
- //# sourceMappingURL=process.interfaces.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"process.interfaces.d.ts","sourceRoot":"","sources":["../../../src/domain/interfaces/process.interfaces.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEpF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpE;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;IAE7D;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExD;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErD;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC7C"}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=process.interfaces.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"process.interfaces.js","sourceRoot":"","sources":["../../../src/domain/interfaces/process.interfaces.ts"],"names":[],"mappings":""}
@@ -1,46 +0,0 @@
1
- import { Queue, Job } from 'bullmq';
2
- import { IJobOptions } from './config.interfaces';
3
- /**
4
- * Represents a managed queue instance
5
- */
6
- export interface IManagedQueue {
7
- name: string;
8
- queue: Queue;
9
- createdAt: Date;
10
- entityId: string;
11
- entityType: string;
12
- }
13
- /**
14
- * Queue manager service interface for dynamic queue creation/destruction
15
- */
16
- export interface IQueueManager {
17
- /**
18
- * Get or create a queue for the given name
19
- */
20
- getOrCreateQueue(queueName: string): Queue;
21
- /**
22
- * Get or create an entity-specific queue
23
- */
24
- getOrCreateEntityQueue(entityType: string, entityId: string): Queue;
25
- /**
26
- * Close and remove a specific queue
27
- */
28
- closeQueue(queueName: string): Promise<void>;
29
- /**
30
- * Close all managed queues
31
- */
32
- closeAllQueues(): Promise<void>;
33
- /**
34
- * Get all queue names
35
- */
36
- getQueueNames(): string[];
37
- /**
38
- * Delete a specific job from a queue
39
- */
40
- deleteJob(queueName: string, jobId: string): Promise<void>;
41
- /**
42
- * Add a job to a queue
43
- */
44
- addJob<T>(queueName: string, jobName: string, data: T, options?: IJobOptions): Promise<Job<T>>;
45
- }
46
- //# sourceMappingURL=queue.interfaces.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"queue.interfaces.d.ts","sourceRoot":"","sources":["../../../src/domain/interfaces/queue.interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC;IAE3C;;OAEG;IACH,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC;IAEpE;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C;;OAEG;IACH,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhC;;OAEG;IACH,aAAa,IAAI,MAAM,EAAE,CAAC;IAE1B;;OAEG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3D;;OAEG;IACH,MAAM,CAAC,CAAC,EACN,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;CACpB"}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=queue.interfaces.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"queue.interfaces.js","sourceRoot":"","sources":["../../../src/domain/interfaces/queue.interfaces.ts"],"names":[],"mappings":""}
@@ -1,62 +0,0 @@
1
- /**
2
- * Worker scaling decision
3
- */
4
- export interface IScalingDecision {
5
- entityId: string;
6
- entityType: string;
7
- currentWorkers: number;
8
- desiredWorkers: number;
9
- action: 'spawn' | 'terminate' | 'none';
10
- count: number;
11
- }
12
- /**
13
- * Entity scaling configuration
14
- */
15
- export interface IEntityScalingConfig {
16
- entityType: string;
17
- /** Function to get desired worker count for an entity */
18
- getDesiredWorkerCount: (entityId: string) => Promise<number>;
19
- /** Function to get all active entity IDs */
20
- getActiveEntityIds: () => Promise<string[]>;
21
- /** Maximum workers per entity */
22
- maxWorkersPerEntity?: number;
23
- /**
24
- * Idle timeout in seconds before a worker is considered idle and can be terminated.
25
- * Workers self-report idle time via heartbeat. Default: 15 seconds.
26
- */
27
- idleTimeoutSeconds?: number;
28
- /** Function called when spawning a worker */
29
- onSpawnWorker?: (entityId: string) => Promise<void>;
30
- /** Function called when terminating a worker */
31
- onTerminateWorker?: (entityId: string, workerId: string) => Promise<void>;
32
- }
33
- /**
34
- * Cron manager interface for worker lifecycle management
35
- */
36
- export interface ICronManager {
37
- /**
38
- * Register an entity type for automatic scaling
39
- */
40
- registerEntityType(config: IEntityScalingConfig): void;
41
- /**
42
- * Run scaling cycle for all registered entity types
43
- */
44
- runScalingCycle(): Promise<IScalingDecision[]>;
45
- /**
46
- * Get current scaling state
47
- */
48
- getScalingState(): Promise<Map<string, IScalingDecision[]>>;
49
- /**
50
- * Start the cron manager
51
- */
52
- start(intervalMs?: number): void;
53
- /**
54
- * Stop the cron manager
55
- */
56
- stop(): void;
57
- /**
58
- * Check if cron manager is running
59
- */
60
- isRunning(): boolean;
61
- }
62
- //# sourceMappingURL=scaling.interfaces.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scaling.interfaces.d.ts","sourceRoot":"","sources":["../../../src/domain/interfaces/scaling.interfaces.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,OAAO,GAAG,WAAW,GAAG,MAAM,CAAC;IACvC,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,qBAAqB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7D,4CAA4C;IAC5C,kBAAkB,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,iCAAiC;IACjC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,6CAA6C;IAC7C,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,gDAAgD;IAChD,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3E;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAEvD;;OAEG;IACH,eAAe,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAE/C;;OAEG;IACH,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC;IAE5D;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEjC;;OAEG;IACH,IAAI,IAAI,IAAI,CAAC;IAEb;;OAEG;IACH,SAAS,IAAI,OAAO,CAAC;CACtB"}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=scaling.interfaces.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scaling.interfaces.js","sourceRoot":"","sources":["../../../src/domain/interfaces/scaling.interfaces.ts"],"names":[],"mappings":""}
@@ -1,120 +0,0 @@
1
- import { Worker, Job } from 'bullmq';
2
- import { IWorkerConfig } from './config.interfaces';
3
- /**
4
- * Worker state tracking
5
- */
6
- export interface IWorkerState {
7
- workerId: string;
8
- workerName: string;
9
- nodeId: string;
10
- entityId?: string;
11
- entityType?: string;
12
- status: 'starting' | 'ready' | 'processing' | 'closing' | 'closed';
13
- createdAt: Date;
14
- lastHeartbeat: Date;
15
- }
16
- /**
17
- * Worker lifecycle events
18
- */
19
- export interface IWorkerEvents {
20
- onReady?: (worker: Worker, workerName: string) => void | Promise<void>;
21
- onCompleted?: (job: Job, workerName: string) => void | Promise<void>;
22
- onFailed?: (job: Job | undefined, error: Error, workerName: string) => void | Promise<void>;
23
- onProgress?: (job: Job, progress: number | object) => void | Promise<void>;
24
- onStalled?: (jobId: string, workerName: string) => void | Promise<void>;
25
- onClosing?: (workerName: string) => void | Promise<void>;
26
- onClosed?: (workerName: string) => void | Promise<void>;
27
- }
28
- /**
29
- * Worker creation options
30
- */
31
- export interface IWorkerCreationOptions {
32
- workerName: string;
33
- queueName: string;
34
- config?: IWorkerConfig;
35
- events?: IWorkerEvents;
36
- processor: (job: Job) => Promise<unknown>;
37
- }
38
- /**
39
- * Worker manager service interface
40
- */
41
- export interface IWorkerManager {
42
- /**
43
- * Create a new worker with automatic lifecycle management
44
- */
45
- createWorker(options: IWorkerCreationOptions): Promise<Worker>;
46
- /**
47
- * Check if a worker exists and is alive (across ALL nodes)
48
- */
49
- workerExists(workerName: string): Promise<boolean>;
50
- /**
51
- * Check if a worker exists on THIS node specifically
52
- */
53
- workerExistsOnThisNode(workerName: string): Promise<boolean>;
54
- /**
55
- * Get all running workers for current node
56
- */
57
- getNodeWorkers(): Promise<string[]>;
58
- /**
59
- * Get all running workers across all nodes
60
- */
61
- getAllWorkers(): Promise<string[]>;
62
- /**
63
- * Get all workers for a specific entity
64
- */
65
- getEntityWorkers(entityType: string, entityId: string): Promise<string[]>;
66
- /**
67
- * Signal a worker to close gracefully
68
- */
69
- signalWorkerClose(workerName: string): Promise<void>;
70
- /**
71
- * Signal all workers on current node to close
72
- */
73
- signalNodeWorkersClose(): Promise<void>;
74
- /**
75
- * Wait for all node workers to close
76
- */
77
- waitForWorkersToClose(timeoutMs?: number): Promise<void>;
78
- /**
79
- * Reset worker heartbeat TTL
80
- */
81
- resetWorkerHeartbeat(workerName: string): Promise<void>;
82
- /**
83
- * Remove worker heartbeat (mark as dead)
84
- */
85
- removeWorkerHeartbeat(workerName: string): Promise<void>;
86
- /**
87
- * Get the node ID for this instance
88
- */
89
- getNodeId(): string;
90
- /**
91
- * Mark that a worker has completed a job (resets idle counter).
92
- * Called internally when job completes.
93
- */
94
- markWorkerActive(workerName: string): void;
95
- /**
96
- * Get the idle seconds counter for a worker.
97
- * This is incremented by the heartbeat and reset when a job completes.
98
- */
99
- getWorkerIdleSeconds(workerName: string): Promise<number>;
100
- /**
101
- * Reset the idle counter for a worker (called when job completes).
102
- */
103
- resetWorkerIdleCounter(workerName: string): Promise<void>;
104
- /**
105
- * Increment the idle counter for a worker (called by heartbeat).
106
- * Returns the new idle seconds value.
107
- */
108
- incrementWorkerIdleCounter(workerName: string, incrementBy?: number): Promise<number>;
109
- /**
110
- * Remove the idle counter for a worker (cleanup).
111
- */
112
- removeWorkerIdleCounter(workerName: string): Promise<void>;
113
- /**
114
- * Check if a worker is idle based on threshold.
115
- * @param workerName - Worker name
116
- * @param thresholdSeconds - Idle threshold in seconds (default: 15)
117
- */
118
- isWorkerIdle(workerName: string, thresholdSeconds?: number): Promise<boolean>;
119
- }
120
- //# sourceMappingURL=worker.interfaces.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker.interfaces.d.ts","sourceRoot":"","sources":["../../../src/domain/interfaces/worker.interfaces.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=worker.interfaces.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker.interfaces.js","sourceRoot":"","sources":["../../../src/domain/interfaces/worker.interfaces.ts"],"names":[],"mappings":""}
@@ -1,199 +0,0 @@
1
- import { OnModuleDestroy } from '@nestjs/common';
2
- import Redis from 'ioredis';
3
- import { ICronManager, IEntityScalingConfig, IScalingDecision, IAtomicQueuesModuleConfig } from '../../domain';
4
- import { WorkerManagerService } from '../worker-manager';
5
- import { IndexManagerService } from '../index-manager';
6
- import { ServiceQueueManager } from '../service-queue';
7
- /**
8
- * CronManagerService
9
- *
10
- * Manages worker lifecycle through periodic scaling cycles.
11
- * Implements the patterns from both Whatsapi's CronqProcessor and
12
- * bl-blackjack-service's WorkerManagerProcessor.
13
- *
14
- * Key Features:
15
- * - Automatic worker spawning when jobs are queued
16
- * - Worker termination when queues are empty
17
- * - Concurrency limits based on entity configuration
18
- * - Queue cleanup after all work is done
19
- * - Excess worker handling
20
- *
21
- * Architecture:
22
- * - Runs on a configurable interval
23
- * - Each entity type can register its own scaling logic
24
- * - Supports per-entity concurrency limits
25
- * - Integrates with WorkerManager for worker lifecycle
26
- * - Integrates with IndexManager for state tracking
27
- *
28
- * @example
29
- * ```typescript
30
- * // Register entity scaling configuration
31
- * cronManager.registerEntityType({
32
- * entityType: 'user',
33
- * getDesiredWorkerCount: async (userId) => {
34
- * const plan = await getUserPlan(userId);
35
- * return planConcurrencyMap[plan];
36
- * },
37
- * getActiveEntityIds: async () => {
38
- * return indexManager.getEntitiesWithJobs('user');
39
- * },
40
- * maxWorkersPerEntity: 5,
41
- * onSpawnWorker: async (userId) => {
42
- * await commandBus.execute(new CreateUserWorkerCommand(userId));
43
- * },
44
- * });
45
- *
46
- * // Start the cron manager
47
- * cronManager.start(5000); // Run every 5 seconds
48
- * ```
49
- */
50
- export declare class CronManagerService implements ICronManager, OnModuleDestroy {
51
- private readonly redis;
52
- private readonly config;
53
- private readonly workerManager;
54
- private readonly indexManager;
55
- private readonly serviceQueueManager?;
56
- private readonly logger;
57
- private readonly entityConfigs;
58
- private cronInterval;
59
- private running;
60
- private readonly keyPrefix;
61
- private readonly useServiceQueue;
62
- private scalingHandlerRegistered;
63
- constructor(redis: Redis, config: IAtomicQueuesModuleConfig, workerManager: WorkerManagerService, indexManager: IndexManagerService, serviceQueueManager?: ServiceQueueManager | undefined);
64
- /**
65
- * Register the scaling cycle handler with ServiceQueueManager.
66
- * This ensures scaling cycles are processed atomically by the service worker.
67
- */
68
- private registerScalingHandler;
69
- /**
70
- * Register an entity type for automatic scaling.
71
- */
72
- registerEntityType(config: IEntityScalingConfig): void;
73
- /**
74
- * Unregister an entity type.
75
- */
76
- unregisterEntityType(entityType: string): void;
77
- /**
78
- * Run a scaling cycle for all registered entity types.
79
- *
80
- * When service queue is enabled, this triggers scaling cycles through the
81
- * service queue to ensure atomic processing by the single service worker.
82
- * This prevents race conditions in distributed deployments.
83
- *
84
- * IMPORTANT: Only the service worker owner node triggers scaling cycles.
85
- * Other nodes skip the trigger to prevent duplicate jobs.
86
- *
87
- * This is the main logic that:
88
- * 1. Gets entities with queued jobs
89
- * 2. Gets entities with running workers
90
- * 3. Calculates scaling decisions
91
- * 4. Spawns missing workers
92
- * 5. Terminates excess workers
93
- * 6. Cleans up empty queues
94
- */
95
- runScalingCycle(): Promise<IScalingDecision[]>;
96
- /**
97
- * Trigger scaling cycles through the service queue.
98
- * This ensures only the service worker processes scaling decisions.
99
- */
100
- private triggerScalingCyclesThroughServiceQueue;
101
- /**
102
- * Run scaling cycles directly (single instance or fallback mode).
103
- */
104
- private runScalingCycleDirectly;
105
- /**
106
- * Get current scaling state for all entity types.
107
- */
108
- getScalingState(): Promise<Map<string, IScalingDecision[]>>;
109
- /**
110
- * Start the cron manager.
111
- */
112
- start(intervalMs?: number): void;
113
- /**
114
- * Stop the cron manager.
115
- */
116
- stop(): void;
117
- /**
118
- * Check if cron manager is running.
119
- */
120
- isRunning(): boolean;
121
- /**
122
- * Cleanup on module destroy.
123
- */
124
- onModuleDestroy(): void;
125
- /**
126
- * Run scaling cycle for a specific entity type.
127
- * This is the internal implementation called either directly or via service queue.
128
- *
129
- * Supports two modes:
130
- * 1. Scaler mode: getActiveEntityIds returns active entities, workers spawn/terminate based on this
131
- * 2. Scalerless mode: getActiveEntityIds returns empty, workers spawn via QueueEvents and terminate when idle
132
- */
133
- private runEntityScalingCycleInternal;
134
- /**
135
- * Handle worker spawning for an entity.
136
- */
137
- private handleEntitySpawning;
138
- /**
139
- * Handle excess workers for an entity.
140
- */
141
- private handleExcessWorkers;
142
- /**
143
- * Handle idle workers for ACTIVE entities.
144
- * Even if an entity is active, if workers are idle beyond the threshold,
145
- * they should be terminated to save resources. They'll be re-spawned
146
- * on the next scaling cycle if the entity is still active.
147
- */
148
- private handleIdleWorkersForActiveEntity;
149
- /**
150
- * Handle worker closure for entities with no jobs.
151
- * Uses worker self-reported idle time for reliable detection.
152
- * Workers increment idle counter on heartbeat, reset on job completion.
153
- */
154
- private handleWorkerClosure;
155
- /**
156
- * Shared logic for terminating idle workers.
157
- * Used by both handleIdleWorkersForActiveEntity and handleWorkerClosure.
158
- */
159
- private terminateIdleWorkers;
160
- /**
161
- * Check if a queue has any waiting or active jobs.
162
- * Uses BullMQ's internal key structure with the configured prefix.
163
- *
164
- * NOTE: This is kept as a backup/utility method, but idle detection
165
- * now primarily uses worker self-reported idle counters.
166
- *
167
- * BullMQ v4+ key structure:
168
- * - {prefix}:{queueName}:wait (list) - jobs waiting to be processed
169
- * - {prefix}:{queueName}:active (list) - jobs currently being processed
170
- * - {prefix}:{queueName}:delayed (sorted set) - jobs scheduled for future
171
- * - {prefix}:{queueName}:paused (list) - jobs in paused queue
172
- */
173
- private checkQueueHasJobs;
174
- /**
175
- * Handle queue cleanup for entities with no jobs and no workers.
176
- */
177
- private handleQueueCleanup;
178
- /**
179
- * Queue worker termination via the entity's queue.
180
- */
181
- private queueWorkerTermination;
182
- /**
183
- * Get the number of workers for an entity.
184
- * Uses the worker heartbeat TTL keys as the single source of truth.
185
- * This is a direct Redis query - no service queue needed since we're just reading keys.
186
- */
187
- private getEntityWorkerCount;
188
- /**
189
- * Get all entities with workers.
190
- * Uses the worker heartbeat TTL keys as the single source of truth.
191
- * Worker names follow pattern: {entityId}-worker
192
- */
193
- private getEntitiesWithWorkers;
194
- /**
195
- * Determine the scaling action based on current vs desired.
196
- */
197
- private determineAction;
198
- }
199
- //# sourceMappingURL=cron-manager.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cron-manager.service.d.ts","sourceRoot":"","sources":["../../../src/services/cron-manager/cron-manager.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,eAAe,EAAY,MAAM,gBAAgB,CAAC;AACvF,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,yBAAyB,EAC1B,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAwB,MAAM,kBAAkB,CAAC;AAE7E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,qBACa,kBAAmB,YAAW,YAAY,EAAE,eAAe;IAUvC,OAAO,CAAC,QAAQ,CAAC,KAAK;IAEnD,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY;IACjB,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAdnD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAC9D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgD;IAC9E,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,wBAAwB,CAAS;gBAGO,KAAK,EAAE,KAAK,EAEzC,MAAM,EAAE,yBAAyB,EACjC,aAAa,EAAE,oBAAoB,EACnC,YAAY,EAAE,mBAAmB,EACrB,mBAAmB,CAAC,EAAE,mBAAmB,YAAA;IAUxE;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAsB9B;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI;IAKtD;;OAEG;IACH,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAK9C;;;;;;;;;;;;;;;;;OAiBG;IACG,eAAe,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAepD;;;OAGG;YACW,uCAAuC;IAYrD;;OAEG;YACW,uBAAuB;IAoBrC;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;IA8BjE;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;IA0BhC;;OAEG;IACH,IAAI,IAAI,IAAI;IASZ;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,eAAe,IAAI,IAAI;IAQvB;;;;;;;OAOG;YACW,6BAA6B;IAqF3C;;OAEG;YACW,oBAAoB;IA+ClC;;OAEG;YACW,mBAAmB;IAuCjC;;;;;OAKG;YACW,gCAAgC;IAQ9C;;;;OAIG;YACW,mBAAmB;IAQjC;;;OAGG;YACW,oBAAoB;IA0ElC;;;;;;;;;;;;OAYG;YACW,iBAAiB;IA8C/B;;OAEG;YACW,kBAAkB;IAqBhC;;OAEG;YACW,sBAAsB;IAapC;;;;OAIG;YACW,oBAAoB;IAYlC;;;;OAIG;YACW,sBAAsB;IAqBpC;;OAEG;IACH,OAAO,CAAC,eAAe;CASxB"}