@pgpm/database-jobs 0.26.1 → 0.26.2
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/Makefile
CHANGED
|
@@ -14,7 +14,9 @@ CREATE FUNCTION app_jobs.add_job (
|
|
|
14
14
|
run_at timestamptz DEFAULT now(),
|
|
15
15
|
max_attempts integer DEFAULT 25,
|
|
16
16
|
priority integer DEFAULT 0,
|
|
17
|
-
entity_id uuid DEFAULT NULL
|
|
17
|
+
entity_id uuid DEFAULT NULL,
|
|
18
|
+
organization_id uuid DEFAULT NULL,
|
|
19
|
+
entity_type text DEFAULT NULL
|
|
18
20
|
)
|
|
19
21
|
RETURNS app_jobs.jobs
|
|
20
22
|
AS $$
|
|
@@ -33,6 +35,8 @@ BEGIN
|
|
|
33
35
|
database_id,
|
|
34
36
|
actor_id,
|
|
35
37
|
entity_id,
|
|
38
|
+
organization_id,
|
|
39
|
+
entity_type,
|
|
36
40
|
task_identifier,
|
|
37
41
|
payload,
|
|
38
42
|
queue_name,
|
|
@@ -44,6 +48,8 @@ BEGIN
|
|
|
44
48
|
v_database_id,
|
|
45
49
|
v_actor_id,
|
|
46
50
|
add_job.entity_id,
|
|
51
|
+
add_job.organization_id,
|
|
52
|
+
add_job.entity_type,
|
|
47
53
|
identifier,
|
|
48
54
|
coalesce(payload, '{}'::json),
|
|
49
55
|
queue_name,
|
|
@@ -88,6 +94,8 @@ BEGIN
|
|
|
88
94
|
database_id,
|
|
89
95
|
actor_id,
|
|
90
96
|
entity_id,
|
|
97
|
+
organization_id,
|
|
98
|
+
entity_type,
|
|
91
99
|
task_identifier,
|
|
92
100
|
payload,
|
|
93
101
|
queue_name,
|
|
@@ -98,6 +106,8 @@ BEGIN
|
|
|
98
106
|
v_database_id,
|
|
99
107
|
v_actor_id,
|
|
100
108
|
add_job.entity_id,
|
|
109
|
+
add_job.organization_id,
|
|
110
|
+
add_job.entity_type,
|
|
101
111
|
identifier,
|
|
102
112
|
payload,
|
|
103
113
|
queue_name,
|
|
@@ -7,6 +7,8 @@ CREATE TABLE app_jobs.jobs (
|
|
|
7
7
|
database_id uuid,
|
|
8
8
|
actor_id uuid,
|
|
9
9
|
entity_id uuid,
|
|
10
|
+
organization_id uuid,
|
|
11
|
+
entity_type text,
|
|
10
12
|
queue_name text DEFAULT NULL,
|
|
11
13
|
task_identifier text NOT NULL,
|
|
12
14
|
payload json DEFAULT '{}' ::json NOT NULL,
|
|
@@ -32,6 +34,8 @@ COMMENT ON COLUMN app_jobs.jobs.id IS 'Auto-incrementing job identifier';
|
|
|
32
34
|
COMMENT ON COLUMN app_jobs.jobs.database_id IS 'Database this job belongs to (nullable for system-level jobs without tenant context)';
|
|
33
35
|
COMMENT ON COLUMN app_jobs.jobs.actor_id IS 'User who triggered this job, read from JWT claims at enqueue time';
|
|
34
36
|
COMMENT ON COLUMN app_jobs.jobs.entity_id IS 'Entity (org/team) this job is scoped to for billing; NULL means platform-level (resolved via database_id → owner_id)';
|
|
37
|
+
COMMENT ON COLUMN app_jobs.jobs.organization_id IS 'Top-level organization for this entity; resolved at enqueue time via get_organization_id(entity_type, entity_id)';
|
|
38
|
+
COMMENT ON COLUMN app_jobs.jobs.entity_type IS 'Entity type prefix (org, team, app, etc.) for interpreting entity_id';
|
|
35
39
|
COMMENT ON COLUMN app_jobs.jobs.queue_name IS 'Name of the queue this job belongs to; used for worker routing and concurrency control';
|
|
36
40
|
COMMENT ON COLUMN app_jobs.jobs.task_identifier IS 'Identifier for the task type (maps to a worker handler function)';
|
|
37
41
|
COMMENT ON COLUMN app_jobs.jobs.payload IS 'JSON payload of arguments passed to the task handler';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pgpm/database-jobs",
|
|
3
|
-
"version": "0.26.
|
|
3
|
+
"version": "0.26.2",
|
|
4
4
|
"description": "Database-specific job handling and queue management",
|
|
5
5
|
"author": "Dan Lynch <pyramation@gmail.com>",
|
|
6
6
|
"contributors": [
|
|
@@ -35,5 +35,5 @@
|
|
|
35
35
|
"bugs": {
|
|
36
36
|
"url": "https://github.com/constructive-io/pgpm-modules/issues"
|
|
37
37
|
},
|
|
38
|
-
"gitHead": "
|
|
38
|
+
"gitHead": "d938867e5d7c0e7b2e130a2bdc5d58cd0d5874e1"
|
|
39
39
|
}
|
|
@@ -53,9 +53,7 @@ $EOFCODE$ LANGUAGE plpgsql VOLATILE SECURITY DEFINER;
|
|
|
53
53
|
|
|
54
54
|
COMMENT ON FUNCTION app_jobs.tg_add_job_with_row IS 'Useful shortcut to create a job on insert or update. Pass the task name as the trigger argument, and the record data will automatically be available on the JSON payload.';
|
|
55
55
|
|
|
56
|
-
CREATE FUNCTION app_jobs.json_build_object_apply(
|
|
57
|
-
arguments text[]
|
|
58
|
-
) RETURNS pg_catalog.json AS $EOFCODE$
|
|
56
|
+
CREATE FUNCTION app_jobs.json_build_object_apply(arguments text[]) RETURNS pg_catalog.json AS $EOFCODE$
|
|
59
57
|
DECLARE
|
|
60
58
|
arg text;
|
|
61
59
|
_sql text;
|
|
@@ -195,6 +193,8 @@ CREATE TABLE app_jobs.jobs (
|
|
|
195
193
|
database_id uuid,
|
|
196
194
|
actor_id uuid,
|
|
197
195
|
entity_id uuid,
|
|
196
|
+
organization_id uuid,
|
|
197
|
+
entity_type text,
|
|
198
198
|
queue_name text DEFAULT NULL,
|
|
199
199
|
task_identifier text NOT NULL,
|
|
200
200
|
payload pg_catalog.json DEFAULT '{}'::json NOT NULL,
|
|
@@ -226,6 +226,10 @@ COMMENT ON COLUMN app_jobs.jobs.actor_id IS 'User who triggered this job, read f
|
|
|
226
226
|
|
|
227
227
|
COMMENT ON COLUMN app_jobs.jobs.entity_id IS 'Entity (org/team) this job is scoped to for billing; NULL means platform-level (resolved via database_id → owner_id)';
|
|
228
228
|
|
|
229
|
+
COMMENT ON COLUMN app_jobs.jobs.organization_id IS 'Top-level organization for this entity; resolved at enqueue time via get_organization_id(entity_type, entity_id)';
|
|
230
|
+
|
|
231
|
+
COMMENT ON COLUMN app_jobs.jobs.entity_type IS 'Entity type prefix (org, team, app, etc.) for interpreting entity_id';
|
|
232
|
+
|
|
229
233
|
COMMENT ON COLUMN app_jobs.jobs.queue_name IS 'Name of the queue this job belongs to; used for worker routing and concurrency control';
|
|
230
234
|
|
|
231
235
|
COMMENT ON COLUMN app_jobs.jobs.task_identifier IS 'Identifier for the task type (maps to a worker handler function)';
|
|
@@ -374,10 +378,7 @@ CREATE INDEX job_queues_locked_by_idx ON app_jobs.job_queues (locked_by);
|
|
|
374
378
|
|
|
375
379
|
GRANT SELECT, INSERT, UPDATE, DELETE ON app_jobs.job_queues TO administrator;
|
|
376
380
|
|
|
377
|
-
CREATE FUNCTION app_jobs.run_scheduled_job(
|
|
378
|
-
id bigint,
|
|
379
|
-
job_expiry interval DEFAULT '1 hours'
|
|
380
|
-
) RETURNS app_jobs.jobs AS $EOFCODE$
|
|
381
|
+
CREATE FUNCTION app_jobs.run_scheduled_job(id bigint, job_expiry interval DEFAULT '1 hours') RETURNS app_jobs.jobs AS $EOFCODE$
|
|
381
382
|
DECLARE
|
|
382
383
|
j app_jobs.jobs;
|
|
383
384
|
last_id bigint;
|
|
@@ -448,13 +449,7 @@ BEGIN
|
|
|
448
449
|
END;
|
|
449
450
|
$EOFCODE$ LANGUAGE plpgsql VOLATILE;
|
|
450
451
|
|
|
451
|
-
CREATE FUNCTION app_jobs.reschedule_jobs(
|
|
452
|
-
job_ids bigint[],
|
|
453
|
-
run_at timestamptz DEFAULT NULL,
|
|
454
|
-
priority int DEFAULT NULL,
|
|
455
|
-
attempts int DEFAULT NULL,
|
|
456
|
-
max_attempts int DEFAULT NULL
|
|
457
|
-
) RETURNS SETOF app_jobs.jobs LANGUAGE sql AS $EOFCODE$
|
|
452
|
+
CREATE FUNCTION app_jobs.reschedule_jobs(job_ids bigint[], run_at timestamptz DEFAULT NULL, priority int DEFAULT NULL, attempts int DEFAULT NULL, max_attempts int DEFAULT NULL) RETURNS SETOF app_jobs.jobs LANGUAGE sql AS $EOFCODE$
|
|
458
453
|
UPDATE
|
|
459
454
|
app_jobs.jobs
|
|
460
455
|
SET
|
|
@@ -470,10 +465,7 @@ CREATE FUNCTION app_jobs.reschedule_jobs(
|
|
|
470
465
|
*;
|
|
471
466
|
$EOFCODE$;
|
|
472
467
|
|
|
473
|
-
CREATE FUNCTION app_jobs.release_scheduled_jobs(
|
|
474
|
-
worker_id text,
|
|
475
|
-
ids bigint[] DEFAULT NULL
|
|
476
|
-
) RETURNS void AS $EOFCODE$
|
|
468
|
+
CREATE FUNCTION app_jobs.release_scheduled_jobs(worker_id text, ids bigint[] DEFAULT NULL) RETURNS void AS $EOFCODE$
|
|
477
469
|
DECLARE
|
|
478
470
|
BEGIN
|
|
479
471
|
-- clear the scheduled job
|
|
@@ -489,9 +481,7 @@ BEGIN
|
|
|
489
481
|
END;
|
|
490
482
|
$EOFCODE$ LANGUAGE plpgsql VOLATILE;
|
|
491
483
|
|
|
492
|
-
CREATE FUNCTION app_jobs.release_jobs(
|
|
493
|
-
worker_id text
|
|
494
|
-
) RETURNS void AS $EOFCODE$
|
|
484
|
+
CREATE FUNCTION app_jobs.release_jobs(worker_id text) RETURNS void AS $EOFCODE$
|
|
495
485
|
DECLARE
|
|
496
486
|
BEGIN
|
|
497
487
|
-- clear the job
|
|
@@ -514,10 +504,7 @@ BEGIN
|
|
|
514
504
|
END;
|
|
515
505
|
$EOFCODE$ LANGUAGE plpgsql VOLATILE;
|
|
516
506
|
|
|
517
|
-
CREATE FUNCTION app_jobs.permanently_fail_jobs(
|
|
518
|
-
job_ids bigint[],
|
|
519
|
-
error_message text DEFAULT NULL
|
|
520
|
-
) RETURNS SETOF app_jobs.jobs LANGUAGE sql AS $EOFCODE$
|
|
507
|
+
CREATE FUNCTION app_jobs.permanently_fail_jobs(job_ids bigint[], error_message text DEFAULT NULL) RETURNS SETOF app_jobs.jobs LANGUAGE sql AS $EOFCODE$
|
|
521
508
|
UPDATE
|
|
522
509
|
app_jobs.jobs
|
|
523
510
|
SET
|
|
@@ -531,10 +518,7 @@ CREATE FUNCTION app_jobs.permanently_fail_jobs(
|
|
|
531
518
|
*;
|
|
532
519
|
$EOFCODE$;
|
|
533
520
|
|
|
534
|
-
CREATE FUNCTION app_jobs.get_scheduled_job(
|
|
535
|
-
worker_id text,
|
|
536
|
-
task_identifiers text[] DEFAULT NULL
|
|
537
|
-
) RETURNS app_jobs.scheduled_jobs LANGUAGE plpgsql AS $EOFCODE$
|
|
521
|
+
CREATE FUNCTION app_jobs.get_scheduled_job(worker_id text, task_identifiers text[] DEFAULT NULL) RETURNS app_jobs.scheduled_jobs LANGUAGE plpgsql AS $EOFCODE$
|
|
538
522
|
DECLARE
|
|
539
523
|
v_job_id bigint;
|
|
540
524
|
v_row app_jobs.scheduled_jobs;
|
|
@@ -586,11 +570,7 @@ BEGIN
|
|
|
586
570
|
END;
|
|
587
571
|
$EOFCODE$;
|
|
588
572
|
|
|
589
|
-
CREATE FUNCTION app_jobs.get_job(
|
|
590
|
-
worker_id text,
|
|
591
|
-
task_identifiers text[] DEFAULT NULL,
|
|
592
|
-
job_expiry interval DEFAULT '4 hours'
|
|
593
|
-
) RETURNS app_jobs.jobs LANGUAGE plpgsql AS $EOFCODE$
|
|
573
|
+
CREATE FUNCTION app_jobs.get_job(worker_id text, task_identifiers text[] DEFAULT NULL, job_expiry interval DEFAULT '4 hours') RETURNS app_jobs.jobs LANGUAGE plpgsql AS $EOFCODE$
|
|
594
574
|
DECLARE
|
|
595
575
|
v_job_id bigint;
|
|
596
576
|
v_queue_name text;
|
|
@@ -645,11 +625,7 @@ BEGIN
|
|
|
645
625
|
END;
|
|
646
626
|
$EOFCODE$;
|
|
647
627
|
|
|
648
|
-
CREATE FUNCTION app_jobs.fail_job(
|
|
649
|
-
worker_id text,
|
|
650
|
-
job_id bigint,
|
|
651
|
-
error_message text
|
|
652
|
-
) RETURNS app_jobs.jobs LANGUAGE plpgsql STRICT AS $EOFCODE$
|
|
628
|
+
CREATE FUNCTION app_jobs.fail_job(worker_id text, job_id bigint, error_message text) RETURNS app_jobs.jobs LANGUAGE plpgsql STRICT AS $EOFCODE$
|
|
653
629
|
DECLARE
|
|
654
630
|
v_row app_jobs.jobs;
|
|
655
631
|
BEGIN
|
|
@@ -679,9 +655,7 @@ BEGIN
|
|
|
679
655
|
END;
|
|
680
656
|
$EOFCODE$;
|
|
681
657
|
|
|
682
|
-
CREATE FUNCTION app_jobs.complete_jobs(
|
|
683
|
-
job_ids bigint[]
|
|
684
|
-
) RETURNS SETOF app_jobs.jobs LANGUAGE sql AS $EOFCODE$
|
|
658
|
+
CREATE FUNCTION app_jobs.complete_jobs(job_ids bigint[]) RETURNS SETOF app_jobs.jobs LANGUAGE sql AS $EOFCODE$
|
|
685
659
|
DELETE FROM app_jobs.jobs
|
|
686
660
|
WHERE id = ANY (job_ids)
|
|
687
661
|
AND (locked_by IS NULL
|
|
@@ -690,10 +664,7 @@ CREATE FUNCTION app_jobs.complete_jobs(
|
|
|
690
664
|
*;
|
|
691
665
|
$EOFCODE$;
|
|
692
666
|
|
|
693
|
-
CREATE FUNCTION app_jobs.complete_job(
|
|
694
|
-
worker_id text,
|
|
695
|
-
job_id bigint
|
|
696
|
-
) RETURNS app_jobs.jobs LANGUAGE plpgsql AS $EOFCODE$
|
|
667
|
+
CREATE FUNCTION app_jobs.complete_job(worker_id text, job_id bigint) RETURNS app_jobs.jobs LANGUAGE plpgsql AS $EOFCODE$
|
|
697
668
|
DECLARE
|
|
698
669
|
v_row app_jobs.jobs;
|
|
699
670
|
BEGIN
|
|
@@ -715,16 +686,7 @@ BEGIN
|
|
|
715
686
|
END;
|
|
716
687
|
$EOFCODE$;
|
|
717
688
|
|
|
718
|
-
CREATE FUNCTION app_jobs.add_scheduled_job(
|
|
719
|
-
identifier text,
|
|
720
|
-
payload pg_catalog.json DEFAULT '{}'::json,
|
|
721
|
-
schedule_info pg_catalog.json DEFAULT '{}'::json,
|
|
722
|
-
job_key text DEFAULT NULL,
|
|
723
|
-
queue_name text DEFAULT NULL,
|
|
724
|
-
max_attempts int DEFAULT 25,
|
|
725
|
-
priority int DEFAULT 0,
|
|
726
|
-
entity_id uuid DEFAULT NULL
|
|
727
|
-
) RETURNS app_jobs.scheduled_jobs AS $EOFCODE$
|
|
689
|
+
CREATE FUNCTION app_jobs.add_scheduled_job(identifier text, payload pg_catalog.json DEFAULT '{}'::json, schedule_info pg_catalog.json DEFAULT '{}'::json, job_key text DEFAULT NULL, queue_name text DEFAULT NULL, max_attempts int DEFAULT 25, priority int DEFAULT 0, entity_id uuid DEFAULT NULL) RETURNS app_jobs.scheduled_jobs AS $EOFCODE$
|
|
728
690
|
DECLARE
|
|
729
691
|
v_job app_jobs.scheduled_jobs;
|
|
730
692
|
v_database_id uuid;
|
|
@@ -812,16 +774,7 @@ BEGIN
|
|
|
812
774
|
END;
|
|
813
775
|
$EOFCODE$ LANGUAGE plpgsql VOLATILE SECURITY DEFINER;
|
|
814
776
|
|
|
815
|
-
CREATE FUNCTION app_jobs.add_job(
|
|
816
|
-
identifier text,
|
|
817
|
-
payload pg_catalog.json DEFAULT '{}'::json,
|
|
818
|
-
job_key text DEFAULT NULL,
|
|
819
|
-
queue_name text DEFAULT NULL,
|
|
820
|
-
run_at timestamptz DEFAULT now(),
|
|
821
|
-
max_attempts int DEFAULT 25,
|
|
822
|
-
priority int DEFAULT 0,
|
|
823
|
-
entity_id uuid DEFAULT NULL
|
|
824
|
-
) RETURNS app_jobs.jobs AS $EOFCODE$
|
|
777
|
+
CREATE FUNCTION app_jobs.add_job(identifier text, payload pg_catalog.json DEFAULT '{}'::json, job_key text DEFAULT NULL, queue_name text DEFAULT NULL, run_at timestamptz DEFAULT now(), max_attempts int DEFAULT 25, priority int DEFAULT 0, entity_id uuid DEFAULT NULL, organization_id uuid DEFAULT NULL, entity_type text DEFAULT NULL) RETURNS app_jobs.jobs AS $EOFCODE$
|
|
825
778
|
DECLARE
|
|
826
779
|
v_job app_jobs.jobs;
|
|
827
780
|
v_database_id uuid;
|
|
@@ -837,6 +790,8 @@ BEGIN
|
|
|
837
790
|
database_id,
|
|
838
791
|
actor_id,
|
|
839
792
|
entity_id,
|
|
793
|
+
organization_id,
|
|
794
|
+
entity_type,
|
|
840
795
|
task_identifier,
|
|
841
796
|
payload,
|
|
842
797
|
queue_name,
|
|
@@ -848,6 +803,8 @@ BEGIN
|
|
|
848
803
|
v_database_id,
|
|
849
804
|
v_actor_id,
|
|
850
805
|
add_job.entity_id,
|
|
806
|
+
add_job.organization_id,
|
|
807
|
+
add_job.entity_type,
|
|
851
808
|
identifier,
|
|
852
809
|
coalesce(payload, '{}'::json),
|
|
853
810
|
queue_name,
|
|
@@ -892,6 +849,8 @@ BEGIN
|
|
|
892
849
|
database_id,
|
|
893
850
|
actor_id,
|
|
894
851
|
entity_id,
|
|
852
|
+
organization_id,
|
|
853
|
+
entity_type,
|
|
895
854
|
task_identifier,
|
|
896
855
|
payload,
|
|
897
856
|
queue_name,
|
|
@@ -902,6 +861,8 @@ BEGIN
|
|
|
902
861
|
v_database_id,
|
|
903
862
|
v_actor_id,
|
|
904
863
|
add_job.entity_id,
|
|
864
|
+
add_job.organization_id,
|
|
865
|
+
add_job.entity_type,
|
|
905
866
|
identifier,
|
|
906
867
|
payload,
|
|
907
868
|
queue_name,
|
|
@@ -915,9 +876,7 @@ BEGIN
|
|
|
915
876
|
END;
|
|
916
877
|
$EOFCODE$ LANGUAGE plpgsql VOLATILE SECURITY DEFINER;
|
|
917
878
|
|
|
918
|
-
CREATE FUNCTION app_jobs.remove_job(
|
|
919
|
-
job_key text
|
|
920
|
-
) RETURNS app_jobs.jobs LANGUAGE plpgsql STRICT AS $EOFCODE$
|
|
879
|
+
CREATE FUNCTION app_jobs.remove_job(job_key text) RETURNS app_jobs.jobs LANGUAGE plpgsql STRICT AS $EOFCODE$
|
|
921
880
|
DECLARE
|
|
922
881
|
v_job app_jobs.jobs;
|
|
923
882
|
BEGIN
|
|
@@ -942,9 +901,7 @@ BEGIN
|
|
|
942
901
|
END;
|
|
943
902
|
$EOFCODE$;
|
|
944
903
|
|
|
945
|
-
CREATE FUNCTION app_jobs.force_unlock_workers(
|
|
946
|
-
worker_ids text[]
|
|
947
|
-
) RETURNS void LANGUAGE sql VOLATILE AS $EOFCODE$
|
|
904
|
+
CREATE FUNCTION app_jobs.force_unlock_workers(worker_ids text[]) RETURNS void LANGUAGE sql VOLATILE AS $EOFCODE$
|
|
948
905
|
UPDATE app_jobs.jobs
|
|
949
906
|
SET locked_at = NULL, locked_by = NULL
|
|
950
907
|
WHERE locked_by = ANY (worker_ids);
|