job_enqueue_logger 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8bd89f4945224bc0c74d429110323c609a26c63f1eef1202c588d58d9a90bb13
4
- data.tar.gz: 4bda89a97eb8c1afc974edf24e37b4685ea1b354a184e782bd10e80fd383c8b3
3
+ metadata.gz: dea7d0e16e19e83d6a41a6ac12dfb637670b6c2767ffd859a65c33eb1fe6fb1b
4
+ data.tar.gz: 44da64bbfc0bcc1984dff1bb971768d0ebec961e4eefba46b9223c38115f6376
5
5
  SHA512:
6
- metadata.gz: fe5c00d27ef14b4c7da8458cd3500b8dda2af19bdb56f1829588abe3f0a6634f284e8e46b5ca92cdbb2f16a4ed89e1a3be3f9cb578dbd942066b8da809cf11d0
7
- data.tar.gz: cc5b8a0463f46332cb03bb5cadd3aeb4b2de8aa6b3f5cd4fbca7c9fe730e5d18f82e95a656683dc5d83daa7eb2ca664c32c63386ff99bded51f40cff1ad5e9fb
6
+ metadata.gz: 2b20c92834369550756fe71f0f27c76dca198fe267fad432765740bbcf3a1ed034e89aa126fb2acf6e76978f632813241176af77a7d139762ffd4d7ba9f4c2e5
7
+ data.tar.gz: e5ef769550740936181d7fa72b78bc6c132542095e0bb66f7c4973bf90298bc6ffed1d168e4aa553f4b60ae8266fc8221dbfa611fc02c1855ffa48a110157592
data/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  ## master (unreleased)
2
2
 
3
- ## 0.1.0 (2023-03-29)
3
+ ## 0.3.0 (2023-11-09)
4
+
5
+ - Truncate long string arguments in log output
6
+ - Add ability to set logger
7
+ - Prefix this gem log lines with `[JobEnqueueLogger]`
8
+
9
+ ## 0.2.0 (2023-04-04)
10
+
11
+ - Support `que`
12
+ - Support `sucker_punch`
13
+
14
+ ## 0.1.0 (2023-03-30)
4
15
 
5
16
  - First release
data/README.md CHANGED
@@ -11,13 +11,13 @@ This is very much a development and debugging tool; it is not recommended to use
11
11
  When the job is enqueued within the guts of the application, the log line is generated:
12
12
 
13
13
  ```
14
- Enqueued AvatarThumbnailsJob (jid=578b3d10fc5403f97ee0a8e1) to Sidekiq(default) with arguments: 1092412064
14
+ [JobEnqueueLogger] Enqueued AvatarThumbnailsJob (jid=578b3d10fc5403f97ee0a8e1) to Sidekiq(default) with arguments: 1092412064
15
15
  ```
16
16
 
17
17
  Or with backtraces enabled:
18
18
 
19
19
  ```
20
- Enqueued AvatarThumbnailsJob (jid=578b3d10fc5403f97ee0a8e1) to Sidekiq(default) with arguments: 1092412064
20
+ [JobEnqueueLogger] Enqueued AvatarThumbnailsJob (jid=578b3d10fc5403f97ee0a8e1) to Sidekiq(default) with arguments: 1092412064
21
21
  ↳ app/models/user.rb:421:in `generate_avatar_thumbnails'
22
22
  app/services/user_creator.rb:21:in `call'
23
23
  app/controllers/users_controller.rb:49:in `create'
@@ -32,6 +32,8 @@ This gem supports most common job queuing backends:
32
32
  * [Sidekiq](https://github.com/sidekiq/sidekiq) >= 6.5.0
33
33
  * [Resque](https://github.com/resque/resque) >= 2.0.0
34
34
  * [DelayedJob](https://github.com/collectiveidea/delayed_job) >= 4.1.5
35
+ * [SuckerPunch](https://github.com/brandonhilkert/sucker_punch) >= 3.0.0
36
+ * [Que](https://github.com/que-rb/que) >= 2.0.0
35
37
 
36
38
  If you need support for older rubies or older versions of queuing backends (or additional backends), [open an issue](https://github.com/fatkodima/job_enqueue_logger/issues/new).
37
39
 
@@ -69,13 +71,15 @@ JobEnqueueLogger.configure do |config|
69
71
  # Controls whether to print backtraces. Set to `true` to print backtraces, or
70
72
  # a number to limit how many lines to print.
71
73
  config.backtrace = false
74
+
75
+ # The logger to log to.
76
+ # Is set to Rails.logger by default, when the gem is used in the Rails app.
77
+ config.logger = nil
72
78
  end
73
79
  ```
74
80
 
75
81
  ## Development
76
82
 
77
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
78
-
79
83
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
80
84
 
81
85
  ## Contributing
@@ -34,8 +34,8 @@ module JobEnqueueLogger
34
34
  alias server? server
35
35
 
36
36
  def logger
37
- if !server? && defined?(Rails)
38
- Rails.logger
37
+ if !server? && JobEnqueueLogger.logger
38
+ JobEnqueueLogger.logger
39
39
  else
40
40
  Delayed::Worker.logger
41
41
  end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ module JobEnqueueLogger
4
+ module QueAdapter
5
+ module Job
6
+ def enqueue(*)
7
+ job = super
8
+ unless Thread.current[:que_jobs_to_bulk_insert]
9
+ job_attrs = job.que_attrs
10
+ job_class = job_attrs[:job_class]
11
+ args = job_attrs[:args]
12
+ args << job_attrs[:kwargs] unless job_attrs[:kwargs].empty?
13
+
14
+ if (id = job_attrs[:id])
15
+ message = "Enqueued #{job_class} (id=#{id}) to Que(#{job_attrs[:queue]})"
16
+
17
+ run_at = job_attrs[:run_at].utc
18
+ message += " at #{run_at}" if run_at > Time.now.utc
19
+ message += Utils.args_info(args)
20
+ else
21
+ # Job performed inline.
22
+ message = "Performed inline #{job_class}" + Utils.args_info(args)
23
+ end
24
+ Utils.log_job_enqueue(QueAdapter.logger, message)
25
+ end
26
+ job
27
+ end
28
+ ruby2_keywords(:enqueue)
29
+
30
+ def bulk_enqueue(**)
31
+ jobs = super
32
+ if jobs.any?
33
+ job_attrs = jobs.first.que_attrs
34
+ job_class = job_attrs[:job_class]
35
+
36
+ if job_attrs[:id]
37
+ run_at = job_attrs[:run_at].utc
38
+
39
+ message = "Enqueued"
40
+ message += " #{jobs.size}" if jobs.size > 1
41
+ message += " #{job_class} to Que(#{job_attrs[:queue]})"
42
+ message += " at #{run_at}" if run_at > Time.now.utc
43
+ else
44
+ message = "Performed inline"
45
+ message += " #{jobs.size}" if jobs.size > 1
46
+ message += " #{job_class}"
47
+ end
48
+
49
+ Utils.log_job_enqueue(QueAdapter.logger, message)
50
+ end
51
+ jobs
52
+ end
53
+ end
54
+
55
+ def self.logger
56
+ # Que.server? is defined in the newest version of Que - https://github.com/que-rb/que/pull/382
57
+ is_server = defined?(Que::CommandLineInterface)
58
+
59
+ if !is_server && JobEnqueueLogger.logger
60
+ JobEnqueueLogger.logger
61
+ elsif Que.logger.respond_to?(:call)
62
+ Que.logger.call
63
+ else
64
+ Que.logger
65
+ end
66
+ end
67
+ end
68
+ end
69
+
70
+ Que::Job.singleton_class.prepend(JobEnqueueLogger::QueAdapter::Job)
@@ -6,6 +6,7 @@ module JobEnqueueLogger
6
6
  class Railtie < Rails::Railtie
7
7
  initializer "job_enqueue_logger.backtrace_cleaner" do
8
8
  JobEnqueueLogger.backtrace_cleaner = Rails.backtrace_cleaner
9
+ JobEnqueueLogger.logger = Rails.logger
9
10
  end
10
11
  end
11
12
  end
@@ -41,8 +41,8 @@ module JobEnqueueLogger
41
41
  alias server? server
42
42
 
43
43
  def logger
44
- if !server? && defined?(Rails)
45
- Rails.logger
44
+ if !server? && JobEnqueueLogger.logger
45
+ JobEnqueueLogger.logger
46
46
  else
47
47
  Resque.logger
48
48
  end
@@ -47,8 +47,8 @@ module JobEnqueueLogger
47
47
  end
48
48
 
49
49
  def self.logger
50
- if !Sidekiq.server? && defined?(Rails)
51
- Rails.logger
50
+ if !Sidekiq.server? && JobEnqueueLogger.logger
51
+ JobEnqueueLogger.logger
52
52
  else
53
53
  Sidekiq.logger
54
54
  end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module JobEnqueueLogger
4
+ # There is no easy way to detect if the job is performed inline,
5
+ # so extend only enqueuing methods.
6
+ module SuckerPunchAdapter
7
+ module Job
8
+ def perform_async(*args)
9
+ enqueued = super
10
+ if enqueued
11
+ message = "Enqueued #{name} to SuckerPunch" + Utils.args_info(args)
12
+ Utils.log_job_enqueue(SuckerPunchAdapter.logger, message)
13
+ end
14
+ enqueued
15
+ end
16
+ ruby2_keywords(:perform_async)
17
+
18
+ def perform_in(interval, *args)
19
+ enqueued = super
20
+ if enqueued
21
+ at = (Time.now + interval).utc
22
+ message = "Enqueued #{name} to SuckerPunch in #{interval} seconds (at #{at})" + Utils.args_info(args)
23
+ Utils.log_job_enqueue(SuckerPunchAdapter.logger, message)
24
+ end
25
+ enqueued
26
+ end
27
+ ruby2_keywords(:perform_in)
28
+ end
29
+
30
+ def self.logger
31
+ JobEnqueueLogger.logger || SuckerPunch.logger
32
+ end
33
+ end
34
+ end
35
+
36
+ SuckerPunch::Job::ClassMethods.prepend(JobEnqueueLogger::SuckerPunchAdapter::Job)
@@ -3,6 +3,7 @@
3
3
  module JobEnqueueLogger
4
4
  module Utils
5
5
  def self.log_job_enqueue(logger, message)
6
+ message = "[JobEnqueueLogger] #{message}"
6
7
  return logger.info(message) unless JobEnqueueLogger.backtrace
7
8
 
8
9
  backtrace = caller
@@ -19,10 +20,19 @@ module JobEnqueueLogger
19
20
 
20
21
  def self.args_info(args)
21
22
  if Array(args).any?
22
- " with arguments: #{Array(args).map(&:inspect).join(', ')}"
23
+ " with arguments: #{Array(args).map { |arg| format_arg(arg).inspect }.join(', ')}"
23
24
  else
24
25
  ""
25
26
  end
26
27
  end
28
+
29
+ def self.format_arg(arg)
30
+ case arg
31
+ when String
32
+ arg.size > 100 ? "#{arg[0, 100]}…" : arg
33
+ else
34
+ arg
35
+ end
36
+ end
27
37
  end
28
38
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module JobEnqueueLogger
4
- VERSION = "0.1.0"
4
+ VERSION = "0.3.0"
5
5
  end
@@ -16,7 +16,7 @@ module JobEnqueueLogger
16
16
  end
17
17
  end
18
18
 
19
- attr_accessor :backtrace
19
+ attr_accessor :backtrace, :logger
20
20
 
21
21
  def configure
22
22
  yield self
@@ -30,4 +30,6 @@ end
30
30
  require_relative "job_enqueue_logger/sidekiq_adapter" if defined?(Sidekiq)
31
31
  require_relative "job_enqueue_logger/resque_adapter" if defined?(Resque)
32
32
  require_relative "job_enqueue_logger/delayed_job_adapter" if defined?(Delayed::Job)
33
+ require_relative "job_enqueue_logger/sucker_punch_adapter" if defined?(SuckerPunch)
34
+ require_relative "job_enqueue_logger/que_adapter" if defined?(Que)
33
35
  require_relative "job_enqueue_logger/railtie" if defined?(Rails)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: job_enqueue_logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - fatkodima
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-30 00:00:00.000000000 Z
11
+ date: 2023-11-08 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |-
14
14
  Log background jobs enqueued by your application (additionally with backtraces).
@@ -25,9 +25,11 @@ files:
25
25
  - README.md
26
26
  - lib/job_enqueue_logger.rb
27
27
  - lib/job_enqueue_logger/delayed_job_adapter.rb
28
+ - lib/job_enqueue_logger/que_adapter.rb
28
29
  - lib/job_enqueue_logger/railtie.rb
29
30
  - lib/job_enqueue_logger/resque_adapter.rb
30
31
  - lib/job_enqueue_logger/sidekiq_adapter.rb
32
+ - lib/job_enqueue_logger/sucker_punch_adapter.rb
31
33
  - lib/job_enqueue_logger/utils.rb
32
34
  - lib/job_enqueue_logger/version.rb
33
35
  homepage: https://github.com/fatkodima/job_enqueue_logger
@@ -52,7 +54,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
52
54
  - !ruby/object:Gem::Version
53
55
  version: '0'
54
56
  requirements: []
55
- rubygems_version: 3.4.7
57
+ rubygems_version: 3.4.10
56
58
  signing_key:
57
59
  specification_version: 4
58
60
  summary: Log background jobs enqueued by your application (additionally with backtraces).