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,591 +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 WorkerManagerService_1;
|
|
18
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
-
exports.WorkerManagerService = void 0;
|
|
20
|
-
const common_1 = require("@nestjs/common");
|
|
21
|
-
const bullmq_1 = require("bullmq");
|
|
22
|
-
const ioredis_1 = __importDefault(require("ioredis"));
|
|
23
|
-
const uuid_1 = require("uuid");
|
|
24
|
-
const utils_1 = require("../../utils");
|
|
25
|
-
const constants_1 = require("../constants");
|
|
26
|
-
/**
|
|
27
|
-
* WorkerManagerService
|
|
28
|
-
*
|
|
29
|
-
* Manages worker lifecycle with features from both Whatsapi and bl-blackjack-service:
|
|
30
|
-
*
|
|
31
|
-
* - Dynamic worker creation per entity (user message queue workers, table workers)
|
|
32
|
-
* - Heartbeat-based liveness tracking with TTL
|
|
33
|
-
* - Graceful shutdown via Redis pub/sub
|
|
34
|
-
* - Node-aware worker tracking (multi-instance support)
|
|
35
|
-
* - Automatic cleanup on application shutdown
|
|
36
|
-
*
|
|
37
|
-
* Architecture Notes:
|
|
38
|
-
* - Each worker registers itself with a heartbeat TTL
|
|
39
|
-
* - Workers subscribe to their own shutdown channel
|
|
40
|
-
* - A cron process monitors worker health and spawns/terminates as needed
|
|
41
|
-
* - On application shutdown, all node workers are signaled to close gracefully
|
|
42
|
-
*
|
|
43
|
-
* @example
|
|
44
|
-
* ```typescript
|
|
45
|
-
* const worker = await workerManager.createWorker({
|
|
46
|
-
* workerName: `user-${userId}-worker`,
|
|
47
|
-
* queueName: `user-${userId}-queue`,
|
|
48
|
-
* processor: async (job) => {
|
|
49
|
-
* // Process job
|
|
50
|
-
* },
|
|
51
|
-
* });
|
|
52
|
-
* ```
|
|
53
|
-
*/
|
|
54
|
-
let WorkerManagerService = WorkerManagerService_1 = class WorkerManagerService {
|
|
55
|
-
constructor(redis, config) {
|
|
56
|
-
this.redis = redis;
|
|
57
|
-
this.config = config;
|
|
58
|
-
this.logger = new common_1.Logger(WorkerManagerService_1.name);
|
|
59
|
-
this.workers = new Map();
|
|
60
|
-
this.workerStates = new Map();
|
|
61
|
-
this.heartbeatIntervals = new Map();
|
|
62
|
-
this.shutdownSubscriptions = new Map();
|
|
63
|
-
/** Tracks the last job completion time per worker (for idle detection) */
|
|
64
|
-
this.lastJobCompletedAt = new Map();
|
|
65
|
-
this.subscriberClient = null;
|
|
66
|
-
this.nodeId = this.generateNodeId();
|
|
67
|
-
this.keyPrefix = (0, utils_1.resolveKeyPrefix)(config);
|
|
68
|
-
this.logger.log(`WorkerManager initialized with nodeId: ${this.nodeId}`);
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Initialize subscriber client for pub/sub communication.
|
|
72
|
-
*/
|
|
73
|
-
onModuleInit() {
|
|
74
|
-
this.subscriberClient = this.createSubscriberClient();
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Create a new worker with automatic lifecycle management.
|
|
78
|
-
*
|
|
79
|
-
* This method:
|
|
80
|
-
* 1. Creates a BullMQ Worker
|
|
81
|
-
* 2. Sets up heartbeat TTL tracking
|
|
82
|
-
* 3. Subscribes to shutdown channel for graceful termination
|
|
83
|
-
* 4. Registers lifecycle event handlers
|
|
84
|
-
*/
|
|
85
|
-
async createWorker(options) {
|
|
86
|
-
const { workerName, queueName, config, events, processor } = options;
|
|
87
|
-
// Check if worker already exists
|
|
88
|
-
if (await this.workerExists(workerName)) {
|
|
89
|
-
this.logger.warn(`Worker ${workerName} already exists, skipping creation`);
|
|
90
|
-
const existingWorker = this.workers.get(workerName);
|
|
91
|
-
if (existingWorker)
|
|
92
|
-
return existingWorker;
|
|
93
|
-
}
|
|
94
|
-
this.logger.log(`Creating worker: ${workerName} for queue: ${queueName}`);
|
|
95
|
-
const workerConfig = this.mergeWorkerConfig(config);
|
|
96
|
-
this.logger.log(`Worker ${workerName} config: concurrency=${workerConfig.concurrency}`);
|
|
97
|
-
// IMMEDIATELY create heartbeat key BEFORE creating BullMQ worker
|
|
98
|
-
// This closes the race condition window where another scaling cycle
|
|
99
|
-
// could see "no worker exists" and try to create a duplicate
|
|
100
|
-
await this.resetWorkerHeartbeat(workerName, workerConfig.heartbeatTTL || 3);
|
|
101
|
-
// Create the BullMQ worker
|
|
102
|
-
const worker = new bullmq_1.Worker(queueName, processor, {
|
|
103
|
-
connection: this.redis.duplicate(),
|
|
104
|
-
concurrency: workerConfig.concurrency,
|
|
105
|
-
stalledInterval: workerConfig.stalledInterval,
|
|
106
|
-
lockDuration: workerConfig.lockDuration,
|
|
107
|
-
maxStalledCount: workerConfig.maxStalledCount,
|
|
108
|
-
});
|
|
109
|
-
// Store worker instance
|
|
110
|
-
this.workers.set(workerName, worker);
|
|
111
|
-
// Initialize worker state
|
|
112
|
-
const state = {
|
|
113
|
-
workerId: (0, uuid_1.v4)(),
|
|
114
|
-
workerName,
|
|
115
|
-
nodeId: this.nodeId,
|
|
116
|
-
status: 'starting',
|
|
117
|
-
createdAt: new Date(),
|
|
118
|
-
lastHeartbeat: new Date(),
|
|
119
|
-
};
|
|
120
|
-
this.workerStates.set(workerName, state);
|
|
121
|
-
// Set up heartbeat
|
|
122
|
-
this.setupHeartbeat(workerName, workerConfig.heartbeatTTL || 3);
|
|
123
|
-
// Set up shutdown subscription
|
|
124
|
-
await this.subscribeToShutdown(workerName, worker);
|
|
125
|
-
// Register event handlers
|
|
126
|
-
this.registerWorkerEvents(worker, workerName, events);
|
|
127
|
-
return worker;
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Check if a worker exists and is alive (has valid heartbeat).
|
|
131
|
-
* Uses a global alive key for O(1) lookup instead of KEYS scan.
|
|
132
|
-
* The alive key is maintained alongside the per-node heartbeat key.
|
|
133
|
-
*/
|
|
134
|
-
async workerExists(workerName) {
|
|
135
|
-
const aliveKey = this.getGlobalAliveKey(workerName);
|
|
136
|
-
const exists = await this.redis.exists(aliveKey);
|
|
137
|
-
return exists === 1;
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Atomically claim a worker slot using SET NX.
|
|
141
|
-
* Returns true if this pod claimed the slot (and should create the worker).
|
|
142
|
-
* Returns false if another pod already claimed it.
|
|
143
|
-
* Uses a separate claim key (not the alive key) so that workerExists()
|
|
144
|
-
* doesn't see the claim as an existing worker before creation finishes.
|
|
145
|
-
*/
|
|
146
|
-
async claimWorkerSlot(workerName, ttlSeconds = 10) {
|
|
147
|
-
const claimKey = `${this.keyPrefix}:worker-claim:${workerName}`;
|
|
148
|
-
// SET NX — only succeeds if key doesn't exist (atomic claim)
|
|
149
|
-
const result = await this.redis.set(claimKey, this.nodeId, 'EX', ttlSeconds, 'NX');
|
|
150
|
-
return result === 'OK';
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Check if a worker exists on THIS node specifically.
|
|
154
|
-
* Use this when you need node-local checks (e.g., for cleanup).
|
|
155
|
-
*/
|
|
156
|
-
async workerExistsOnThisNode(workerName) {
|
|
157
|
-
const key = this.getWorkerKey(workerName);
|
|
158
|
-
const exists = await this.redis.exists(key);
|
|
159
|
-
return exists === 1;
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Get all running workers for the current node.
|
|
163
|
-
*/
|
|
164
|
-
async getNodeWorkers() {
|
|
165
|
-
const pattern = `${this.keyPrefix}:worker:${this.nodeId}:*`;
|
|
166
|
-
const keys = await this.redis.keys(pattern);
|
|
167
|
-
return keys.map((key) => key.split(':').pop());
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* Get all running workers across all nodes.
|
|
171
|
-
*/
|
|
172
|
-
async getAllWorkers() {
|
|
173
|
-
const pattern = `${this.keyPrefix}:worker:*:*`;
|
|
174
|
-
const keys = await this.redis.keys(pattern);
|
|
175
|
-
return keys.map((key) => key.split(':').pop());
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Get all workers for a specific entity.
|
|
179
|
-
* Uses the worker heartbeat TTL keys as the single source of truth.
|
|
180
|
-
* Worker names follow the pattern: {entityId}-worker
|
|
181
|
-
*/
|
|
182
|
-
async getEntityWorkers(entityType, entityId) {
|
|
183
|
-
// Worker heartbeat keys follow pattern: {prefix}:worker:{nodeId}:{workerName}
|
|
184
|
-
// Worker names follow pattern: {entityId}-worker
|
|
185
|
-
const workerName = `${entityId}-worker`;
|
|
186
|
-
const pattern = `${this.keyPrefix}:worker:*:${workerName}`;
|
|
187
|
-
const keys = await this.redis.keys(pattern);
|
|
188
|
-
return keys.map((key) => key.split(':').pop());
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Signal a worker to close gracefully via pub/sub.
|
|
192
|
-
*/
|
|
193
|
-
async signalWorkerClose(workerName) {
|
|
194
|
-
const channel = this.getWorkerShutdownChannel(workerName);
|
|
195
|
-
await this.redis.publish(channel, 'shutdown');
|
|
196
|
-
this.logger.log(`Sent shutdown signal to worker: ${workerName}`);
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* Signal all workers on current node to close.
|
|
200
|
-
*/
|
|
201
|
-
async signalNodeWorkersClose() {
|
|
202
|
-
const workers = await this.getNodeWorkers();
|
|
203
|
-
this.logger.log(`Signaling ${workers.length} workers to close on node ${this.nodeId}`);
|
|
204
|
-
await Promise.all(workers.map((workerName) => this.signalWorkerClose(workerName)));
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* Close all workers managed by this instance.
|
|
208
|
-
* This is the public API for external callers to gracefully shutdown workers.
|
|
209
|
-
*/
|
|
210
|
-
async closeAllWorkers(timeoutMs = 30000) {
|
|
211
|
-
this.logger.warn(`Closing all workers on node ${this.nodeId}`);
|
|
212
|
-
// Clear all heartbeat intervals
|
|
213
|
-
for (const [workerName, interval] of this.heartbeatIntervals) {
|
|
214
|
-
clearInterval(interval);
|
|
215
|
-
this.heartbeatIntervals.delete(workerName);
|
|
216
|
-
}
|
|
217
|
-
// Signal all workers to close
|
|
218
|
-
await this.signalNodeWorkersClose();
|
|
219
|
-
// Wait for workers to close
|
|
220
|
-
try {
|
|
221
|
-
await this.waitForWorkersToClose(timeoutMs);
|
|
222
|
-
}
|
|
223
|
-
catch (error) {
|
|
224
|
-
this.logger.warn(`Some workers did not close gracefully: ${error}`);
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
/**
|
|
228
|
-
* Wait for all node workers to close with timeout.
|
|
229
|
-
*/
|
|
230
|
-
async waitForWorkersToClose(timeoutMs = 60000) {
|
|
231
|
-
const startTime = Date.now();
|
|
232
|
-
while (Date.now() - startTime < timeoutMs) {
|
|
233
|
-
const workers = await this.getNodeWorkers();
|
|
234
|
-
if (workers.length === 0) {
|
|
235
|
-
this.logger.log(`All workers on node ${this.nodeId} have closed.`);
|
|
236
|
-
return;
|
|
237
|
-
}
|
|
238
|
-
this.logger.debug(`Waiting... ${workers.length} workers remaining.`);
|
|
239
|
-
await this.sleep(1000);
|
|
240
|
-
}
|
|
241
|
-
throw new Error(`Timeout reached while waiting for workers to close on node ${this.nodeId}`);
|
|
242
|
-
}
|
|
243
|
-
/**
|
|
244
|
-
* Reset worker heartbeat TTL.
|
|
245
|
-
*/
|
|
246
|
-
async resetWorkerHeartbeat(workerName, ttlSeconds) {
|
|
247
|
-
const ttl = ttlSeconds || this.config.workerDefaults?.heartbeatTTL || 3;
|
|
248
|
-
const nodeKey = this.getWorkerKey(workerName);
|
|
249
|
-
const aliveKey = this.getGlobalAliveKey(workerName);
|
|
250
|
-
// Pipeline: refresh both keys in a single Redis round-trip
|
|
251
|
-
const pipeline = this.redis.pipeline();
|
|
252
|
-
pipeline.set(nodeKey, '1', 'EX', ttl);
|
|
253
|
-
pipeline.set(aliveKey, this.nodeId, 'EX', ttl);
|
|
254
|
-
await pipeline.exec();
|
|
255
|
-
// Update local state
|
|
256
|
-
const state = this.workerStates.get(workerName);
|
|
257
|
-
if (state) {
|
|
258
|
-
state.lastHeartbeat = new Date();
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
/**
|
|
262
|
-
* Remove worker heartbeat (mark as dead).
|
|
263
|
-
*/
|
|
264
|
-
async removeWorkerHeartbeat(workerName) {
|
|
265
|
-
const nodeKey = this.getWorkerKey(workerName);
|
|
266
|
-
const aliveKey = this.getGlobalAliveKey(workerName);
|
|
267
|
-
const idleKey = this.getWorkerIdleKey(workerName);
|
|
268
|
-
// Pipeline: remove all keys in a single round-trip
|
|
269
|
-
const pipeline = this.redis.pipeline();
|
|
270
|
-
pipeline.del(nodeKey);
|
|
271
|
-
pipeline.del(aliveKey);
|
|
272
|
-
pipeline.del(idleKey);
|
|
273
|
-
await pipeline.exec();
|
|
274
|
-
this.logger.debug(`Removed heartbeat for worker: ${workerName}`);
|
|
275
|
-
}
|
|
276
|
-
// =========================================================================
|
|
277
|
-
// IDLE TRACKING METHODS
|
|
278
|
-
// =========================================================================
|
|
279
|
-
/**
|
|
280
|
-
* Mark that a worker has completed a job (resets idle counter).
|
|
281
|
-
* Called internally when job completes.
|
|
282
|
-
*/
|
|
283
|
-
markWorkerActive(workerName) {
|
|
284
|
-
this.lastJobCompletedAt.set(workerName, Date.now());
|
|
285
|
-
// Reset Redis idle counter to 0
|
|
286
|
-
this.resetWorkerIdleCounter(workerName).catch((err) => this.logger.warn(`Failed to reset idle counter for ${workerName}: ${err.message}`));
|
|
287
|
-
}
|
|
288
|
-
/**
|
|
289
|
-
* Get the idle seconds counter for a worker from Redis.
|
|
290
|
-
* This is incremented by the heartbeat and reset when a job completes.
|
|
291
|
-
*/
|
|
292
|
-
async getWorkerIdleSeconds(workerName) {
|
|
293
|
-
const key = this.getWorkerIdleKey(workerName);
|
|
294
|
-
const value = await this.redis.get(key);
|
|
295
|
-
return value ? parseInt(value, 10) : 0;
|
|
296
|
-
}
|
|
297
|
-
/**
|
|
298
|
-
* Reset the idle counter for a worker (called when job completes).
|
|
299
|
-
*/
|
|
300
|
-
async resetWorkerIdleCounter(workerName) {
|
|
301
|
-
const key = this.getWorkerIdleKey(workerName);
|
|
302
|
-
await this.redis.set(key, '0');
|
|
303
|
-
}
|
|
304
|
-
/**
|
|
305
|
-
* Increment the idle counter for a worker (called by heartbeat).
|
|
306
|
-
* Returns the new idle seconds value.
|
|
307
|
-
*/
|
|
308
|
-
async incrementWorkerIdleCounter(workerName, incrementBy = 1) {
|
|
309
|
-
const key = this.getWorkerIdleKey(workerName);
|
|
310
|
-
const newValue = await this.redis.incrby(key, incrementBy);
|
|
311
|
-
return newValue;
|
|
312
|
-
}
|
|
313
|
-
/**
|
|
314
|
-
* Remove the idle counter for a worker (cleanup).
|
|
315
|
-
*/
|
|
316
|
-
async removeWorkerIdleCounter(workerName) {
|
|
317
|
-
const key = this.getWorkerIdleKey(workerName);
|
|
318
|
-
await this.redis.del(key);
|
|
319
|
-
}
|
|
320
|
-
/**
|
|
321
|
-
* Check if a worker is idle based on threshold.
|
|
322
|
-
* @param workerName - Worker name
|
|
323
|
-
* @param thresholdSeconds - Idle threshold in seconds (default: 15)
|
|
324
|
-
*/
|
|
325
|
-
async isWorkerIdle(workerName, thresholdSeconds = 15) {
|
|
326
|
-
const idleSeconds = await this.getWorkerIdleSeconds(workerName);
|
|
327
|
-
const isIdle = idleSeconds >= thresholdSeconds;
|
|
328
|
-
if (isIdle) {
|
|
329
|
-
this.logger.debug(`Worker ${workerName} is idle: ${idleSeconds}s >= ${thresholdSeconds}s threshold`);
|
|
330
|
-
}
|
|
331
|
-
return isIdle;
|
|
332
|
-
}
|
|
333
|
-
/**
|
|
334
|
-
* Get the Redis key for a worker's idle counter.
|
|
335
|
-
*/
|
|
336
|
-
getWorkerIdleKey(workerName) {
|
|
337
|
-
return `${this.keyPrefix}:worker-idle:${workerName}`;
|
|
338
|
-
}
|
|
339
|
-
// =========================================================================
|
|
340
|
-
// PUBLIC METHODS (CONTINUED)
|
|
341
|
-
// =========================================================================
|
|
342
|
-
/**
|
|
343
|
-
* Get the node ID for this instance.
|
|
344
|
-
*/
|
|
345
|
-
getNodeId() {
|
|
346
|
-
return this.nodeId;
|
|
347
|
-
}
|
|
348
|
-
/**
|
|
349
|
-
* Index a worker for an entity (for entity-based tracking).
|
|
350
|
-
*/
|
|
351
|
-
async indexEntityWorker(entityType, entityId, workerId, ttlSeconds = 3) {
|
|
352
|
-
const key = `${this.keyPrefix}:entity-worker:${entityType}:${entityId}:${workerId}`;
|
|
353
|
-
await this.redis.set(key, '1', 'EX', ttlSeconds);
|
|
354
|
-
}
|
|
355
|
-
/**
|
|
356
|
-
* Remove entity worker index.
|
|
357
|
-
*/
|
|
358
|
-
async removeEntityWorkerIndex(entityType, entityId, workerId) {
|
|
359
|
-
const key = `${this.keyPrefix}:entity-worker:${entityType}:${entityId}:${workerId}`;
|
|
360
|
-
await this.redis.del(key);
|
|
361
|
-
}
|
|
362
|
-
/**
|
|
363
|
-
* Get subscriber client for pub/sub operations.
|
|
364
|
-
*/
|
|
365
|
-
getSubscriberClient() {
|
|
366
|
-
if (!this.subscriberClient) {
|
|
367
|
-
this.subscriberClient = this.createSubscriberClient();
|
|
368
|
-
}
|
|
369
|
-
return this.subscriberClient;
|
|
370
|
-
}
|
|
371
|
-
/**
|
|
372
|
-
* Graceful shutdown on application termination.
|
|
373
|
-
*/
|
|
374
|
-
async onApplicationShutdown() {
|
|
375
|
-
this.logger.warn(`Application shutting down, closing workers on node ${this.nodeId}`);
|
|
376
|
-
// Clear all heartbeat intervals
|
|
377
|
-
for (const [workerName, interval] of this.heartbeatIntervals) {
|
|
378
|
-
clearInterval(interval);
|
|
379
|
-
this.heartbeatIntervals.delete(workerName);
|
|
380
|
-
}
|
|
381
|
-
// Signal all workers to close
|
|
382
|
-
await this.signalNodeWorkersClose();
|
|
383
|
-
// Wait for workers to close
|
|
384
|
-
try {
|
|
385
|
-
await this.waitForWorkersToClose(30000);
|
|
386
|
-
}
|
|
387
|
-
catch (error) {
|
|
388
|
-
this.logger.warn(`Some workers did not close gracefully: ${error}`);
|
|
389
|
-
}
|
|
390
|
-
// Close subscriber client
|
|
391
|
-
if (this.subscriberClient) {
|
|
392
|
-
await this.subscriberClient.quit();
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
// =========================================================================
|
|
396
|
-
// PRIVATE METHODS
|
|
397
|
-
// =========================================================================
|
|
398
|
-
/**
|
|
399
|
-
* Generate a unique node ID for this instance.
|
|
400
|
-
*/
|
|
401
|
-
generateNodeId() {
|
|
402
|
-
return (0, uuid_1.v4)();
|
|
403
|
-
}
|
|
404
|
-
/**
|
|
405
|
-
* Create a subscriber client for pub/sub.
|
|
406
|
-
*/
|
|
407
|
-
createSubscriberClient() {
|
|
408
|
-
return this.redis.duplicate();
|
|
409
|
-
}
|
|
410
|
-
/**
|
|
411
|
-
* Get the Redis key for a worker's heartbeat (per-node).
|
|
412
|
-
*/
|
|
413
|
-
getWorkerKey(workerName) {
|
|
414
|
-
return `${this.keyPrefix}:worker:${this.nodeId}:${workerName}`;
|
|
415
|
-
}
|
|
416
|
-
/**
|
|
417
|
-
* Get the global alive key for O(1) worker existence check.
|
|
418
|
-
* This key has the same TTL as the per-node heartbeat and is
|
|
419
|
-
* refreshed in the same pipeline. It replaces the O(N) KEYS scan
|
|
420
|
-
* with a single O(1) EXISTS call.
|
|
421
|
-
*/
|
|
422
|
-
getGlobalAliveKey(workerName) {
|
|
423
|
-
return `${this.keyPrefix}:worker-alive:${workerName}`;
|
|
424
|
-
}
|
|
425
|
-
/**
|
|
426
|
-
* Get the shutdown channel for a worker.
|
|
427
|
-
*/
|
|
428
|
-
getWorkerShutdownChannel(workerName) {
|
|
429
|
-
return `${this.keyPrefix}:worker:${workerName}:shutdown`;
|
|
430
|
-
}
|
|
431
|
-
/**
|
|
432
|
-
* Merge worker config with defaults.
|
|
433
|
-
*/
|
|
434
|
-
mergeWorkerConfig(config) {
|
|
435
|
-
const defaults = {
|
|
436
|
-
concurrency: 1,
|
|
437
|
-
stalledInterval: 1000,
|
|
438
|
-
lockDuration: 30000,
|
|
439
|
-
maxStalledCount: Number.MAX_SAFE_INTEGER,
|
|
440
|
-
heartbeatTTL: 3,
|
|
441
|
-
heartbeatInterval: 1000,
|
|
442
|
-
};
|
|
443
|
-
return { ...defaults, ...this.config.workerDefaults, ...config };
|
|
444
|
-
}
|
|
445
|
-
/**
|
|
446
|
-
* Set up heartbeat interval for a worker.
|
|
447
|
-
* Also increments idle counter on each heartbeat tick.
|
|
448
|
-
*/
|
|
449
|
-
setupHeartbeat(workerName, ttlSeconds) {
|
|
450
|
-
// Initialize idle counter to 0
|
|
451
|
-
this.resetWorkerIdleCounter(workerName).catch(() => { });
|
|
452
|
-
// Track last job completed as now (worker just started)
|
|
453
|
-
this.lastJobCompletedAt.set(workerName, Date.now());
|
|
454
|
-
const heartbeatIntervalMs = (ttlSeconds * 1000) / 2; // Update at half the TTL
|
|
455
|
-
const idleIncrementSeconds = Math.ceil(heartbeatIntervalMs / 1000); // Convert to seconds
|
|
456
|
-
const interval = setInterval(async () => {
|
|
457
|
-
try {
|
|
458
|
-
// Reset heartbeat TTL
|
|
459
|
-
await this.resetWorkerHeartbeat(workerName, ttlSeconds);
|
|
460
|
-
// Increment idle counter (will be reset to 0 when job completes)
|
|
461
|
-
const idleSeconds = await this.incrementWorkerIdleCounter(workerName, idleIncrementSeconds);
|
|
462
|
-
// Debug log every 10 seconds of idle time
|
|
463
|
-
if (idleSeconds > 0 && idleSeconds % 10 === 0) {
|
|
464
|
-
this.logger.debug(`Worker ${workerName} idle for ${idleSeconds}s`);
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
catch (error) {
|
|
468
|
-
this.logger.error(`Failed to reset heartbeat for worker ${workerName}:`, error);
|
|
469
|
-
}
|
|
470
|
-
}, heartbeatIntervalMs);
|
|
471
|
-
this.heartbeatIntervals.set(workerName, interval);
|
|
472
|
-
}
|
|
473
|
-
/**
|
|
474
|
-
* Subscribe to shutdown channel for graceful termination.
|
|
475
|
-
*/
|
|
476
|
-
async subscribeToShutdown(workerName, worker) {
|
|
477
|
-
const channel = this.getWorkerShutdownChannel(workerName);
|
|
478
|
-
const subscriber = this.getSubscriberClient();
|
|
479
|
-
await subscriber.subscribe(channel);
|
|
480
|
-
this.logger.debug(`Subscribed to shutdown channel: ${channel}`);
|
|
481
|
-
const messageHandler = async (msgChannel) => {
|
|
482
|
-
if (msgChannel === channel) {
|
|
483
|
-
this.logger.log(`Received shutdown signal for worker: ${workerName}`);
|
|
484
|
-
await this.closeWorker(workerName, worker);
|
|
485
|
-
}
|
|
486
|
-
};
|
|
487
|
-
subscriber.on('message', messageHandler);
|
|
488
|
-
// Store cleanup function
|
|
489
|
-
this.shutdownSubscriptions.set(workerName, () => {
|
|
490
|
-
subscriber.off('message', messageHandler);
|
|
491
|
-
subscriber.unsubscribe(channel).catch(() => { });
|
|
492
|
-
});
|
|
493
|
-
}
|
|
494
|
-
/**
|
|
495
|
-
* Close a worker and clean up resources.
|
|
496
|
-
*/
|
|
497
|
-
async closeWorker(workerName, worker) {
|
|
498
|
-
// Clear heartbeat interval
|
|
499
|
-
const interval = this.heartbeatIntervals.get(workerName);
|
|
500
|
-
if (interval) {
|
|
501
|
-
clearInterval(interval);
|
|
502
|
-
this.heartbeatIntervals.delete(workerName);
|
|
503
|
-
}
|
|
504
|
-
// Unsubscribe from shutdown channel
|
|
505
|
-
const cleanup = this.shutdownSubscriptions.get(workerName);
|
|
506
|
-
if (cleanup) {
|
|
507
|
-
cleanup();
|
|
508
|
-
this.shutdownSubscriptions.delete(workerName);
|
|
509
|
-
}
|
|
510
|
-
// Remove heartbeat
|
|
511
|
-
await this.removeWorkerHeartbeat(workerName);
|
|
512
|
-
// Close worker
|
|
513
|
-
await worker.close();
|
|
514
|
-
// Remove from maps
|
|
515
|
-
this.workers.delete(workerName);
|
|
516
|
-
this.workerStates.delete(workerName);
|
|
517
|
-
this.logger.log(`Worker ${workerName} closed and cleaned up.`);
|
|
518
|
-
}
|
|
519
|
-
/**
|
|
520
|
-
* Register event handlers for a worker.
|
|
521
|
-
*/
|
|
522
|
-
registerWorkerEvents(worker, workerName, events) {
|
|
523
|
-
worker.on('ready', async () => {
|
|
524
|
-
const state = this.workerStates.get(workerName);
|
|
525
|
-
if (state)
|
|
526
|
-
state.status = 'ready';
|
|
527
|
-
await this.resetWorkerHeartbeat(workerName);
|
|
528
|
-
this.logger.log(`Worker ${workerName} is ready.`);
|
|
529
|
-
if (events?.onReady) {
|
|
530
|
-
await events.onReady(worker, workerName);
|
|
531
|
-
}
|
|
532
|
-
});
|
|
533
|
-
worker.on('completed', async (job) => {
|
|
534
|
-
// Reset idle counter - worker is active
|
|
535
|
-
this.markWorkerActive(workerName);
|
|
536
|
-
this.logger.debug(`Worker ${workerName} completed job: ${job.id}`);
|
|
537
|
-
if (events?.onCompleted) {
|
|
538
|
-
await events.onCompleted(job, workerName);
|
|
539
|
-
}
|
|
540
|
-
});
|
|
541
|
-
worker.on('failed', async (job, error) => {
|
|
542
|
-
// Reset idle counter even on failure - worker was processing
|
|
543
|
-
this.markWorkerActive(workerName);
|
|
544
|
-
this.logger.error(`Worker ${workerName} failed job ${job?.id}: ${error.message}`);
|
|
545
|
-
if (events?.onFailed) {
|
|
546
|
-
await events.onFailed(job, error, workerName);
|
|
547
|
-
}
|
|
548
|
-
});
|
|
549
|
-
worker.on('progress', async (job, progress) => {
|
|
550
|
-
this.logger.debug(`Worker ${workerName} job ${job.id} progress: ${JSON.stringify(progress)}`);
|
|
551
|
-
if (events?.onProgress) {
|
|
552
|
-
await events.onProgress(job, progress);
|
|
553
|
-
}
|
|
554
|
-
});
|
|
555
|
-
worker.on('stalled', async (jobId) => {
|
|
556
|
-
this.logger.warn(`Worker ${workerName} job ${jobId} stalled`);
|
|
557
|
-
if (events?.onStalled) {
|
|
558
|
-
await events.onStalled(jobId, workerName);
|
|
559
|
-
}
|
|
560
|
-
});
|
|
561
|
-
worker.on('closing', () => {
|
|
562
|
-
const state = this.workerStates.get(workerName);
|
|
563
|
-
if (state)
|
|
564
|
-
state.status = 'closing';
|
|
565
|
-
this.logger.log(`Worker ${workerName} is closing...`);
|
|
566
|
-
if (events?.onClosing) {
|
|
567
|
-
events.onClosing(workerName);
|
|
568
|
-
}
|
|
569
|
-
});
|
|
570
|
-
worker.on('closed', async () => {
|
|
571
|
-
this.logger.log(`Worker ${workerName} closed.`);
|
|
572
|
-
if (events?.onClosed) {
|
|
573
|
-
await events.onClosed(workerName);
|
|
574
|
-
}
|
|
575
|
-
});
|
|
576
|
-
}
|
|
577
|
-
/**
|
|
578
|
-
* Sleep utility.
|
|
579
|
-
*/
|
|
580
|
-
sleep(ms) {
|
|
581
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
582
|
-
}
|
|
583
|
-
};
|
|
584
|
-
exports.WorkerManagerService = WorkerManagerService;
|
|
585
|
-
exports.WorkerManagerService = WorkerManagerService = WorkerManagerService_1 = __decorate([
|
|
586
|
-
(0, common_1.Injectable)(),
|
|
587
|
-
__param(0, (0, common_1.Inject)(constants_1.ATOMIC_QUEUES_REDIS)),
|
|
588
|
-
__param(1, (0, common_1.Inject)(constants_1.ATOMIC_QUEUES_CONFIG)),
|
|
589
|
-
__metadata("design:paramtypes", [ioredis_1.default, Object])
|
|
590
|
-
], WorkerManagerService);
|
|
591
|
-
//# sourceMappingURL=worker-manager.service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"worker-manager.service.js","sourceRoot":"","sources":["../../../src/services/worker-manager/worker-manager.service.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/helpers.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC"}
|
package/dist/utils/helpers.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./job.utils"), exports);
|
|
18
|
-
__exportStar(require("./async.utils"), exports);
|
|
19
|
-
__exportStar(require("./naming.utils"), exports);
|
|
20
|
-
__exportStar(require("./rate-limit.utils"), exports);
|
|
21
|
-
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,gDAA8B;AAC9B,iDAA+B;AAC/B,qDAAmC"}
|