que-scheduler 2.0.2 → 2.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9c236715a6d4450fe4a293f9bf036b0c4055bd3dab37f8ca271b5104fc0feaf2
4
- data.tar.gz: 85972f01e64ca1a3f9570bfa1789d8980dc8355d2a8a486cda0c6954f94ceb90
3
+ metadata.gz: 3bd2f9250706164b35b25db80c41136311383cbe5d2d0d93a3a0f14c222d2cdc
4
+ data.tar.gz: 5ef3839cbdb4a13b7864675a4e641e89b19f1355da058fa2974b1092a8286f16
5
5
  SHA512:
6
- metadata.gz: c1e3ee3cf06dbee42c3369a1fe384872dd766a39ef39a5fd0928b5d854af189828c3cc1e457a1aa1987dc4031aabfed2d9e592e8c1e00d6665bb8093cc4df0e4
7
- data.tar.gz: 967d7a3ad3ef09fb93802e6b7d4068a5466768d1f9bf4e901856d6464475d1bd56c8273ad118987e7e08d06ec8edc0e1f32be2d27b4fb34bd3b097b8d479b456
6
+ metadata.gz: 64d917abf9404977b0d95648545f363ed44c1d1088b0f5a302825c028795318818f4799fb1ee23acc52b5aa84de81202a63b56499c78329d12132a00091cc6bb
7
+ data.tar.gz: e99bd69d7201245c8ee930a5076c3ba1efcec98a808eec045b2144845a3c346b7f3e727335faab2ea77d22bd32a54975e14d3e33d353a3aec1d9bc7317ceb91e
data/README.md CHANGED
@@ -28,7 +28,7 @@ files, but with additional features.
28
28
  ```ruby
29
29
  class CreateQueSchedulerSchema < ActiveRecord::Migration
30
30
  def change
31
- Que::Scheduler::Migrations.migrate!(version: 2)
31
+ Que::Scheduler::Migrations.migrate!(version: 3)
32
32
  end
33
33
  end
34
34
  ```
@@ -4,19 +4,34 @@ module Que
4
4
  module Scheduler
5
5
  module Audit
6
6
  TABLE_NAME = 'que_scheduler_audit'
7
+ ENQUEUED_TABLE_NAME = 'que_scheduler_audit_enqueued'
7
8
  INSERT_AUDIT = %{
8
- INSERT INTO #{TABLE_NAME} (scheduler_job_id, jobs_enqueued, executed_at, next_run_at)
9
- VALUES ($1::integer, $2::jsonb, $3::timestamptz, $4::timestamptz)
9
+ INSERT INTO #{TABLE_NAME} (scheduler_job_id, executed_at)
10
+ VALUES ($1::integer, $2::timestamptz)
11
+ RETURNING *
12
+ }
13
+ INSERT_AUDIT_ENQUEUED = %{
14
+ INSERT INTO #{ENQUEUED_TABLE_NAME} (scheduler_job_id, job_class, queue, priority, args)
15
+ VALUES ($1::integer, $2::varchar, $3::varchar, $4::integer, $5::jsonb)
10
16
  RETURNING *
11
17
  }
12
18
 
13
19
  class << self
14
- def append(job_id, executed_at, result, next_run_at)
15
- json = result.missed_jobs.map { |j| j.to_h.merge(job_class: j.job_class.to_s) }.to_json
16
- inserted = ::Que.execute(
17
- INSERT_AUDIT, [job_id, json, executed_at, next_run_at]
18
- )
19
- raise "Cannot save audit row #{job_id} #{executed_at}" if inserted.empty?
20
+ def append(job_id, executed_at, result)
21
+ ::Que.execute(INSERT_AUDIT, [job_id, executed_at])
22
+ result.missed_jobs.each do |j|
23
+ inserted = ::Que.execute(
24
+ INSERT_AUDIT_ENQUEUED,
25
+ [
26
+ job_id,
27
+ j.job_class,
28
+ j.queue,
29
+ j.priority,
30
+ j.args
31
+ ]
32
+ )
33
+ raise "Cannot save audit row #{job_id} #{executed_at} #{j}" if inserted.empty?
34
+ end
20
35
  end
21
36
  end
22
37
  end
@@ -87,18 +87,17 @@ module Que
87
87
  end
88
88
 
89
89
  def generate_to_enqueue_list(missed_times)
90
- [].tap do |jobs_for_class|
91
- unless missed_times.empty?
92
- options = to_h.slice(:args, :queue, :priority, :job_class).compact
90
+ return [] if missed_times.empty?
93
91
 
94
- if schedule_type == DefinedJob::SCHEDULE_TYPE_EVERY_EVENT
95
- missed_times.each do |time_missed|
96
- jobs_for_class << ToEnqueue.new(options.merge(args: [time_missed] + (args || [])))
97
- end
98
- else
99
- jobs_for_class << ToEnqueue.new(options)
100
- end
92
+ options = to_h.slice(:args, :queue, :priority, :job_class).compact
93
+ args_array = args.is_a?(Array) ? args : Array(args)
94
+
95
+ if schedule_type == DefinedJob::SCHEDULE_TYPE_EVERY_EVENT
96
+ missed_times.map do |time_missed|
97
+ ToEnqueue.new(options.merge(args: [time_missed] + args_array))
101
98
  end
99
+ else
100
+ [ToEnqueue.new(options.merge(args: args_array))]
102
101
  end
103
102
  end
104
103
  end
@@ -0,0 +1,8 @@
1
+ DROP TABLE que_scheduler_audit_enqueued;
2
+ ALTER TABLE que_scheduler_audit DROP CONSTRAINT que_scheduler_audit_pkey;
3
+
4
+ ALTER TABLE que_scheduler_audit
5
+ ADD COLUMN next_run_at timestamptz,
6
+ ADD COLUMN jobs_enqueued jsonb;
7
+
8
+ CREATE INDEX index_que_scheduler_audit_on_jobs_enqueued ON que_scheduler_audit USING btree (jobs_enqueued);
@@ -0,0 +1,19 @@
1
+ ALTER TABLE que_scheduler_audit ADD PRIMARY KEY (scheduler_job_id);
2
+
3
+ CREATE TABLE que_scheduler_audit_enqueued (
4
+ scheduler_job_id integer NOT NULL REFERENCES que_scheduler_audit (scheduler_job_id),
5
+ job_class varchar(255) NOT NULL,
6
+ queue varchar(255),
7
+ priority integer,
8
+ args jsonb NOT NULL
9
+ );
10
+
11
+ CREATE INDEX que_scheduler_audit_enqueued_job_class ON que_scheduler_audit_enqueued USING btree (job_class);
12
+ CREATE INDEX que_scheduler_audit_enqueued_args ON que_scheduler_audit_enqueued USING btree (args);
13
+
14
+ WITH rows AS (SELECT scheduler_job_id, json_array_elements(jobs_enqueued::json) AS enqueued FROM que_scheduler_audit)
15
+ INSERT INTO que_scheduler_audit_enqueued(scheduler_job_id, args, job_class)
16
+ SELECT scheduler_job_id, (enqueued->>'args')::json AS args, enqueued->>'job_class' AS job_class FROM rows;
17
+
18
+ ALTER TABLE que_scheduler_audit DROP COLUMN next_run_at;
19
+ ALTER TABLE que_scheduler_audit DROP COLUMN jobs_enqueued;
@@ -25,7 +25,7 @@ module Que
25
25
 
26
26
  def db_version
27
27
  return 0 if Que::Scheduler::Db.count_schedulers.zero?
28
- return 1 unless ActiveRecord::Base.connection.table_exists?(AUDIT_TABLE_NAME)
28
+ return 1 unless audit_table_exists?
29
29
  Que.execute(TABLE_COMMENT).first[:description].to_i
30
30
  end
31
31
 
@@ -43,8 +43,14 @@ module Que
43
43
 
44
44
  def execute_step(number, direction)
45
45
  Que.execute(IO.read("#{__dir__}/migrations/#{number}/#{direction}.sql"))
46
- return unless number >= (direction == :up ? 2 : 3)
47
- Que.execute "COMMENT ON TABLE que_scheduler_audit IS '#{number}'"
46
+ return unless audit_table_exists?
47
+ Que.execute(
48
+ "COMMENT ON TABLE que_scheduler_audit IS '#{direction == :up ? number : number - 1}'"
49
+ )
50
+ end
51
+
52
+ def audit_table_exists?
53
+ ActiveRecord::Base.connection.table_exists?(AUDIT_TABLE_NAME)
48
54
  end
49
55
  end
50
56
  end
@@ -59,7 +59,7 @@ module Que
59
59
  job_dictionary: result.job_dictionary,
60
60
  run_at: next_run_at
61
61
  )
62
- Audit.append(attrs[:job_id], scheduler_job_args.as_time, result, next_run_at)
62
+ Audit.append(attrs[:job_id], scheduler_job_args.as_time, result)
63
63
  end
64
64
  end
65
65
  end
@@ -1,5 +1,5 @@
1
1
  module Que
2
2
  module Scheduler
3
- VERSION = '2.0.2'.freeze
3
+ VERSION = '2.1.0'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: que-scheduler
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Harry Lascelles
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-29 00:00:00.000000000 Z
11
+ date: 2018-05-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -295,6 +295,8 @@ files:
295
295
  - lib/que/scheduler/migrations/1/up.sql
296
296
  - lib/que/scheduler/migrations/2/down.sql
297
297
  - lib/que/scheduler/migrations/2/up.sql
298
+ - lib/que/scheduler/migrations/3/down.sql
299
+ - lib/que/scheduler/migrations/3/up.sql
298
300
  - lib/que/scheduler/scheduler_job.rb
299
301
  - lib/que/scheduler/scheduler_job_args.rb
300
302
  - lib/que/scheduler/version.rb