rocketjob 2.0.0.rc3 → 2.0.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/bin/rocketjob +1 -1
- data/bin/rocketjob_perf +2 -83
- data/lib/rocket_job/cli.rb +13 -3
- data/lib/rocket_job/dirmon_entry.rb +2 -2
- data/lib/rocket_job/extensions/mongo.rb +1 -1
- data/lib/rocket_job/performance.rb +82 -0
- data/lib/rocket_job/plugins/cron.rb +130 -0
- data/lib/rocket_job/plugins/job/logger.rb +1 -1
- data/lib/rocket_job/plugins/processing_window.rb +88 -0
- data/lib/rocket_job/plugins/rufus/cron_line.rb +492 -0
- data/lib/rocket_job/plugins/rufus/zo_time.rb +291 -0
- data/lib/rocket_job/version.rb +1 -1
- data/lib/rocket_job/worker.rb +1 -1
- data/lib/rocketjob.rb +26 -20
- data/test/plugins/cron_test.rb +78 -0
- data/test/plugins/job/logger_test.rb +4 -4
- data/test/plugins/processing_window_test.rb +111 -0
- data/test/test_helper.rb +1 -1
- metadata +33 -38
@@ -0,0 +1,291 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2006-2016, John Mettraux, jmettraux@gmail.com
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
5
|
+
# of this software and associated documentation files (the "Software"), to deal
|
6
|
+
# in the Software without restriction, including without limitation the rights
|
7
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
+
# copies of the Software, and to permit persons to whom the Software is
|
9
|
+
# furnished to do so, subject to the following conditions:
|
10
|
+
#
|
11
|
+
# The above copyright notice and this permission notice shall be included in
|
12
|
+
# all copies or substantial portions of the Software.
|
13
|
+
#
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
15
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
16
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
17
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
18
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
19
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
20
|
+
# THE SOFTWARE.
|
21
|
+
#
|
22
|
+
# Made in Japan.
|
23
|
+
#++
|
24
|
+
|
25
|
+
module RocketJob::Plugins::Rufus
|
26
|
+
|
27
|
+
TIMEZONES = %w[
|
28
|
+
GB NZ UCT EET CET PRC ROC WET GMT EST ROK UTC MST HST MET Zulu Cuba Iran W-SU
|
29
|
+
Eire GMT0 Libya Japan Egypt GMT+0 GMT-0 Israel Poland Navajo Turkey GB-Eire
|
30
|
+
Iceland PST8PDT Etc/UCT CST6CDT NZ-CHAT MST7MDT Jamaica EST5EDT Etc/GMT Etc/UTC
|
31
|
+
US/Samoa Etc/GMT0 Portugal Hongkong Etc/Zulu Singapore Asia/Baku Etc/GMT-9
|
32
|
+
Etc/GMT+1 Etc/GMT+0 Asia/Aden Etc/GMT+2 Etc/GMT+3 Etc/GMT+4 Etc/GMT+5 Etc/GMT+6
|
33
|
+
Etc/GMT+7 Etc/GMT+8 Etc/GMT+9 Etc/GMT-0 Etc/GMT-1 Universal Asia/Dili Greenwich
|
34
|
+
Asia/Gaza Etc/GMT-8 Etc/GMT-7 US/Alaska Asia/Oral Etc/GMT-6 Etc/GMT-5 Etc/GMT-4
|
35
|
+
Asia/Hovd Etc/GMT-3 US/Hawaii Etc/GMT-2 Kwajalein Asia/Omsk Asia/Macao
|
36
|
+
Etc/GMT-14 Asia/Kabul US/Central Etc/GMT-13 US/Arizona Asia/Macau Asia/Qatar
|
37
|
+
Asia/Seoul Asia/Tokyo Asia/Dubai US/Pacific Etc/GMT-12 Etc/GMT-11 Etc/GMT-10
|
38
|
+
Asia/Dhaka Asia/Dacca Asia/Chita Etc/GMT+12 Etc/GMT+10 Asia/Amman Asia/Aqtau
|
39
|
+
Etc/GMT+11 US/Eastern Asia/Thimbu Asia/Brunei Asia/Tehran Asia/Beirut
|
40
|
+
Europe/Rome Europe/Riga Brazil/Acre Brazil/East Europe/Oslo Brazil/West
|
41
|
+
Africa/Lome Asia/Taipei Asia/Saigon Asia/Riyadh Asia/Aqtobe Asia/Anadyr
|
42
|
+
Europe/Kiev Asia/Almaty Africa/Juba Pacific/Yap US/Aleutian Asia/Muscat
|
43
|
+
US/Mountain Asia/Harbin Asia/Hebron Asia/Manila Asia/Kuwait Asia/Urumqi
|
44
|
+
US/Michigan Indian/Mahe SystemV/EST5 Asia/Kashgar Indian/Cocos Asia/Jakarta
|
45
|
+
Asia/Kolkata Asia/Kuching America/Atka Asia/Irkutsk Pacific/Apia Asia/Magadan
|
46
|
+
Africa/Dakar America/Lima Pacific/Fiji Pacific/Guam Europe/Vaduz Pacific/Niue
|
47
|
+
Asia/Nicosia Africa/Ceuta Pacific/Truk America/Adak Pacific/Wake Africa/Tunis
|
48
|
+
Africa/Cairo Asia/Colombo SystemV/AST4 SystemV/CST6 Asia/Karachi Asia/Rangoon
|
49
|
+
SystemV/MST7 Asia/Baghdad Europe/Malta Africa/Lagos Europe/Minsk SystemV/PST8
|
50
|
+
Canada/Yukon Asia/Tbilisi America/Nome Asia/Bahrain Africa/Accra Europe/Paris
|
51
|
+
Asia/Bangkok Asia/Bishkek Asia/Thimphu SystemV/YST9 Asia/Yerevan Asia/Yakutsk
|
52
|
+
Europe/Sofia Asia/Ust-Nera Australia/ACT Australia/LHI Europe/Tirane
|
53
|
+
Asia/Tel_Aviv Australia/NSW Africa/Luanda Asia/Tashkent Africa/Lusaka
|
54
|
+
Asia/Shanghai Africa/Malabo Asia/Sakhalin Africa/Maputo Africa/Maseru
|
55
|
+
SystemV/HST10 Africa/Kigali Africa/Niamey Pacific/Samoa America/Sitka
|
56
|
+
Pacific/Palau Pacific/Nauru Pacific/Efate Asia/Makassar Pacific/Chuuk
|
57
|
+
Africa/Harare Africa/Douala America/Aruba America/Thule America/Bahia
|
58
|
+
America/Jujuy America/Belem Asia/Katmandu America/Boise Indian/Comoro
|
59
|
+
Indian/Chagos Asia/Jayapura Europe/Zurich Asia/Istanbul Europe/Zagreb
|
60
|
+
Etc/Greenwich Europe/Warsaw Europe/Vienna Etc/Universal Asia/Dushanbe
|
61
|
+
Europe/Athens Europe/Berlin Africa/Bissau Asia/Damascus Africa/Banjul
|
62
|
+
Europe/Dublin Africa/Bangui Africa/Bamako Europe/Jersey Africa/Asmera
|
63
|
+
Europe/Lisbon Africa/Asmara Europe/London Asia/Ashgabat Asia/Calcutta
|
64
|
+
Europe/Madrid Europe/Monaco Europe/Moscow Europe/Prague Europe/Samara
|
65
|
+
Europe/Skopje Asia/Khandyga Canada/Pacific Africa/Abidjan America/Manaus
|
66
|
+
Asia/Chongqing Asia/Chungking Africa/Algiers America/Maceio US/Pacific-New
|
67
|
+
Africa/Conakry America/La_Paz America/Juneau America/Nassau America/Inuvik
|
68
|
+
Europe/Andorra Africa/Kampala Asia/Ashkhabad Asia/Hong_Kong America/Havana
|
69
|
+
Canada/Eastern Europe/Belfast Canada/Central Australia/West Asia/Jerusalem
|
70
|
+
Africa/Mbabane Asia/Kamchatka America/Virgin America/Guyana Asia/Kathmandu
|
71
|
+
Mexico/General America/Panama Europe/Nicosia America/Denver Europe/Tallinn
|
72
|
+
Africa/Nairobi America/Dawson Europe/Vatican Europe/Vilnius America/Cuiaba
|
73
|
+
Africa/Tripoli Pacific/Wallis Atlantic/Faroe Pacific/Tarawa Pacific/Tahiti
|
74
|
+
Pacific/Saipan Pacific/Ponape America/Cayman America/Cancun Asia/Pontianak
|
75
|
+
Asia/Pyongyang Asia/Vientiane Asia/Qyzylorda Pacific/Noumea America/Bogota
|
76
|
+
Pacific/Midway Pacific/Majuro Asia/Samarkand Indian/Mayotte Pacific/Kosrae
|
77
|
+
Asia/Singapore Indian/Reunion America/Belize America/Regina America/Recife
|
78
|
+
Pacific/Easter Mexico/BajaSur America/Merida Pacific/Chatham Pacific/Fakaofo
|
79
|
+
Pacific/Gambier America/Rosario Asia/Ulan_Bator Indian/Maldives Pacific/Norfolk
|
80
|
+
America/Antigua Asia/Phnom_Penh America/Phoenix America/Caracas America/Cayenne
|
81
|
+
Atlantic/Azores Pacific/Pohnpei Atlantic/Canary America/Chicago Atlantic/Faeroe
|
82
|
+
Africa/Windhoek America/Cordoba America/Creston Africa/Timbuktu America/Curacao
|
83
|
+
Africa/Sao_Tome Africa/Ndjamena SystemV/AST4ADT Europe/Uzhgorod Europe/Tiraspol
|
84
|
+
SystemV/CST6CDT Africa/Monrovia America/Detroit Europe/Sarajevo Australia/Eucla
|
85
|
+
America/Tijuana America/Toronto America/Godthab America/Grenada Europe/Istanbul
|
86
|
+
America/Ojinaga America/Tortola Australia/Perth Europe/Helsinki Australia/South
|
87
|
+
Europe/Guernsey SystemV/EST5EDT Europe/Chisinau SystemV/MST7MDT Europe/Busingen
|
88
|
+
Europe/Budapest Europe/Brussels America/Halifax America/Mendoza America/Noronha
|
89
|
+
America/Nipigon Canada/Atlantic America/Yakutat SystemV/PST8PDT SystemV/YST9YDT
|
90
|
+
Canada/Mountain Africa/Kinshasa Africa/Khartoum Africa/Gaborone Africa/Freetown
|
91
|
+
America/Iqaluit America/Jamaica US/East-Indiana Africa/El_Aaiun America/Knox_IN
|
92
|
+
Africa/Djibouti Africa/Blantyre America/Moncton America/Managua Asia/Choibalsan
|
93
|
+
America/Marigot Australia/North Europe/Belgrade America/Resolute
|
94
|
+
America/Mazatlan Pacific/Funafuti Pacific/Auckland Pacific/Honolulu
|
95
|
+
Pacific/Johnston America/Miquelon America/Santarem Mexico/BajaNorte
|
96
|
+
America/Santiago Antarctica/Troll America/Asuncion America/Atikokan
|
97
|
+
America/Montreal America/Barbados Africa/Bujumbura Pacific/Pitcairn
|
98
|
+
Asia/Ulaanbaatar Indian/Mauritius America/New_York Antarctica/Syowa
|
99
|
+
America/Shiprock Indian/Kerguelen Asia/Novosibirsk America/Anguilla
|
100
|
+
Indian/Christmas Asia/Vladivostok Asia/Ho_Chi_Minh Antarctica/Davis
|
101
|
+
Atlantic/Bermuda Europe/Amsterdam Antarctica/Casey America/St_Johns
|
102
|
+
Atlantic/Madeira America/Winnipeg America/St_Kitts Europe/Volgograd
|
103
|
+
Brazil/DeNoronha Europe/Bucharest Africa/Mogadishu America/St_Lucia
|
104
|
+
Atlantic/Stanley Europe/Stockholm Australia/Currie Europe/Gibraltar
|
105
|
+
Australia/Sydney Asia/Krasnoyarsk Australia/Darwin America/Dominica
|
106
|
+
America/Edmonton America/Eirunepe Europe/Podgorica America/Ensenada
|
107
|
+
Europe/Ljubljana Australia/Hobart Europe/Mariehamn Africa/Lubumbashi
|
108
|
+
America/Goose_Bay Europe/Luxembourg America/Menominee America/Glace_Bay
|
109
|
+
America/Fortaleza Africa/Nouakchott America/Matamoros Pacific/Galapagos
|
110
|
+
America/Guatemala Pacific/Kwajalein Pacific/Marquesas America/Guayaquil
|
111
|
+
Asia/Kuala_Lumpur Europe/San_Marino America/Monterrey Europe/Simferopol
|
112
|
+
America/Araguaina Antarctica/Vostok Europe/Copenhagen America/Catamarca
|
113
|
+
Pacific/Pago_Pago America/Sao_Paulo America/Boa_Vista America/St_Thomas
|
114
|
+
Chile/Continental America/Vancouver Africa/Casablanca Europe/Bratislava
|
115
|
+
Pacific/Enderbury Pacific/Rarotonga Europe/Zaporozhye US/Indiana-Starke
|
116
|
+
Antarctica/Palmer Asia/Novokuznetsk Africa/Libreville America/Chihuahua
|
117
|
+
America/Anchorage Pacific/Tongatapu Antarctica/Mawson Africa/Porto-Novo
|
118
|
+
Asia/Yekaterinburg America/Paramaribo America/Hermosillo Atlantic/Jan_Mayen
|
119
|
+
Antarctica/McMurdo America/Costa_Rica Antarctica/Rothera America/Grand_Turk
|
120
|
+
Atlantic/Reykjavik Atlantic/St_Helena Australia/Victoria Chile/EasterIsland
|
121
|
+
Asia/Ujung_Pandang Australia/Adelaide America/Montserrat America/Porto_Acre
|
122
|
+
Africa/Brazzaville Australia/Brisbane America/Kralendijk America/Montevideo
|
123
|
+
America/St_Vincent America/Louisville Australia/Canberra Australia/Tasmania
|
124
|
+
Europe/Isle_of_Man Europe/Kaliningrad Africa/Ouagadougou America/Rio_Branco
|
125
|
+
Pacific/Kiritimati Africa/Addis_Ababa America/Metlakatla America/Martinique
|
126
|
+
Asia/Srednekolymsk America/Guadeloupe America/Fort_Wayne Australia/Lindeman
|
127
|
+
America/Whitehorse Arctic/Longyearbyen America/Pangnirtung America/Mexico_City
|
128
|
+
America/Los_Angeles America/Rainy_River Atlantic/Cape_Verde Pacific/Guadalcanal
|
129
|
+
Indian/Antananarivo America/El_Salvador Australia/Lord_Howe Africa/Johannesburg
|
130
|
+
America/Tegucigalpa Canada/Saskatchewan America/Thunder_Bay Canada/Newfoundland
|
131
|
+
America/Puerto_Rico America/Yellowknife Australia/Melbourne America/Porto_Velho
|
132
|
+
Australia/Queensland Australia/Yancowinna America/Santa_Isabel
|
133
|
+
America/Blanc-Sablon America/Scoresbysund America/Danmarkshavn
|
134
|
+
Pacific/Port_Moresby Antarctica/Macquarie America/Buenos_Aires
|
135
|
+
Africa/Dar_es_Salaam America/Campo_Grande America/Dawson_Creek
|
136
|
+
America/Indianapolis Pacific/Bougainville America/Rankin_Inlet
|
137
|
+
America/Indiana/Knox America/Lower_Princes America/Coral_Harbour
|
138
|
+
America/St_Barthelemy Australia/Broken_Hill America/Cambridge_Bay
|
139
|
+
America/Indiana/Vevay America/Swift_Current America/Port_of_Spain
|
140
|
+
Antarctica/South_Pole America/Santo_Domingo Atlantic/South_Georgia
|
141
|
+
America/Port-au-Prince America/Bahia_Banderas America/Indiana/Winamac
|
142
|
+
America/Indiana/Marengo America/Argentina/Jujuy America/Argentina/Salta
|
143
|
+
Canada/East-Saskatchewan America/Indiana/Vincennes America/Argentina/Tucuman
|
144
|
+
America/Argentina/Ushuaia Antarctica/DumontDUrville America/Indiana/Tell_City
|
145
|
+
America/Argentina/Mendoza America/Argentina/Cordoba America/Indiana/Petersburg
|
146
|
+
America/Argentina/San_Luis America/Argentina/San_Juan America/Argentina/La_Rioja
|
147
|
+
America/North_Dakota/Center America/Kentucky/Monticello
|
148
|
+
America/North_Dakota/Beulah America/Kentucky/Louisville
|
149
|
+
America/Argentina/Catamarca America/Indiana/Indianapolis
|
150
|
+
America/North_Dakota/New_Salem America/Argentina/Rio_Gallegos
|
151
|
+
America/Argentina/Buenos_Aires America/Argentina/ComodRivadavia
|
152
|
+
]
|
153
|
+
TIMEZONEs = TIMEZONES.collect(&:downcase)
|
154
|
+
|
155
|
+
#
|
156
|
+
# Zon{ing|ed}Time, whatever.
|
157
|
+
#
|
158
|
+
class ZoTime
|
159
|
+
|
160
|
+
attr_accessor :seconds
|
161
|
+
attr_accessor :zone
|
162
|
+
|
163
|
+
def initialize(s, zone)
|
164
|
+
|
165
|
+
@seconds = s.to_f
|
166
|
+
@zone = zone
|
167
|
+
end
|
168
|
+
|
169
|
+
def time
|
170
|
+
|
171
|
+
in_zone do
|
172
|
+
|
173
|
+
t = Time.at(@seconds)
|
174
|
+
|
175
|
+
#if t.isdst
|
176
|
+
# t1 = Time.at(@seconds + 3600)
|
177
|
+
# t = t1 if t.zone != t1.zone && t.hour == t1.hour && t.min == t1.min
|
178
|
+
# # ambiguous TZ (getting out of DST)
|
179
|
+
#else
|
180
|
+
# t.hour # force t to compute itself
|
181
|
+
#end
|
182
|
+
#
|
183
|
+
# jump out of DST as soon as possible, jumps 1h as seen from UTC
|
184
|
+
|
185
|
+
t.hour # force t to compute itself
|
186
|
+
#
|
187
|
+
# stay in DST as long as possible, no jump seen from UTC
|
188
|
+
|
189
|
+
t
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
def utc
|
194
|
+
|
195
|
+
time.utc
|
196
|
+
end
|
197
|
+
|
198
|
+
def add(s)
|
199
|
+
|
200
|
+
@seconds += s.to_f
|
201
|
+
end
|
202
|
+
|
203
|
+
def substract(s)
|
204
|
+
|
205
|
+
@seconds -= s.to_f
|
206
|
+
end
|
207
|
+
|
208
|
+
def to_f
|
209
|
+
|
210
|
+
@seconds
|
211
|
+
end
|
212
|
+
|
213
|
+
#DELTA_TZ_REX = /^[+-][0-1][0-9]:?[0-5][0-9]$/
|
214
|
+
|
215
|
+
def self.envtzable?(s)
|
216
|
+
|
217
|
+
TIMEZONES.include?(s)
|
218
|
+
end
|
219
|
+
|
220
|
+
def self.parse(str, opts={})
|
221
|
+
|
222
|
+
if defined?(::Chronic) && t = ::Chronic.parse(str, opts)
|
223
|
+
return ZoTime.new(t, ENV['TZ'])
|
224
|
+
end
|
225
|
+
|
226
|
+
begin
|
227
|
+
DateTime.parse(str)
|
228
|
+
rescue
|
229
|
+
fail ArgumentError, "no time information in #{o.inspect}"
|
230
|
+
end if RUBY_VERSION < '1.9.0'
|
231
|
+
|
232
|
+
zone = nil
|
233
|
+
|
234
|
+
s =
|
235
|
+
str.gsub(/\S+/) { |m|
|
236
|
+
if envtzable?(m)
|
237
|
+
zone ||= m
|
238
|
+
''
|
239
|
+
else
|
240
|
+
m
|
241
|
+
end
|
242
|
+
}
|
243
|
+
|
244
|
+
return nil unless zone.nil? || is_timezone?(zone)
|
245
|
+
|
246
|
+
zt = ZoTime.new(0, zone || ENV['TZ'])
|
247
|
+
zt.in_zone { zt.seconds = Time.parse(s).to_f }
|
248
|
+
|
249
|
+
zt.seconds == nil ? nil : zt
|
250
|
+
end
|
251
|
+
|
252
|
+
def self.is_timezone?(str)
|
253
|
+
|
254
|
+
return false if str == nil
|
255
|
+
return false if str == '*'
|
256
|
+
|
257
|
+
return false if str.index('#')
|
258
|
+
# "sun#2", etc... On OSX would go all the way to true
|
259
|
+
|
260
|
+
return true if Time.zone_offset(str)
|
261
|
+
|
262
|
+
return !! (::TZInfo::Timezone.get(str) rescue nil) if defined?(::TZInfo)
|
263
|
+
|
264
|
+
return true if TIMEZONES.include?(str)
|
265
|
+
return true if TIMEZONEs.include?(str)
|
266
|
+
|
267
|
+
t = ZoTime.new(0, str).time
|
268
|
+
|
269
|
+
return false if t.zone == ''
|
270
|
+
return false if t.zone == 'UTC'
|
271
|
+
return false if t.utc_offset == 0 && str.start_with?(t.zone)
|
272
|
+
# 3 common fallbacks...
|
273
|
+
|
274
|
+
return false if RUBY_PLATFORM.include?('java') && ! envtzable?(str)
|
275
|
+
|
276
|
+
true
|
277
|
+
end
|
278
|
+
|
279
|
+
def in_zone(&block)
|
280
|
+
|
281
|
+
current_timezone = ENV['TZ']
|
282
|
+
ENV['TZ'] = @zone
|
283
|
+
|
284
|
+
block.call
|
285
|
+
|
286
|
+
ensure
|
287
|
+
|
288
|
+
ENV['TZ'] = current_timezone
|
289
|
+
end
|
290
|
+
end
|
291
|
+
end
|
data/lib/rocket_job/version.rb
CHANGED
data/lib/rocket_job/worker.rb
CHANGED
@@ -344,7 +344,7 @@ module RocketJob
|
|
344
344
|
skip_job_ids = []
|
345
345
|
processed = false
|
346
346
|
while (job = Job.rocket_job_next_job(name, skip_job_ids)) && !shutting_down?
|
347
|
-
logger.fast_tag("
|
347
|
+
logger.fast_tag("job:#{job.id}") do
|
348
348
|
if job.rocket_job_work(self)
|
349
349
|
# Need to skip the specified job due to throttling or no work available
|
350
350
|
skip_job_ids << job.id
|
data/lib/rocketjob.rb
CHANGED
@@ -7,33 +7,39 @@ require 'rocket_job/version'
|
|
7
7
|
|
8
8
|
# @formatter:off
|
9
9
|
module RocketJob
|
10
|
-
autoload :CLI,
|
11
|
-
autoload :Config,
|
12
|
-
autoload :DirmonEntry,
|
13
|
-
autoload :Heartbeat,
|
14
|
-
autoload :Job,
|
15
|
-
autoload :JobException,
|
16
|
-
autoload :Worker,
|
10
|
+
autoload :CLI, 'rocket_job/cli'
|
11
|
+
autoload :Config, 'rocket_job/config'
|
12
|
+
autoload :DirmonEntry, 'rocket_job/dirmon_entry'
|
13
|
+
autoload :Heartbeat, 'rocket_job/heartbeat'
|
14
|
+
autoload :Job, 'rocket_job/job'
|
15
|
+
autoload :JobException, 'rocket_job/job_exception'
|
16
|
+
autoload :Worker, 'rocket_job/worker'
|
17
17
|
|
18
18
|
module Plugins
|
19
19
|
module Job
|
20
|
-
autoload :Callbacks,
|
21
|
-
autoload :Defaults,
|
22
|
-
autoload :StateMachine,
|
23
|
-
autoload :Logger,
|
24
|
-
autoload :Model,
|
25
|
-
autoload :Persistence,
|
26
|
-
autoload :Worker,
|
20
|
+
autoload :Callbacks, 'rocket_job/plugins/job/callbacks'
|
21
|
+
autoload :Defaults, 'rocket_job/plugins/job/defaults'
|
22
|
+
autoload :StateMachine, 'rocket_job/plugins/job/state_machine'
|
23
|
+
autoload :Logger, 'rocket_job/plugins/job/logger'
|
24
|
+
autoload :Model, 'rocket_job/plugins/job/model'
|
25
|
+
autoload :Persistence, 'rocket_job/plugins/job/persistence'
|
26
|
+
autoload :Worker, 'rocket_job/plugins/job/worker'
|
27
27
|
end
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
28
|
+
module Rufus
|
29
|
+
autoload :CronLine, 'rocket_job/plugins/rufus/cron_line'
|
30
|
+
autoload :ZoTime, 'rocket_job/plugins/rufus/zo_time'
|
31
|
+
end
|
32
|
+
autoload :Cron, 'rocket_job/plugins/cron'
|
33
|
+
autoload :Document, 'rocket_job/plugins/document'
|
34
|
+
autoload :ProcessingWindow, 'rocket_job/plugins/processing_window'
|
35
|
+
autoload :Restart, 'rocket_job/plugins/restart'
|
36
|
+
autoload :Singleton, 'rocket_job/plugins/singleton'
|
37
|
+
autoload :StateMachine, 'rocket_job/plugins/state_machine'
|
32
38
|
end
|
33
39
|
|
34
40
|
module Jobs
|
35
|
-
autoload :DirmonJob,
|
36
|
-
autoload :SimpleJob,
|
41
|
+
autoload :DirmonJob, 'rocket_job/jobs/dirmon_job'
|
42
|
+
autoload :SimpleJob, 'rocket_job/jobs/simple_job'
|
37
43
|
end
|
38
44
|
|
39
45
|
# @formatter:on
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
# Unit Test for RocketJob::Job
|
4
|
+
module Plugins
|
5
|
+
class CronTest < Minitest::Test
|
6
|
+
class CronJob < RocketJob::Job
|
7
|
+
include RocketJob::Plugins::Cron
|
8
|
+
|
9
|
+
def perform
|
10
|
+
'DONE'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe RocketJob::Plugins::Cron do
|
15
|
+
before do
|
16
|
+
# destroy_all could create new instances
|
17
|
+
CronJob.delete_all
|
18
|
+
assert_equal 0, CronJob.count
|
19
|
+
end
|
20
|
+
|
21
|
+
after do
|
22
|
+
@job.destroy if @job && !@job.new_record?
|
23
|
+
CronJob.delete_all
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '#create!' do
|
27
|
+
it 'queues a new job' do
|
28
|
+
@job = CronJob.create!(cron_schedule: '* 1 * * *')
|
29
|
+
assert @job.valid?
|
30
|
+
refute @job.new_record?
|
31
|
+
end
|
32
|
+
|
33
|
+
describe 'timezones are supported' do
|
34
|
+
it 'handles UTC' do
|
35
|
+
time = Time.parse('2015-12-09 17:50:05 +0000')
|
36
|
+
Time.stub(:now, time) do
|
37
|
+
@job = CronJob.create!(cron_schedule: '* 1 * * * UTC')
|
38
|
+
end
|
39
|
+
assert @job.valid?
|
40
|
+
refute @job.new_record?
|
41
|
+
assert_equal Time.parse('2015-12-10 01:00:00 UTC'), @job.run_at
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'handles Eastern' do
|
45
|
+
time = Time.parse('2015-12-09 17:50:05 +0000')
|
46
|
+
Time.stub(:now, time) do
|
47
|
+
@job = CronJob.create!(cron_schedule: '* 1 * * * America/New_York')
|
48
|
+
end
|
49
|
+
assert @job.valid?
|
50
|
+
refute @job.new_record?
|
51
|
+
assert_equal Time.parse('2015-12-10 06:00:00 UTC'), @job.run_at
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
describe '#valid?' do
|
58
|
+
it 'fails on missing cron schedule' do
|
59
|
+
@job = CronJob.new
|
60
|
+
refute @job.valid?
|
61
|
+
assert_equal "can't be blank", @job.errors.messages[:cron_schedule].first
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'fails on bad cron schedule' do
|
65
|
+
@job = CronJob.new(cron_schedule: 'blah')
|
66
|
+
refute @job.valid?
|
67
|
+
assert_equal "not a valid cronline : 'blah'", @job.errors.messages[:cron_schedule].first
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'passes on valid cron schedule' do
|
71
|
+
@job = CronJob.new(cron_schedule: '* 1 * * *')
|
72
|
+
assert @job.valid?
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -43,12 +43,12 @@ module Plugins
|
|
43
43
|
end
|
44
44
|
|
45
45
|
it 'adds completed logging' do
|
46
|
-
@job
|
47
|
-
|
48
|
-
@job.logger.stub(:
|
46
|
+
@job = LoggerJob.new
|
47
|
+
measure_called = false
|
48
|
+
@job.logger.stub(:measure_info, -> description, *args { measure_called = true if description == 'Completed #perform' }) do
|
49
49
|
@job.perform_now
|
50
50
|
end
|
51
|
-
assert
|
51
|
+
assert measure_called, "In Plugins::Job::Logger.around_perform logger.measure_info('Completed #perform') not called"
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|