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.
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 = "druby://localhost:#{$TESTING ? Array.new(4) { rand(10) }.join : "8788"}"
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
- DRb.start_service(URI, @@queue, verbose: true)
43
- puts banner_and_info
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 (klass_or_proc = @@queue.pop).instance_of?(Proc)
99
+ next if (klass = @@queue.pop).instance_of?(Proc)
98
100
 
99
- class_array << klass_or_proc
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
- puts banner
122
- puts "Currently running Belated version #{Belated::VERSION}"
123
- puts %(Belated running #{@worker_list&.length.to_i} workers on #{URI}...)
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
@@ -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 perform_belated(job)
12
+ def perform(job)
12
13
  queue.push(job)
13
14
  end
14
- alias perform_later perform_belated
15
+ alias perform_belated perform
16
+ alias perform_later perform
15
17
  end
16
18
  end
@@ -0,0 +1,17 @@
1
+ class Belated
2
+ module Logging
3
+ extend self
4
+
5
+ def logger
6
+ @logger ||= Belated.logger
7
+ end
8
+
9
+ def log(message)
10
+ logger.__send__(Belated.log_level, message)
11
+ end
12
+
13
+ def logger=(logger)
14
+ @logger = logger
15
+ end
16
+ end
17
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Belated
4
- VERSION = '0.2.0'
4
+ VERSION = '0.3.0'
5
5
  end
@@ -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
- puts 'fetching jobs...'
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
- pp job.call
24
+ job.call
22
25
  else
23
- pp job&.perform
26
+ job.perform
24
27
  end
25
28
  rescue StandardError => e
26
- pp e.inspect
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.2.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-25 00:00:00.000000000 Z
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