belated 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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