belated 0.2.0 → 0.3.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/.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
|