sidekiq-instrumental 0.3.1 → 0.3.2

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: 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