resque-scheduler 2.2.0 → 4.10.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.
Files changed (68) hide show
  1. checksums.yaml +7 -0
  2. data/.github/dependabot.yml +12 -0
  3. data/.github/funding.yml +4 -0
  4. data/.github/workflows/codeql-analysis.yml +59 -0
  5. data/.github/workflows/rubocop.yml +27 -0
  6. data/.github/workflows/ruby.yml +81 -0
  7. data/AUTHORS.md +31 -0
  8. data/CHANGELOG.md +539 -0
  9. data/CODE_OF_CONDUCT.md +74 -0
  10. data/Gemfile +26 -2
  11. data/LICENSE +1 -1
  12. data/README.md +423 -91
  13. data/Rakefile +12 -35
  14. data/exe/resque-scheduler +5 -0
  15. data/lib/resque/scheduler/cli.rb +147 -0
  16. data/lib/resque/scheduler/configuration.rb +102 -0
  17. data/lib/resque/scheduler/delaying_extensions.rb +371 -0
  18. data/lib/resque/scheduler/env.rb +85 -0
  19. data/lib/resque/scheduler/extension.rb +13 -0
  20. data/lib/resque/scheduler/failure_handler.rb +11 -0
  21. data/lib/resque/scheduler/lock/base.rb +12 -3
  22. data/lib/resque/scheduler/lock/basic.rb +4 -5
  23. data/lib/resque/scheduler/lock/resilient.rb +52 -43
  24. data/lib/resque/scheduler/lock.rb +2 -1
  25. data/lib/resque/scheduler/locking.rb +104 -0
  26. data/lib/resque/scheduler/logger_builder.rb +83 -0
  27. data/lib/resque/scheduler/plugin.rb +31 -0
  28. data/lib/resque/scheduler/scheduling_extensions.rb +142 -0
  29. data/lib/{resque_scheduler → resque/scheduler}/server/views/delayed.erb +23 -8
  30. data/lib/resque/scheduler/server/views/delayed_schedules.erb +20 -0
  31. data/lib/{resque_scheduler → resque/scheduler}/server/views/delayed_timestamp.erb +1 -1
  32. data/lib/resque/scheduler/server/views/scheduler.erb +58 -0
  33. data/lib/resque/scheduler/server/views/search.erb +69 -0
  34. data/lib/resque/scheduler/server/views/search_form.erb +4 -0
  35. data/lib/resque/scheduler/server.rb +268 -0
  36. data/lib/resque/scheduler/signal_handling.rb +40 -0
  37. data/lib/resque/scheduler/tasks.rb +25 -0
  38. data/lib/resque/scheduler/util.rb +39 -0
  39. data/lib/resque/scheduler/version.rb +7 -0
  40. data/lib/resque/scheduler.rb +333 -149
  41. data/lib/resque-scheduler.rb +4 -0
  42. data/resque-scheduler.gemspec +56 -20
  43. metadata +205 -104
  44. data/.gitignore +0 -8
  45. data/.rubocop.yml +0 -120
  46. data/.travis.yml +0 -10
  47. data/HISTORY.md +0 -180
  48. data/lib/resque/scheduler_locking.rb +0 -90
  49. data/lib/resque_scheduler/logger_builder.rb +0 -51
  50. data/lib/resque_scheduler/plugin.rb +0 -25
  51. data/lib/resque_scheduler/server/views/scheduler.erb +0 -44
  52. data/lib/resque_scheduler/server.rb +0 -92
  53. data/lib/resque_scheduler/tasks.rb +0 -40
  54. data/lib/resque_scheduler/version.rb +0 -3
  55. data/lib/resque_scheduler.rb +0 -355
  56. data/script/migrate_to_timestamps_set.rb +0 -14
  57. data/tasks/resque_scheduler.rake +0 -2
  58. data/test/delayed_queue_test.rb +0 -383
  59. data/test/redis-test.conf +0 -108
  60. data/test/resque-web_test.rb +0 -116
  61. data/test/scheduler_args_test.rb +0 -156
  62. data/test/scheduler_hooks_test.rb +0 -23
  63. data/test/scheduler_locking_test.rb +0 -180
  64. data/test/scheduler_setup_test.rb +0 -59
  65. data/test/scheduler_test.rb +0 -256
  66. data/test/support/redis_instance.rb +0 -129
  67. data/test/test_helper.rb +0 -92
  68. /data/lib/{resque_scheduler → resque/scheduler}/server/views/requeue-params.erb +0 -0
@@ -1,129 +0,0 @@
1
- require 'socket'
2
- require 'timeout'
3
- require 'fileutils'
4
-
5
- class RedisInstance
6
- class << self
7
- @running = false
8
- @port = nil
9
- @pid = nil
10
-
11
- def run_if_needed!
12
- run! unless running?
13
- end
14
-
15
- def run!
16
- ensure_pid_directory
17
- reassign_redis_clients
18
- start_redis_server
19
-
20
- if $?.success?
21
- wait_for_pid
22
- puts "Booted isolated Redis on port #{port} with PID #{pid}."
23
-
24
- wait_for_redis_boot
25
-
26
- # Ensure we tear down Redis on Ctrl+C / test failure.
27
- at_exit do
28
- RedisInstance.stop!
29
- end
30
- else
31
- raise "Failed to start Redis on port #{port}."
32
- end
33
-
34
- @running = true
35
- end
36
-
37
- def stop!
38
- $stdout.puts "Sending TERM to Redis (#{pid})..."
39
- Process.kill('TERM', pid)
40
-
41
- @port = nil
42
- @running = false
43
- @pid = nil
44
- end
45
-
46
- def running?
47
- @running
48
- end
49
-
50
- private
51
-
52
- def wait_for_redis_boot
53
- Timeout::timeout(10) do
54
- begin
55
- while Resque.redis.ping != 'PONG'
56
- end
57
- rescue
58
- # silence all errors
59
- end
60
- end
61
- end
62
-
63
- def ensure_pid_directory
64
- FileUtils.mkdir_p(File.dirname(pid_file))
65
- end
66
-
67
- def reassign_redis_clients
68
- Resque.redis = Redis.new(:hostname => '127.0.0.1', :port => port, :thread_safe => true)
69
- end
70
-
71
- def start_redis_server
72
- IO.popen("redis-server -", "w+") do |server|
73
- server.write(config)
74
- server.close_write
75
- end
76
- end
77
-
78
- def pid
79
- @pid ||= File.read(pid_file).to_i
80
- end
81
-
82
- def wait_for_pid
83
- Timeout::timeout(10) do
84
- while !File.exist?(pid_file)
85
- end
86
- end
87
- end
88
-
89
- def port
90
- @port ||= random_port
91
- end
92
-
93
- def pid_file
94
- "/tmp/redis-scheduler-test.pid"
95
- end
96
-
97
- def config
98
- <<-EOF
99
- daemonize yes
100
- pidfile #{pid_file}
101
- port #{port}
102
- EOF
103
- end
104
-
105
- # Returns a random port in the upper (10000-65535) range.
106
- def random_port
107
- ports = (10000..65535).to_a
108
-
109
- loop do
110
- port = ports[rand(ports.size)]
111
- return port if port_available?('127.0.0.1', port)
112
- end
113
- end
114
-
115
- def port_available?(ip, port, seconds=1)
116
- Timeout::timeout(seconds) do
117
- begin
118
- TCPSocket.new(ip, port).close
119
- false
120
- rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
121
- true
122
- end
123
- end
124
- rescue Timeout::Error
125
- true
126
- end
127
- end
128
- end
129
-
data/test/test_helper.rb DELETED
@@ -1,92 +0,0 @@
1
-
2
- # Pretty much copied this file from the resque test_helper since we want
3
- # to do all the same stuff
4
-
5
- dir = File.dirname(File.expand_path(__FILE__))
6
-
7
- require 'rubygems'
8
- require 'test/unit'
9
- require 'mocha/setup'
10
- require 'resque'
11
- $LOAD_PATH.unshift File.dirname(File.expand_path(__FILE__)) + '/../lib'
12
- require 'resque_scheduler'
13
- require 'resque_scheduler/server'
14
-
15
- #
16
- # make sure we can run redis
17
- #
18
-
19
- if !system("which redis-server")
20
- puts '', "** can't find `redis-server` in your path"
21
- puts "** try running `sudo rake install`"
22
- abort ''
23
- end
24
-
25
-
26
- # Start our own Redis when the tests start. RedisInstance will take care of
27
- # starting and stopping.
28
- require File.dirname(__FILE__) + '/support/redis_instance'
29
- RedisInstance.run!
30
-
31
- at_exit do
32
- next if $!
33
-
34
- if defined?(MiniTest)
35
- exit_code = MiniTest::Unit.new.run(ARGV)
36
- else
37
- exit_code = Test::Unit::AutoRunner.run
38
- end
39
-
40
- exit exit_code
41
- end
42
-
43
- ##
44
- # test/spec/mini 3
45
- # http://gist.github.com/25455
46
- # chris@ozmm.org
47
- #
48
- def context(*args, &block)
49
- return super unless (name = args.first) && block
50
- require 'test/unit'
51
- klass = Class.new(defined?(ActiveSupport::TestCase) ? ActiveSupport::TestCase : Test::Unit::TestCase) do
52
- def self.test(name, &block)
53
- define_method("test_#{name.gsub(/\W/,'_')}", &block) if block
54
- end
55
- def self.xtest(*args) end
56
- def self.setup(&block) define_method(:setup, &block) end
57
- def self.teardown(&block) define_method(:teardown, &block) end
58
- end
59
- (class << klass; self end).send(:define_method, :name) { name.gsub(/\W/,'_') }
60
- klass.class_eval(&block)
61
- end
62
-
63
- class FakeCustomJobClass
64
- def self.scheduled(queue, klass, *args); end
65
- end
66
-
67
- class FakeCustomJobClassEnqueueAt
68
- @queue = :test
69
- def self.scheduled(queue, klass, *args); end
70
- end
71
-
72
- class SomeJob
73
- def self.perform(repo_id, path)
74
- end
75
- end
76
-
77
- class SomeIvarJob < SomeJob
78
- @queue = :ivar
79
- end
80
-
81
- class SomeRealClass
82
- def self.queue
83
- :some_real_queue
84
- end
85
- end
86
-
87
- def nullify_logger
88
- Resque::Scheduler.mute = nil
89
- Resque::Scheduler.verbose = nil
90
- Resque::Scheduler.logfile = nil
91
- Resque::Scheduler.logger = nil
92
- end