sidekiq-instrumental 0.3.1 → 0.3.2

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: 2e3b5be832d57b3a1a67741a65b46b983f0580b56a7ff24db58fb8da85b59ee8
4
- data.tar.gz: e2465ae0bad37bd73903c6cd7e4c518c1e3350d508684a30178a6f9929d8a393
3
+ metadata.gz: 554f7530d3719b65ba7c9cc9defedaea1cec95adea137a0627ad81b98cee4405
4
+ data.tar.gz: fca6e4182df43e4c1980efe397623248c66c9d6c1510294d01727ef6118ce17f
5
5
  SHA512:
6
- metadata.gz: 90e026453667bb00ebf30e992a3b38e1cca3aeb6273e914ef68fb6cdff4340c1e9a8129def78672a9bd64b58d0d71f7f5c9a022a83ea250e59310f412bb9a64d
7
- data.tar.gz: f3050927c14134accfba8316f4394bd8ef6bd35aafef32a5ca7c7b1145491a9ab67996e13c6d2c27514e61369ba85ebec8893407b11d6077f658ae819eef3583
6
+ metadata.gz: d04a719ca6409deeacf6cb4ed59acf544521617b75226a4888b2559e94b8bd8ed71132451594d9ef3a2981b9d60760c57b6fb3278b9d0646e0ef44e1286675ba
7
+ data.tar.gz: 3fb5692dc389eb03581a3c0b1ad1dffab4116a410ea21d82887bea2a289657612a9c3deef08b03afdf89335336160db95466ec060e829ed6d38f0bcd8af887bb
@@ -0,0 +1,24 @@
1
+ ## Change description
2
+
3
+ > Please include a summary of the change and which issue is fixed. Please also include
4
+ relevant motivation and context. List any dependencies that are required for this change.
5
+
6
+ ## Related issues
7
+
8
+ - Source: <Issue link or Spec Link>
9
+ - UAT: <UAT Link>
10
+ - QA: <QA Task Link here>
11
+ - Review app: <Link to Heroku>
12
+
13
+ ## Checklists
14
+
15
+ ### Development
16
+
17
+ - [ ] The commit message follows our [guidelines](https://docs.hubstaff.com/hubstaff-docs/latest/great_commit_messages.html)
18
+ - [ ] I have performed a self-review of my own code
19
+ - [ ] I have thoroughly tested the changes
20
+ - [ ] I have added tests that prove my fix is effective or that my feature works
21
+
22
+ ### Security
23
+
24
+ - [ ] Security impact of change has been considered
@@ -0,0 +1,39 @@
1
+ ---
2
+ name: CI PR Builds
3
+ 'on':
4
+ push:
5
+ branches:
6
+ - master
7
+ pull_request:
8
+ concurrency:
9
+ group: ci-${{ github.ref }}
10
+ cancel-in-progress: true
11
+ jobs:
12
+ test:
13
+ runs-on: ubuntu-latest
14
+ strategy:
15
+ fail-fast: false
16
+ matrix:
17
+ ruby:
18
+ - '2.5'
19
+ - '2.7'
20
+ sidekiq:
21
+ - '4'
22
+ - '5'
23
+ env:
24
+ BUNDLE_GEMFILE: "${{ github.workspace }}/gemfiles/Gemfile.sidekiq${{ matrix.sidekiq }}"
25
+ steps:
26
+ - uses: actions/checkout@v2
27
+ - name: Set up Ruby
28
+ uses: ruby/setup-ruby@v1
29
+ with:
30
+ ruby-version: "${{ matrix.ruby }}"
31
+ bundler-cache: true
32
+ - name: Run bundle update
33
+ run: bundle update
34
+ - name: Run tests
35
+ run: bundle exec rake spec
36
+ - name: Rubocop
37
+ run: bundle exec rubocop
38
+ - name: Build gem
39
+ run: gem build *.gemspec
data/.gitignore CHANGED
@@ -4,6 +4,7 @@
4
4
  /.ruby-version
5
5
  /.ruby-gemset
6
6
  /Gemfile.lock
7
+ /gemfiles/*.lock
7
8
  /_yardoc/
8
9
  /coverage/
9
10
  /doc/
data/CHANGELOG.md CHANGED
@@ -9,6 +9,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
9
9
  ### Changed
10
10
  ### Fixed
11
11
 
12
+ ## [0.3.2]
13
+ ### Added
14
+ - Implement a custom version of Sidekiq's display\_class\_name that fix an issues with ActiveJob > 6 when the job's class is passed as class not String
15
+ - Limit support up to Sidekiq < 6.
16
+
12
17
  ## [0.3.1]
13
18
  ### Fixed
14
19
  - class name calculation needs to filter out unsupported characters by instrumental
@@ -1,3 +1,3 @@
1
- mkdir ~/.gem
1
+ mkdir -p ~/.gem
2
2
  echo -e "---\n:rubygems_api_key: $RUBYGEMS_API_KEY" > ~/.gem/credentials
3
3
  chmod 0600 ~/.gem/credentials
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+ gemspec path: File.expand_path('..', __FILE__)
3
+
4
+ File.exist?(gemfile_local = File.expand_path('../Gemfile.local', __FILE__)) and eval File.read(gemfile_local), binding, gemfile_local
@@ -0,0 +1,4 @@
1
+ base_gemfile = File.expand_path('../Gemfile.base', __FILE__)
2
+ eval File.read(base_gemfile)
3
+
4
+ gem "sidekiq", ">= 4.0", "< 5.0"
@@ -0,0 +1,4 @@
1
+ base_gemfile = File.expand_path('../Gemfile.base', __FILE__)
2
+ eval File.read(base_gemfile)
3
+
4
+ gem "sidekiq", ">= 5.0", "< 6.0"
@@ -41,12 +41,42 @@ module Sidekiq
41
41
  end
42
42
 
43
43
  def build_class_key(klass_name)
44
- key = klass_name.underscore
44
+ key = underscore(klass_name)
45
45
  .gsub(/[^\d\w\-_\.]/, '_')
46
46
  .gsub(/\.{2,}/, '.')
47
47
  key.chomp!('.') while key[-1] == '.'
48
48
  key
49
49
  end
50
+
51
+ # Borrowed from active support so we do not depend on it.
52
+ def underscore(camel_cased_word)
53
+ return camel_cased_word unless /[A-Z-]|::/.match?(camel_cased_word)
54
+
55
+ word = camel_cased_word.to_s.gsub('::', '/')
56
+ word.gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2')
57
+ word.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
58
+ word.tr!('-', '_')
59
+ word.downcase!
60
+ word
61
+ end
62
+
63
+ # Returns the human-friendly class name, if its a known wrapper we unwrap it.
64
+ # Previously, this was done by the +display_name+ method of Sidekiq::Job,
65
+ # but after this change (https://github.com/rails/rails/commit/0e64348ccaf513de731f403259ec5b49e7b3f028)
66
+ # the method (https://github.com/mperham/sidekiq/blob/main/lib/sidekiq/api.rb#L342)
67
+ # no longer works as expected as it compares a class against a string,
68
+ # returning the wrapped job class not the class behind it as String.
69
+ def unwrap_class_name(job)
70
+ display_class = job.display_class
71
+
72
+ if %w[ActionMailer::DeliveryJob ActionMailer::MailDeliveryJob]
73
+ .include?(display_class.class.name)
74
+ # The class name was not unwrapped correctly by the +display_class+ method
75
+ job.args[0]['arguments'][0..1].join('#')
76
+ else
77
+ display_class
78
+ end
79
+ end
50
80
  end
51
81
  end
52
82
  end
@@ -13,7 +13,8 @@ module Sidekiq
13
13
  base_key = "sidekiq.#{queue}."
14
14
  increment(base_key + 'queued')
15
15
 
16
- base_key += build_class_key(msg.display_class) + '.'
16
+ display_class = unwrap_class_name(msg)
17
+ base_key += build_class_key(display_class) + '.'
17
18
 
18
19
  increment(base_key + 'queued')
19
20
  end
@@ -18,7 +18,9 @@ module Sidekiq
18
18
  gauge(base_key + 'time', elapsed)
19
19
  gauge(base_key + 'enqueued', stats.queues[queue].to_i)
20
20
  gauge(base_key + 'latency', Sidekiq::Queue.new(queue.to_s).latency)
21
- base_key += build_class_key(msg.display_class) + '.'
21
+
22
+ display_class = unwrap_class_name(msg)
23
+ base_key += build_class_key(display_class) + '.'
22
24
 
23
25
  increment(base_key + 'processed')
24
26
  gauge(base_key + 'time', elapsed)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Sidekiq
4
4
  module Instrumental
5
- VERSION = '0.3.1'
5
+ VERSION = '0.3.2'
6
6
  end
7
7
  end
@@ -24,10 +24,9 @@ Gem::Specification.new do |spec|
24
24
  spec.required_ruby_version = '>= 2.3'
25
25
 
26
26
  spec.add_runtime_dependency 'instrumental_agent', '>= 0.13'
27
- spec.add_runtime_dependency 'sidekiq', '>= 3.5'
27
+ spec.add_runtime_dependency 'sidekiq', '>= 4.0', '< 6.0'
28
28
 
29
- spec.add_development_dependency 'activesupport', '~> 5.0'
30
- spec.add_development_dependency 'bundler', '~> 1.9'
29
+ spec.add_development_dependency 'bundler'
31
30
  spec.add_development_dependency 'rake', '>= 10.0'
32
31
  spec.add_development_dependency 'rspec', '~> 3.4'
33
32
  spec.add_development_dependency 'simplecov', '~> 0.11'
@@ -2,8 +2,6 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- require 'active_support/core_ext/string/inflections'
6
-
7
5
  RSpec.describe Sidekiq::Instrumental::Middleware::Client do
8
6
  let(:config) { Sidekiq::Instrumental::Configuration.new }
9
7
  let(:middleware) { described_class.new(config) }
@@ -86,4 +84,38 @@ RSpec.describe Sidekiq::Instrumental::Middleware::Client do
86
84
 
87
85
  subject
88
86
  end
87
+
88
+ describe 'Unwrap sidekiq job class name' do
89
+ let(:msg) do
90
+ {
91
+ 'class' => 'ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper',
92
+ 'wrapped' => wrapped_class,
93
+ 'args' => [{ 'arguments' => %w[UserMailer confirm_account deliver_now User] }]
94
+ }
95
+ end
96
+
97
+ context "when sidekiq's wrapped class is set as a String" do
98
+ let(:wrapped_class) { 'ActionMailer::DeliveryJob' }
99
+
100
+ it 'unwraps the class name and increments the metric' do
101
+ expect(middleware)
102
+ .to receive(:increment)
103
+ .with("sidekiq.#{queue}.user_mailer_confirm_account.queued")
104
+
105
+ subject
106
+ end
107
+ end
108
+
109
+ context "when sidekiq's wrapped class is set as a Class" do
110
+ let(:wrapped_class) { stub_const('ActionMailer::DeliveryJob', Class.new).new }
111
+
112
+ it 'unwraps the class name and increments the metric' do
113
+ expect(middleware)
114
+ .to receive(:increment)
115
+ .with("sidekiq.#{queue}.user_mailer_confirm_account.queued")
116
+
117
+ subject
118
+ end
119
+ end
120
+ end
89
121
  end
@@ -2,8 +2,6 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- require 'active_support/core_ext/string/inflections'
6
-
7
5
  RSpec.describe Sidekiq::Instrumental::Middleware::Server do
8
6
  let(:config) { Sidekiq::Instrumental::Configuration.new }
9
7
  let(:middleware) { described_class.new(config) }
@@ -135,4 +133,38 @@ RSpec.describe Sidekiq::Instrumental::Middleware::Server do
135
133
 
136
134
  subject
137
135
  end
136
+
137
+ describe 'Unwrap sidekiq job class name' do
138
+ let(:msg) do
139
+ {
140
+ 'class' => 'ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper',
141
+ 'wrapped' => wrapped_class,
142
+ 'args' => [{ 'arguments' => %w[UserMailer confirm_account deliver_now User] }]
143
+ }
144
+ end
145
+
146
+ context "when sidekiq's wrapped class is set as a String" do
147
+ let(:wrapped_class) { 'ActionMailer::DeliveryJob' }
148
+
149
+ it 'unwraps the class name and increments the metric' do
150
+ expect(middleware)
151
+ .to receive(:increment)
152
+ .with("sidekiq.#{queue}.user_mailer_confirm_account.processed")
153
+
154
+ subject
155
+ end
156
+ end
157
+
158
+ context "when sidekiq's wrapped class is set as a Class" do
159
+ let(:wrapped_class) { stub_const('ActionMailer::DeliveryJob', Class.new).new }
160
+
161
+ it 'unwraps the class name and increments the metric' do
162
+ expect(middleware)
163
+ .to receive(:increment)
164
+ .with("sidekiq.#{queue}.user_mailer_confirm_account.processed")
165
+
166
+ subject
167
+ end
168
+ end
169
+ end
138
170
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-instrumental
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Edward Rudd
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-13 00:00:00.000000000 Z
11
+ date: 2022-05-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: instrumental_agent
@@ -30,42 +30,34 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '3.5'
33
+ version: '4.0'
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: '6.0'
34
37
  type: :runtime
35
38
  prerelease: false
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
38
41
  - - ">="
39
42
  - !ruby/object:Gem::Version
40
- version: '3.5'
41
- - !ruby/object:Gem::Dependency
42
- name: activesupport
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
43
+ version: '4.0'
44
+ - - "<"
46
45
  - !ruby/object:Gem::Version
47
- version: '5.0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '5.0'
46
+ version: '6.0'
55
47
  - !ruby/object:Gem::Dependency
56
48
  name: bundler
57
49
  requirement: !ruby/object:Gem::Requirement
58
50
  requirements:
59
- - - "~>"
51
+ - - ">="
60
52
  - !ruby/object:Gem::Version
61
- version: '1.9'
53
+ version: '0'
62
54
  type: :development
63
55
  prerelease: false
64
56
  version_requirements: !ruby/object:Gem::Requirement
65
57
  requirements:
66
- - - "~>"
58
+ - - ">="
67
59
  - !ruby/object:Gem::Version
68
- version: '1.9'
60
+ version: '0'
69
61
  - !ruby/object:Gem::Dependency
70
62
  name: rake
71
63
  requirement: !ruby/object:Gem::Requirement
@@ -150,14 +142,15 @@ dependencies:
150
142
  - - "~>"
151
143
  - !ruby/object:Gem::Version
152
144
  version: 1.37.1
153
- description:
145
+ description:
154
146
  email:
155
147
  - urkle@outoforder.cc
156
148
  executables: []
157
149
  extensions: []
158
150
  extra_rdoc_files: []
159
151
  files:
160
- - ".circleci/config.yml"
152
+ - ".github/PULL_REQUEST_TEMPLATE.md"
153
+ - ".github/workflows/prs.yml"
161
154
  - ".gitignore"
162
155
  - ".rspec"
163
156
  - ".rubocop.yml"
@@ -171,6 +164,9 @@ files:
171
164
  - bin/setup
172
165
  - bin/setup-rubygems.sh
173
166
  - bin/tag_check.sh
167
+ - gemfiles/Gemfile.base
168
+ - gemfiles/Gemfile.sidekiq4
169
+ - gemfiles/Gemfile.sidekiq5
174
170
  - lib/sidekiq/instrumental.rb
175
171
  - lib/sidekiq/instrumental/configuration.rb
176
172
  - lib/sidekiq/instrumental/middleware/base.rb
@@ -187,7 +183,7 @@ homepage: https://github.com/NetsoftHoldings/sidekiq-instrumental/
187
183
  licenses:
188
184
  - MIT
189
185
  metadata: {}
190
- post_install_message:
186
+ post_install_message:
191
187
  rdoc_options: []
192
188
  require_paths:
193
189
  - lib
@@ -202,8 +198,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
202
198
  - !ruby/object:Gem::Version
203
199
  version: '0'
204
200
  requirements: []
205
- rubygems_version: 3.0.6
206
- signing_key:
201
+ rubygems_version: 3.1.6
202
+ signing_key:
207
203
  specification_version: 4
208
204
  summary: Send Sidekiq status into Instrumental after every job
209
205
  test_files:
data/.circleci/config.yml DELETED
@@ -1,135 +0,0 @@
1
- version: 2
2
-
3
- defaults: &defaults
4
- docker: &ruby_image
5
- - &ruby_image
6
- image: circleci/ruby:2.5-stretch
7
- environment:
8
- RUBYOPT: '-KU -E utf-8:utf-8'
9
- BUNDLE_PATH: vendor/bundle
10
- BUNDLE_VERSION: 1.17.3
11
- BUNDLE_JOBS: 4
12
- BUNDLE_RETRY: 3
13
-
14
- filters:
15
- test: &filter_test
16
- filters:
17
- tags:
18
- ignore: /^v.*/
19
- beta: &filter_beta
20
- filters:
21
- branches:
22
- ignore: /.*/
23
- tags:
24
- only: /^v[0-9]+(\.[0-9]+)+(\.[a-z].+).*/
25
- release: &filter_release
26
- filters:
27
- branches:
28
- ignore: /.*/
29
- tags:
30
- only: /^v[0-9]+(\.[0-9]+)+/
31
-
32
- workflows:
33
- version: 2
34
- build_test:
35
- jobs:
36
- - "Checkout":
37
- <<: *filter_test
38
- context: org-global
39
- - "Test":
40
- <<: *filter_test
41
- context: org-global
42
- requires:
43
- - "Checkout"
44
- build_test_beta:
45
- jobs:
46
- - "Checkout":
47
- <<: *filter_beta
48
- context: org-global
49
- - "Test":
50
- <<: *filter_beta
51
- context: org-global
52
- requires:
53
- - "Checkout"
54
- - "Publish":
55
- <<: *filter_beta
56
- context: org-global
57
- requires:
58
- - "Test"
59
- build_test_release:
60
- jobs:
61
- - "Checkout":
62
- <<: *filter_release
63
- context: org-global
64
- - "Test":
65
- <<: *filter_release
66
- context: org-global
67
- requires:
68
- - "Checkout"
69
- - "Publish":
70
- <<: *filter_release
71
- context: org-global
72
- requires:
73
- - "Test"
74
-
75
- jobs:
76
- "Checkout":
77
- <<: *defaults
78
- steps:
79
- - attach_workspace:
80
- at: .
81
- - checkout
82
-
83
- - restore_cache:
84
- keys:
85
- - sidekiq-instrumental-bundle-v2-{{ checksum "Gemfile" }}-{{ checksum "sidekiq-instrumental.gemspec" }}
86
- - run:
87
- name: Install bundler
88
- command: gem install bundler --version=$BUNDLE_VERSION
89
- - run:
90
- name: Bundle Install
91
- command: |-
92
- bundle _${BUNDLE_VERSION}_ check || bundle _${BUNDLE_VERSION}_ install --retry=$BUNDLE_RETRY
93
- - save_cache:
94
- key: sidekiq-instrumental-bundle-v2-{{ checksum "Gemfile" }}-{{ checksum "sidekiq-instrumental.gemspec" }}
95
- paths:
96
- - vendor/bundle
97
- - Gemfile.lock
98
-
99
- - persist_to_workspace:
100
- root: .
101
- paths: .
102
- "Test":
103
- <<: *defaults
104
- steps:
105
- - attach_workspace:
106
- at: .
107
- - run:
108
- name: Install bundler
109
- command: gem install bundler --version=$BUNDLE_VERSION
110
- - run:
111
- name: RSpec
112
- command: bundle exec rspec
113
- - run:
114
- name: Rubocop
115
- command: bundle exec rubocop
116
- - run:
117
- name: Build gem
118
- command: |-
119
- gem build *.gemspec
120
- "Publish":
121
- <<: *defaults
122
- steps:
123
- - attach_workspace:
124
- at: .
125
- - run:
126
- name: Install bundler
127
- command: gem install bundler --version=$BUNDLE_VERSION
128
- - run:
129
- name: Deploy to gem server
130
- command: |-
131
- ./bin/tag_check.sh
132
- ./bin/setup-rubygems.sh
133
- rm -rf pkg
134
- rake build
135
- gem push pkg/*.gem