belated 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/CHANGELOG.md +3 -0
- data/Gemfile.lock +1 -1
- data/README.md +3 -2
- data/dummy/db/test.sqlite3 +0 -0
- data/dummy/log/test.log +1515 -0
- data/lib/belated.rb +35 -25
- data/lib/belated/client.rb +4 -2
- data/lib/belated/logging.rb +17 -0
- data/lib/belated/version.rb +1 -1
- data/lib/belated/worker.rb +8 -5
- metadata +3 -2
data/lib/belated.rb
CHANGED
@@ -2,11 +2,13 @@
|
|
2
2
|
|
3
3
|
require_relative 'belated/version'
|
4
4
|
require_relative 'belated/worker'
|
5
|
+
require_relative 'belated/logging'
|
5
6
|
require 'drb'
|
6
7
|
require 'yaml'
|
7
8
|
require 'singleton'
|
8
9
|
require 'dry-configurable'
|
9
10
|
require 'belated/client'
|
11
|
+
require 'logger'
|
10
12
|
|
11
13
|
# Belated is a pure Ruby job backend.
|
12
14
|
# It has limited functionality, as it only accepts
|
@@ -16,8 +18,9 @@ require 'belated/client'
|
|
16
18
|
# and reloads them when started again.
|
17
19
|
class Belated
|
18
20
|
extend Dry::Configurable
|
21
|
+
include Logging
|
19
22
|
include Singleton unless $TESTING
|
20
|
-
URI =
|
23
|
+
URI = 'druby://localhost:8788'
|
21
24
|
FILE_NAME = 'belated_dump'
|
22
25
|
@@queue = Queue.new
|
23
26
|
|
@@ -26,6 +29,8 @@ class Belated
|
|
26
29
|
setting :workers, 1
|
27
30
|
setting :connect, true
|
28
31
|
setting :environment, 'development'
|
32
|
+
setting :logger, Logger.new($stdout), reader: true
|
33
|
+
setting :log_level, :info, reader: true
|
29
34
|
|
30
35
|
# Since it's running as a singleton, we need something to start it up.
|
31
36
|
# Aliased for testing purposes.
|
@@ -39,12 +44,23 @@ class Belated
|
|
39
44
|
end
|
40
45
|
return unless Belated.config.connect
|
41
46
|
|
42
|
-
|
43
|
-
|
47
|
+
connect!
|
48
|
+
banner_and_info
|
44
49
|
DRb.thread.join
|
45
50
|
end
|
46
51
|
alias initialize start
|
47
52
|
|
53
|
+
# Handles connection to DRb server.
|
54
|
+
def connect!
|
55
|
+
DRb.start_service(URI, @@queue, verbose: true)
|
56
|
+
rescue DRb::DRbConnError, Errno::EADDRINUSE
|
57
|
+
Belated.logger.error 'Could not connect to DRb server.'
|
58
|
+
uri = "druby://localhost:#{Array.new(4) { rand(10) }.join}"
|
59
|
+
self.class.send(:remove_const, 'URI')
|
60
|
+
self.class.const_set('URI', uri)
|
61
|
+
retry
|
62
|
+
end
|
63
|
+
|
48
64
|
def boot_app
|
49
65
|
return unless rails?
|
50
66
|
|
@@ -59,6 +75,7 @@ class Belated
|
|
59
75
|
end
|
60
76
|
|
61
77
|
def load_jobs
|
78
|
+
log "reloading... if file exists #{File.exist?(Belated::FILE_NAME)}"
|
62
79
|
return unless File.exist?(Belated::FILE_NAME)
|
63
80
|
|
64
81
|
jobs = YAML.load(File.binread(FILE_NAME))
|
@@ -69,40 +86,26 @@ class Belated
|
|
69
86
|
end
|
70
87
|
|
71
88
|
def reload
|
89
|
+
log 'reloading...'
|
72
90
|
load_jobs
|
73
91
|
end
|
74
92
|
|
75
93
|
def stop_workers
|
76
|
-
@worker_list.each do |worker|
|
77
|
-
Thread.kill(worker)
|
78
|
-
end
|
79
|
-
return if @@queue.empty?
|
80
|
-
|
81
|
-
class_array = []
|
82
|
-
|
83
|
-
@@queue.size.times do |_i|
|
84
|
-
next if (klass_or_proc = @@queue.pop).instance_of?(Proc)
|
85
|
-
|
86
|
-
class_array << klass_or_proc
|
87
|
-
end
|
88
|
-
File.open(FILE_NAME, 'wb') { |f| f.write(YAML.dump(class_array)) }
|
89
|
-
end
|
90
|
-
|
91
|
-
def self.stop_workers
|
92
94
|
@worker_list&.each do |worker|
|
93
95
|
Thread.kill(worker)
|
94
96
|
end
|
95
97
|
class_array = []
|
96
98
|
@@queue.size.times do |_i|
|
97
|
-
next if (
|
99
|
+
next if (klass = @@queue.pop).instance_of?(Proc)
|
98
100
|
|
99
|
-
class_array <<
|
101
|
+
class_array << klass
|
100
102
|
end
|
101
|
-
File.open(FILE_NAME, 'wb') { |f| f.write(YAML.dump(class_array)) }
|
103
|
+
pp File.open(FILE_NAME, 'wb') { |f| f.write(YAML.dump(class_array)) }
|
102
104
|
end
|
103
105
|
|
104
106
|
def banner
|
105
107
|
<<-'BANNER'
|
108
|
+
|
106
109
|
.----------------. .----------------. .----------------. .----------------. .----------------. .----------------. .----------------.
|
107
110
|
| .--------------. | .--------------. | .--------------. | .--------------. | .--------------. | .--------------. | .--------------. |
|
108
111
|
| | ______ | | | _________ | | | _____ | | | __ | | | _________ | | | _________ | | | ________ | |
|
@@ -118,9 +121,9 @@ class Belated
|
|
118
121
|
end
|
119
122
|
|
120
123
|
def banner_and_info
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
+
log banner
|
125
|
+
log "Currently running Belated version #{Belated::VERSION}"
|
126
|
+
log %(Belated running #{@worker_list&.length.to_i} workers on #{URI}...)
|
124
127
|
end
|
125
128
|
|
126
129
|
def stats
|
@@ -130,6 +133,13 @@ class Belated
|
|
130
133
|
}
|
131
134
|
end
|
132
135
|
|
136
|
+
def self.kill_and_clear_queue!
|
137
|
+
@worker_list&.each do |worker|
|
138
|
+
Thread.kill(worker)
|
139
|
+
end
|
140
|
+
clear_queue!
|
141
|
+
end
|
142
|
+
|
133
143
|
def self.clear_queue!
|
134
144
|
@@queue.clear
|
135
145
|
end
|
data/lib/belated/client.rb
CHANGED
@@ -4,13 +4,15 @@ class Belated
|
|
4
4
|
|
5
5
|
def initialize
|
6
6
|
server_uri = Belated::URI
|
7
|
+
# @bank =
|
7
8
|
DRb.start_service
|
8
9
|
self.queue = DRbObject.new_with_uri(server_uri)
|
9
10
|
end
|
10
11
|
|
11
|
-
def
|
12
|
+
def perform(job)
|
12
13
|
queue.push(job)
|
13
14
|
end
|
14
|
-
alias
|
15
|
+
alias perform_belated perform
|
16
|
+
alias perform_later perform
|
15
17
|
end
|
16
18
|
end
|
data/lib/belated/version.rb
CHANGED
data/lib/belated/worker.rb
CHANGED
@@ -1,7 +1,10 @@
|
|
1
|
+
require_relative 'logging'
|
1
2
|
class Belated
|
2
3
|
# The worker class that actually gets the jobs from the queue
|
3
4
|
# and calls them. Expects the jobs to be procs.
|
4
5
|
class Worker
|
6
|
+
include Logging
|
7
|
+
|
5
8
|
def initialize
|
6
9
|
start_working
|
7
10
|
end
|
@@ -11,19 +14,19 @@ class Belated
|
|
11
14
|
job = Belated.fetch_job
|
12
15
|
next unless job
|
13
16
|
|
14
|
-
call_job(job)
|
15
|
-
|
17
|
+
log call_job(job)
|
18
|
+
log 'fetching jobs...'
|
16
19
|
end
|
17
20
|
end
|
18
21
|
|
19
22
|
def call_job(job)
|
20
23
|
if job.respond_to?(:call)
|
21
|
-
|
24
|
+
job.call
|
22
25
|
else
|
23
|
-
|
26
|
+
job.perform
|
24
27
|
end
|
25
28
|
rescue StandardError => e
|
26
|
-
|
29
|
+
e.inspect
|
27
30
|
end
|
28
31
|
end
|
29
32
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: belated
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sampo Kuokkanen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-07-
|
11
|
+
date: 2021-07-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: drb
|
@@ -147,6 +147,7 @@ files:
|
|
147
147
|
- hard_worker_dump
|
148
148
|
- lib/belated.rb
|
149
149
|
- lib/belated/client.rb
|
150
|
+
- lib/belated/logging.rb
|
150
151
|
- lib/belated/rails.rb
|
151
152
|
- lib/belated/version.rb
|
152
153
|
- lib/belated/worker.rb
|