atomic-queues 1.6.2 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +273 -413
- package/dist/cli/generators/json-schema.d.ts +3 -0
- package/dist/cli/generators/json-schema.d.ts.map +1 -0
- package/dist/cli/generators/json-schema.js +31 -0
- package/dist/cli/generators/json-schema.js.map +1 -0
- package/dist/cli/generators/typescript.d.ts +3 -0
- package/dist/cli/generators/typescript.d.ts.map +1 -0
- package/dist/cli/generators/typescript.js +62 -0
- package/dist/cli/generators/typescript.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +156 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/decorators/actor.decorators.d.ts +4 -0
- package/dist/decorators/actor.decorators.d.ts.map +1 -0
- package/dist/decorators/actor.decorators.js +32 -0
- package/dist/decorators/actor.decorators.js.map +1 -0
- package/dist/decorators/constants.d.ts +5 -12
- package/dist/decorators/constants.d.ts.map +1 -1
- package/dist/decorators/constants.js +10 -16
- package/dist/decorators/constants.js.map +1 -1
- package/dist/decorators/index.d.ts +4 -4
- package/dist/decorators/index.d.ts.map +1 -1
- package/dist/decorators/index.js +4 -4
- package/dist/decorators/index.js.map +1 -1
- package/dist/decorators/interfaces.d.ts +18 -78
- package/dist/decorators/interfaces.d.ts.map +1 -1
- package/dist/decorators/metadata-readers.d.ts +5 -26
- package/dist/decorators/metadata-readers.d.ts.map +1 -1
- package/dist/decorators/metadata-readers.js +16 -33
- package/dist/decorators/metadata-readers.js.map +1 -1
- package/dist/decorators/schema.decorators.d.ts +2 -0
- package/dist/decorators/schema.decorators.d.ts.map +1 -0
- package/dist/decorators/schema.decorators.js +13 -0
- package/dist/decorators/schema.decorators.js.map +1 -0
- package/dist/domain/interfaces/config.interfaces.d.ts +52 -153
- package/dist/domain/interfaces/config.interfaces.d.ts.map +1 -1
- package/dist/domain/interfaces/index.d.ts +0 -7
- package/dist/domain/interfaces/index.d.ts.map +1 -1
- package/dist/domain/interfaces/index.js +0 -7
- package/dist/domain/interfaces/index.js.map +1 -1
- package/dist/domain/interfaces/job.interfaces.d.ts +32 -65
- package/dist/domain/interfaces/job.interfaces.d.ts.map +1 -1
- package/dist/index.d.ts +0 -34
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -39
- package/dist/index.js.map +1 -1
- package/dist/module/atomic-queues.module.d.ts +0 -83
- package/dist/module/atomic-queues.module.d.ts.map +1 -1
- package/dist/module/atomic-queues.module.js +35 -134
- package/dist/module/atomic-queues.module.js.map +1 -1
- package/dist/services/actor-registry/actor-registry.service.d.ts +30 -0
- package/dist/services/actor-registry/actor-registry.service.d.ts.map +1 -0
- package/dist/services/actor-registry/actor-registry.service.js +186 -0
- package/dist/services/actor-registry/actor-registry.service.js.map +1 -0
- package/dist/services/actor-registry/index.d.ts +2 -0
- package/dist/services/actor-registry/index.d.ts.map +1 -0
- package/dist/services/actor-registry/index.js +18 -0
- package/dist/services/actor-registry/index.js.map +1 -0
- package/dist/services/actor-system/actor-system.service.d.ts +19 -0
- package/dist/services/actor-system/actor-system.service.d.ts.map +1 -0
- package/dist/services/actor-system/actor-system.service.js +86 -0
- package/dist/services/actor-system/actor-system.service.js.map +1 -0
- package/dist/services/actor-system/index.d.ts +2 -0
- package/dist/services/actor-system/index.d.ts.map +1 -0
- package/dist/services/{cron-manager → actor-system}/index.js +1 -1
- package/dist/services/actor-system/index.js.map +1 -0
- package/dist/services/command-discovery/command-discovery.service.d.ts +6 -53
- package/dist/services/command-discovery/command-discovery.service.d.ts.map +1 -1
- package/dist/services/command-discovery/command-discovery.service.js +0 -59
- package/dist/services/command-discovery/command-discovery.service.js.map +1 -1
- package/dist/services/constants.d.ts +2 -9
- package/dist/services/constants.d.ts.map +1 -1
- package/dist/services/constants.js +3 -10
- package/dist/services/constants.js.map +1 -1
- package/dist/services/executor-pool/executor-pool.service.d.ts +31 -0
- package/dist/services/executor-pool/executor-pool.service.d.ts.map +1 -0
- package/dist/services/executor-pool/executor-pool.service.js +147 -0
- package/dist/services/executor-pool/executor-pool.service.js.map +1 -0
- package/dist/services/executor-pool/index.d.ts +2 -0
- package/dist/services/executor-pool/index.d.ts.map +1 -0
- package/dist/services/{queue-manager → executor-pool}/index.js +1 -1
- package/dist/services/executor-pool/index.js.map +1 -0
- package/dist/services/gate/gate.service.d.ts +17 -0
- package/dist/services/gate/gate.service.d.ts.map +1 -0
- package/dist/services/gate/gate.service.js +66 -0
- package/dist/services/gate/gate.service.js.map +1 -0
- package/dist/services/gate/index.d.ts +2 -0
- package/dist/services/gate/index.d.ts.map +1 -0
- package/dist/services/{spawn-queue → gate}/index.js +1 -1
- package/dist/services/gate/index.js.map +1 -0
- package/dist/services/handler-executor/handler-executor.service.d.ts +32 -0
- package/dist/services/handler-executor/handler-executor.service.d.ts.map +1 -0
- package/dist/services/handler-executor/handler-executor.service.js +186 -0
- package/dist/services/handler-executor/handler-executor.service.js.map +1 -0
- package/dist/services/handler-executor/index.d.ts +2 -0
- package/dist/services/handler-executor/index.d.ts.map +1 -0
- package/dist/services/handler-executor/index.js +18 -0
- package/dist/services/handler-executor/index.js.map +1 -0
- package/dist/services/index.d.ts +11 -12
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +11 -12
- package/dist/services/index.js.map +1 -1
- package/dist/services/log/index.d.ts +2 -0
- package/dist/services/log/index.d.ts.map +1 -0
- package/dist/services/{index-manager → log}/index.js +1 -1
- package/dist/services/log/index.js.map +1 -0
- package/dist/services/log/log.service.d.ts +21 -0
- package/dist/services/log/log.service.d.ts.map +1 -0
- package/dist/services/log/log.service.js +92 -0
- package/dist/services/log/log.service.js.map +1 -0
- package/dist/services/queue-bus/index.d.ts +0 -4
- package/dist/services/queue-bus/index.d.ts.map +1 -1
- package/dist/services/queue-bus/index.js +0 -4
- package/dist/services/queue-bus/index.js.map +1 -1
- package/dist/services/queue-bus/queue-bus.service.d.ts +44 -198
- package/dist/services/queue-bus/queue-bus.service.d.ts.map +1 -1
- package/dist/services/queue-bus/queue-bus.service.js +103 -259
- package/dist/services/queue-bus/queue-bus.service.js.map +1 -1
- package/dist/services/queue-bus/queue-bus.utils.d.ts +0 -28
- package/dist/services/queue-bus/queue-bus.utils.d.ts.map +1 -1
- package/dist/services/queue-bus/queue-bus.utils.js +1 -41
- package/dist/services/queue-bus/queue-bus.utils.js.map +1 -1
- package/dist/services/registry/index.d.ts +4 -0
- package/dist/services/registry/index.d.ts.map +1 -0
- package/dist/services/{queue-events-manager → registry}/index.js +3 -1
- package/dist/services/registry/index.js.map +1 -0
- package/dist/services/registry/registry.service.d.ts +43 -0
- package/dist/services/registry/registry.service.d.ts.map +1 -0
- package/dist/services/registry/registry.service.js +379 -0
- package/dist/services/registry/registry.service.js.map +1 -0
- package/dist/services/registry/registry.types.d.ts +24 -0
- package/dist/services/registry/registry.types.d.ts.map +1 -0
- package/dist/{domain/interfaces/lock.interfaces.js → services/registry/registry.types.js} +1 -1
- package/dist/services/registry/registry.types.js.map +1 -0
- package/dist/services/registry/schema-converter.d.ts +2 -0
- package/dist/services/registry/schema-converter.d.ts.map +1 -0
- package/dist/services/registry/schema-converter.js +27 -0
- package/dist/services/registry/schema-converter.js.map +1 -0
- package/dist/services/result-collector/index.d.ts +2 -0
- package/dist/services/result-collector/index.d.ts.map +1 -0
- package/dist/services/result-collector/index.js +18 -0
- package/dist/services/result-collector/index.js.map +1 -0
- package/dist/services/result-collector/result-collector.service.d.ts +17 -0
- package/dist/services/result-collector/result-collector.service.d.ts.map +1 -0
- package/dist/services/result-collector/result-collector.service.js +92 -0
- package/dist/services/result-collector/result-collector.service.js.map +1 -0
- package/dist/services/scheduler/index.d.ts +2 -0
- package/dist/services/scheduler/index.d.ts.map +1 -0
- package/dist/services/{job-processor → scheduler}/index.js +1 -1
- package/dist/services/scheduler/index.js.map +1 -0
- package/dist/services/scheduler/scheduler.service.d.ts +17 -0
- package/dist/services/scheduler/scheduler.service.d.ts.map +1 -0
- package/dist/services/scheduler/scheduler.service.js +116 -0
- package/dist/services/scheduler/scheduler.service.js.map +1 -0
- package/dist/services/shutdown/index.d.ts +2 -0
- package/dist/services/shutdown/index.d.ts.map +1 -0
- package/dist/services/shutdown/index.js +18 -0
- package/dist/services/shutdown/index.js.map +1 -0
- package/dist/services/shutdown/shutdown.service.d.ts +8 -0
- package/dist/services/shutdown/shutdown.service.d.ts.map +1 -0
- package/dist/services/shutdown/shutdown.service.js +29 -0
- package/dist/services/shutdown/shutdown.service.js.map +1 -0
- package/dist/utils/index.d.ts +3 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +3 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/naming.utils.d.ts +0 -16
- package/dist/utils/naming.utils.d.ts.map +1 -1
- package/dist/utils/naming.utils.js +0 -29
- package/dist/utils/naming.utils.js.map +1 -1
- package/package.json +19 -11
- package/dist/decorators/legacy.decorators.d.ts +0 -36
- package/dist/decorators/legacy.decorators.d.ts.map +0 -1
- package/dist/decorators/legacy.decorators.js +0 -61
- package/dist/decorators/legacy.decorators.js.map +0 -1
- package/dist/decorators/scaler.decorators.d.ts +0 -65
- package/dist/decorators/scaler.decorators.d.ts.map +0 -1
- package/dist/decorators/scaler.decorators.js +0 -103
- package/dist/decorators/scaler.decorators.js.map +0 -1
- package/dist/decorators/type-guards.d.ts +0 -18
- package/dist/decorators/type-guards.d.ts.map +0 -1
- package/dist/decorators/type-guards.js +0 -32
- package/dist/decorators/type-guards.js.map +0 -1
- package/dist/decorators/worker.decorators.d.ts +0 -58
- package/dist/decorators/worker.decorators.d.ts.map +0 -1
- package/dist/decorators/worker.decorators.js +0 -92
- package/dist/decorators/worker.decorators.js.map +0 -1
- package/dist/domain/interfaces/event.interfaces.d.ts +0 -71
- package/dist/domain/interfaces/event.interfaces.d.ts.map +0 -1
- package/dist/domain/interfaces/event.interfaces.js +0 -3
- package/dist/domain/interfaces/event.interfaces.js.map +0 -1
- package/dist/domain/interfaces/index-tracking.interfaces.d.ts +0 -69
- package/dist/domain/interfaces/index-tracking.interfaces.d.ts.map +0 -1
- package/dist/domain/interfaces/index-tracking.interfaces.js +0 -3
- package/dist/domain/interfaces/index-tracking.interfaces.js.map +0 -1
- package/dist/domain/interfaces/lock.interfaces.d.ts +0 -54
- package/dist/domain/interfaces/lock.interfaces.d.ts.map +0 -1
- package/dist/domain/interfaces/lock.interfaces.js.map +0 -1
- package/dist/domain/interfaces/process.interfaces.d.ts +0 -44
- package/dist/domain/interfaces/process.interfaces.d.ts.map +0 -1
- package/dist/domain/interfaces/process.interfaces.js +0 -3
- package/dist/domain/interfaces/process.interfaces.js.map +0 -1
- package/dist/domain/interfaces/queue.interfaces.d.ts +0 -46
- package/dist/domain/interfaces/queue.interfaces.d.ts.map +0 -1
- package/dist/domain/interfaces/queue.interfaces.js +0 -3
- package/dist/domain/interfaces/queue.interfaces.js.map +0 -1
- package/dist/domain/interfaces/scaling.interfaces.d.ts +0 -62
- package/dist/domain/interfaces/scaling.interfaces.d.ts.map +0 -1
- package/dist/domain/interfaces/scaling.interfaces.js +0 -3
- package/dist/domain/interfaces/scaling.interfaces.js.map +0 -1
- package/dist/domain/interfaces/worker.interfaces.d.ts +0 -120
- package/dist/domain/interfaces/worker.interfaces.d.ts.map +0 -1
- package/dist/domain/interfaces/worker.interfaces.js +0 -3
- package/dist/domain/interfaces/worker.interfaces.js.map +0 -1
- package/dist/services/cron-manager/cron-manager.service.d.ts +0 -199
- package/dist/services/cron-manager/cron-manager.service.d.ts.map +0 -1
- package/dist/services/cron-manager/cron-manager.service.js +0 -583
- package/dist/services/cron-manager/cron-manager.service.js.map +0 -1
- package/dist/services/cron-manager/index.d.ts +0 -2
- package/dist/services/cron-manager/index.d.ts.map +0 -1
- package/dist/services/cron-manager/index.js.map +0 -1
- package/dist/services/index-manager/index-manager.service.d.ts +0 -142
- package/dist/services/index-manager/index-manager.service.d.ts.map +0 -1
- package/dist/services/index-manager/index-manager.service.js +0 -325
- package/dist/services/index-manager/index-manager.service.js.map +0 -1
- package/dist/services/index-manager/index.d.ts +0 -2
- package/dist/services/index-manager/index.d.ts.map +0 -1
- package/dist/services/index-manager/index.js.map +0 -1
- package/dist/services/job-processor/index.d.ts +0 -2
- package/dist/services/job-processor/index.d.ts.map +0 -1
- package/dist/services/job-processor/index.js.map +0 -1
- package/dist/services/job-processor/job-processor.service.d.ts +0 -156
- package/dist/services/job-processor/job-processor.service.d.ts.map +0 -1
- package/dist/services/job-processor/job-processor.service.js +0 -331
- package/dist/services/job-processor/job-processor.service.js.map +0 -1
- package/dist/services/processor-discovery/decorator-discovery.service.d.ts +0 -40
- package/dist/services/processor-discovery/decorator-discovery.service.d.ts.map +0 -1
- package/dist/services/processor-discovery/decorator-discovery.service.js +0 -191
- package/dist/services/processor-discovery/decorator-discovery.service.js.map +0 -1
- package/dist/services/processor-discovery/index.d.ts +0 -6
- package/dist/services/processor-discovery/index.d.ts.map +0 -1
- package/dist/services/processor-discovery/index.js +0 -22
- package/dist/services/processor-discovery/index.js.map +0 -1
- package/dist/services/processor-discovery/processor-discovery.service.d.ts +0 -98
- package/dist/services/processor-discovery/processor-discovery.service.d.ts.map +0 -1
- package/dist/services/processor-discovery/processor-discovery.service.js +0 -258
- package/dist/services/processor-discovery/processor-discovery.service.js.map +0 -1
- package/dist/services/processor-discovery/processor-registry.d.ts +0 -58
- package/dist/services/processor-discovery/processor-registry.d.ts.map +0 -1
- package/dist/services/processor-discovery/processor-registry.js +0 -74
- package/dist/services/processor-discovery/processor-registry.js.map +0 -1
- package/dist/services/processor-discovery/scaling-registration.service.d.ts +0 -60
- package/dist/services/processor-discovery/scaling-registration.service.d.ts.map +0 -1
- package/dist/services/processor-discovery/scaling-registration.service.js +0 -261
- package/dist/services/processor-discovery/scaling-registration.service.js.map +0 -1
- package/dist/services/processor-discovery/worker-factory.service.d.ts +0 -54
- package/dist/services/processor-discovery/worker-factory.service.d.ts.map +0 -1
- package/dist/services/processor-discovery/worker-factory.service.js +0 -185
- package/dist/services/processor-discovery/worker-factory.service.js.map +0 -1
- package/dist/services/queue-bus/entity-target.d.ts +0 -58
- package/dist/services/queue-bus/entity-target.d.ts.map +0 -1
- package/dist/services/queue-bus/entity-target.js +0 -109
- package/dist/services/queue-bus/entity-target.js.map +0 -1
- package/dist/services/queue-bus/queue-bus.types.d.ts +0 -40
- package/dist/services/queue-bus/queue-bus.types.d.ts.map +0 -1
- package/dist/services/queue-bus/queue-bus.types.js +0 -3
- package/dist/services/queue-bus/queue-bus.types.js.map +0 -1
- package/dist/services/queue-bus/queue-target.d.ts +0 -61
- package/dist/services/queue-bus/queue-target.d.ts.map +0 -1
- package/dist/services/queue-bus/queue-target.js +0 -123
- package/dist/services/queue-bus/queue-target.js.map +0 -1
- package/dist/services/queue-events-manager/index.d.ts +0 -2
- package/dist/services/queue-events-manager/index.d.ts.map +0 -1
- package/dist/services/queue-events-manager/index.js.map +0 -1
- package/dist/services/queue-events-manager/queue-events-manager.service.d.ts +0 -120
- package/dist/services/queue-events-manager/queue-events-manager.service.d.ts.map +0 -1
- package/dist/services/queue-events-manager/queue-events-manager.service.js +0 -343
- package/dist/services/queue-events-manager/queue-events-manager.service.js.map +0 -1
- package/dist/services/queue-manager/index.d.ts +0 -2
- package/dist/services/queue-manager/index.d.ts.map +0 -1
- package/dist/services/queue-manager/index.js.map +0 -1
- package/dist/services/queue-manager/queue-manager.service.d.ts +0 -148
- package/dist/services/queue-manager/queue-manager.service.d.ts.map +0 -1
- package/dist/services/queue-manager/queue-manager.service.js +0 -348
- package/dist/services/queue-manager/queue-manager.service.js.map +0 -1
- package/dist/services/resource-lock/index.d.ts +0 -2
- package/dist/services/resource-lock/index.d.ts.map +0 -1
- package/dist/services/resource-lock/index.js +0 -18
- package/dist/services/resource-lock/index.js.map +0 -1
- package/dist/services/resource-lock/resource-lock.service.d.ts +0 -120
- package/dist/services/resource-lock/resource-lock.service.d.ts.map +0 -1
- package/dist/services/resource-lock/resource-lock.service.js +0 -367
- package/dist/services/resource-lock/resource-lock.service.js.map +0 -1
- package/dist/services/service-queue/index.d.ts +0 -3
- package/dist/services/service-queue/index.d.ts.map +0 -1
- package/dist/services/service-queue/index.js +0 -19
- package/dist/services/service-queue/index.js.map +0 -1
- package/dist/services/service-queue/service-queue.service.d.ts +0 -199
- package/dist/services/service-queue/service-queue.service.d.ts.map +0 -1
- package/dist/services/service-queue/service-queue.service.js +0 -617
- package/dist/services/service-queue/service-queue.service.js.map +0 -1
- package/dist/services/service-queue/service-queue.types.d.ts +0 -32
- package/dist/services/service-queue/service-queue.types.d.ts.map +0 -1
- package/dist/services/service-queue/service-queue.types.js +0 -27
- package/dist/services/service-queue/service-queue.types.js.map +0 -1
- package/dist/services/shutdown-state/index.d.ts +0 -2
- package/dist/services/shutdown-state/index.d.ts.map +0 -1
- package/dist/services/shutdown-state/index.js +0 -18
- package/dist/services/shutdown-state/index.js.map +0 -1
- package/dist/services/shutdown-state/shutdown-state.service.d.ts +0 -69
- package/dist/services/shutdown-state/shutdown-state.service.d.ts.map +0 -1
- package/dist/services/shutdown-state/shutdown-state.service.js +0 -127
- package/dist/services/shutdown-state/shutdown-state.service.js.map +0 -1
- package/dist/services/spawn-queue/index.d.ts +0 -2
- package/dist/services/spawn-queue/index.d.ts.map +0 -1
- package/dist/services/spawn-queue/index.js.map +0 -1
- package/dist/services/spawn-queue/spawn-queue.service.d.ts +0 -119
- package/dist/services/spawn-queue/spawn-queue.service.d.ts.map +0 -1
- package/dist/services/spawn-queue/spawn-queue.service.js +0 -273
- package/dist/services/spawn-queue/spawn-queue.service.js.map +0 -1
- package/dist/services/worker-manager/index.d.ts +0 -2
- package/dist/services/worker-manager/index.d.ts.map +0 -1
- package/dist/services/worker-manager/index.js +0 -18
- package/dist/services/worker-manager/index.js.map +0 -1
- package/dist/services/worker-manager/worker-manager.service.d.ts +0 -221
- package/dist/services/worker-manager/worker-manager.service.d.ts.map +0 -1
- package/dist/services/worker-manager/worker-manager.service.js +0 -591
- package/dist/services/worker-manager/worker-manager.service.js.map +0 -1
- package/dist/utils/helpers.d.ts +0 -5
- package/dist/utils/helpers.d.ts.map +0 -1
- package/dist/utils/helpers.js +0 -21
- package/dist/utils/helpers.js.map +0 -1
- package/dist/utils/job.utils.d.ts +0 -50
- package/dist/utils/job.utils.d.ts.map +0 -1
- package/dist/utils/job.utils.js +0 -89
- 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 +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 +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 +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 +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"}
|