mongodb-scheduler 1.1.2 → 1.2.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 +4 -4
- data/lib/scheduler/main_process.rb +12 -10
- data/lib/scheduler/schedulable.rb +34 -0
- data/lib/scheduler/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c7f349aeb19c7cbbdff5bb250f0195abd020ff0bd46f547b2d50bf6442f29f5f
|
4
|
+
data.tar.gz: 473214d4f4ecaef4b870f66c158cd97e34e377b91da68f6bfd5b3389218352b5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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
|
-
|
61
|
-
|
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
|
-
|
72
|
+
performed_jobs << job
|
72
73
|
@queue << job.id.to_s
|
73
74
|
end
|
74
75
|
|
75
76
|
# Logs launched jobs
|
76
|
-
if
|
77
|
-
@logger.info Rainbow("[Scheduler:#{@pid}] Launched #{
|
78
|
-
"jobs: #{
|
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
|
81
|
-
@logger.info Rainbow("[Scheduler:#{@pid}] No jobs
|
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: #{
|
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
|
#
|
data/lib/scheduler/version.rb
CHANGED
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.
|
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-
|
11
|
+
date: 2019-10-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mongoid
|