job_enqueue_logger 0.1.0 → 0.3.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: 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).