mongodb-scheduler 1.1.2 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ced35defa4e08f8f85d1acebd1c1f540cde5fd78bf8ab705413b7c21a6b834c8
4
- data.tar.gz: 75bac1efddceae22c188238636f8dc4c736c42da4a6b7b3e97ec2c49488eb6c7
3
+ metadata.gz: c7f349aeb19c7cbbdff5bb250f0195abd020ff0bd46f547b2d50bf6442f29f5f
4
+ data.tar.gz: 473214d4f4ecaef4b870f66c158cd97e34e377b91da68f6bfd5b3389218352b5
5
5
  SHA512:
6
- metadata.gz: 12ce7bf3f88c5fa3ad1ff05525e1f8e0343c8b0e19ed78dbbe2d4c20ba82d20e6ab1d7c79379f25006a509b47cb29891470b0cde0c6b25e57fa0a93a243a00cd
7
- data.tar.gz: f737ca2752308ee94af20dea9815e991cef3784c723b2e269066d11f7e631fa65e00264900771bfe080c5a800f26fb0b972d4f30b038f8e150ff8d455fec8140
6
+ metadata.gz: 21a71236aefaccb4793cd4ecc385cf7954bfc97aa5fe4d76aa19f6b89dfcea36e55d5473c005e56f0946992f0da9f3fb136e98eb59752701c326634fd1308206
7
+ data.tar.gz: ab0bdd5c15d10c4a0cad8b74202db1bc6c51c2c3f1e720d209406f324a55f3d4955d7ab64efab30ed89fece06e592b041adedec23c0811a986d3f0ec8faf5587
@@ -52,13 +52,14 @@ module Scheduler
52
52
  begin
53
53
  # Counts jobs to schedule.
54
54
  running_jobs = @job_class.running.entries
55
- schedulable_jobs = @job_class.queued.order_by(scheduled_at: :asc).entries
55
+ scheduled_jobs = @job_class.queued.order_by(scheduled_at: :asc).entries
56
+ performable_jobs = scheduled_jobs.select { |job| job.run_at <= Time.now }
56
57
  jobs_to_schedule = @max_concurrent_jobs - running_jobs.count
57
58
  jobs_to_schedule = 0 if jobs_to_schedule < 0
58
59
 
59
60
  # Finds out scheduled jobs waiting to be performed.
60
- scheduled_jobs = []
61
- schedulable_jobs.first(jobs_to_schedule).each do |job|
61
+ performed_jobs = []
62
+ performable_jobs.first(jobs_to_schedule).each do |job|
62
63
  job_pid = Process.fork do
63
64
  begin
64
65
  job.perform(Process.pid)
@@ -68,20 +69,21 @@ module Scheduler
68
69
  end
69
70
  end
70
71
  Process.detach(job_pid)
71
- scheduled_jobs << job
72
+ performed_jobs << job
72
73
  @queue << job.id.to_s
73
74
  end
74
75
 
75
76
  # Logs launched jobs
76
- if scheduled_jobs.any?
77
- @logger.info Rainbow("[Scheduler:#{@pid}] Launched #{scheduled_jobs.count} "\
78
- "jobs: #{scheduled_jobs.map(&:id).map(&:to_s).join(', ')}.").cyan
77
+ if performed_jobs.any?
78
+ @logger.info Rainbow("[Scheduler:#{@pid}] Launched #{performed_jobs.count} "\
79
+ "jobs: #{performed_jobs.map(&:id).map(&:to_s).join(', ')}.").cyan
79
80
  else
80
- if schedulable_jobs.count == 0
81
- @logger.info Rainbow("[Scheduler:#{@pid}] No jobs in queue.").cyan
81
+ if performable_jobs.count == 0
82
+ @logger.info Rainbow("[Scheduler:#{@pid}] No jobs launched, "\
83
+ "#{scheduled_jobs.count} in queue waiting to be performed.").cyan
82
84
  else
83
85
  @logger.warn Rainbow("[Scheduler:#{@pid}] No jobs launched, reached maximum "\
84
- "number of concurrent jobs. Jobs in queue: #{schedulable_jobs.count}.").yellow
86
+ "number of concurrent jobs. Jobs in queue: #{performable_jobs.count}.").yellow
85
87
  end
86
88
  end
87
89
 
@@ -9,12 +9,36 @@ module Scheduler
9
9
  # Possible log levels.
10
10
  LOG_LEVELS = [ :debug, :info, :warn, :error ]
11
11
 
12
+ ##
13
+ # A class to delay jobs.
14
+ class Delayed
15
+
16
+ ##
17
+ # New delayed job.
18
+ def initialize(job_class, time)
19
+ @job_class = job_class
20
+ @time = time
21
+ end
22
+
23
+ ##
24
+ # Creates an instance of this class and schedules the job.
25
+ #
26
+ # @param [String] executable_class the class of the job to run.
27
+ # @param [Array] *job_args job arguments
28
+ #
29
+ # @return [Object] the created job.
30
+ def schedule(executable_class, *job_args)
31
+ @job_class.create(executable_class: executable_class, args: job_args, run_at: Time.now + @time).schedule
32
+ end
33
+ end
34
+
12
35
  def self.included(base)
13
36
  base.class_eval do
14
37
  include Mongoid::Document
15
38
 
16
39
  field :executable_class, type: String
17
40
  field :args, type: Array, default: []
41
+ field :run_at, type: DateTime, default: Time.now
18
42
  field :scheduled_at, type: DateTime
19
43
  field :executed_at, type: DateTime
20
44
  field :completed_at, type: DateTime
@@ -76,6 +100,16 @@ module Scheduler
76
100
  self.create(executable_class: executable_class, args: job_args).schedule
77
101
  end
78
102
 
103
+ ##
104
+ # Creates an instance of this class and schedules the job after the amount of given time.
105
+ #
106
+ # @param [Integer] time the amount of time to wait.
107
+ #
108
+ # @return [Object] the created job.
109
+ def in(time)
110
+ Scheduler::Schedulable::Delayed.new(self, time)
111
+ end
112
+
79
113
  ##
80
114
  # Creates an instance of this class and performs the job.
81
115
  #
@@ -1,3 +1,3 @@
1
1
  module Scheduler
2
- VERSION = "1.1.2"
2
+ VERSION = "1.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongodb-scheduler
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Francesco Ballardin
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-10-01 00:00:00.000000000 Z
11
+ date: 2019-10-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mongoid