@shivaedev/jobs 0.37.1 → 0.40.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/CHANGELOG.md +23 -0
- package/README.md +43 -10
- package/dist/server/InspectionEngine.d.ts +27 -0
- package/dist/server/InspectionEngine.d.ts.map +1 -0
- package/dist/server/InspectionEngine.js +4 -0
- package/dist/server/InspectionEngine.js.map +1 -0
- package/dist/server/JobQueues.d.ts +6 -0
- package/dist/server/JobQueues.d.ts.map +1 -0
- package/dist/server/JobQueues.js +4 -0
- package/dist/server/JobQueues.js.map +1 -0
- package/dist/server/PgBoss.d.ts +1 -1
- package/dist/server/PgBoss.d.ts.map +1 -1
- package/dist/server/SchemaConnection.d.ts +7 -0
- package/dist/server/SchemaConnection.d.ts.map +1 -0
- package/dist/server/SchemaConnection.js +4 -0
- package/dist/server/SchemaConnection.js.map +1 -0
- package/dist/server/{internal/acquireClient.d.ts → acquireClient.d.ts} +3 -3
- package/dist/server/acquireClient.d.ts.map +1 -0
- package/dist/server/acquireClient.js.map +1 -0
- package/dist/server/adapters/batchClockOffset.js +1 -1
- package/dist/server/adapters/batchClockOffset.js.map +1 -1
- package/dist/server/adapters/batchHandler.d.ts.map +1 -1
- package/dist/server/adapters/batchHandler.js +4 -4
- package/dist/server/adapters/batchHandler.js.map +1 -1
- package/dist/server/adapters/clientErrorLogger.js +1 -1
- package/dist/server/adapters/clientErrorLogger.js.map +1 -1
- package/dist/server/adapters/clientErrorSubscription.js +1 -1
- package/dist/server/adapters/clientErrorSubscription.js.map +1 -1
- package/dist/server/{internal → adapters}/countsFor.d.ts.map +1 -1
- package/dist/server/{internal → adapters}/countsFor.js +1 -1
- package/dist/server/{internal → adapters}/countsFor.js.map +1 -1
- package/dist/server/adapters/deferralCount.d.ts.map +1 -1
- package/dist/server/adapters/deferralCount.js +1 -1
- package/dist/server/adapters/deferralCount.js.map +1 -1
- package/dist/server/{internal → adapters}/ensureQueue.d.ts.map +1 -1
- package/dist/server/{internal → adapters}/ensureQueue.js.map +1 -1
- package/dist/server/{internal → adapters}/healthFor.d.ts.map +1 -1
- package/dist/server/{internal → adapters}/healthFor.js.map +1 -1
- package/dist/server/adapters/inspection.d.ts +1 -2
- package/dist/server/adapters/inspection.d.ts.map +1 -1
- package/dist/server/adapters/inspection.js +20 -24
- package/dist/server/adapters/inspection.js.map +1 -1
- package/dist/server/adapters/inspectionDeferrals.d.ts.map +1 -1
- package/dist/server/adapters/inspectionDeferrals.js +1 -1
- package/dist/server/adapters/inspectionDeferrals.js.map +1 -1
- package/dist/server/adapters/inspectionJobs.d.ts +1 -43
- package/dist/server/adapters/inspectionJobs.d.ts.map +1 -1
- package/dist/server/adapters/inspectionJobs.js +1 -5
- package/dist/server/adapters/inspectionJobs.js.map +1 -1
- package/dist/server/adapters/inspectionLayer.d.ts +4 -0
- package/dist/server/adapters/inspectionLayer.d.ts.map +1 -0
- package/dist/server/adapters/inspectionLayer.js +7 -0
- package/dist/server/adapters/inspectionLayer.js.map +1 -0
- package/dist/server/adapters/inspectionPlan.js +1 -1
- package/dist/server/adapters/inspectionPlan.js.map +1 -1
- package/dist/server/adapters/inspectionReads.d.ts +12 -46
- package/dist/server/adapters/inspectionReads.d.ts.map +1 -1
- package/dist/server/adapters/inspectionReads.js +3 -3
- package/dist/server/adapters/inspectionReads.js.map +1 -1
- package/dist/server/adapters/inspectionSnapshot.d.ts +9 -4
- package/dist/server/adapters/inspectionSnapshot.d.ts.map +1 -1
- package/dist/server/adapters/inspectionSnapshot.js +17 -26
- package/dist/server/adapters/inspectionSnapshot.js.map +1 -1
- package/dist/server/adapters/installSchema.d.ts.map +1 -1
- package/dist/server/adapters/installSchema.js +5 -4
- package/dist/server/adapters/installSchema.js.map +1 -1
- package/dist/server/adapters/jobEngine.d.ts +1 -1
- package/dist/server/adapters/jobEngine.d.ts.map +1 -1
- package/dist/server/adapters/jobEngine.js.map +1 -1
- package/dist/server/adapters/lifecycle.d.ts +1 -1
- package/dist/server/adapters/lifecycle.d.ts.map +1 -1
- package/dist/server/adapters/lifecycle.js +2 -2
- package/dist/server/adapters/lifecycle.js.map +1 -1
- package/dist/server/adapters/listJobs.d.ts +1 -1
- package/dist/server/adapters/listJobs.d.ts.map +1 -1
- package/dist/server/adapters/listJobs.js +1 -1
- package/dist/server/adapters/listJobs.js.map +1 -1
- package/dist/server/adapters/makeService.d.ts +4 -0
- package/dist/server/adapters/makeService.d.ts.map +1 -0
- package/dist/server/adapters/makeService.js +26 -0
- package/dist/server/adapters/makeService.js.map +1 -0
- package/dist/server/adapters/operationsLayer.d.ts +4 -0
- package/dist/server/adapters/operationsLayer.d.ts.map +1 -0
- package/dist/server/adapters/operationsLayer.js +17 -0
- package/dist/server/adapters/operationsLayer.js.map +1 -0
- package/dist/server/{internal → adapters}/pgBossDefinitionLayer.d.ts.map +1 -1
- package/dist/server/{internal → adapters}/pgBossDefinitionLayer.js +7 -9
- package/dist/server/adapters/pgBossDefinitionLayer.js.map +1 -0
- package/dist/server/{internal → adapters}/register.d.ts +2 -2
- package/dist/server/adapters/register.d.ts.map +1 -0
- package/dist/server/{internal → adapters}/register.js +9 -9
- package/dist/server/adapters/register.js.map +1 -0
- package/dist/server/adapters/registerReleasedJobs.d.ts +7 -0
- package/dist/server/adapters/registerReleasedJobs.d.ts.map +1 -0
- package/dist/server/{internal → adapters}/registerReleasedJobs.js +5 -4
- package/dist/server/adapters/registerReleasedJobs.js.map +1 -0
- package/dist/server/adapters/registerWorker.d.ts +1 -1
- package/dist/server/adapters/registerWorker.d.ts.map +1 -1
- package/dist/server/adapters/registerWorker.js +6 -5
- package/dist/server/adapters/registerWorker.js.map +1 -1
- package/dist/server/adapters/retireJobs.d.ts.map +1 -1
- package/dist/server/adapters/retireJobs.js +1 -1
- package/dist/server/adapters/retireJobs.js.map +1 -1
- package/dist/server/adapters/runSchemaPlan.d.ts +4 -4
- package/dist/server/adapters/runSchemaPlan.d.ts.map +1 -1
- package/dist/server/adapters/runSchemaPlan.js +7 -4
- package/dist/server/adapters/runSchemaPlan.js.map +1 -1
- package/dist/server/adapters/settleDeferral.d.ts +1 -1
- package/dist/server/adapters/settleDeferral.d.ts.map +1 -1
- package/dist/server/adapters/settleDeferral.js +2 -2
- package/dist/server/adapters/settleDeferral.js.map +1 -1
- package/dist/server/clientErrors.d.ts.map +1 -0
- package/dist/server/clientErrors.js.map +1 -0
- package/dist/server/deadLetterResolutionPlan.d.ts.map +1 -0
- package/dist/server/{internal/deadLetterResolutionPlan.js → deadLetterResolutionPlan.js} +1 -1
- package/dist/server/deadLetterResolutionPlan.js.map +1 -0
- package/dist/server/deadlineOf.d.ts.map +1 -0
- package/dist/server/deadlineOf.js.map +1 -0
- package/dist/server/deferrableAttempt.d.ts +6 -0
- package/dist/server/deferrableAttempt.d.ts.map +1 -0
- package/dist/server/{internal/deferrableAttempt.js → deferrableAttempt.js} +2 -2
- package/dist/server/deferrableAttempt.js.map +1 -0
- package/dist/server/deferral.d.ts.map +1 -0
- package/dist/server/deferral.js.map +1 -0
- package/dist/server/deferralStorePlan.d.ts.map +1 -0
- package/dist/server/{internal/deferralStorePlan.js → deferralStorePlan.js} +2 -2
- package/dist/server/deferralStorePlan.js.map +1 -0
- package/dist/server/defineSchedule.js +1 -1
- package/dist/server/defineSchedule.js.map +1 -1
- package/dist/server/definition.d.ts.map +1 -1
- package/dist/server/definition.js +1 -1
- package/dist/server/definition.js.map +1 -1
- package/dist/server/definitionOptions.d.ts.map +1 -0
- package/dist/server/definitionOptions.js.map +1 -0
- package/dist/server/engine.d.ts.map +1 -0
- package/dist/server/engine.js.map +1 -0
- package/dist/server/enqueuePayload.d.ts +6 -0
- package/dist/server/enqueuePayload.d.ts.map +1 -0
- package/dist/server/enqueuePayload.js +29 -0
- package/dist/server/enqueuePayload.js.map +1 -0
- package/dist/server/error.js +1 -1
- package/dist/server/error.js.map +1 -1
- package/dist/server/failureOutput.d.ts.map +1 -0
- package/dist/server/failureOutput.js.map +1 -0
- package/dist/server/getJob.d.ts +88 -0
- package/dist/server/getJob.d.ts.map +1 -0
- package/dist/server/{internal/jobControl.js → getJob.js} +7 -9
- package/dist/server/getJob.js.map +1 -0
- package/dist/server/inspection.d.ts +13 -80
- package/dist/server/inspection.d.ts.map +1 -1
- package/dist/server/inspection.js +4 -39
- package/dist/server/inspection.js.map +1 -1
- package/dist/server/{internal/operations/jobs.d.ts → inspectionJobs.d.ts} +8 -6
- package/dist/server/inspectionJobs.d.ts.map +1 -0
- package/dist/server/inspectionJobs.js +9 -0
- package/dist/server/inspectionJobs.js.map +1 -0
- package/dist/server/inspectionSnapshot.d.ts +82 -0
- package/dist/server/inspectionSnapshot.d.ts.map +1 -0
- package/dist/server/inspectionSnapshot.js +16 -0
- package/dist/server/inspectionSnapshot.js.map +1 -0
- package/dist/server/jobListings.d.ts +46 -0
- package/dist/server/jobListings.d.ts.map +1 -0
- package/dist/server/{internal/jobListings.js → jobListings.js} +9 -8
- package/dist/server/jobListings.js.map +1 -0
- package/dist/server/jobStorePlans.d.ts.map +1 -0
- package/dist/server/{internal/jobStorePlans.js → jobStorePlans.js} +2 -2
- package/dist/server/jobStorePlans.js.map +1 -0
- package/dist/server/lifecycle.d.ts.map +1 -0
- package/dist/server/lifecycle.js.map +1 -0
- package/dist/server/retryWake.d.ts.map +1 -0
- package/dist/server/retryWake.js.map +1 -0
- package/dist/server/runQueueWorker.d.ts +8 -0
- package/dist/server/runQueueWorker.d.ts.map +1 -0
- package/dist/server/{internal/runQueueWorker.js → runQueueWorker.js} +6 -4
- package/dist/server/runQueueWorker.js.map +1 -0
- package/dist/server/service.d.ts.map +1 -1
- package/dist/server/service.js +3 -3
- package/dist/server/service.js.map +1 -1
- package/dist/server/services/inspection/busy.d.ts +4 -0
- package/dist/server/services/inspection/busy.d.ts.map +1 -0
- package/dist/server/services/inspection/busy.js +7 -0
- package/dist/server/services/inspection/busy.js.map +1 -0
- package/dist/server/services/inspection/changes.d.ts +9 -0
- package/dist/server/services/inspection/changes.d.ts.map +1 -0
- package/dist/server/services/inspection/changes.js +8 -0
- package/dist/server/services/inspection/changes.js.map +1 -0
- package/dist/server/services/inspection/counts.d.ts +6 -0
- package/dist/server/services/inspection/counts.d.ts.map +1 -0
- package/dist/server/services/inspection/counts.js +8 -0
- package/dist/server/services/inspection/counts.js.map +1 -0
- package/dist/server/services/inspection/deferred.d.ts +7 -0
- package/dist/server/services/inspection/deferred.d.ts.map +1 -0
- package/dist/server/services/inspection/deferred.js +7 -0
- package/dist/server/services/inspection/deferred.js.map +1 -0
- package/dist/server/services/inspection/health.d.ts +6 -0
- package/dist/server/services/inspection/health.d.ts.map +1 -0
- package/dist/server/services/inspection/health.js +8 -0
- package/dist/server/services/inspection/health.js.map +1 -0
- package/dist/server/services/inspection/queue.d.ts +4 -0
- package/dist/server/services/inspection/queue.d.ts.map +1 -0
- package/dist/server/services/inspection/queue.js +7 -0
- package/dist/server/services/inspection/queue.js.map +1 -0
- package/dist/server/services/inspection/schedules.d.ts +4 -0
- package/dist/server/services/inspection/schedules.d.ts.map +1 -0
- package/dist/server/services/inspection/schedules.js +7 -0
- package/dist/server/services/inspection/schedules.js.map +1 -0
- package/dist/server/services/inspection/schemaVersion.d.ts +4 -0
- package/dist/server/services/inspection/schemaVersion.d.ts.map +1 -0
- package/dist/server/services/inspection/schemaVersion.js +7 -0
- package/dist/server/services/inspection/schemaVersion.js.map +1 -0
- package/dist/server/services/inspection/service.d.ts +40 -0
- package/dist/server/services/inspection/service.d.ts.map +1 -0
- package/dist/server/services/inspection/service.js +21 -0
- package/dist/server/services/inspection/service.js.map +1 -0
- package/dist/server/services/inspection/snapshot.d.ts +12 -0
- package/dist/server/services/inspection/snapshot.d.ts.map +1 -0
- package/dist/server/services/inspection/snapshot.js +7 -0
- package/dist/server/services/inspection/snapshot.js.map +1 -0
- package/dist/server/services/inspection/storedJobs.d.ts +6 -0
- package/dist/server/services/inspection/storedJobs.d.ts.map +1 -0
- package/dist/server/services/inspection/storedJobs.js +7 -0
- package/dist/server/services/inspection/storedJobs.js.map +1 -0
- package/dist/server/services/operations/counts.d.ts +6 -0
- package/dist/server/services/operations/counts.d.ts.map +1 -0
- package/dist/server/services/operations/counts.js +8 -0
- package/dist/server/services/operations/counts.js.map +1 -0
- package/dist/server/services/operations/deleteQueue.d.ts +4 -0
- package/dist/server/services/operations/deleteQueue.d.ts.map +1 -0
- package/dist/server/services/operations/deleteQueue.js +7 -0
- package/dist/server/services/operations/deleteQueue.js.map +1 -0
- package/dist/server/services/operations/enqueue.d.ts +5 -0
- package/dist/server/services/operations/enqueue.d.ts.map +1 -0
- package/dist/server/services/operations/enqueue.js +12 -0
- package/dist/server/services/operations/enqueue.js.map +1 -0
- package/dist/server/services/operations/getJob.d.ts +4 -0
- package/dist/server/services/operations/getJob.d.ts.map +1 -0
- package/dist/server/services/operations/getJob.js +7 -0
- package/dist/server/services/operations/getJob.js.map +1 -0
- package/dist/server/services/operations/health.d.ts +7 -0
- package/dist/server/services/operations/health.d.ts.map +1 -0
- package/dist/server/services/operations/health.js +10 -0
- package/dist/server/services/operations/health.js.map +1 -0
- package/dist/server/services/operations/listJobs.d.ts +6 -0
- package/dist/server/services/operations/listJobs.d.ts.map +1 -0
- package/dist/server/services/operations/listJobs.js +7 -0
- package/dist/server/services/operations/listJobs.js.map +1 -0
- package/dist/server/services/operations/refreshQueueStats.d.ts +4 -0
- package/dist/server/services/operations/refreshQueueStats.d.ts.map +1 -0
- package/dist/server/services/operations/refreshQueueStats.js +7 -0
- package/dist/server/services/operations/refreshQueueStats.js.map +1 -0
- package/dist/server/services/operations/retry.d.ts +4 -0
- package/dist/server/services/operations/retry.d.ts.map +1 -0
- package/dist/server/services/operations/retry.js +7 -0
- package/dist/server/services/operations/retry.js.map +1 -0
- package/dist/server/services/operations/service.d.ts +22 -0
- package/dist/server/services/operations/service.d.ts.map +1 -0
- package/dist/server/services/operations/service.js +21 -0
- package/dist/server/services/operations/service.js.map +1 -0
- package/dist/server/services/operations/unschedule.d.ts +4 -0
- package/dist/server/services/operations/unschedule.d.ts.map +1 -0
- package/dist/server/services/operations/unschedule.js +7 -0
- package/dist/server/services/operations/unschedule.js.map +1 -0
- package/dist/server/storedRows.d.ts.map +1 -0
- package/dist/server/{internal/storedRows.js → storedRows.js} +1 -1
- package/dist/server/storedRows.js.map +1 -0
- package/dist/server/tracing.d.ts.map +1 -0
- package/dist/server/tracing.js.map +1 -0
- package/dist/server/validateQueueNames.d.ts.map +1 -0
- package/dist/server/{internal/validateQueueNames.js → validateQueueNames.js} +1 -1
- package/dist/server/validateQueueNames.js.map +1 -0
- package/dist/server/waitForBatchExpiry.d.ts.map +1 -0
- package/dist/server/waitForBatchExpiry.js.map +1 -0
- package/package.json +13 -13
- package/src/server/InspectionEngine.ts +3 -0
- package/src/server/JobQueues.ts +2 -0
- package/src/server/PgBoss.ts +1 -1
- package/src/server/SchemaConnection.ts +3 -0
- package/src/server/adapters/batchClockOffset.ts +1 -1
- package/src/server/adapters/batchHandler.ts +4 -4
- package/src/server/adapters/clientErrorLogger.ts +1 -1
- package/src/server/adapters/clientErrorSubscription.ts +1 -1
- package/src/server/{internal → adapters}/countsFor.ts +1 -1
- package/src/server/adapters/deferralCount.ts +1 -1
- package/src/server/adapters/inspection.ts +24 -29
- package/src/server/adapters/inspectionDeferrals.ts +1 -1
- package/src/server/adapters/inspectionJobs.ts +2 -12
- package/src/server/adapters/inspectionLayer.ts +7 -0
- package/src/server/adapters/inspectionPlan.ts +1 -1
- package/src/server/adapters/inspectionReads.ts +3 -6
- package/src/server/adapters/inspectionSnapshot.ts +15 -33
- package/src/server/adapters/installSchema.ts +9 -6
- package/src/server/adapters/jobEngine.ts +1 -1
- package/src/server/adapters/lifecycle.ts +3 -3
- package/src/server/adapters/listJobs.ts +2 -2
- package/src/server/adapters/makeService.ts +31 -0
- package/src/server/adapters/operationsLayer.ts +23 -0
- package/src/server/{internal → adapters}/pgBossDefinitionLayer.ts +7 -14
- package/src/server/{internal → adapters}/register.ts +8 -23
- package/src/server/{internal → adapters}/registerReleasedJobs.ts +6 -5
- package/src/server/adapters/registerWorker.ts +5 -5
- package/src/server/adapters/retireJobs.ts +1 -1
- package/src/server/adapters/runSchemaPlan.ts +7 -11
- package/src/server/adapters/settleDeferral.ts +3 -3
- package/src/server/{internal/deadLetterResolutionPlan.ts → deadLetterResolutionPlan.ts} +1 -1
- package/src/server/{internal/deferrableAttempt.ts → deferrableAttempt.ts} +2 -2
- package/src/server/{internal/deferralStorePlan.ts → deferralStorePlan.ts} +2 -2
- package/src/server/defineSchedule.ts +1 -1
- package/src/server/definition.ts +1 -1
- package/src/server/enqueuePayload.ts +38 -0
- package/src/server/error.ts +1 -1
- package/src/server/getJob.ts +28 -0
- package/src/server/inspection.ts +18 -43
- package/src/server/inspectionJobs.ts +13 -0
- package/src/server/inspectionSnapshot.ts +18 -0
- package/src/server/{internal/jobListings.ts → jobListings.ts} +21 -17
- package/src/server/{internal/jobStorePlans.ts → jobStorePlans.ts} +2 -2
- package/src/server/{internal/runQueueWorker.ts → runQueueWorker.ts} +6 -7
- package/src/server/service.ts +3 -3
- package/src/server/services/inspection/busy.ts +6 -0
- package/src/server/services/inspection/changes.ts +7 -0
- package/src/server/services/inspection/counts.ts +7 -0
- package/src/server/services/inspection/deferred.ts +8 -0
- package/src/server/services/inspection/health.ts +10 -0
- package/src/server/services/inspection/queue.ts +8 -0
- package/src/server/services/inspection/schedules.ts +8 -0
- package/src/server/services/inspection/schemaVersion.ts +8 -0
- package/src/server/services/inspection/service.ts +20 -0
- package/src/server/services/inspection/snapshot.ts +8 -0
- package/src/server/services/inspection/storedJobs.ts +8 -0
- package/src/server/services/operations/counts.ts +7 -0
- package/src/server/services/operations/deleteQueue.ts +7 -0
- package/src/server/services/operations/enqueue.ts +12 -0
- package/src/server/services/operations/getJob.ts +6 -0
- package/src/server/services/operations/health.ts +9 -0
- package/src/server/services/operations/listJobs.ts +8 -0
- package/src/server/services/operations/refreshQueueStats.ts +7 -0
- package/src/server/services/operations/retry.ts +6 -0
- package/src/server/services/operations/service.ts +20 -0
- package/src/server/services/operations/unschedule.ts +7 -0
- package/src/server/{internal/storedRows.ts → storedRows.ts} +1 -1
- package/src/server/{internal/validateQueueNames.ts → validateQueueNames.ts} +1 -1
- package/dist/server/internal/PgBossInitialization.d.ts +0 -9
- package/dist/server/internal/PgBossInitialization.d.ts.map +0 -1
- package/dist/server/internal/PgBossInitialization.js +0 -4
- package/dist/server/internal/PgBossInitialization.js.map +0 -1
- package/dist/server/internal/PgBossOperations.d.ts +0 -27
- package/dist/server/internal/PgBossOperations.d.ts.map +0 -1
- package/dist/server/internal/PgBossOperations.js +0 -35
- package/dist/server/internal/PgBossOperations.js.map +0 -1
- package/dist/server/internal/acquireClient.d.ts.map +0 -1
- package/dist/server/internal/acquireClient.js.map +0 -1
- package/dist/server/internal/clientErrors.d.ts.map +0 -1
- package/dist/server/internal/clientErrors.js.map +0 -1
- package/dist/server/internal/deadLetterResolutionPlan.d.ts.map +0 -1
- package/dist/server/internal/deadLetterResolutionPlan.js.map +0 -1
- package/dist/server/internal/deadlineOf.d.ts.map +0 -1
- package/dist/server/internal/deadlineOf.js.map +0 -1
- package/dist/server/internal/deferrableAttempt.d.ts +0 -6
- package/dist/server/internal/deferrableAttempt.d.ts.map +0 -1
- package/dist/server/internal/deferrableAttempt.js.map +0 -1
- package/dist/server/internal/deferral.d.ts.map +0 -1
- package/dist/server/internal/deferral.js.map +0 -1
- package/dist/server/internal/deferralStorePlan.d.ts.map +0 -1
- package/dist/server/internal/deferralStorePlan.js.map +0 -1
- package/dist/server/internal/definitionOptions.d.ts.map +0 -1
- package/dist/server/internal/definitionOptions.js.map +0 -1
- package/dist/server/internal/engine.d.ts.map +0 -1
- package/dist/server/internal/engine.js.map +0 -1
- package/dist/server/internal/enqueueFor.d.ts +0 -4
- package/dist/server/internal/enqueueFor.d.ts.map +0 -1
- package/dist/server/internal/enqueueFor.js +0 -36
- package/dist/server/internal/enqueueFor.js.map +0 -1
- package/dist/server/internal/failureOutput.d.ts.map +0 -1
- package/dist/server/internal/failureOutput.js.map +0 -1
- package/dist/server/internal/initializeInspection.d.ts +0 -4
- package/dist/server/internal/initializeInspection.d.ts.map +0 -1
- package/dist/server/internal/initializeInspection.js +0 -8
- package/dist/server/internal/initializeInspection.js.map +0 -1
- package/dist/server/internal/initializeJobs.d.ts +0 -4
- package/dist/server/internal/initializeJobs.d.ts.map +0 -1
- package/dist/server/internal/initializeJobs.js +0 -4
- package/dist/server/internal/initializeJobs.js.map +0 -1
- package/dist/server/internal/jobControl.d.ts +0 -10
- package/dist/server/internal/jobControl.d.ts.map +0 -1
- package/dist/server/internal/jobControl.js.map +0 -1
- package/dist/server/internal/jobListings.d.ts +0 -16
- package/dist/server/internal/jobListings.d.ts.map +0 -1
- package/dist/server/internal/jobListings.js.map +0 -1
- package/dist/server/internal/jobStorePlans.d.ts.map +0 -1
- package/dist/server/internal/jobStorePlans.js.map +0 -1
- package/dist/server/internal/lifecycle.d.ts.map +0 -1
- package/dist/server/internal/lifecycle.js.map +0 -1
- package/dist/server/internal/makeService.d.ts +0 -6
- package/dist/server/internal/makeService.d.ts.map +0 -1
- package/dist/server/internal/makeService.js +0 -22
- package/dist/server/internal/makeService.js.map +0 -1
- package/dist/server/internal/operations/busy.d.ts +0 -3
- package/dist/server/internal/operations/busy.d.ts.map +0 -1
- package/dist/server/internal/operations/busy.js +0 -4
- package/dist/server/internal/operations/busy.js.map +0 -1
- package/dist/server/internal/operations/changes.d.ts +0 -5
- package/dist/server/internal/operations/changes.d.ts.map +0 -1
- package/dist/server/internal/operations/changes.js +0 -4
- package/dist/server/internal/operations/changes.js.map +0 -1
- package/dist/server/internal/operations/counts.d.ts +0 -3
- package/dist/server/internal/operations/counts.d.ts.map +0 -1
- package/dist/server/internal/operations/counts.js +0 -4
- package/dist/server/internal/operations/counts.js.map +0 -1
- package/dist/server/internal/operations/deadLetteredJobs.d.ts +0 -6
- package/dist/server/internal/operations/deadLetteredJobs.d.ts.map +0 -1
- package/dist/server/internal/operations/deadLetteredJobs.js +0 -4
- package/dist/server/internal/operations/deadLetteredJobs.js.map +0 -1
- package/dist/server/internal/operations/deferred.d.ts +0 -6
- package/dist/server/internal/operations/deferred.d.ts.map +0 -1
- package/dist/server/internal/operations/deferred.js +0 -4
- package/dist/server/internal/operations/deferred.js.map +0 -1
- package/dist/server/internal/operations/deleteQueue.d.ts +0 -3
- package/dist/server/internal/operations/deleteQueue.d.ts.map +0 -1
- package/dist/server/internal/operations/deleteQueue.js +0 -4
- package/dist/server/internal/operations/deleteQueue.js.map +0 -1
- package/dist/server/internal/operations/enqueue.d.ts +0 -3
- package/dist/server/internal/operations/enqueue.d.ts.map +0 -1
- package/dist/server/internal/operations/enqueue.js +0 -4
- package/dist/server/internal/operations/enqueue.js.map +0 -1
- package/dist/server/internal/operations/failedJobs.d.ts +0 -6
- package/dist/server/internal/operations/failedJobs.d.ts.map +0 -1
- package/dist/server/internal/operations/failedJobs.js +0 -4
- package/dist/server/internal/operations/failedJobs.js.map +0 -1
- package/dist/server/internal/operations/getJob.d.ts +0 -6
- package/dist/server/internal/operations/getJob.d.ts.map +0 -1
- package/dist/server/internal/operations/getJob.js +0 -4
- package/dist/server/internal/operations/getJob.js.map +0 -1
- package/dist/server/internal/operations/health.d.ts +0 -3
- package/dist/server/internal/operations/health.d.ts.map +0 -1
- package/dist/server/internal/operations/health.js +0 -4
- package/dist/server/internal/operations/health.js.map +0 -1
- package/dist/server/internal/operations/inspection.d.ts +0 -3
- package/dist/server/internal/operations/inspection.d.ts.map +0 -1
- package/dist/server/internal/operations/inspection.js +0 -4
- package/dist/server/internal/operations/inspection.js.map +0 -1
- package/dist/server/internal/operations/inspectionHealth.d.ts +0 -5
- package/dist/server/internal/operations/inspectionHealth.d.ts.map +0 -1
- package/dist/server/internal/operations/inspectionHealth.js +0 -4
- package/dist/server/internal/operations/inspectionHealth.js.map +0 -1
- package/dist/server/internal/operations/jobs.d.ts.map +0 -1
- package/dist/server/internal/operations/jobs.js +0 -4
- package/dist/server/internal/operations/jobs.js.map +0 -1
- package/dist/server/internal/operations/queue.d.ts +0 -3
- package/dist/server/internal/operations/queue.d.ts.map +0 -1
- package/dist/server/internal/operations/queue.js +0 -4
- package/dist/server/internal/operations/queue.js.map +0 -1
- package/dist/server/internal/operations/refreshQueueStats.d.ts +0 -3
- package/dist/server/internal/operations/refreshQueueStats.d.ts.map +0 -1
- package/dist/server/internal/operations/refreshQueueStats.js +0 -4
- package/dist/server/internal/operations/refreshQueueStats.js.map +0 -1
- package/dist/server/internal/operations/retry.d.ts +0 -3
- package/dist/server/internal/operations/retry.d.ts.map +0 -1
- package/dist/server/internal/operations/retry.js +0 -4
- package/dist/server/internal/operations/retry.js.map +0 -1
- package/dist/server/internal/operations/schedules.d.ts +0 -3
- package/dist/server/internal/operations/schedules.d.ts.map +0 -1
- package/dist/server/internal/operations/schedules.js +0 -4
- package/dist/server/internal/operations/schedules.js.map +0 -1
- package/dist/server/internal/operations/schemaVersion.d.ts +0 -3
- package/dist/server/internal/operations/schemaVersion.d.ts.map +0 -1
- package/dist/server/internal/operations/schemaVersion.js +0 -4
- package/dist/server/internal/operations/schemaVersion.js.map +0 -1
- package/dist/server/internal/operations/snapshot.d.ts +0 -3
- package/dist/server/internal/operations/snapshot.d.ts.map +0 -1
- package/dist/server/internal/operations/snapshot.js +0 -4
- package/dist/server/internal/operations/snapshot.js.map +0 -1
- package/dist/server/internal/operations/storedJobs.d.ts +0 -5
- package/dist/server/internal/operations/storedJobs.d.ts.map +0 -1
- package/dist/server/internal/operations/storedJobs.js +0 -4
- package/dist/server/internal/operations/storedJobs.js.map +0 -1
- package/dist/server/internal/operations/unschedule.d.ts +0 -3
- package/dist/server/internal/operations/unschedule.d.ts.map +0 -1
- package/dist/server/internal/operations/unschedule.js +0 -4
- package/dist/server/internal/operations/unschedule.js.map +0 -1
- package/dist/server/internal/pgBossDefinitionLayer.js.map +0 -1
- package/dist/server/internal/register.d.ts.map +0 -1
- package/dist/server/internal/register.js.map +0 -1
- package/dist/server/internal/registerReleasedJobs.d.ts +0 -6
- package/dist/server/internal/registerReleasedJobs.d.ts.map +0 -1
- package/dist/server/internal/registerReleasedJobs.js.map +0 -1
- package/dist/server/internal/retryWake.d.ts.map +0 -1
- package/dist/server/internal/retryWake.js.map +0 -1
- package/dist/server/internal/runQueueWorker.d.ts +0 -8
- package/dist/server/internal/runQueueWorker.d.ts.map +0 -1
- package/dist/server/internal/runQueueWorker.js.map +0 -1
- package/dist/server/internal/storedRows.d.ts.map +0 -1
- package/dist/server/internal/storedRows.js.map +0 -1
- package/dist/server/internal/tracing.d.ts.map +0 -1
- package/dist/server/internal/tracing.js.map +0 -1
- package/dist/server/internal/validateQueueNames.d.ts.map +0 -1
- package/dist/server/internal/validateQueueNames.js.map +0 -1
- package/dist/server/internal/waitForBatchExpiry.d.ts.map +0 -1
- package/dist/server/internal/waitForBatchExpiry.js.map +0 -1
- package/src/server/internal/PgBossInitialization.ts +0 -9
- package/src/server/internal/PgBossOperations.ts +0 -35
- package/src/server/internal/enqueueFor.ts +0 -44
- package/src/server/internal/initializeInspection.ts +0 -8
- package/src/server/internal/initializeJobs.ts +0 -4
- package/src/server/internal/jobControl.ts +0 -27
- package/src/server/internal/makeService.ts +0 -28
- package/src/server/internal/operations/busy.ts +0 -5
- package/src/server/internal/operations/changes.ts +0 -5
- package/src/server/internal/operations/counts.ts +0 -5
- package/src/server/internal/operations/deadLetteredJobs.ts +0 -5
- package/src/server/internal/operations/deferred.ts +0 -5
- package/src/server/internal/operations/deleteQueue.ts +0 -5
- package/src/server/internal/operations/enqueue.ts +0 -5
- package/src/server/internal/operations/failedJobs.ts +0 -5
- package/src/server/internal/operations/getJob.ts +0 -5
- package/src/server/internal/operations/health.ts +0 -5
- package/src/server/internal/operations/inspection.ts +0 -5
- package/src/server/internal/operations/inspectionHealth.ts +0 -5
- package/src/server/internal/operations/jobs.ts +0 -5
- package/src/server/internal/operations/queue.ts +0 -5
- package/src/server/internal/operations/refreshQueueStats.ts +0 -5
- package/src/server/internal/operations/retry.ts +0 -5
- package/src/server/internal/operations/schedules.ts +0 -5
- package/src/server/internal/operations/schemaVersion.ts +0 -5
- package/src/server/internal/operations/snapshot.ts +0 -5
- package/src/server/internal/operations/storedJobs.ts +0 -5
- package/src/server/internal/operations/unschedule.ts +0 -5
- /package/dist/server/{internal/acquireClient.js → acquireClient.js} +0 -0
- /package/dist/server/{internal → adapters}/countsFor.d.ts +0 -0
- /package/dist/server/{internal → adapters}/ensureQueue.d.ts +0 -0
- /package/dist/server/{internal → adapters}/ensureQueue.js +0 -0
- /package/dist/server/{internal → adapters}/healthFor.d.ts +0 -0
- /package/dist/server/{internal → adapters}/healthFor.js +0 -0
- /package/dist/server/{internal → adapters}/pgBossDefinitionLayer.d.ts +0 -0
- /package/dist/server/{internal/clientErrors.d.ts → clientErrors.d.ts} +0 -0
- /package/dist/server/{internal/clientErrors.js → clientErrors.js} +0 -0
- /package/dist/server/{internal/deadLetterResolutionPlan.d.ts → deadLetterResolutionPlan.d.ts} +0 -0
- /package/dist/server/{internal/deadlineOf.d.ts → deadlineOf.d.ts} +0 -0
- /package/dist/server/{internal/deadlineOf.js → deadlineOf.js} +0 -0
- /package/dist/server/{internal/deferral.d.ts → deferral.d.ts} +0 -0
- /package/dist/server/{internal/deferral.js → deferral.js} +0 -0
- /package/dist/server/{internal/deferralStorePlan.d.ts → deferralStorePlan.d.ts} +0 -0
- /package/dist/server/{internal/definitionOptions.d.ts → definitionOptions.d.ts} +0 -0
- /package/dist/server/{internal/definitionOptions.js → definitionOptions.js} +0 -0
- /package/dist/server/{internal/engine.d.ts → engine.d.ts} +0 -0
- /package/dist/server/{internal/engine.js → engine.js} +0 -0
- /package/dist/server/{internal/failureOutput.d.ts → failureOutput.d.ts} +0 -0
- /package/dist/server/{internal/failureOutput.js → failureOutput.js} +0 -0
- /package/dist/server/{internal/jobStorePlans.d.ts → jobStorePlans.d.ts} +0 -0
- /package/dist/server/{internal/lifecycle.d.ts → lifecycle.d.ts} +0 -0
- /package/dist/server/{internal/lifecycle.js → lifecycle.js} +0 -0
- /package/dist/server/{internal/retryWake.d.ts → retryWake.d.ts} +0 -0
- /package/dist/server/{internal/retryWake.js → retryWake.js} +0 -0
- /package/dist/server/{internal/storedRows.d.ts → storedRows.d.ts} +0 -0
- /package/dist/server/{internal/tracing.d.ts → tracing.d.ts} +0 -0
- /package/dist/server/{internal/tracing.js → tracing.js} +0 -0
- /package/dist/server/{internal/validateQueueNames.d.ts → validateQueueNames.d.ts} +0 -0
- /package/dist/server/{internal/waitForBatchExpiry.d.ts → waitForBatchExpiry.d.ts} +0 -0
- /package/dist/server/{internal/waitForBatchExpiry.js → waitForBatchExpiry.js} +0 -0
- /package/src/server/{internal/acquireClient.ts → acquireClient.ts} +0 -0
- /package/src/server/{internal → adapters}/ensureQueue.ts +0 -0
- /package/src/server/{internal → adapters}/healthFor.ts +0 -0
- /package/src/server/{internal/clientErrors.ts → clientErrors.ts} +0 -0
- /package/src/server/{internal/deadlineOf.ts → deadlineOf.ts} +0 -0
- /package/src/server/{internal/deferral.ts → deferral.ts} +0 -0
- /package/src/server/{internal/definitionOptions.ts → definitionOptions.ts} +0 -0
- /package/src/server/{internal/engine.ts → engine.ts} +0 -0
- /package/src/server/{internal/failureOutput.ts → failureOutput.ts} +0 -0
- /package/src/server/{internal/lifecycle.ts → lifecycle.ts} +0 -0
- /package/src/server/{internal/retryWake.ts → retryWake.ts} +0 -0
- /package/src/server/{internal/tracing.ts → tracing.ts} +0 -0
- /package/src/server/{internal/waitForBatchExpiry.ts → waitForBatchExpiry.ts} +0 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Context, Effect } from "effect";
|
|
2
|
+
import { inspection } from "#server/adapters/inspection.ts";
|
|
3
|
+
import { enqueuePayload } from "#server/enqueuePayload.ts";
|
|
4
|
+
import { getJob } from "#server/getJob.ts";
|
|
5
|
+
import { deadLetteredJobs, failedJobs } from "#server/jobListings.ts";
|
|
6
|
+
import type { PgBossService } from "#server/service.ts";
|
|
7
|
+
import { PgBossOperations } from "#server/services/operations/service.ts";
|
|
8
|
+
|
|
9
|
+
export const makeService = Effect.fnUntraced(function* (): Effect.fn.Return<
|
|
10
|
+
PgBossService,
|
|
11
|
+
never,
|
|
12
|
+
"@shivaedev/jobs/PgBossOperations" | "@shivaedev/jobs/PgBossInspectionReads"
|
|
13
|
+
> {
|
|
14
|
+
const ambient = yield* Effect.context<"@shivaedev/jobs/PgBossOperations">();
|
|
15
|
+
const context = Context.pick(PgBossOperations)(ambient);
|
|
16
|
+
const operations = yield* PgBossOperations;
|
|
17
|
+
const reads = yield* inspection();
|
|
18
|
+
return {
|
|
19
|
+
counts: operations.counts,
|
|
20
|
+
deadLetteredJobs: (queue, options) => deadLetteredJobs(queue, options).pipe(Effect.provide(context)),
|
|
21
|
+
deleteQueue: operations.deleteQueue,
|
|
22
|
+
enqueue: (queue, payload, options) => enqueuePayload(queue, payload, options).pipe(Effect.provide(context)),
|
|
23
|
+
failedJobs: (queue, options) => failedJobs(queue, options).pipe(Effect.provide(context)),
|
|
24
|
+
getJob: (queue, id) => getJob(queue, id).pipe(Effect.provide(context)),
|
|
25
|
+
health: operations.health,
|
|
26
|
+
inspection: () => Effect.succeed(reads),
|
|
27
|
+
refreshQueueStats: operations.refreshQueueStats,
|
|
28
|
+
retry: (queue, id) => operations.retry(queue.name, id),
|
|
29
|
+
unschedule: operations.unschedule,
|
|
30
|
+
};
|
|
31
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Effect, Layer } from "effect";
|
|
2
|
+
import { JobEngine } from "#server/engine.ts";
|
|
3
|
+
import { InspectionEngine } from "#server/InspectionEngine.ts";
|
|
4
|
+
import { JobQueues } from "#server/JobQueues.ts";
|
|
5
|
+
import { PgBoss } from "#server/PgBoss.ts";
|
|
6
|
+
import { PgBossInspectionReads } from "#server/services/inspection/service.ts";
|
|
7
|
+
import { PgBossOperations } from "#server/services/operations/service.ts";
|
|
8
|
+
import { inspectionReads } from "./inspectionReads.ts";
|
|
9
|
+
import { jobEngine } from "./jobEngine.ts";
|
|
10
|
+
export function operationsLayer(names: readonly string[]) {
|
|
11
|
+
return Layer.unwrap(
|
|
12
|
+
Effect.gen(function* () {
|
|
13
|
+
const acquired = yield* PgBoss;
|
|
14
|
+
const ports = Layer.mergeAll(
|
|
15
|
+
Layer.succeed(JobEngine, jobEngine(acquired.client, acquired.schema)),
|
|
16
|
+
Layer.succeed(InspectionEngine, inspectionReads(acquired.client, acquired.schema ?? "pgboss")),
|
|
17
|
+
Layer.succeed(JobQueues, names),
|
|
18
|
+
Layer.succeed(PgBoss, acquired),
|
|
19
|
+
);
|
|
20
|
+
return Layer.mergeAll(Layer.fresh(PgBossOperations.layer), Layer.fresh(PgBossInspectionReads.layer)).pipe(Layer.provide(ports));
|
|
21
|
+
}),
|
|
22
|
+
);
|
|
23
|
+
}
|
|
@@ -1,19 +1,16 @@
|
|
|
1
1
|
import { type Context, Effect, Exit, Layer, Scope } from "effect";
|
|
2
2
|
import { clientErrorReporter } from "#server/adapters/clientErrorReporter.ts";
|
|
3
3
|
import { clientErrorSubscription } from "#server/adapters/clientErrorSubscription.ts";
|
|
4
|
-
import {
|
|
4
|
+
import { logClientError } from "#server/clientErrors.ts";
|
|
5
5
|
import type { JobRegistration, RegistrationRequirements } from "#server/definition.ts";
|
|
6
6
|
import type { PgBossError, PgBossQueueNamesError, PgBossQueueOptionsError } from "#server/error.ts";
|
|
7
7
|
import { PgBoss } from "#server/PgBoss.ts";
|
|
8
8
|
import type { PgBossLayerOptions, PgBossService } from "#server/service.ts";
|
|
9
|
-
import {
|
|
10
|
-
import { JobEngine } from "./engine.ts";
|
|
9
|
+
import { validateQueueNames } from "#server/validateQueueNames.ts";
|
|
11
10
|
import { makeService } from "./makeService.ts";
|
|
12
|
-
import {
|
|
13
|
-
import { PgBossOperations } from "./PgBossOperations.ts";
|
|
11
|
+
import { operationsLayer } from "./operationsLayer.ts";
|
|
14
12
|
import { registrationName } from "./register.ts";
|
|
15
13
|
import { registerReleasedJobs } from "./registerReleasedJobs.ts";
|
|
16
|
-
import { validateQueueNames } from "./validateQueueNames.ts";
|
|
17
14
|
|
|
18
15
|
export function pgBossDefinitionLayer<TIdentifier extends string, const TRegistrations extends readonly JobRegistration[], E>(
|
|
19
16
|
Service: Context.Service<TIdentifier, PgBossService>,
|
|
@@ -31,10 +28,7 @@ export function pgBossDefinitionLayer<TIdentifier extends string, R, E>(
|
|
|
31
28
|
) {
|
|
32
29
|
return Layer.unwrap(
|
|
33
30
|
Effect.map(Effect.context<Exclude<R, TIdentifier> | E>(), (dependencies) =>
|
|
34
|
-
Layer.effect(Service,
|
|
35
|
-
Layer.provide(Layer.fresh(PgBossOperations.layer)),
|
|
36
|
-
Layer.provide(Layer.succeed(PgBossInitialization, initializePgBoss(Service, options, dependencies, queueNames))),
|
|
37
|
-
),
|
|
31
|
+
Layer.effect(Service, initializePgBoss(Service, options, dependencies, queueNames)),
|
|
38
32
|
),
|
|
39
33
|
);
|
|
40
34
|
}
|
|
@@ -48,16 +42,15 @@ const initializePgBoss = Effect.fnUntraced(function* <TIdentifier extends string
|
|
|
48
42
|
yield* validateQueueNames(options.jobs, queueNames);
|
|
49
43
|
const acquired = yield* PgBoss;
|
|
50
44
|
const workerScope = yield* Scope.make();
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
);
|
|
45
|
+
const services = yield* Layer.build(operationsLayer(options.jobs.map(registrationName)));
|
|
46
|
+
const service = yield* makeService().pipe(Effect.provide(services));
|
|
54
47
|
yield* Effect.gen(function* () {
|
|
55
48
|
const context = yield* Effect.context<R | E>();
|
|
56
49
|
const reportError = options.onError ?? logClientError;
|
|
57
50
|
const report = yield* clientErrorReporter(reportError).pipe(Effect.provide(context));
|
|
58
51
|
const unsubscribe = yield* clientErrorSubscription(acquired.client, report);
|
|
59
52
|
yield* Effect.addFinalizer(() => Scope.close(workerScope, Exit.void).pipe(Effect.ensuring(Effect.sync(unsubscribe))));
|
|
60
|
-
yield* registerReleasedJobs(acquired.client, options.jobs,
|
|
53
|
+
yield* registerReleasedJobs(acquired.client, options.jobs, acquired.reused, acquired.schema, acquired.stop, options.retired).pipe(
|
|
61
54
|
Effect.provideService(Scope.Scope, workerScope),
|
|
62
55
|
);
|
|
63
56
|
}).pipe(Effect.provideService(Service, service), Effect.provide(dependencies));
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Effect, Scope } from "effect";
|
|
2
2
|
import { registerWorker } from "#server/adapters/registerWorker.ts";
|
|
3
3
|
import { workerDiagnostics } from "#server/adapters/workerDiagnostics.ts";
|
|
4
4
|
import type { PgBossClient } from "#server/client.ts";
|
|
5
5
|
import type { StopOptions } from "#server/clientOptions.ts";
|
|
6
6
|
import type { JobPayloadSchema, JobRegistration, QueueDefinition, QueueWorker, ScheduleDefinition, ScheduledWorker } from "#server/definition.ts";
|
|
7
7
|
import { PgBossQueueOptionsError, toPgBossError } from "#server/error.ts";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
8
|
+
import { runQueueWorker } from "#server/runQueueWorker.ts";
|
|
9
|
+
import { ensureQueue } from "./ensureQueue.ts";
|
|
10
10
|
|
|
11
11
|
function registrationDefinition(registration: JobRegistration): QueueDefinition | ScheduleDefinition {
|
|
12
12
|
if (registration._tag === "QueueDefinition") {
|
|
@@ -39,8 +39,6 @@ const prepareQueues = Effect.fnUntraced(function* (client: PgBossClient, registr
|
|
|
39
39
|
const registerQueue = Effect.fnUntraced(function* <R>(
|
|
40
40
|
client: PgBossClient,
|
|
41
41
|
registration: QueueWorker<JobPayloadSchema & { readonly DecodingServices: R }, R> | QueueDefinition,
|
|
42
|
-
context: Context.Context<R>,
|
|
43
|
-
scope: Scope.Scope,
|
|
44
42
|
schema: string,
|
|
45
43
|
stop: StopOptions | undefined,
|
|
46
44
|
) {
|
|
@@ -53,33 +51,21 @@ const registerQueue = Effect.fnUntraced(function* <R>(
|
|
|
53
51
|
client,
|
|
54
52
|
name,
|
|
55
53
|
queue.workerOptions,
|
|
56
|
-
(job, deadline) => runQueueWorker(registration, job, deadline
|
|
57
|
-
scope,
|
|
54
|
+
(job, deadline) => runQueueWorker(registration, job, deadline),
|
|
58
55
|
schema,
|
|
59
56
|
queue.maxDeferrals,
|
|
60
57
|
stop,
|
|
61
|
-
)
|
|
58
|
+
);
|
|
62
59
|
});
|
|
63
60
|
|
|
64
61
|
const registerSchedule = Effect.fnUntraced(function* <R>(
|
|
65
62
|
client: PgBossClient,
|
|
66
63
|
worker: ScheduledWorker<R>,
|
|
67
|
-
context: Context.Context<R>,
|
|
68
|
-
scope: Scope.Scope,
|
|
69
64
|
schema: string,
|
|
70
65
|
stop: StopOptions | undefined,
|
|
71
66
|
) {
|
|
72
67
|
const { schedule } = worker;
|
|
73
|
-
yield* registerWorker(
|
|
74
|
-
client,
|
|
75
|
-
schedule.name,
|
|
76
|
-
schedule.workerOptions,
|
|
77
|
-
() => workerDiagnostics(worker.effect),
|
|
78
|
-
scope,
|
|
79
|
-
schema,
|
|
80
|
-
schedule.maxDeferrals,
|
|
81
|
-
stop,
|
|
82
|
-
).pipe(Effect.provide(context));
|
|
68
|
+
yield* registerWorker(client, schedule.name, schedule.workerOptions, () => workerDiagnostics(worker.effect), schema, schedule.maxDeferrals, stop);
|
|
83
69
|
yield* Effect.tryPromise({
|
|
84
70
|
catch: (error) => toPgBossError("register", error, schedule.name),
|
|
85
71
|
try: () => client.schedule(schedule.name, schedule.cron, null, schedule.scheduleOptions),
|
|
@@ -97,7 +83,6 @@ export function registrationNames(registrations: readonly JobRegistration[]): re
|
|
|
97
83
|
export const registerJobs = Effect.fnUntraced(function* <R>(
|
|
98
84
|
client: PgBossClient,
|
|
99
85
|
registrations: readonly JobRegistration<R>[],
|
|
100
|
-
context: Context.Context<R>,
|
|
101
86
|
replaceWorkers: boolean,
|
|
102
87
|
schema = "pgboss",
|
|
103
88
|
startWorkers = true,
|
|
@@ -111,9 +96,9 @@ export const registerJobs = Effect.fnUntraced(function* <R>(
|
|
|
111
96
|
}
|
|
112
97
|
for (const registration of registrations) {
|
|
113
98
|
if (registration._tag === "QueueWorker" || registration._tag === "QueueDefinition") {
|
|
114
|
-
yield* registerQueue(client, registration,
|
|
99
|
+
yield* registerQueue(client, registration, schema, stop).pipe(Effect.provideService(Scope.Scope, scope));
|
|
115
100
|
} else {
|
|
116
|
-
yield* registerSchedule(client, registration,
|
|
101
|
+
yield* registerSchedule(client, registration, schema, stop).pipe(Effect.provideService(Scope.Scope, scope));
|
|
117
102
|
}
|
|
118
103
|
}
|
|
119
104
|
});
|
|
@@ -1,32 +1,33 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { WorkerRelease } from "@shivaedev/sql/
|
|
1
|
+
import { Effect, Option, Scope } from "effect";
|
|
2
|
+
import { WorkerRelease } from "@shivaedev/sql/worker-release/service.ts";
|
|
3
3
|
import { retireJobs } from "#server/adapters/retireJobs.ts";
|
|
4
4
|
import type { PgBossClient } from "#server/client.ts";
|
|
5
5
|
import type { StopOptions } from "#server/clientOptions.ts";
|
|
6
6
|
import type { JobRegistration } from "#server/definition.ts";
|
|
7
7
|
import { toPgBossError } from "#server/error.ts";
|
|
8
|
+
import type { PgBoss } from "#server/PgBoss.ts";
|
|
8
9
|
import { registerJobs, registrationName } from "./register.ts";
|
|
9
10
|
|
|
10
11
|
export const registerReleasedJobs = Effect.fnUntraced(function* <R>(
|
|
11
12
|
client: PgBossClient,
|
|
12
13
|
jobs: readonly JobRegistration<R>[],
|
|
13
|
-
context: Context.Context<R>,
|
|
14
14
|
replaceWorkers: boolean,
|
|
15
15
|
schema: string | undefined,
|
|
16
16
|
stop: StopOptions | undefined,
|
|
17
17
|
retired: readonly string[] = [],
|
|
18
18
|
) {
|
|
19
|
+
const context = yield* Effect.context<R | PgBoss>();
|
|
19
20
|
const signal = yield* Effect.serviceOption(WorkerRelease);
|
|
20
21
|
const workers = jobs.filter((job) => job._tag !== "QueueDefinition");
|
|
21
22
|
const scope = yield* Effect.scope;
|
|
22
23
|
const register = retireJobs(client, jobs, retired).pipe(
|
|
23
|
-
Effect.andThen(registerJobs(client, jobs,
|
|
24
|
+
Effect.andThen(registerJobs(client, jobs, replaceWorkers, schema, true, stop)),
|
|
24
25
|
Effect.provideService(Scope.Scope, scope),
|
|
25
26
|
);
|
|
26
27
|
if (Option.isNone(signal) || (workers.length === 0 && retired.length === 0)) {
|
|
27
28
|
return yield* register;
|
|
28
29
|
}
|
|
29
|
-
yield* registerJobs(client, jobs,
|
|
30
|
+
yield* registerJobs(client, jobs, replaceWorkers, schema, false, stop);
|
|
30
31
|
let working = replaceWorkers;
|
|
31
32
|
let paused = false;
|
|
32
33
|
yield* signal.value.register((active) =>
|
|
@@ -2,12 +2,12 @@ import { Effect, Fiber, Scope } from "effect";
|
|
|
2
2
|
import { batchHandler } from "#server/adapters/batchHandler.ts";
|
|
3
3
|
import type { PgBossClient } from "#server/client.ts";
|
|
4
4
|
import type { StopOptions } from "#server/clientOptions.ts";
|
|
5
|
+
import { deferrableAttempt } from "#server/deferrableAttempt.ts";
|
|
6
|
+
import { JobEngine } from "#server/engine.ts";
|
|
5
7
|
import { toPgBossError } from "#server/error.ts";
|
|
6
|
-
import { deferrableAttempt } from "#server/internal/deferrableAttempt.ts";
|
|
7
|
-
import { JobEngine } from "#server/internal/engine.ts";
|
|
8
|
-
import { retryWake } from "#server/internal/retryWake.ts";
|
|
9
|
-
import { traceJob } from "#server/internal/tracing.ts";
|
|
10
8
|
import type { WorkerJob } from "#server/job.ts";
|
|
9
|
+
import { retryWake } from "#server/retryWake.ts";
|
|
10
|
+
import { traceJob } from "#server/tracing.ts";
|
|
11
11
|
import type { WorkerOptions } from "#server/workerOptions.ts";
|
|
12
12
|
import { jobEngine } from "./jobEngine.ts";
|
|
13
13
|
|
|
@@ -16,11 +16,11 @@ export const registerWorker = Effect.fnUntraced(function* <R>(
|
|
|
16
16
|
name: string,
|
|
17
17
|
options: WorkerOptions,
|
|
18
18
|
run: (job: WorkerJob<unknown>, deadline: number) => Effect.Effect<unknown, unknown, R>,
|
|
19
|
-
scope: Scope.Scope,
|
|
20
19
|
schema: string,
|
|
21
20
|
maxDeferrals: number,
|
|
22
21
|
stop?: StopOptions,
|
|
23
22
|
) {
|
|
23
|
+
const scope = yield* Effect.scope;
|
|
24
24
|
const execute = Effect.runPromiseWith(yield* Effect.context<R>());
|
|
25
25
|
const workerScope = yield* Scope.fork(scope);
|
|
26
26
|
const fibers = yield* Scope.fork(workerScope);
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
|
+
import { registrationNames } from "#server/adapters/register.ts";
|
|
2
3
|
import type { PgBossClient } from "#server/client.ts";
|
|
3
4
|
import type { JobRegistration } from "#server/definition.ts";
|
|
4
5
|
import { toPgBossError } from "#server/error.ts";
|
|
5
6
|
import { deadLetterQueueName } from "#server/health.ts";
|
|
6
|
-
import { registrationNames } from "#server/internal/register.ts";
|
|
7
7
|
|
|
8
8
|
export const retireJobs = Effect.fnUntraced(function* (client: PgBossClient, jobs: readonly JobRegistration[], retired: readonly string[]) {
|
|
9
9
|
yield* Effect.try({
|
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { SchemaConnection } from "#server/SchemaConnection.ts";
|
|
3
3
|
import { pendingIndexInserts } from "./schemaIndexBuilds.ts";
|
|
4
4
|
|
|
5
|
-
export
|
|
6
|
-
connection
|
|
7
|
-
plan: string,
|
|
8
|
-
run: <A, E>(effect: Effect.Effect<A, E>) => Promise<A>,
|
|
9
|
-
upgrade?: { readonly schema: string; readonly version: number },
|
|
10
|
-
): Promise<void> {
|
|
5
|
+
export const runSchemaPlan = Effect.fnUntraced(function* (plan: string, upgrade?: { readonly schema: string; readonly version: number }) {
|
|
6
|
+
const connection = yield* SchemaConnection;
|
|
11
7
|
// Native exported plans append concurrent index DDL after the migration transaction.
|
|
12
8
|
const parts = /^\s*BEGIN;(?<body>[\s\S]*)\n {4}COMMIT;(?<concurrent>[\s\S]*)$/u.exec(plan);
|
|
13
9
|
if (parts?.groups === undefined) {
|
|
@@ -23,10 +19,10 @@ export async function runSchemaPlan(
|
|
|
23
19
|
.filter((statement) => statement.trim() !== "");
|
|
24
20
|
const pending = upgrade === undefined ? "" : pendingIndexInserts(upgrade.schema, upgrade.version, commands, quote);
|
|
25
21
|
// Effect SQL uses the extended protocol, which accepts one statement per command.
|
|
26
|
-
|
|
22
|
+
yield* connection.executeRaw(`DO ${quote(`BEGIN EXECUTE ${quote(`${body}\n${pending}`)}; END`)}`, []);
|
|
27
23
|
if (upgrade === undefined) {
|
|
28
24
|
for (const statement of commands) {
|
|
29
|
-
|
|
25
|
+
yield* connection.executeRaw(statement, []);
|
|
30
26
|
}
|
|
31
27
|
}
|
|
32
|
-
}
|
|
28
|
+
});
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Schema } from "effect";
|
|
2
2
|
import type { PgBossClient } from "#server/client.ts";
|
|
3
|
-
import { STATELY_DEFERRAL_POLICY } from "#server/
|
|
4
|
-
import type { JobAttempt } from "#server/
|
|
5
|
-
import { quotedSchema } from "#server/
|
|
3
|
+
import { STATELY_DEFERRAL_POLICY } from "#server/deferral.ts";
|
|
4
|
+
import type { JobAttempt } from "#server/engine.ts";
|
|
5
|
+
import { quotedSchema } from "#server/storedRows.ts";
|
|
6
6
|
import { localInspectionChanges } from "./localInspectionChanges.ts";
|
|
7
7
|
|
|
8
8
|
const Settlement = Schema.Struct({ claimed: Schema.Boolean, deferred: Schema.Boolean });
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Clock, DateTime, Effect, Schema } from "effect";
|
|
2
|
+
import { deferredAttempt } from "#server/deferral.ts";
|
|
2
3
|
import { RetryAt } from "#server/definition.ts";
|
|
3
|
-
import {
|
|
4
|
-
import { type JobAttempt, JobEngine } from "#server/internal/engine.ts";
|
|
4
|
+
import { type JobAttempt, JobEngine } from "#server/engine.ts";
|
|
5
5
|
|
|
6
6
|
const recordDeferral = Effect.fnUntraced(function* (at: string, reason: string) {
|
|
7
7
|
const span = yield* Effect.currentSpan.pipe(Effect.orDie);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { STATELY_DEFERRAL_POLICY } from "#server/
|
|
2
|
-
import { quotedSchema } from "#server/
|
|
1
|
+
import { STATELY_DEFERRAL_POLICY } from "#server/deferral.ts";
|
|
2
|
+
import { quotedSchema } from "#server/storedRows.ts";
|
|
3
3
|
|
|
4
4
|
export function deferralStorePlan(schema: string): string {
|
|
5
5
|
const quoted = quotedSchema(schema);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { DefineScheduleOptions, ScheduleDefinition } from "#server/definition.ts";
|
|
2
|
-
import { maxDeferrals, nativeQueueOptions } from "#server/
|
|
2
|
+
import { maxDeferrals, nativeQueueOptions } from "#server/definitionOptions.ts";
|
|
3
3
|
|
|
4
4
|
export function defineSchedule<const TName extends string>(options: DefineScheduleOptions<TName>): ScheduleDefinition<TName> {
|
|
5
5
|
const definition: ScheduleDefinition<TName> = {
|
package/src/server/definition.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Clock, Duration, Effect, Schema } from "effect";
|
|
2
2
|
import type { QueueDisplay, SubjectColumn } from "#display.ts";
|
|
3
|
+
import { maxDeferrals, nativeQueueOptions } from "#server/definitionOptions.ts";
|
|
3
4
|
import type { ScheduleOptions } from "#server/enqueueOptions.ts";
|
|
4
|
-
import { maxDeferrals, nativeQueueOptions } from "#server/internal/definitionOptions.ts";
|
|
5
5
|
import type { WorkerJob } from "#server/job.ts";
|
|
6
6
|
import type { QueueOptions, QueuePolicy } from "#server/queueOptions.ts";
|
|
7
7
|
import type { WorkerOptions } from "#server/workerOptions.ts";
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Effect, Redacted, Schema } from "effect";
|
|
2
|
+
import { payloadJobId, payloadKey } from "#server/adapters/payloadIdentity.ts";
|
|
3
|
+
import type { JobPayloadSchema, QueueDefinition } from "#server/definition.ts";
|
|
4
|
+
import type { EnqueueOptions, QueueEnqueueOptions } from "#server/enqueueOptions.ts";
|
|
5
|
+
import { PgBossPayloadError } from "#server/error.ts";
|
|
6
|
+
import { PgBossOperations } from "#server/services/operations/service.ts";
|
|
7
|
+
import { capturePayload } from "#server/tracing.ts";
|
|
8
|
+
|
|
9
|
+
function identityOptions(queue: Pick<QueueDefinition, "id" | "key" | "name">, payload: object, options?: EnqueueOptions) {
|
|
10
|
+
return queue.id === undefined && queue.key === undefined
|
|
11
|
+
? options
|
|
12
|
+
: {
|
|
13
|
+
...options,
|
|
14
|
+
...(queue.id === undefined ? {} : { id: payloadJobId(queue.name, queue.id, payload) }),
|
|
15
|
+
...(queue.key === undefined ? {} : { singletonKey: payloadKey(queue.key, payload) }),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export const enqueuePayload = Effect.fnUntraced(function* <
|
|
20
|
+
const TName extends string,
|
|
21
|
+
const TPayload extends JobPayloadSchema,
|
|
22
|
+
const TQueue extends QueueDefinition<TName, TPayload>,
|
|
23
|
+
>(queue: QueueDefinition<TName, TPayload> & TQueue, payload: NoInfer<Schema.Schema.Type<TPayload>>, options?: NoInfer<QueueEnqueueOptions<TQueue>>) {
|
|
24
|
+
const operations = yield* PgBossOperations;
|
|
25
|
+
const encoded = yield* Schema.encodeUnknownEffect(Schema.toCodecJson(queue.schema))(payload).pipe(
|
|
26
|
+
Effect.mapError((error) => new PgBossPayloadError({ direction: "encode", original: Redacted.make(error), queue: queue.name })),
|
|
27
|
+
);
|
|
28
|
+
if (typeof encoded !== "object" || encoded === null) {
|
|
29
|
+
return yield* new PgBossPayloadError({
|
|
30
|
+
direction: "encode",
|
|
31
|
+
original: Redacted.make(new TypeError("pg-boss payloads must encode to objects")),
|
|
32
|
+
queue: queue.name,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
const data = yield* capturePayload(encoded);
|
|
36
|
+
const sendOptions = identityOptions(queue, payload, options);
|
|
37
|
+
return yield* operations.enqueue(queue.name, data, sendOptions);
|
|
38
|
+
});
|
package/src/server/error.ts
CHANGED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Schema } from "effect";
|
|
2
|
+
import { Effect, Option } from "effect";
|
|
3
|
+
import { redact } from "@shivaedev/errors/redact.ts";
|
|
4
|
+
import { deferralOf } from "#server/deferral.ts";
|
|
5
|
+
import type { JobPayloadSchema } from "#server/definition.ts";
|
|
6
|
+
import { readJobFailure } from "#server/readJobFailure.ts";
|
|
7
|
+
import { PgBossOperations } from "#server/services/operations/service.ts";
|
|
8
|
+
import { decodeStoredData } from "#server/storedRows.ts";
|
|
9
|
+
|
|
10
|
+
export const getJob = Effect.fnUntraced(function* <const TName extends string, const TPayload extends JobPayloadSchema | typeof Schema.Null>(
|
|
11
|
+
queue: { readonly name: TName; readonly schema: TPayload },
|
|
12
|
+
id: string,
|
|
13
|
+
) {
|
|
14
|
+
const engine = yield* PgBossOperations;
|
|
15
|
+
return yield* engine.getJob(queue.name, id).pipe(
|
|
16
|
+
Effect.flatMap(
|
|
17
|
+
Effect.fnUntraced(function* (job) {
|
|
18
|
+
if (job === undefined) {
|
|
19
|
+
return Option.none();
|
|
20
|
+
}
|
|
21
|
+
const data = yield* decodeStoredData(queue, job.data);
|
|
22
|
+
const output = deferralOf(job) === undefined ? yield* readJobFailure(queue.name, job.output) : job.output;
|
|
23
|
+
const sourceOutput = yield* readJobFailure(queue.name, job.sourceOutput);
|
|
24
|
+
return Option.some({ ...job, data: redact(data), output, sourceOutput });
|
|
25
|
+
}),
|
|
26
|
+
),
|
|
27
|
+
);
|
|
28
|
+
});
|
package/src/server/inspection.ts
CHANGED
|
@@ -1,25 +1,12 @@
|
|
|
1
|
-
import type { DateTime } from "effect";
|
|
2
|
-
import {
|
|
3
|
-
import { genericMethod } from "@shivaedev/service/genericMethod.ts";
|
|
1
|
+
import type { DateTime, Effect, Schema } from "effect";
|
|
2
|
+
import { Context } from "effect";
|
|
4
3
|
import type { inspectionChanges } from "#server/adapters/inspectionChanges.ts";
|
|
4
|
+
import { inspectionLayer } from "#server/adapters/inspectionLayer.ts";
|
|
5
5
|
import type { inspectionReads } from "#server/adapters/inspectionReads.ts";
|
|
6
|
+
import type { JobReadOptions } from "#server/client.ts";
|
|
6
7
|
import type { JobPayloadSchema, QueueDefinition } from "#server/definition.ts";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { changes } from "#server/internal/operations/changes.ts";
|
|
10
|
-
import { counts } from "#server/internal/operations/counts.ts";
|
|
11
|
-
import { deadLetteredJobs } from "#server/internal/operations/deadLetteredJobs.ts";
|
|
12
|
-
import { deferred } from "#server/internal/operations/deferred.ts";
|
|
13
|
-
import { failedJobs } from "#server/internal/operations/failedJobs.ts";
|
|
14
|
-
import { getJob } from "#server/internal/operations/getJob.ts";
|
|
15
|
-
import { inspectionHealth } from "#server/internal/operations/inspectionHealth.ts";
|
|
16
|
-
import { jobs } from "#server/internal/operations/jobs.ts";
|
|
17
|
-
import { queue } from "#server/internal/operations/queue.ts";
|
|
18
|
-
import { schedules } from "#server/internal/operations/schedules.ts";
|
|
19
|
-
import { schemaVersion } from "#server/internal/operations/schemaVersion.ts";
|
|
20
|
-
import { snapshot } from "#server/internal/operations/snapshot.ts";
|
|
21
|
-
import { storedJobs } from "#server/internal/operations/storedJobs.ts";
|
|
22
|
-
import { PgBoss } from "#server/PgBoss.ts";
|
|
8
|
+
import type { PgBossError, PgBossPayloadError } from "#server/error.ts";
|
|
9
|
+
import type { Job } from "#server/job.ts";
|
|
23
10
|
import type { PgBossService } from "#server/service.ts";
|
|
24
11
|
|
|
25
12
|
export type SnapshotQueue = Pick<QueueDefinition<string, JobPayloadSchema>, "name" | "schema">;
|
|
@@ -32,30 +19,18 @@ export interface UnfinishedJob<TQueue extends SnapshotQueue> {
|
|
|
32
19
|
readonly state: "active" | "created" | "deferred" | "failed" | "retry";
|
|
33
20
|
}
|
|
34
21
|
|
|
35
|
-
export
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
failedJobs: genericMethod(failedJobs(service)),
|
|
45
|
-
getJob: genericMethod(getJob(service)),
|
|
46
|
-
health: inspectionHealth(service),
|
|
47
|
-
jobs: genericMethod(jobs(service)),
|
|
48
|
-
queue: queue(service),
|
|
49
|
-
schedules: schedules(service),
|
|
50
|
-
schemaVersion: schemaVersion(service),
|
|
51
|
-
snapshot: genericMethod(snapshot(service)),
|
|
52
|
-
storedJobs: storedJobs(service),
|
|
53
|
-
}),
|
|
54
|
-
requires: [PgBoss] as const,
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
export type PgBossInspectionService = ReturnType<typeof inspectionReads> &
|
|
58
|
-
Pick<PgBossService, "counts" | "deadLetteredJobs" | "failedJobs" | "getJob"> & {
|
|
22
|
+
export type PgBossInspectionService = Omit<ReturnType<typeof inspectionReads>, "snapshot"> & {
|
|
23
|
+
readonly jobs: <TName extends string, TPayload extends JobPayloadSchema | typeof Schema.Null>(
|
|
24
|
+
queue: { readonly name: TName; readonly schema: TPayload },
|
|
25
|
+
options?: JobReadOptions,
|
|
26
|
+
) => Effect.Effect<Job<TPayload["Type"]>[], PgBossError | PgBossPayloadError, TPayload["DecodingServices"]>;
|
|
27
|
+
readonly snapshot: <const TQueues extends readonly SnapshotQueue[]>(
|
|
28
|
+
queues: TQueues,
|
|
29
|
+
) => Effect.Effect<readonly UnfinishedJob<TQueues[number]>[], PgBossPayloadError | PgBossError, TQueues[number]["schema"]["DecodingServices"]>;
|
|
30
|
+
} & Pick<PgBossService, "counts" | "deadLetteredJobs" | "failedJobs" | "getJob"> & {
|
|
59
31
|
readonly health: (queues: readonly { readonly name: string }[]) => ReturnType<PgBossService["health"]>;
|
|
60
32
|
readonly changes: (queue?: { readonly name: string }) => ReturnType<typeof inspectionChanges>;
|
|
61
33
|
};
|
|
34
|
+
|
|
35
|
+
const Inspection = Context.Service<"@shivaedev/jobs/PgBossInspection", PgBossInspectionService>("@shivaedev/jobs/PgBossInspection");
|
|
36
|
+
export const PgBossInspection = Object.assign(Inspection, { layer: inspectionLayer(Inspection) });
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Effect, type Schema } from "effect";
|
|
2
|
+
import type { JobReadOptions } from "#server/client.ts";
|
|
3
|
+
import type { JobPayloadSchema } from "#server/definition.ts";
|
|
4
|
+
import { PgBossInspectionReads } from "#server/services/inspection/service.ts";
|
|
5
|
+
import { decodeStoredData } from "#server/storedRows.ts";
|
|
6
|
+
export const inspectionJobs = Effect.fnUntraced(function* <TName extends string, TPayload extends JobPayloadSchema | typeof Schema.Null>(
|
|
7
|
+
queue: { readonly name: TName; readonly schema: TPayload },
|
|
8
|
+
options?: JobReadOptions,
|
|
9
|
+
) {
|
|
10
|
+
const inspection = yield* PgBossInspectionReads;
|
|
11
|
+
const rows = yield* inspection.storedJobs(queue, options);
|
|
12
|
+
return yield* Effect.forEach(rows, (job) => decodeStoredData(queue, job.data).pipe(Effect.map((data) => ({ ...job, data }))));
|
|
13
|
+
});
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import type { SnapshotQueue, UnfinishedJob } from "#server/inspection.ts";
|
|
3
|
+
import { PgBossInspectionReads } from "#server/services/inspection/service.ts";
|
|
4
|
+
import { decodeStoredData } from "#server/storedRows.ts";
|
|
5
|
+
export const inspectionSnapshot = Effect.fnUntraced(function* <const TQueues extends readonly SnapshotQueue[]>(queues: TQueues) {
|
|
6
|
+
const inspection = yield* PgBossInspectionReads;
|
|
7
|
+
const byName = new Map<string, TQueues[number]>(queues.map((queue) => [queue.name, queue]));
|
|
8
|
+
const rows = yield* inspection.snapshot(queues);
|
|
9
|
+
return yield* Effect.forEach(rows, ({ data, queue: name, ...row }) => {
|
|
10
|
+
const queue = byName.get(name);
|
|
11
|
+
if (queue === undefined) {
|
|
12
|
+
return Effect.die(new Error(`The snapshot returned a job of an unrequested queue ${name}`));
|
|
13
|
+
}
|
|
14
|
+
return decodeStoredData<TQueues[number]["name"], TQueues[number]["schema"]>(queue, data).pipe(
|
|
15
|
+
Effect.map((decoded): UnfinishedJob<TQueues[number]> => ({ ...row, data: decoded, queue: queue.name })),
|
|
16
|
+
);
|
|
17
|
+
});
|
|
18
|
+
});
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Effect, Option, Redacted, Schema } from "effect";
|
|
2
2
|
import { redact } from "@shivaedev/errors/redact.ts";
|
|
3
3
|
import { keysetPage } from "@shivaedev/sql/keysetPage.ts";
|
|
4
4
|
import type { JobPayloadSchema } from "#server/definition.ts";
|
|
5
|
+
import type { Listing } from "#server/engine.ts";
|
|
5
6
|
import { type PgBossError, PgBossPayloadError } from "#server/error.ts";
|
|
6
7
|
import type { DeadLetteredJob, JobPage, JobPageOptions } from "#server/health.ts";
|
|
7
|
-
import { JobEngine, type Listing } from "#server/internal/engine.ts";
|
|
8
|
-
import { decodeStoredData } from "#server/internal/storedRows.ts";
|
|
9
8
|
import { readJobFailure } from "#server/readJobFailure.ts";
|
|
10
|
-
import
|
|
9
|
+
import { PgBossOperations } from "#server/services/operations/service.ts";
|
|
10
|
+
import { decodeStoredData } from "#server/storedRows.ts";
|
|
11
11
|
|
|
12
12
|
const Cursor = Schema.StringFromBase64Url.pipe(
|
|
13
13
|
Schema.decodeTo(
|
|
@@ -42,29 +42,33 @@ const Row = Schema.Struct({
|
|
|
42
42
|
|
|
43
43
|
const Rows = Schema.Array(Row);
|
|
44
44
|
|
|
45
|
-
export const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
)
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
45
|
+
export const failedJobs = Effect.fnUntraced(function* <const TName extends string, const TPayload extends JobPayloadSchema | typeof Schema.Null>(
|
|
46
|
+
queue: { readonly name: TName; readonly schema: TPayload },
|
|
47
|
+
options: JobPageOptions,
|
|
48
|
+
) {
|
|
49
|
+
return yield* listJobs("failedJobs", queue, options).pipe(
|
|
50
|
+
Effect.map(({ jobs, next }) => ({ jobs: jobs.map(({ sourceId: _id, sourceOutput: _output, ...job }) => job), next })),
|
|
51
|
+
);
|
|
52
|
+
});
|
|
53
|
+
export const deadLetteredJobs = Effect.fnUntraced(function* <
|
|
54
|
+
const TName extends string,
|
|
55
|
+
const TPayload extends JobPayloadSchema | typeof Schema.Null,
|
|
56
|
+
>(queue: { readonly name: TName; readonly schema: TPayload }, options: JobPageOptions) {
|
|
57
|
+
return yield* listJobs("deadLetteredJobs", queue, options).pipe(
|
|
58
|
+
Effect.map(({ jobs, next }) => ({ jobs: jobs.map((job) => ({ ...job, sourceQueue: queue.name })), next })),
|
|
59
|
+
);
|
|
56
60
|
});
|
|
57
61
|
|
|
58
62
|
const listJobs = Effect.fnUntraced(function* <const TName extends string, const TPayload extends JobPayloadSchema | typeof Schema.Null>(
|
|
59
|
-
engine: Context.Service.Shape<typeof JobEngine>,
|
|
60
63
|
listing: Listing,
|
|
61
64
|
queue: { readonly name: TName; readonly schema: TPayload },
|
|
62
65
|
options: JobPageOptions,
|
|
63
66
|
): Effect.fn.Return<
|
|
64
67
|
JobPage<Omit<DeadLetteredJob<unknown>, "sourceQueue">>,
|
|
65
68
|
PgBossError | PgBossPayloadError | Schema.SchemaError,
|
|
66
|
-
TPayload["DecodingServices"]
|
|
69
|
+
TPayload["DecodingServices"] | "@shivaedev/jobs/PgBossOperations"
|
|
67
70
|
> {
|
|
71
|
+
const engine = yield* PgBossOperations;
|
|
68
72
|
const { cursor: after, limit } = yield* Schema.decodeUnknownEffect(PageOptions)(options);
|
|
69
73
|
const page = yield* keysetPage({
|
|
70
74
|
after,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { inspectionPlan } from "#server/adapters/inspectionPlan.ts";
|
|
2
|
-
import { deadLetterResolutionPlan } from "#server/
|
|
3
|
-
import { deferralStorePlan } from "#server/
|
|
2
|
+
import { deadLetterResolutionPlan } from "#server/deadLetterResolutionPlan.ts";
|
|
3
|
+
import { deferralStorePlan } from "#server/deferralStorePlan.ts";
|
|
4
4
|
|
|
5
5
|
export function jobStorePlans(schema: string): readonly string[] {
|
|
6
6
|
return [deferralStorePlan(schema), deadLetterResolutionPlan(schema), inspectionPlan(schema)];
|