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.
- package/README.md +182 -411
- 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,583 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
-
};
|
|
11
|
-
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
-
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
-
};
|
|
14
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
15
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
16
|
-
};
|
|
17
|
-
var CronManagerService_1;
|
|
18
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
-
exports.CronManagerService = void 0;
|
|
20
|
-
const common_1 = require("@nestjs/common");
|
|
21
|
-
const ioredis_1 = __importDefault(require("ioredis"));
|
|
22
|
-
const utils_1 = require("../../utils");
|
|
23
|
-
const constants_1 = require("../constants");
|
|
24
|
-
const worker_manager_1 = require("../worker-manager");
|
|
25
|
-
const index_manager_1 = require("../index-manager");
|
|
26
|
-
const service_queue_1 = require("../service-queue");
|
|
27
|
-
/**
|
|
28
|
-
* CronManagerService
|
|
29
|
-
*
|
|
30
|
-
* Manages worker lifecycle through periodic scaling cycles.
|
|
31
|
-
* Implements the patterns from both Whatsapi's CronqProcessor and
|
|
32
|
-
* bl-blackjack-service's WorkerManagerProcessor.
|
|
33
|
-
*
|
|
34
|
-
* Key Features:
|
|
35
|
-
* - Automatic worker spawning when jobs are queued
|
|
36
|
-
* - Worker termination when queues are empty
|
|
37
|
-
* - Concurrency limits based on entity configuration
|
|
38
|
-
* - Queue cleanup after all work is done
|
|
39
|
-
* - Excess worker handling
|
|
40
|
-
*
|
|
41
|
-
* Architecture:
|
|
42
|
-
* - Runs on a configurable interval
|
|
43
|
-
* - Each entity type can register its own scaling logic
|
|
44
|
-
* - Supports per-entity concurrency limits
|
|
45
|
-
* - Integrates with WorkerManager for worker lifecycle
|
|
46
|
-
* - Integrates with IndexManager for state tracking
|
|
47
|
-
*
|
|
48
|
-
* @example
|
|
49
|
-
* ```typescript
|
|
50
|
-
* // Register entity scaling configuration
|
|
51
|
-
* cronManager.registerEntityType({
|
|
52
|
-
* entityType: 'user',
|
|
53
|
-
* getDesiredWorkerCount: async (userId) => {
|
|
54
|
-
* const plan = await getUserPlan(userId);
|
|
55
|
-
* return planConcurrencyMap[plan];
|
|
56
|
-
* },
|
|
57
|
-
* getActiveEntityIds: async () => {
|
|
58
|
-
* return indexManager.getEntitiesWithJobs('user');
|
|
59
|
-
* },
|
|
60
|
-
* maxWorkersPerEntity: 5,
|
|
61
|
-
* onSpawnWorker: async (userId) => {
|
|
62
|
-
* await commandBus.execute(new CreateUserWorkerCommand(userId));
|
|
63
|
-
* },
|
|
64
|
-
* });
|
|
65
|
-
*
|
|
66
|
-
* // Start the cron manager
|
|
67
|
-
* cronManager.start(5000); // Run every 5 seconds
|
|
68
|
-
* ```
|
|
69
|
-
*/
|
|
70
|
-
let CronManagerService = CronManagerService_1 = class CronManagerService {
|
|
71
|
-
constructor(redis, config, workerManager, indexManager, serviceQueueManager) {
|
|
72
|
-
this.redis = redis;
|
|
73
|
-
this.config = config;
|
|
74
|
-
this.workerManager = workerManager;
|
|
75
|
-
this.indexManager = indexManager;
|
|
76
|
-
this.serviceQueueManager = serviceQueueManager;
|
|
77
|
-
this.logger = new common_1.Logger(CronManagerService_1.name);
|
|
78
|
-
this.entityConfigs = new Map();
|
|
79
|
-
this.cronInterval = null;
|
|
80
|
-
this.running = false;
|
|
81
|
-
this.scalingHandlerRegistered = false;
|
|
82
|
-
this.keyPrefix = (0, utils_1.resolveKeyPrefix)(config);
|
|
83
|
-
// Use service queue for atomic operations if enabled
|
|
84
|
-
this.useServiceQueue = config.serviceQueue?.enabled !== false;
|
|
85
|
-
// Register the scaling cycle handler with the service queue
|
|
86
|
-
this.registerScalingHandler();
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Register the scaling cycle handler with ServiceQueueManager.
|
|
90
|
-
* This ensures scaling cycles are processed atomically by the service worker.
|
|
91
|
-
*/
|
|
92
|
-
registerScalingHandler() {
|
|
93
|
-
if (this.scalingHandlerRegistered || !this.serviceQueueManager) {
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
this.serviceQueueManager.registerScalingCycleHandler(async (entityType) => {
|
|
97
|
-
const config = this.entityConfigs.get(entityType);
|
|
98
|
-
if (!config) {
|
|
99
|
-
this.logger.warn(`No config registered for entity type: ${entityType}`);
|
|
100
|
-
return { decisions: [] };
|
|
101
|
-
}
|
|
102
|
-
const decisions = await this.runEntityScalingCycleInternal(entityType, config);
|
|
103
|
-
return { decisions };
|
|
104
|
-
});
|
|
105
|
-
this.scalingHandlerRegistered = true;
|
|
106
|
-
this.logger.debug('Scaling cycle handler registered with ServiceQueueManager');
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Register an entity type for automatic scaling.
|
|
110
|
-
*/
|
|
111
|
-
registerEntityType(config) {
|
|
112
|
-
this.entityConfigs.set(config.entityType, config);
|
|
113
|
-
this.logger.log(`Registered entity type for scaling: ${config.entityType}`);
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Unregister an entity type.
|
|
117
|
-
*/
|
|
118
|
-
unregisterEntityType(entityType) {
|
|
119
|
-
this.entityConfigs.delete(entityType);
|
|
120
|
-
this.logger.log(`Unregistered entity type: ${entityType}`);
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Run a scaling cycle for all registered entity types.
|
|
124
|
-
*
|
|
125
|
-
* When service queue is enabled, this triggers scaling cycles through the
|
|
126
|
-
* service queue to ensure atomic processing by the single service worker.
|
|
127
|
-
* This prevents race conditions in distributed deployments.
|
|
128
|
-
*
|
|
129
|
-
* IMPORTANT: Only the service worker owner node triggers scaling cycles.
|
|
130
|
-
* Other nodes skip the trigger to prevent duplicate jobs.
|
|
131
|
-
*
|
|
132
|
-
* This is the main logic that:
|
|
133
|
-
* 1. Gets entities with queued jobs
|
|
134
|
-
* 2. Gets entities with running workers
|
|
135
|
-
* 3. Calculates scaling decisions
|
|
136
|
-
* 4. Spawns missing workers
|
|
137
|
-
* 5. Terminates excess workers
|
|
138
|
-
* 6. Cleans up empty queues
|
|
139
|
-
*/
|
|
140
|
-
async runScalingCycle() {
|
|
141
|
-
// If service queue is enabled, only the service worker owner should trigger
|
|
142
|
-
if (this.useServiceQueue && this.serviceQueueManager) {
|
|
143
|
-
// Only trigger if we're the service worker owner
|
|
144
|
-
if (this.serviceQueueManager.isServiceWorkerOwner()) {
|
|
145
|
-
await this.triggerScalingCyclesThroughServiceQueue();
|
|
146
|
-
}
|
|
147
|
-
// Return empty - actual decisions are processed by service worker
|
|
148
|
-
return [];
|
|
149
|
-
}
|
|
150
|
-
// Fallback to direct processing (single instance mode)
|
|
151
|
-
return this.runScalingCycleDirectly();
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Trigger scaling cycles through the service queue.
|
|
155
|
-
* This ensures only the service worker processes scaling decisions.
|
|
156
|
-
*/
|
|
157
|
-
async triggerScalingCyclesThroughServiceQueue() {
|
|
158
|
-
for (const entityType of this.entityConfigs.keys()) {
|
|
159
|
-
try {
|
|
160
|
-
await this.serviceQueueManager.triggerScalingCycle(entityType);
|
|
161
|
-
}
|
|
162
|
-
catch (error) {
|
|
163
|
-
this.logger.error(`Failed to trigger scaling cycle for ${entityType}: ${error.message}`);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* Run scaling cycles directly (single instance or fallback mode).
|
|
169
|
-
*/
|
|
170
|
-
async runScalingCycleDirectly() {
|
|
171
|
-
const decisions = [];
|
|
172
|
-
for (const [entityType, config] of this.entityConfigs) {
|
|
173
|
-
try {
|
|
174
|
-
const entityDecisions = await this.runEntityScalingCycleInternal(entityType, config);
|
|
175
|
-
decisions.push(...entityDecisions);
|
|
176
|
-
}
|
|
177
|
-
catch (error) {
|
|
178
|
-
this.logger.error(`Error in scaling cycle for ${entityType}: ${error.message}`);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
return decisions;
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* Get current scaling state for all entity types.
|
|
185
|
-
*/
|
|
186
|
-
async getScalingState() {
|
|
187
|
-
const state = new Map();
|
|
188
|
-
for (const [entityType, config] of this.entityConfigs) {
|
|
189
|
-
const entityIds = await config.getActiveEntityIds();
|
|
190
|
-
const decisions = [];
|
|
191
|
-
for (const entityId of entityIds) {
|
|
192
|
-
const currentWorkers = await this.getEntityWorkerCount(entityType, entityId);
|
|
193
|
-
const desiredWorkers = await config.getDesiredWorkerCount(entityId);
|
|
194
|
-
decisions.push({
|
|
195
|
-
entityId,
|
|
196
|
-
entityType,
|
|
197
|
-
currentWorkers,
|
|
198
|
-
desiredWorkers,
|
|
199
|
-
action: this.determineAction(currentWorkers, desiredWorkers),
|
|
200
|
-
count: Math.abs(desiredWorkers - currentWorkers),
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
|
-
state.set(entityType, decisions);
|
|
204
|
-
}
|
|
205
|
-
return state;
|
|
206
|
-
}
|
|
207
|
-
/**
|
|
208
|
-
* Start the cron manager.
|
|
209
|
-
*/
|
|
210
|
-
start(intervalMs) {
|
|
211
|
-
if (this.running) {
|
|
212
|
-
this.logger.warn('CronManager is already running');
|
|
213
|
-
return;
|
|
214
|
-
}
|
|
215
|
-
const interval = intervalMs || this.config.cronInterval || 5000;
|
|
216
|
-
this.logger.log(`Starting CronManager with ${interval}ms interval`);
|
|
217
|
-
this.running = true;
|
|
218
|
-
// Run immediately once
|
|
219
|
-
this.runScalingCycle().catch((error) => {
|
|
220
|
-
this.logger.error(`Initial scaling cycle failed: ${error.message}`);
|
|
221
|
-
});
|
|
222
|
-
// Then run on interval
|
|
223
|
-
this.cronInterval = setInterval(async () => {
|
|
224
|
-
try {
|
|
225
|
-
await this.runScalingCycle();
|
|
226
|
-
}
|
|
227
|
-
catch (error) {
|
|
228
|
-
this.logger.error(`Scaling cycle failed: ${error.message}`);
|
|
229
|
-
}
|
|
230
|
-
}, interval);
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* Stop the cron manager.
|
|
234
|
-
*/
|
|
235
|
-
stop() {
|
|
236
|
-
if (this.cronInterval) {
|
|
237
|
-
clearInterval(this.cronInterval);
|
|
238
|
-
this.cronInterval = null;
|
|
239
|
-
}
|
|
240
|
-
this.running = false;
|
|
241
|
-
this.logger.log('CronManager stopped');
|
|
242
|
-
}
|
|
243
|
-
/**
|
|
244
|
-
* Check if cron manager is running.
|
|
245
|
-
*/
|
|
246
|
-
isRunning() {
|
|
247
|
-
return this.running;
|
|
248
|
-
}
|
|
249
|
-
/**
|
|
250
|
-
* Cleanup on module destroy.
|
|
251
|
-
*/
|
|
252
|
-
onModuleDestroy() {
|
|
253
|
-
this.stop();
|
|
254
|
-
}
|
|
255
|
-
// =========================================================================
|
|
256
|
-
// PRIVATE METHODS
|
|
257
|
-
// =========================================================================
|
|
258
|
-
/**
|
|
259
|
-
* Run scaling cycle for a specific entity type.
|
|
260
|
-
* This is the internal implementation called either directly or via service queue.
|
|
261
|
-
*
|
|
262
|
-
* Supports two modes:
|
|
263
|
-
* 1. Scaler mode: getActiveEntityIds returns active entities, workers spawn/terminate based on this
|
|
264
|
-
* 2. Scalerless mode: getActiveEntityIds returns empty, workers spawn via QueueEvents and terminate when idle
|
|
265
|
-
*/
|
|
266
|
-
async runEntityScalingCycleInternal(entityType, config) {
|
|
267
|
-
const decisions = [];
|
|
268
|
-
// Get active entities from the config's getActiveEntityIds (primary source)
|
|
269
|
-
const activeEntityIds = await config.getActiveEntityIds();
|
|
270
|
-
// Get entities with running workers (from heartbeat keys)
|
|
271
|
-
const entitiesWithWorkers = await this.getEntitiesWithWorkers(entityType);
|
|
272
|
-
const isScalerlessMode = activeEntityIds.length === 0;
|
|
273
|
-
if (isScalerlessMode) {
|
|
274
|
-
// SCALERLESS MODE: Workers spawn via QueueEvents, we just handle idle termination
|
|
275
|
-
// All workers are managed based on their idle state
|
|
276
|
-
for (const entityId of entitiesWithWorkers) {
|
|
277
|
-
const decision = await this.handleIdleWorkersForActiveEntity(entityType, entityId, config);
|
|
278
|
-
if (decision)
|
|
279
|
-
decisions.push(decision);
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
else {
|
|
283
|
-
// SCALER MODE: Traditional flow with active entities
|
|
284
|
-
// Spawn missing workers for active entities
|
|
285
|
-
for (const entityId of activeEntityIds) {
|
|
286
|
-
const decision = await this.handleEntitySpawning(entityType, entityId, config, 1);
|
|
287
|
-
if (decision)
|
|
288
|
-
decisions.push(decision);
|
|
289
|
-
}
|
|
290
|
-
// Handle excess workers for active entities
|
|
291
|
-
for (const entityId of activeEntityIds) {
|
|
292
|
-
const decision = await this.handleExcessWorkers(entityType, entityId, config);
|
|
293
|
-
if (decision)
|
|
294
|
-
decisions.push(decision);
|
|
295
|
-
}
|
|
296
|
-
// Check for idle workers on ACTIVE entities and terminate them
|
|
297
|
-
// They will be re-spawned on the next cycle if still active
|
|
298
|
-
for (const entityId of activeEntityIds) {
|
|
299
|
-
const decision = await this.handleIdleWorkersForActiveEntity(entityType, entityId, config);
|
|
300
|
-
if (decision)
|
|
301
|
-
decisions.push(decision);
|
|
302
|
-
}
|
|
303
|
-
// Close workers for entities with workers but no longer active
|
|
304
|
-
const activeEntitySet = new Set(activeEntityIds);
|
|
305
|
-
const entitiesWithWorkersNoLongerActive = Array.from(entitiesWithWorkers).filter((entityId) => !activeEntitySet.has(entityId));
|
|
306
|
-
if (entitiesWithWorkersNoLongerActive.length > 0) {
|
|
307
|
-
this.logger.debug(`[${entityType}] Found ${entitiesWithWorkersNoLongerActive.length} entities with workers but no longer active: ${entitiesWithWorkersNoLongerActive.join(', ')}`);
|
|
308
|
-
}
|
|
309
|
-
for (const entityId of entitiesWithWorkersNoLongerActive) {
|
|
310
|
-
const decision = await this.handleWorkerClosure(entityType, entityId, config);
|
|
311
|
-
if (decision)
|
|
312
|
-
decisions.push(decision);
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
return decisions;
|
|
316
|
-
}
|
|
317
|
-
/**
|
|
318
|
-
* Handle worker spawning for an entity.
|
|
319
|
-
*/
|
|
320
|
-
async handleEntitySpawning(entityType, entityId, config, queuedJobCount) {
|
|
321
|
-
const currentWorkers = await this.getEntityWorkerCount(entityType, entityId);
|
|
322
|
-
const desiredWorkers = await config.getDesiredWorkerCount(entityId);
|
|
323
|
-
const maxWorkers = config.maxWorkersPerEntity || desiredWorkers;
|
|
324
|
-
// Calculate how many workers we should have
|
|
325
|
-
const targetWorkers = Math.min(desiredWorkers, maxWorkers, queuedJobCount);
|
|
326
|
-
if (currentWorkers >= targetWorkers) {
|
|
327
|
-
return null;
|
|
328
|
-
}
|
|
329
|
-
const toSpawn = targetWorkers - currentWorkers;
|
|
330
|
-
this.logger.debug(`Spawning ${toSpawn} workers for ${entityType}/${entityId}`);
|
|
331
|
-
// Spawn workers - workerExists check in createWorkerForEntity prevents duplicates
|
|
332
|
-
// Service queue atomicity handles distributed coordination
|
|
333
|
-
for (let i = 0; i < toSpawn; i++) {
|
|
334
|
-
if (config.onSpawnWorker) {
|
|
335
|
-
try {
|
|
336
|
-
await config.onSpawnWorker(entityId);
|
|
337
|
-
}
|
|
338
|
-
catch (error) {
|
|
339
|
-
this.logger.error(`Failed to spawn worker for ${entityType}/${entityId}: ${error.message}`);
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
return {
|
|
344
|
-
entityId,
|
|
345
|
-
entityType,
|
|
346
|
-
currentWorkers,
|
|
347
|
-
desiredWorkers: targetWorkers,
|
|
348
|
-
action: 'spawn',
|
|
349
|
-
count: toSpawn,
|
|
350
|
-
};
|
|
351
|
-
}
|
|
352
|
-
/**
|
|
353
|
-
* Handle excess workers for an entity.
|
|
354
|
-
*/
|
|
355
|
-
async handleExcessWorkers(entityType, entityId, config) {
|
|
356
|
-
const currentWorkers = await this.getEntityWorkerCount(entityType, entityId);
|
|
357
|
-
const desiredWorkers = await config.getDesiredWorkerCount(entityId);
|
|
358
|
-
const maxWorkers = config.maxWorkersPerEntity || desiredWorkers;
|
|
359
|
-
if (currentWorkers <= maxWorkers) {
|
|
360
|
-
return null;
|
|
361
|
-
}
|
|
362
|
-
const excess = currentWorkers - maxWorkers;
|
|
363
|
-
this.logger.debug(`Terminating ${excess} excess workers for ${entityType}/${entityId}`);
|
|
364
|
-
// Queue worker termination
|
|
365
|
-
const pendingDeaths = await this.indexManager.getQueuedWorkerDeaths(entityType, entityId);
|
|
366
|
-
if (pendingDeaths.length === 0 && excess > 0) {
|
|
367
|
-
await this.queueWorkerTermination(entityType, entityId, config);
|
|
368
|
-
}
|
|
369
|
-
return {
|
|
370
|
-
entityId,
|
|
371
|
-
entityType,
|
|
372
|
-
currentWorkers,
|
|
373
|
-
desiredWorkers: maxWorkers,
|
|
374
|
-
action: 'terminate',
|
|
375
|
-
count: excess,
|
|
376
|
-
};
|
|
377
|
-
}
|
|
378
|
-
/**
|
|
379
|
-
* Handle idle workers for ACTIVE entities.
|
|
380
|
-
* Even if an entity is active, if workers are idle beyond the threshold,
|
|
381
|
-
* they should be terminated to save resources. They'll be re-spawned
|
|
382
|
-
* on the next scaling cycle if the entity is still active.
|
|
383
|
-
*/
|
|
384
|
-
async handleIdleWorkersForActiveEntity(entityType, entityId, config) {
|
|
385
|
-
return this.terminateIdleWorkers(entityType, entityId, config, 'active-entity');
|
|
386
|
-
}
|
|
387
|
-
/**
|
|
388
|
-
* Handle worker closure for entities with no jobs.
|
|
389
|
-
* Uses worker self-reported idle time for reliable detection.
|
|
390
|
-
* Workers increment idle counter on heartbeat, reset on job completion.
|
|
391
|
-
*/
|
|
392
|
-
async handleWorkerClosure(entityType, entityId, config) {
|
|
393
|
-
return this.terminateIdleWorkers(entityType, entityId, config, 'orphaned-entity');
|
|
394
|
-
}
|
|
395
|
-
/**
|
|
396
|
-
* Shared logic for terminating idle workers.
|
|
397
|
-
* Used by both handleIdleWorkersForActiveEntity and handleWorkerClosure.
|
|
398
|
-
*/
|
|
399
|
-
async terminateIdleWorkers(entityType, entityId, config, context) {
|
|
400
|
-
const logTag = context === 'active-entity' ? 'handleIdleWorkers' : 'handleWorkerClosure';
|
|
401
|
-
const workers = await this.workerManager.getEntityWorkers(entityType, entityId);
|
|
402
|
-
if (workers.length === 0) {
|
|
403
|
-
if (context === 'orphaned-entity') {
|
|
404
|
-
this.logger.debug(`[${logTag}] ${entityType}/${entityId} - No workers found, skipping`);
|
|
405
|
-
}
|
|
406
|
-
return null;
|
|
407
|
-
}
|
|
408
|
-
if (context === 'orphaned-entity') {
|
|
409
|
-
this.logger.debug(`[${logTag}] ${entityType}/${entityId} - Found ${workers.length} workers to potentially close: ${workers.join(', ')}`);
|
|
410
|
-
}
|
|
411
|
-
// Get idle timeout threshold (default: 15 seconds)
|
|
412
|
-
const idleTimeoutSeconds = config.idleTimeoutSeconds ?? 15;
|
|
413
|
-
// Check each worker's idle time
|
|
414
|
-
const idleWorkers = [];
|
|
415
|
-
for (const workerName of workers) {
|
|
416
|
-
const isIdle = await this.workerManager.isWorkerIdle(workerName, idleTimeoutSeconds);
|
|
417
|
-
if (isIdle) {
|
|
418
|
-
idleWorkers.push(workerName);
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
if (idleWorkers.length === 0) {
|
|
422
|
-
if (context === 'orphaned-entity') {
|
|
423
|
-
this.logger.debug(`[${logTag}] ${entityType}/${entityId} - No idle workers (threshold: ${idleTimeoutSeconds}s), skipping termination`);
|
|
424
|
-
}
|
|
425
|
-
return null;
|
|
426
|
-
}
|
|
427
|
-
const actionLabel = context === 'active-entity'
|
|
428
|
-
? `Terminating ${idleWorkers.length} idle workers for active ${entityType}/${entityId}`
|
|
429
|
-
: `Closing ${idleWorkers.length} idle workers for ${entityType}/${entityId}`;
|
|
430
|
-
this.logger.log(`[${logTag}] ${actionLabel} (idle >= ${idleTimeoutSeconds}s)`);
|
|
431
|
-
// Signal idle workers to close
|
|
432
|
-
for (const workerName of idleWorkers) {
|
|
433
|
-
const idleSeconds = await this.workerManager.getWorkerIdleSeconds(workerName);
|
|
434
|
-
this.logger.debug(`[${logTag}] Terminating worker: ${workerName} (idle: ${idleSeconds}s)`);
|
|
435
|
-
if (config.onTerminateWorker) {
|
|
436
|
-
await config.onTerminateWorker(entityId, workerName);
|
|
437
|
-
}
|
|
438
|
-
else {
|
|
439
|
-
await this.workerManager.signalWorkerClose(workerName);
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
return {
|
|
443
|
-
entityId,
|
|
444
|
-
entityType,
|
|
445
|
-
currentWorkers: workers.length,
|
|
446
|
-
desiredWorkers: workers.length - idleWorkers.length,
|
|
447
|
-
action: 'terminate',
|
|
448
|
-
count: idleWorkers.length,
|
|
449
|
-
};
|
|
450
|
-
}
|
|
451
|
-
/**
|
|
452
|
-
* Check if a queue has any waiting or active jobs.
|
|
453
|
-
* Uses BullMQ's internal key structure with the configured prefix.
|
|
454
|
-
*
|
|
455
|
-
* NOTE: This is kept as a backup/utility method, but idle detection
|
|
456
|
-
* now primarily uses worker self-reported idle counters.
|
|
457
|
-
*
|
|
458
|
-
* BullMQ v4+ key structure:
|
|
459
|
-
* - {prefix}:{queueName}:wait (list) - jobs waiting to be processed
|
|
460
|
-
* - {prefix}:{queueName}:active (list) - jobs currently being processed
|
|
461
|
-
* - {prefix}:{queueName}:delayed (sorted set) - jobs scheduled for future
|
|
462
|
-
* - {prefix}:{queueName}:paused (list) - jobs in paused queue
|
|
463
|
-
*/
|
|
464
|
-
async checkQueueHasJobs(queueName) {
|
|
465
|
-
try {
|
|
466
|
-
// BullMQ uses 'bull' as default prefix for queue keys
|
|
467
|
-
const bullPrefix = 'bull';
|
|
468
|
-
// Check wait list (BullMQ v4+ uses 'wait' not 'waiting')
|
|
469
|
-
const waitKey = `${bullPrefix}:${queueName}:wait`;
|
|
470
|
-
const waitCount = await this.redis.llen(waitKey);
|
|
471
|
-
if (waitCount > 0) {
|
|
472
|
-
this.logger.debug(`Queue ${queueName} has ${waitCount} waiting jobs`);
|
|
473
|
-
return true;
|
|
474
|
-
}
|
|
475
|
-
// Check active list
|
|
476
|
-
const activeKey = `${bullPrefix}:${queueName}:active`;
|
|
477
|
-
const activeCount = await this.redis.llen(activeKey);
|
|
478
|
-
if (activeCount > 0) {
|
|
479
|
-
this.logger.debug(`Queue ${queueName} has ${activeCount} active jobs`);
|
|
480
|
-
return true;
|
|
481
|
-
}
|
|
482
|
-
// Check delayed set
|
|
483
|
-
const delayedKey = `${bullPrefix}:${queueName}:delayed`;
|
|
484
|
-
const delayedCount = await this.redis.zcard(delayedKey);
|
|
485
|
-
if (delayedCount > 0) {
|
|
486
|
-
this.logger.debug(`Queue ${queueName} has ${delayedCount} delayed jobs`);
|
|
487
|
-
return true;
|
|
488
|
-
}
|
|
489
|
-
// Check paused list (in case queue is paused)
|
|
490
|
-
const pausedKey = `${bullPrefix}:${queueName}:paused`;
|
|
491
|
-
const pausedCount = await this.redis.llen(pausedKey);
|
|
492
|
-
if (pausedCount > 0) {
|
|
493
|
-
this.logger.debug(`Queue ${queueName} has ${pausedCount} paused jobs`);
|
|
494
|
-
return true;
|
|
495
|
-
}
|
|
496
|
-
this.logger.debug(`Queue ${queueName} is empty - no jobs found`);
|
|
497
|
-
return false;
|
|
498
|
-
}
|
|
499
|
-
catch (error) {
|
|
500
|
-
this.logger.warn(`Error checking queue ${queueName} for jobs: ${error.message}`);
|
|
501
|
-
// If we can't check, don't terminate (safer)
|
|
502
|
-
return true;
|
|
503
|
-
}
|
|
504
|
-
}
|
|
505
|
-
/**
|
|
506
|
-
* Handle queue cleanup for entities with no jobs and no workers.
|
|
507
|
-
*/
|
|
508
|
-
async handleQueueCleanup(entityType, entityId) {
|
|
509
|
-
// Check if there's already a queue death queued
|
|
510
|
-
const pendingQueueDeaths = await this.indexManager.getEntitiesWithQueuedQueueDeaths(entityType);
|
|
511
|
-
if (pendingQueueDeaths.includes(entityId)) {
|
|
512
|
-
return;
|
|
513
|
-
}
|
|
514
|
-
this.logger.debug(`Cleaning up queue for ${entityType}/${entityId}`);
|
|
515
|
-
// Index the queue death
|
|
516
|
-
await this.indexManager.indexQueueDeath(entityType, entityId);
|
|
517
|
-
// The actual queue cleanup should be handled by a separate processor
|
|
518
|
-
// or by the entity's cleanup callback
|
|
519
|
-
}
|
|
520
|
-
/**
|
|
521
|
-
* Queue worker termination via the entity's queue.
|
|
522
|
-
*/
|
|
523
|
-
async queueWorkerTermination(entityType, entityId, config) {
|
|
524
|
-
// This is a placeholder - actual implementation would queue a SIGTERM
|
|
525
|
-
// job to the entity's queue, which the worker would pick up and
|
|
526
|
-
// gracefully terminate itself (like in Whatsapi)
|
|
527
|
-
this.logger.debug(`Queued worker termination for ${entityType}/${entityId}`);
|
|
528
|
-
}
|
|
529
|
-
/**
|
|
530
|
-
* Get the number of workers for an entity.
|
|
531
|
-
* Uses the worker heartbeat TTL keys as the single source of truth.
|
|
532
|
-
* This is a direct Redis query - no service queue needed since we're just reading keys.
|
|
533
|
-
*/
|
|
534
|
-
async getEntityWorkerCount(entityType, entityId) {
|
|
535
|
-
// Direct query to worker heartbeat TTL keys - the single source of truth
|
|
536
|
-
const workers = await this.workerManager.getEntityWorkers(entityType, entityId);
|
|
537
|
-
return workers.length;
|
|
538
|
-
}
|
|
539
|
-
/**
|
|
540
|
-
* Get all entities with workers.
|
|
541
|
-
* Uses the worker heartbeat TTL keys as the single source of truth.
|
|
542
|
-
* Worker names follow pattern: {entityId}-worker
|
|
543
|
-
*/
|
|
544
|
-
async getEntitiesWithWorkers(entityType) {
|
|
545
|
-
// Worker heartbeat keys follow pattern: {prefix}:worker:{nodeId}:{entityId}-worker
|
|
546
|
-
const pattern = `${this.keyPrefix}:worker:*:*-worker`;
|
|
547
|
-
const keys = await (0, utils_1.scanKeys)(this.redis, pattern);
|
|
548
|
-
const entities = new Set();
|
|
549
|
-
for (const key of keys) {
|
|
550
|
-
const parts = key.split(':');
|
|
551
|
-
if (parts.length >= 4) {
|
|
552
|
-
// workerName is last part, extract entityId by removing '-worker' suffix
|
|
553
|
-
const workerName = parts[parts.length - 1];
|
|
554
|
-
if (workerName.endsWith('-worker')) {
|
|
555
|
-
const entityId = workerName.slice(0, -7); // Remove '-worker' suffix
|
|
556
|
-
entities.add(entityId);
|
|
557
|
-
}
|
|
558
|
-
}
|
|
559
|
-
}
|
|
560
|
-
return entities;
|
|
561
|
-
}
|
|
562
|
-
/**
|
|
563
|
-
* Determine the scaling action based on current vs desired.
|
|
564
|
-
*/
|
|
565
|
-
determineAction(current, desired) {
|
|
566
|
-
if (current < desired)
|
|
567
|
-
return 'spawn';
|
|
568
|
-
if (current > desired)
|
|
569
|
-
return 'terminate';
|
|
570
|
-
return 'none';
|
|
571
|
-
}
|
|
572
|
-
};
|
|
573
|
-
exports.CronManagerService = CronManagerService;
|
|
574
|
-
exports.CronManagerService = CronManagerService = CronManagerService_1 = __decorate([
|
|
575
|
-
(0, common_1.Injectable)(),
|
|
576
|
-
__param(0, (0, common_1.Inject)(constants_1.ATOMIC_QUEUES_REDIS)),
|
|
577
|
-
__param(1, (0, common_1.Inject)(constants_1.ATOMIC_QUEUES_CONFIG)),
|
|
578
|
-
__param(4, (0, common_1.Optional)()),
|
|
579
|
-
__metadata("design:paramtypes", [ioredis_1.default, Object, worker_manager_1.WorkerManagerService,
|
|
580
|
-
index_manager_1.IndexManagerService,
|
|
581
|
-
service_queue_1.ServiceQueueManager])
|
|
582
|
-
], CronManagerService);
|
|
583
|
-
//# sourceMappingURL=cron-manager.service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cron-manager.service.js","sourceRoot":"","sources":["../../../src/services/cron-manager/cron-manager.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/cron-manager/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/cron-manager/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yDAAuC"}
|