cuetip 1.4.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 88a557995f20eba12cbcd542972965dd5ab6c3b92743310e62937a4e13408a13
4
- data.tar.gz: 736a0226918e83ec7015f54381ac382319d215ce0b6d9cf8e51032775dbab5f3
3
+ metadata.gz: 6c55fc81c458fe59398107580afc01e293ad447e04627345adf0fce1a65bb58d
4
+ data.tar.gz: 05a2f8814e4f40d6e665d19015cb3dd24b371c5ea9371a47d5e37a47f3ef7ff0
5
5
  SHA512:
6
- metadata.gz: be4412c26b425f915d70904cbafd1a3f23287d84072ef4080f22efe99ecb2e9fbacc8554bcce5a00d96536c48e75b74d775d7b780cb6a07be3cb4724f013b5e9
7
- data.tar.gz: 45691a899f3116c96e5eb432fa174029faea2ad76b148dcd0c367baba1878c343a98c6a41fe319eb610f61730ac18bc9d55ead808b6a29ab3c88f9ac262ff18a
6
+ metadata.gz: ff6e9e82ea4f10c7e1980eabb0b24cf234c76aea8ec310d494ab258844abbd7c1fecfec5db0953a38634bfcdecf3f4ffd64f31c900ff0b39db367535177b42f6
7
+ data.tar.gz: 349d426cda2a0b3651ad61cb93d66b4db07ebcf32941ac852f1b069001d7d80a78d9f73fb7e79fafe5996ba42833efdfcf2cb5c105950e3e0f3bca31eb13220d
data/lib/cuetip/config.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'klogger'
3
4
  require 'active_support'
4
5
  require 'active_support/core_ext/numeric/bytes'
5
6
  require 'active_support/core_ext/numeric/time'
@@ -20,7 +21,7 @@ module Cuetip
20
21
 
21
22
  # Return the logger
22
23
  def logger
23
- @logger ||= Logger.new(STDOUT)
24
+ @logger ||= Klogger.new(:cuetip)
24
25
  end
25
26
  attr_writer :logger
26
27
 
@@ -49,11 +49,11 @@ module Cuetip
49
49
  def remove_from_queue
50
50
  queued_job&.destroy
51
51
  self.queued_job = nil
52
- log 'Removed from queue'
52
+ Cuetip.logger.debug 'Removed from queue'
53
53
 
54
54
  if delete_after_execution?
55
55
  destroy
56
- log 'Removed job from database'
56
+ Cuetip.logger.debug 'Removed job from database'
57
57
  end
58
58
 
59
59
  end
@@ -61,74 +61,78 @@ module Cuetip
61
61
  # Log some text about this job
62
62
  #
63
63
  # @param text [String]
64
- def log(text)
65
- Cuetip.logger.info "[#{id}] #{text}"
64
+ def log(text, **tags)
65
+ Cuetip.logger.info text, **tags
66
66
  end
67
67
 
68
68
  # Execute the job
69
69
  #
70
70
  # @return [Boolean] whether the job executed successfully or not
71
71
  def execute(&block)
72
- log "Beginning execution of job #{id} with #{class_name}"
73
- # Initialize a new instance of the job we wish to execute
74
- job_klass = class_name.constantize.new(self)
75
-
76
- # If the job has expired, we should not be executing this so we'll just
77
- # remove it from the queue and mark it as expired.
78
- if expired?
79
- log 'Job has expired'
80
- self.status = 'Expired'
81
- remove_from_queue
82
- Cuetip.config.emit(:expired, self, job_klass)
83
- return false
84
- end
72
+ Klogger.tagged(job_id: id, job_class: class_name) do
73
+ begin
74
+ Cuetip.logger.info "Executing"
75
+ # Initialize a new instance of the job we wish to execute
76
+ job_klass = class_name.constantize.new(self)
77
+
78
+ # If the job has expired, we should not be executing this so we'll just
79
+ # remove it from the queue and mark it as expired.
80
+ if expired?
81
+ Cuetip.logger.warn 'Job has expired, removed from queue'
82
+ self.status = 'Expired'
83
+ remove_from_queue
84
+ Cuetip.config.emit(:expired, self, job_klass)
85
+ return false
86
+ end
85
87
 
86
- Cuetip.config.emit(:before_perform, self, job_klass)
88
+ Cuetip.config.emit(:before_perform, self, job_klass)
87
89
 
88
- # If we have a block, call this so we can manipulate our actual job class
89
- # before execution if needed (mostly for testing)
90
- block.call(job_klass) if block_given?
90
+ # If we have a block, call this so we can manipulate our actual job class
91
+ # before execution if needed (mostly for testing)
92
+ block.call(job_klass) if block_given?
91
93
 
92
- # Mark the job as runnign
93
- update!(status: 'Running', started_at: Time.now, executions: executions + 1)
94
+ # Mark the job as runnign
95
+ update!(status: 'Running', started_at: Time.now, executions: executions + 1)
94
96
 
95
- begin
96
- # Perform the job within a timeout
97
- Timeout.timeout(maximum_execution_time || 1.year) do
98
- job_klass.perform
99
- end
100
- # Mark the job as complete and remove it from the queue
101
- self.status = 'Complete'
102
- log 'Job completed successfully'
103
- remove_from_queue
104
-
105
- Cuetip.config.emit(:completed, self, job_klass)
106
-
107
- true
108
- rescue Exception, Timeout::TimeoutError => e
109
- log "Job failed with #{e.class} (#{e.message})"
110
-
111
- # If there's an error, mark the job as failed and copy exception
112
- # data into the job
113
- self.status = 'Failed'
114
- self.exception_class = e.class.name
115
- self.exception_message = e.message
116
- self.exception_backtrace = e.backtrace.join("\n")
117
-
118
- # Handle requeing the job if needed.
119
- if requeue_on_failure?
120
- # Requeue this job for execution again after the retry interval.
121
- new_job = queued_job.requeue(run_after: Time.now + retry_interval.to_i)
122
- log "Requeing job to run after #{new_job.run_after.to_s(:long)}"
123
- self.status = 'Pending'
124
- else
125
- # We're done with this job. We can't do any more retries.
126
- remove_from_queue
127
- end
97
+ begin
98
+ # Perform the job within a timeout
99
+ Timeout.timeout(maximum_execution_time || 1.year) do
100
+ job_klass.perform
101
+ end
128
102
 
129
- Cuetip.config.emit(:exception, e, self, job_klass)
103
+ # Mark the job as complete and remove it from the queue
104
+ self.status = 'Complete'
105
+ Cuetip.logger.info 'Execution complete'
106
+ remove_from_queue
130
107
 
131
- false
108
+ Cuetip.config.emit(:completed, self, job_klass)
109
+
110
+ true
111
+ rescue Exception, Timeout::TimeoutError => e
112
+ Cuetip.logger.exception(e, "Job failed")
113
+
114
+ # If there's an error, mark the job as failed and copy exception
115
+ # data into the job
116
+ self.status = 'Failed'
117
+ self.exception_class = e.class.name
118
+ self.exception_message = e.message
119
+ self.exception_backtrace = e.backtrace.join("\n")
120
+
121
+ # Handle requeing the job if needed.
122
+ if requeue_on_failure?
123
+ # Requeue this job for execution again after the retry interval.
124
+ new_job = queued_job.requeue(run_after: Time.now + retry_interval.to_i)
125
+ Cuetip.logger.info "Requeueing job", run_after: new_job.run_after.to_s(:long)
126
+ self.status = 'Pending'
127
+ else
128
+ # We're done with this job. We can't do any more retries.
129
+ remove_from_queue
130
+ end
131
+
132
+ Cuetip.config.emit(:exception, e, self, job_klass)
133
+
134
+ false
135
+ end
132
136
  end
133
137
  ensure
134
138
  unless destroyed?
@@ -136,8 +140,9 @@ module Cuetip
136
140
  save!
137
141
  end
138
142
  Cuetip.config.emit(:finished, self, job_klass)
139
- log 'Finished processing'
143
+ Cuetip.logger.debug 'Finished processing'
140
144
  end
141
145
  end
146
+ end
142
147
  end
143
148
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Cuetip
4
- VERSION = '1.4.1'
4
+ VERSION = '2.0.0'
5
5
  end
@@ -20,30 +20,34 @@ module Cuetip
20
20
  end
21
21
 
22
22
  def start
23
- Cuetip.logger.info "Starting #{@quantity} Cuetip workers"
24
- if @queues.any?
25
- @queues.each { |q| Cuetip.logger.info "-> Joined queue: #{q.to_s}" }
26
- end
27
-
28
- exit_trap = proc do
29
- @workers.each { |_, worker| worker.request_exit! }
30
- puts 'Exiting...'
31
- end
23
+ Klogger.tagged(pid: Process.pid) do
24
+ Cuetip.logger.info "Starting workers", quantity: @quantity
25
+ if @queues.any?
26
+ @queues.each { |q| Cuetip.logger.info "Joined queue", queue: q }
27
+ end
32
28
 
33
- trap('INT', &exit_trap)
34
- trap('TERM', &exit_trap)
29
+ exit_trap = proc do
30
+ @workers.each { |_, worker| worker.request_exit! }
31
+ puts 'Exiting...'
32
+ end
35
33
 
36
- @quantity.times do |i|
37
- @workers[i] = Worker.new(self, i, @queues)
38
- Cuetip.logger.info "-> Starting worker #{i}"
39
- @threads[i] = Thread.new(@workers[i]) do |worker|
40
- run_callbacks :run_worker do
41
- worker.run
34
+ trap('INT', &exit_trap)
35
+ trap('TERM', &exit_trap)
36
+
37
+ @quantity.times do |i|
38
+ @workers[i] = Worker.new(self, i, @queues)
39
+ Klogger.tagged worker_index: i do
40
+ Cuetip.logger.info "Starting worker"
41
+ @threads[i] = Thread.new(@workers[i]) do |worker|
42
+ run_callbacks :run_worker do
43
+ worker.run
44
+ end
45
+ end
42
46
  end
47
+ @threads[i].abort_on_exception = true
43
48
  end
44
- @threads[i].abort_on_exception = true
49
+ @threads.values.each(&:join)
45
50
  end
46
- @threads.values.each(&:join)
47
51
  end
48
52
 
49
53
  def set_process_name
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cuetip
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Cooke
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-11 00:00:00.000000000 Z
11
+ date: 2023-03-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -38,6 +38,26 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: klogger-logger
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '1.3'
48
+ - - "<"
49
+ - !ruby/object:Gem::Version
50
+ version: '2.0'
51
+ type: :runtime
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: '1.3'
58
+ - - "<"
59
+ - !ruby/object:Gem::Version
60
+ version: '2.0'
41
61
  description: An ActiveRecord job queueing system
42
62
  email:
43
63
  - me@adamcooke.io
@@ -66,7 +86,7 @@ homepage: https://github.com/adamcooke/cuetip
66
86
  licenses:
67
87
  - MIT
68
88
  metadata: {}
69
- post_install_message:
89
+ post_install_message:
70
90
  rdoc_options: []
71
91
  require_paths:
72
92
  - lib
@@ -81,8 +101,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
81
101
  - !ruby/object:Gem::Version
82
102
  version: '0'
83
103
  requirements: []
84
- rubygems_version: 3.0.3
85
- signing_key:
104
+ rubygems_version: 3.2.32
105
+ signing_key:
86
106
  specification_version: 4
87
107
  summary: An ActiveRecord job queueing system
88
108
  test_files: []