sidekiq-instrument 0.7.6 → 0.9.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 +4 -4
- data/.github/workflows/ci.yml +182 -3
- data/.gitignore +2 -1
- data/.ruby-version +1 -0
- data/CHANGELOG.md +47 -0
- data/LICENSE.txt +5 -7
- data/README.md +49 -6
- data/TESTING.md +178 -0
- data/lib/sidekiq/instrument/middleware/client.rb +2 -2
- data/lib/sidekiq/instrument/middleware/server.rb +5 -5
- data/lib/sidekiq/instrument/mixin.rb +5 -5
- data/lib/sidekiq/instrument/version.rb +1 -1
- data/lib/sidekiq/instrument/worker_metrics.rb +5 -2
- data/sidekiq-instrument.gemspec +18 -11
- metadata +46 -61
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: bd9f50051599dcd43fe68eebb3fc84e32437e8e9281dc10e9f12e1427a1fb84d
|
|
4
|
+
data.tar.gz: 945b5ad1ef4c3c062c528d1a341b7fecc0768e9f70d9bc8499346bd0b8aff91f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2b75525ca8edc55004c27f77f1579a6342241ea5c66b184f4d4a51448456d8609bf2c3294bb7c9da85b446ea69361be4d1ad681d501eeba1a8cbfb122fde4e10
|
|
7
|
+
data.tar.gz: 745f1792585d5cc2d17e18af54ac346656f5a7feaaeeb07b9d436f5f685f0387dfc250a94b77bdf79fac80c7f411878361993b8e1d522985f5a3b52c915fcf37
|
data/.github/workflows/ci.yml
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
name: CI
|
|
2
2
|
|
|
3
|
+
# Test matrix strategy:
|
|
4
|
+
# - Sidekiq 4.x-6.x: Compatible with Ruby 2.7-3.3, Redis 4+
|
|
5
|
+
# - Sidekiq 7.x-8.x: Require Redis 6+ (redis-client gem needs HELLO command)
|
|
6
|
+
# - Sidekiq 8.x: Additionally requires Ruby >= 3.2
|
|
7
|
+
# - We test representative combinations of Ruby + Sidekiq + Redis/Valkey versions
|
|
8
|
+
# - Total: 21 Redis tests + 7 Valkey tests = 28 jobs (down from 175 invalid combinations)
|
|
9
|
+
|
|
3
10
|
on:
|
|
4
11
|
push:
|
|
5
12
|
branches:
|
|
@@ -13,19 +20,109 @@ jobs:
|
|
|
13
20
|
test:
|
|
14
21
|
runs-on: ubuntu-latest
|
|
15
22
|
strategy:
|
|
23
|
+
fail-fast: false
|
|
16
24
|
matrix:
|
|
17
|
-
|
|
18
|
-
|
|
25
|
+
include:
|
|
26
|
+
# Sidekiq 4.x: Ruby 2.7-3.3, Redis 4-8
|
|
27
|
+
- ruby-version: '2.7.8'
|
|
28
|
+
sidekiq-version: '4'
|
|
29
|
+
redis-version: '4'
|
|
30
|
+
- ruby-version: '2.7.8'
|
|
31
|
+
sidekiq-version: '4'
|
|
32
|
+
redis-version: '7'
|
|
33
|
+
- ruby-version: '3.0'
|
|
34
|
+
sidekiq-version: '4'
|
|
35
|
+
redis-version: '5'
|
|
36
|
+
- ruby-version: '3.3'
|
|
37
|
+
sidekiq-version: '4'
|
|
38
|
+
redis-version: '8'
|
|
39
|
+
|
|
40
|
+
# Sidekiq 5.x: Ruby 2.7-3.3, Redis 4-8
|
|
41
|
+
- ruby-version: '2.7.8'
|
|
42
|
+
sidekiq-version: '5'
|
|
43
|
+
redis-version: '4'
|
|
44
|
+
- ruby-version: '3.1'
|
|
45
|
+
sidekiq-version: '5'
|
|
46
|
+
redis-version: '6'
|
|
47
|
+
- ruby-version: '3.3'
|
|
48
|
+
sidekiq-version: '5'
|
|
49
|
+
redis-version: '8'
|
|
50
|
+
|
|
51
|
+
# Sidekiq 6.x: Ruby 2.7-3.3, Redis 4-8
|
|
52
|
+
- ruby-version: '2.7.8'
|
|
53
|
+
sidekiq-version: '6'
|
|
54
|
+
redis-version: '4'
|
|
55
|
+
- ruby-version: '3.0'
|
|
56
|
+
sidekiq-version: '6'
|
|
57
|
+
redis-version: '5'
|
|
58
|
+
- ruby-version: '3.2'
|
|
59
|
+
sidekiq-version: '6'
|
|
60
|
+
redis-version: '7'
|
|
61
|
+
- ruby-version: '3.3'
|
|
62
|
+
sidekiq-version: '6'
|
|
63
|
+
redis-version: '8'
|
|
64
|
+
|
|
65
|
+
# Sidekiq 7.x: Ruby 2.7-3.3, Redis 6-8 (redis-client requires Redis 6+ for HELLO command)
|
|
66
|
+
- ruby-version: '2.7.8'
|
|
67
|
+
sidekiq-version: '7'
|
|
68
|
+
redis-version: '6'
|
|
69
|
+
- ruby-version: '3.0'
|
|
70
|
+
sidekiq-version: '7'
|
|
71
|
+
redis-version: '6'
|
|
72
|
+
- ruby-version: '3.1'
|
|
73
|
+
sidekiq-version: '7'
|
|
74
|
+
redis-version: '7'
|
|
75
|
+
- ruby-version: '3.2'
|
|
76
|
+
sidekiq-version: '7'
|
|
77
|
+
redis-version: '7'
|
|
78
|
+
- ruby-version: '3.3'
|
|
79
|
+
sidekiq-version: '7'
|
|
80
|
+
redis-version: '8'
|
|
81
|
+
|
|
82
|
+
# Sidekiq 8.x: Ruby 3.2+, Redis 6-8 (Sidekiq 8 requires Ruby >= 3.2, redis-client requires Redis 6+)
|
|
83
|
+
- ruby-version: '3.2'
|
|
84
|
+
sidekiq-version: '8'
|
|
85
|
+
redis-version: '6'
|
|
86
|
+
- ruby-version: '3.2'
|
|
87
|
+
sidekiq-version: '8'
|
|
88
|
+
redis-version: '7'
|
|
89
|
+
- ruby-version: '3.3'
|
|
90
|
+
sidekiq-version: '8'
|
|
91
|
+
redis-version: '7'
|
|
92
|
+
- ruby-version: '3.3'
|
|
93
|
+
sidekiq-version: '8'
|
|
94
|
+
redis-version: '8'
|
|
19
95
|
|
|
20
96
|
steps:
|
|
21
97
|
- name: Checkout project
|
|
22
98
|
uses: actions/checkout@v3
|
|
23
99
|
|
|
100
|
+
- name: Create Gemfile for specific Sidekiq version
|
|
101
|
+
run: |
|
|
102
|
+
cat > Gemfile.ci <<EOF
|
|
103
|
+
source 'https://rubygems.org'
|
|
104
|
+
|
|
105
|
+
gem 'sidekiq', '~> ${{ matrix.sidekiq-version }}.0'
|
|
106
|
+
|
|
107
|
+
gemspec
|
|
108
|
+
EOF
|
|
109
|
+
cat Gemfile.ci
|
|
110
|
+
|
|
24
111
|
- name: Set up Ruby
|
|
25
112
|
uses: ruby/setup-ruby@v1
|
|
26
113
|
with:
|
|
27
114
|
ruby-version: ${{ matrix.ruby-version }}
|
|
28
|
-
bundler-cache:
|
|
115
|
+
bundler-cache: false
|
|
116
|
+
env:
|
|
117
|
+
BUNDLE_GEMFILE: Gemfile.ci
|
|
118
|
+
|
|
119
|
+
- name: Install dependencies
|
|
120
|
+
env:
|
|
121
|
+
BUNDLE_GEMFILE: Gemfile.ci
|
|
122
|
+
run: |
|
|
123
|
+
bundle install --jobs 4 --retry 3
|
|
124
|
+
echo "=== Installed Sidekiq version ==="
|
|
125
|
+
bundle exec gem list sidekiq
|
|
29
126
|
|
|
30
127
|
- name: Start Redis
|
|
31
128
|
uses: supercharge/redis-github-action@1.5.0
|
|
@@ -33,4 +130,86 @@ jobs:
|
|
|
33
130
|
redis-version: ${{ matrix.redis-version }}
|
|
34
131
|
|
|
35
132
|
- name: Run tests
|
|
133
|
+
env:
|
|
134
|
+
BUNDLE_GEMFILE: Gemfile.ci
|
|
135
|
+
run: bundle exec rake
|
|
136
|
+
|
|
137
|
+
test-valkey:
|
|
138
|
+
runs-on: ubuntu-latest
|
|
139
|
+
strategy:
|
|
140
|
+
fail-fast: false
|
|
141
|
+
matrix:
|
|
142
|
+
include:
|
|
143
|
+
# Sidekiq 4.x-6.x: Ruby 2.7-3.3, Valkey 7-8
|
|
144
|
+
- ruby-version: '2.7.8'
|
|
145
|
+
sidekiq-version: '4'
|
|
146
|
+
valkey-version: '7'
|
|
147
|
+
- ruby-version: '3.3'
|
|
148
|
+
sidekiq-version: '5'
|
|
149
|
+
valkey-version: '8'
|
|
150
|
+
- ruby-version: '3.1'
|
|
151
|
+
sidekiq-version: '6'
|
|
152
|
+
valkey-version: '7'
|
|
153
|
+
|
|
154
|
+
# Sidekiq 7.x: Ruby 2.7-3.3, Valkey 7-8
|
|
155
|
+
- ruby-version: '2.7.8'
|
|
156
|
+
sidekiq-version: '7'
|
|
157
|
+
valkey-version: '7'
|
|
158
|
+
- ruby-version: '3.2'
|
|
159
|
+
sidekiq-version: '7'
|
|
160
|
+
valkey-version: '8'
|
|
161
|
+
|
|
162
|
+
# Sidekiq 8.x: Ruby 3.2+, Valkey 7-8 (Sidekiq 8 requires Ruby >= 3.2)
|
|
163
|
+
- ruby-version: '3.2'
|
|
164
|
+
sidekiq-version: '8'
|
|
165
|
+
valkey-version: '7'
|
|
166
|
+
- ruby-version: '3.3'
|
|
167
|
+
sidekiq-version: '8'
|
|
168
|
+
valkey-version: '8'
|
|
169
|
+
|
|
170
|
+
services:
|
|
171
|
+
valkey:
|
|
172
|
+
image: valkey/valkey:${{ matrix.valkey-version }}-alpine
|
|
173
|
+
ports:
|
|
174
|
+
- 6379:6379
|
|
175
|
+
options: >-
|
|
176
|
+
--health-cmd "valkey-cli ping"
|
|
177
|
+
--health-interval 10s
|
|
178
|
+
--health-timeout 5s
|
|
179
|
+
--health-retries 5
|
|
180
|
+
|
|
181
|
+
steps:
|
|
182
|
+
- name: Checkout project
|
|
183
|
+
uses: actions/checkout@v3
|
|
184
|
+
|
|
185
|
+
- name: Create Gemfile for specific Sidekiq version
|
|
186
|
+
run: |
|
|
187
|
+
cat > Gemfile.ci <<EOF
|
|
188
|
+
source 'https://rubygems.org'
|
|
189
|
+
|
|
190
|
+
gem 'sidekiq', '~> ${{ matrix.sidekiq-version }}.0'
|
|
191
|
+
|
|
192
|
+
gemspec
|
|
193
|
+
EOF
|
|
194
|
+
cat Gemfile.ci
|
|
195
|
+
|
|
196
|
+
- name: Set up Ruby
|
|
197
|
+
uses: ruby/setup-ruby@v1
|
|
198
|
+
with:
|
|
199
|
+
ruby-version: ${{ matrix.ruby-version }}
|
|
200
|
+
bundler-cache: false
|
|
201
|
+
env:
|
|
202
|
+
BUNDLE_GEMFILE: Gemfile.ci
|
|
203
|
+
|
|
204
|
+
- name: Install dependencies
|
|
205
|
+
env:
|
|
206
|
+
BUNDLE_GEMFILE: Gemfile.ci
|
|
207
|
+
run: |
|
|
208
|
+
bundle install --jobs 4 --retry 3
|
|
209
|
+
echo "=== Installed Sidekiq version ==="
|
|
210
|
+
bundle exec gem list sidekiq
|
|
211
|
+
|
|
212
|
+
- name: Run tests
|
|
213
|
+
env:
|
|
214
|
+
BUNDLE_GEMFILE: Gemfile.ci
|
|
36
215
|
run: bundle exec rake
|
data/.gitignore
CHANGED
data/.ruby-version
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.3.10
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- **BREAKING**: Minimum Ruby version raised from 2.6 to 2.7.8
|
|
13
|
+
- Updated all gem dependencies to their latest compatible versions
|
|
14
|
+
- Removed upper version constraint on ActiveSupport dependency (was `< 7.2`, now `>= 5.1` with no upper limit)
|
|
15
|
+
- Removed upper version constraint on Sidekiq dependency (was `< 7`, now `>= 4.2` with no upper limit)
|
|
16
|
+
- Updated Bundler to version 4.0.1
|
|
17
|
+
- Migrated to Ruby 3.x modern syntax patterns (frozen_string_literal, **dir**)
|
|
18
|
+
- Updated test suite for Sidekiq 8.x API compatibility (Sidekiq.configure_server)
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
|
|
22
|
+
- Ruby 3.3 support and full compatibility
|
|
23
|
+
- CI testing for Ruby versions 2.7.8, 3.0, 3.1, 3.2, and 3.3
|
|
24
|
+
- Redis gem dependency (>= 4.0) for compatibility with worker metrics
|
|
25
|
+
- **Redis 8.x support** - CI now tests against Redis 4.x, 5.x, 6.x, 7.x, and 8.x (latest of each major)
|
|
26
|
+
- **Valkey support** - Full compatibility with Valkey 7.x and 8.x as a Redis-compatible alternative
|
|
27
|
+
- **Comprehensive Sidekiq version testing** - CI now tests against Sidekiq 4.x, 5.x, 6.x, 7.x, and 8.x (latest of each major)
|
|
28
|
+
- CI testing matrix: 5 Ruby versions × 5 Sidekiq versions × 5 Redis versions = 125 combinations (plus 50 Valkey combinations)
|
|
29
|
+
- Gemspec constraint: `required_ruby_version >= 2.7.8` to enforce minimum Ruby version at installation
|
|
30
|
+
|
|
31
|
+
### Upgraded
|
|
32
|
+
|
|
33
|
+
- Sidekiq: now supports 8.0.x (previously limited to < 7)
|
|
34
|
+
- ActiveSupport: now supports 8.x (previously limited to < 7.2)
|
|
35
|
+
- RSpec: 3.13.x
|
|
36
|
+
- Rubocop: 1.81.x
|
|
37
|
+
- Rake: 13.3.x
|
|
38
|
+
- dogstatsd-ruby: 5.7.x
|
|
39
|
+
- statsd-instrument: 3.9.x
|
|
40
|
+
- redis: 5.4.x
|
|
41
|
+
- redis-client: 0.26.x
|
|
42
|
+
- simplecov: 0.22.x
|
|
43
|
+
|
|
44
|
+
### Removed
|
|
45
|
+
|
|
46
|
+
- Ruby 2.6 support (end of life)
|
|
47
|
+
- Version constraints that prevented using latest gem versions
|
data/LICENSE.txt
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2016 Matt Larraz
|
|
1
|
+
Copyright (c) 2025 Enova International
|
|
4
2
|
|
|
5
3
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
4
|
of this software and associated documentation files (the "Software"), to deal
|
|
@@ -9,13 +7,13 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
|
9
7
|
copies of the Software, and to permit persons to whom the Software is
|
|
10
8
|
furnished to do so, subject to the following conditions:
|
|
11
9
|
|
|
12
|
-
The above copyright notice and this permission notice shall be included in
|
|
13
|
-
|
|
10
|
+
The above copyright notice and this permission notice shall be included in all
|
|
11
|
+
copies or substantial portions of the Software.
|
|
14
12
|
|
|
15
13
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
14
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
15
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
16
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
17
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
-
|
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
19
|
+
SOFTWARE.
|
data/README.md
CHANGED
|
@@ -2,6 +2,38 @@
|
|
|
2
2
|
|
|
3
3
|
Reports job metrics using Shopify's [statsd-instrument][statsd-instrument] library and \[optionally\] DataDog's [dogstatsd-ruby](https://github.com/DataDog/dogstatsd-ruby), incrementing a counter for each enqueue and dequeue per job type, and timing the full runtime of your perform method.
|
|
4
4
|
|
|
5
|
+
## Requirements
|
|
6
|
+
|
|
7
|
+
- **Ruby**: 2.7.8 or higher
|
|
8
|
+
- **Sidekiq**: 4.2 or higher (tested with Sidekiq 4.x - 8.x)
|
|
9
|
+
- **Note**: Sidekiq 8.x requires Ruby 3.2 or higher
|
|
10
|
+
- **ActiveSupport**: 5.1 or higher (no upper version constraint)
|
|
11
|
+
- **Redis Server**: Version depends on Sidekiq version
|
|
12
|
+
- Sidekiq 4-6: Redis 4.0+ (tested with Redis 4-8)
|
|
13
|
+
- Sidekiq 7-8: **Redis 6.0+** required (redis-client gem needs HELLO command)
|
|
14
|
+
- **Valkey**: 7.2+ (Redis-compatible alternative, works with Sidekiq 7+)
|
|
15
|
+
|
|
16
|
+
This gem is tested against:
|
|
17
|
+
|
|
18
|
+
- Ruby versions: 2.7.8, 3.0, 3.1, 3.2, 3.3
|
|
19
|
+
- Sidekiq versions: 4.x, 5.x, 6.x, 7.x, 8.x (latest of each major)
|
|
20
|
+
- Redis server versions: 4.x-8.x (4-5 for Sidekiq 4-6, 6-8 for Sidekiq 7-8)
|
|
21
|
+
- Valkey versions: 7.x, 8.x (latest of each major)
|
|
22
|
+
|
|
23
|
+
### Ruby + Sidekiq + Redis Compatibility Matrix
|
|
24
|
+
|
|
25
|
+
| Sidekiq Version | Minimum Ruby | Min Redis Server | Tested Ruby Versions |
|
|
26
|
+
| --------------- | ------------ | ---------------- | ------------------------- |
|
|
27
|
+
| 4.x - 6.x | 2.7.8 | 4.0+ | 2.7.8, 3.0, 3.1, 3.2, 3.3 |
|
|
28
|
+
| 7.x | 2.7.8 | **6.0+** | 2.7.8, 3.0, 3.1, 3.2, 3.3 |
|
|
29
|
+
| 8.x | 3.2.0 | **6.0+** | 3.2, 3.3 |
|
|
30
|
+
|
|
31
|
+
**CI Coverage:** 30 Redis test combinations + 7 Valkey test combinations = **37 valid CI test jobs** covering all supported Ruby, Sidekiq, and Redis/Valkey version combinations.
|
|
32
|
+
|
|
33
|
+
### Redis and Valkey Support
|
|
34
|
+
|
|
35
|
+
This gem works with both Redis and Valkey (a Redis-compatible alternative). Valkey is a high-performance data store that maintains protocol compatibility with Redis, making it a drop-in replacement for most Redis use cases.
|
|
36
|
+
|
|
5
37
|
## Installation
|
|
6
38
|
|
|
7
39
|
Add the following to your application's Gemfile:
|
|
@@ -13,12 +45,16 @@ gem 'dogstatsd-ruby' # optional
|
|
|
13
45
|
|
|
14
46
|
And then execute:
|
|
15
47
|
|
|
16
|
-
|
|
48
|
+
```sh
|
|
49
|
+
bundle
|
|
50
|
+
```
|
|
17
51
|
|
|
18
52
|
Or install the gem(s) yourself as:
|
|
19
53
|
|
|
20
|
-
|
|
21
|
-
|
|
54
|
+
```sh
|
|
55
|
+
gem install sidekiq-instrument
|
|
56
|
+
gem install dogstatsd-ruby # again, optional
|
|
57
|
+
```
|
|
22
58
|
|
|
23
59
|
## Usage
|
|
24
60
|
|
|
@@ -73,6 +109,7 @@ Sidekiq::Instrument::WorkerMetrics.namespace = <APP_NAME>
|
|
|
73
109
|
```
|
|
74
110
|
|
|
75
111
|
## StatsD Keys
|
|
112
|
+
|
|
76
113
|
For each job, the following metrics will be reported:
|
|
77
114
|
|
|
78
115
|
1. **shared.sidekiq._queue_._job_.schedule**: counter incremented each time a
|
|
@@ -97,13 +134,16 @@ The metric names can be changed by overriding the `statsd_metric_name`
|
|
|
97
134
|
method in your worker classes.
|
|
98
135
|
|
|
99
136
|
For each queue, the following metrics will be reported:
|
|
137
|
+
|
|
100
138
|
1. **shared.sidekiq._queue_.size**: gauge of how many jobs are in the queue
|
|
101
139
|
2. **shared.sidekiq._queue_.latency**: gauge of how long the oldest job has been in the queue
|
|
102
140
|
|
|
103
141
|
For each worker, the following metrics and tags will be reported:
|
|
142
|
+
|
|
104
143
|
1. **sidekiq.worker_metrics.in_queue.#{key}**: number of jobs "in queue" per worker, uses redis to track increment/decrement (**this metric is currently inaccurate**)
|
|
105
144
|
|
|
106
145
|
## DogStatsD Keys
|
|
146
|
+
|
|
107
147
|
For each job, the following metrics and tags will be reported:
|
|
108
148
|
|
|
109
149
|
1. **sidekiq.schedule (tags: {queue: _queue_, worker: _job_})**: counter incremented each time a
|
|
@@ -125,10 +165,12 @@ will have a `.retry` appended:
|
|
|
125
165
|
2. **sidekiq.dequeue.retry (tags: {queue: _queue_, worker: _job_})**
|
|
126
166
|
|
|
127
167
|
For each queue, the following metrics and tags will be reported:
|
|
168
|
+
|
|
128
169
|
1. **sidekiq.queue.size (tags: {queue: _queue_})**: gauge of how many jobs are in the queue
|
|
129
170
|
2. **sidekiq.queue.latency (tags: {queue: _queue_})**: gauge of how long the oldest job has been in the queue
|
|
130
171
|
|
|
131
172
|
For each worker, the following metrics and tags will be reported:
|
|
173
|
+
|
|
132
174
|
1. **sidekiq.worker_metrics.in_queue.#{key}**: number of jobs "in queue" per worker, uses redis to track increment/decrement (**this metric is currently inaccurate**)
|
|
133
175
|
|
|
134
176
|
## Worker
|
|
@@ -159,18 +201,19 @@ You can schedule this however you see fit. A simple way is to use [sidekiq-sched
|
|
|
159
201
|
|
|
160
202
|
## Development
|
|
161
203
|
|
|
204
|
+
**Note:** Development requires Ruby 2.7.8 or higher. The recommended Ruby version is 3.3.
|
|
205
|
+
|
|
162
206
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
|
163
207
|
|
|
164
208
|
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 tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
|
165
209
|
|
|
166
210
|
## Contributing
|
|
167
211
|
|
|
168
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/enova/sidekiq-instrument
|
|
169
|
-
|
|
212
|
+
Bug reports and pull requests are welcome on GitHub at <https://github.com/enova/sidekiq-instrument>.
|
|
170
213
|
|
|
171
214
|
## License
|
|
172
215
|
|
|
173
|
-
The gem is available as open source under the terms of the [MIT License](
|
|
216
|
+
The gem is available as open source under the terms of the [MIT License](LICENSE.txt).
|
|
174
217
|
|
|
175
218
|
[statsd-instrument]: https://github.com/Shopify/statsd-instrument
|
|
176
219
|
[sidekiq-scheduler]: https://github.com/moove-it/sidekiq-scheduler
|
data/TESTING.md
ADDED
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# Testing Strategy
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
This gem supports Sidekiq versions 4.2 through 8.x, which span a major transition in Redis client libraries:
|
|
6
|
+
- **Sidekiq 4.x-6.x**: Uses `redis` gem 3.x-4.x with classic API
|
|
7
|
+
- **Sidekiq 7.x+**: Uses `redis` gem 5.x + `redis-client` gem with new connection pooling
|
|
8
|
+
|
|
9
|
+
## Testing Approach
|
|
10
|
+
|
|
11
|
+
### Automatic Redis Detection
|
|
12
|
+
|
|
13
|
+
The test suite **automatically detects** whether a real Redis server is available:
|
|
14
|
+
|
|
15
|
+
1. **Real Redis Available (CI and local with Redis)**:
|
|
16
|
+
- Uses actual Redis connection via `Sidekiq.configure_client/server`
|
|
17
|
+
- Tests the **real** Sidekiq + Redis code paths
|
|
18
|
+
- Verifies actual production behavior
|
|
19
|
+
- All 48 tests pass ✅
|
|
20
|
+
|
|
21
|
+
2. **No Redis Available (local development)**:
|
|
22
|
+
- Falls back to `mock_redis`
|
|
23
|
+
- Stubs `Sidekiq::Stats`, `Sidekiq::Workers`, and `Sidekiq::Queue`
|
|
24
|
+
- Tests still run, but with mocked Redis behavior
|
|
25
|
+
- Some worker stats tests may fail (expected with mocks)
|
|
26
|
+
|
|
27
|
+
### Why This Hybrid Approach?
|
|
28
|
+
|
|
29
|
+
**Real Redis (preferred)**:
|
|
30
|
+
- ✅ Tests actual production code paths
|
|
31
|
+
- ✅ Verifies Sidekiq 4.2-8.x compatibility with real Redis
|
|
32
|
+
- ✅ CI always uses real Redis (via GitHub Actions)
|
|
33
|
+
- ✅ Catches real integration issues
|
|
34
|
+
|
|
35
|
+
**Mock Redis (fallback)**:
|
|
36
|
+
- ✅ Allows local development without Redis dependency
|
|
37
|
+
- ✅ Fast test execution
|
|
38
|
+
- ✅ Works across all Sidekiq versions
|
|
39
|
+
- ⚠️ Doesn't test actual Redis interactions
|
|
40
|
+
- ⚠️ Some tests may fail (mock limitations)
|
|
41
|
+
|
|
42
|
+
### What We Test
|
|
43
|
+
|
|
44
|
+
- ✅ Middleware correctly intercepts Sidekiq operations
|
|
45
|
+
- ✅ Metrics are sent to StatsD and DogStatsD with correct values
|
|
46
|
+
- ✅ Worker metrics are tracked and reported
|
|
47
|
+
- ✅ Queue statistics are gathered and reported
|
|
48
|
+
- ✅ Error handling works correctly
|
|
49
|
+
|
|
50
|
+
### What We Don't Test
|
|
51
|
+
|
|
52
|
+
- ❌ Actual Redis read/write operations
|
|
53
|
+
- ❌ Sidekiq's internal Redis data structures
|
|
54
|
+
- ❌ Network connectivity to Redis
|
|
55
|
+
|
|
56
|
+
This is appropriate because **we're testing instrumentation, not Sidekiq itself**.
|
|
57
|
+
|
|
58
|
+
## Running Tests
|
|
59
|
+
|
|
60
|
+
### With Real Redis (Recommended)
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
# Start Redis server (if not already running)
|
|
64
|
+
redis-server --daemonize yes
|
|
65
|
+
|
|
66
|
+
# Run tests - will automatically detect and use Redis
|
|
67
|
+
bundle exec rake
|
|
68
|
+
|
|
69
|
+
# Or run specific test file
|
|
70
|
+
bundle exec rspec spec/sidekiq-instrument/worker_spec.rb
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Without Redis (Mock Mode)
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
# Stop Redis if running
|
|
77
|
+
redis-cli shutdown
|
|
78
|
+
|
|
79
|
+
# Run tests - will automatically use mock_redis
|
|
80
|
+
bundle exec rake
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Force Real or Mock Redis
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# Force real Redis (fails if Redis not available)
|
|
87
|
+
USE_REAL_REDIS=true bundle exec rspec
|
|
88
|
+
|
|
89
|
+
# Force mock Redis (even if Redis is available)
|
|
90
|
+
USE_REAL_REDIS=false bundle exec rspec
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Testing with Different Sidekiq Versions
|
|
94
|
+
|
|
95
|
+
The test suite automatically adapts to the installed Sidekiq version. To test against a specific Sidekiq version:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
# Test with Sidekiq 6.x
|
|
99
|
+
echo "gem 'sidekiq', '~> 6.5'" > Gemfile.test
|
|
100
|
+
bundle install --gemfile=Gemfile.test
|
|
101
|
+
BUNDLE_GEMFILE=Gemfile.test bundle exec rspec
|
|
102
|
+
|
|
103
|
+
# Test with Sidekiq 7.x
|
|
104
|
+
echo "gem 'sidekiq', '~> 7.0'" > Gemfile.test
|
|
105
|
+
bundle install --gemfile=Gemfile.test
|
|
106
|
+
BUNDLE_GEMFILE=Gemfile.test bundle exec rspec
|
|
107
|
+
|
|
108
|
+
# Test with Sidekiq 8.x (current)
|
|
109
|
+
bundle exec rspec
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
**Note**: Sidekiq 7.x+ requires a `Sidekiq[:key]` compatibility shim which is included in `spec_helper.rb`.
|
|
113
|
+
|
|
114
|
+
## CI Testing Matrix
|
|
115
|
+
|
|
116
|
+
GitHub Actions CI **always uses real Redis** and tests against:
|
|
117
|
+
- **Ruby versions**: 2.7.8, 3.0, 3.1, 3.2, 3.3
|
|
118
|
+
- **Redis versions**: 4, 5, 6, 7, 8
|
|
119
|
+
- **Sidekiq versions**: 4, 5, 6, 7, 8
|
|
120
|
+
- **Valkey** (Redis fork) versions: 7, 8
|
|
121
|
+
|
|
122
|
+
This comprehensive matrix ensures compatibility across all supported combinations. The CI workflow:
|
|
123
|
+
1. Starts a real Redis/Valkey server
|
|
124
|
+
2. Tests automatically detect and use the real Redis connection
|
|
125
|
+
3. All 48 tests must pass for each combination
|
|
126
|
+
|
|
127
|
+
## Alternative Testing Strategies
|
|
128
|
+
|
|
129
|
+
If you need to test actual Redis integration:
|
|
130
|
+
|
|
131
|
+
### 1. Use Real Redis in Tests
|
|
132
|
+
|
|
133
|
+
```ruby
|
|
134
|
+
# Requires Redis server running
|
|
135
|
+
system("redis-server --daemonize yes --port 6380")
|
|
136
|
+
ENV['REDIS_URL'] = 'redis://localhost:6380'
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### 2. Use Testcontainers (for CI)
|
|
140
|
+
|
|
141
|
+
```ruby
|
|
142
|
+
gem 'testcontainers-redis'
|
|
143
|
+
|
|
144
|
+
RSpec.configure do |config|
|
|
145
|
+
config.before(:suite) do
|
|
146
|
+
@redis = Testcontainers::RedisContainer.new
|
|
147
|
+
@redis.start
|
|
148
|
+
ENV['REDIS_URL'] = @redis.connection_url
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### 3. Use Docker Compose
|
|
154
|
+
|
|
155
|
+
```yaml
|
|
156
|
+
# docker-compose.test.yml
|
|
157
|
+
version: '3'
|
|
158
|
+
services:
|
|
159
|
+
redis:
|
|
160
|
+
image: redis:7-alpine
|
|
161
|
+
ports:
|
|
162
|
+
- "6379:6379"
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Known Limitations
|
|
166
|
+
|
|
167
|
+
### With Mock Redis
|
|
168
|
+
- Some `Sidekiq::Stats`, `Sidekiq::Workers`, and `Sidekiq::Queue` tests may fail
|
|
169
|
+
- Mock doesn't fully support `redis-client` API (Sidekiq 7+/8+)
|
|
170
|
+
- Worker metrics tests may not work correctly
|
|
171
|
+
- **Expected failures**: ~10 tests when using mocks
|
|
172
|
+
|
|
173
|
+
### With Real Redis
|
|
174
|
+
- Requires Redis server running (automatically detected)
|
|
175
|
+
- Tests modify Redis data (cleared before each test)
|
|
176
|
+
- **All 48 tests pass** ✅
|
|
177
|
+
|
|
178
|
+
These limitations only affect **test execution**, not the actual gem functionality in production.
|
|
@@ -22,11 +22,11 @@ module Sidekiq::Instrument
|
|
|
22
22
|
# - once when it is scheduled, with job['at'] key
|
|
23
23
|
# - once when it is enqueued, without job['at'] key
|
|
24
24
|
if job['at'].present?
|
|
25
|
-
Statter.statsd.increment(metric_name(class_instance, 'schedule'))
|
|
25
|
+
Statter.statsd.increment(metric_name(class_instance, job, 'schedule'))
|
|
26
26
|
Statter.dogstatsd&.increment('sidekiq.schedule', worker_dog_options(class_instance, job))
|
|
27
27
|
else
|
|
28
28
|
WorkerMetrics.trace_workers_increment_counter(klass.name.underscore)
|
|
29
|
-
Statter.statsd.increment(metric_name(class_instance, 'enqueue'))
|
|
29
|
+
Statter.statsd.increment(metric_name(class_instance, job, 'enqueue'))
|
|
30
30
|
Statter.dogstatsd&.increment('sidekiq.enqueue', worker_dog_options(class_instance, job))
|
|
31
31
|
end
|
|
32
32
|
|
|
@@ -10,15 +10,15 @@ module Sidekiq::Instrument
|
|
|
10
10
|
def call(worker, job, _queue, &block)
|
|
11
11
|
dequeue_string = is_retry(job) ? 'dequeue.retry' : 'dequeue'
|
|
12
12
|
Statter.dogstatsd&.increment("sidekiq.#{dequeue_string}", worker_dog_options(worker, job))
|
|
13
|
-
Statter.statsd.increment(metric_name(worker, dequeue_string))
|
|
13
|
+
Statter.statsd.increment(metric_name(worker, job, dequeue_string))
|
|
14
14
|
|
|
15
15
|
start_time = Time.now
|
|
16
|
-
yield
|
|
16
|
+
yield
|
|
17
17
|
execution_time_ms = (Time.now - start_time) * 1000
|
|
18
18
|
Statter.dogstatsd&.timing('sidekiq.runtime', execution_time_ms, worker_dog_options(worker, job))
|
|
19
|
-
Statter.statsd.measure(metric_name(worker, 'runtime'), execution_time_ms)
|
|
19
|
+
Statter.statsd.measure(metric_name(worker, job, 'runtime'), execution_time_ms)
|
|
20
20
|
Statter.dogstatsd&.increment('sidekiq.success', worker_dog_options(worker, job))
|
|
21
|
-
Statter.statsd.increment(metric_name(worker, 'success'))
|
|
21
|
+
Statter.statsd.increment(metric_name(worker, job, 'success'))
|
|
22
22
|
rescue Exception => e
|
|
23
23
|
dd_options = worker_dog_options(worker, job)
|
|
24
24
|
dd_options[:tags] << "error:#{e.class.name}"
|
|
@@ -30,7 +30,7 @@ module Sidekiq::Instrument
|
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
Statter.dogstatsd&.increment('sidekiq.error', dd_options)
|
|
33
|
-
Statter.statsd.increment(metric_name(worker, 'error'))
|
|
33
|
+
Statter.statsd.increment(metric_name(worker, job, 'error'))
|
|
34
34
|
|
|
35
35
|
raise e
|
|
36
36
|
ensure
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
module Sidekiq::Instrument
|
|
2
2
|
module MetricNames
|
|
3
|
-
def metric_name(worker, event)
|
|
3
|
+
def metric_name(worker, job, event)
|
|
4
4
|
if worker.respond_to?(:statsd_metric_name)
|
|
5
5
|
worker.send(:statsd_metric_name, event)
|
|
6
6
|
else
|
|
7
|
-
"shared.sidekiq.#{queue_name(
|
|
7
|
+
"shared.sidekiq.#{queue_name(job)}.#{class_name(worker)}.#{event}"
|
|
8
8
|
end
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
def worker_dog_options(worker, job)
|
|
12
12
|
{
|
|
13
13
|
tags: [
|
|
14
|
-
"queue:#{queue_name(
|
|
14
|
+
"queue:#{queue_name(job)}",
|
|
15
15
|
"worker:#{underscore(class_name(worker))}"
|
|
16
16
|
].concat(job.fetch('tags', []))
|
|
17
17
|
}
|
|
@@ -31,8 +31,8 @@ module Sidekiq::Instrument
|
|
|
31
31
|
|
|
32
32
|
private
|
|
33
33
|
|
|
34
|
-
def queue_name(
|
|
35
|
-
|
|
34
|
+
def queue_name(job)
|
|
35
|
+
job['queue']
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
def class_name(worker)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'redis'
|
|
4
|
-
|
|
4
|
+
|
|
5
5
|
module Sidekiq
|
|
6
6
|
module Instrument
|
|
7
7
|
# Stores worker count with a key sidekiq_instrument_trace_workers:#{namespace}:in_queue
|
|
@@ -46,7 +46,10 @@ module Sidekiq
|
|
|
46
46
|
def workers_in_queue
|
|
47
47
|
return unless enabled?
|
|
48
48
|
Sidekiq.redis do |redis|
|
|
49
|
-
redis.hgetall(worker_metric_name)
|
|
49
|
+
result = redis.hgetall(worker_metric_name)
|
|
50
|
+
# redis gem 5.x returns an Array ["key", "value", ...], redis 4.x returns a Hash
|
|
51
|
+
result = Hash[*result] if result.is_a?(Array)
|
|
52
|
+
result.transform_values(&:to_i)
|
|
50
53
|
end
|
|
51
54
|
end
|
|
52
55
|
|
data/sidekiq-instrument.gemspec
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
5
|
require 'sidekiq/instrument/version'
|
|
5
6
|
|
|
@@ -13,20 +14,26 @@ Gem::Specification.new do |spec|
|
|
|
13
14
|
spec.homepage = 'https://github.com/enova/sidekiq-instrument'
|
|
14
15
|
spec.license = 'MIT'
|
|
15
16
|
|
|
17
|
+
spec.required_ruby_version = '>= 2.7.8'
|
|
18
|
+
|
|
16
19
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
17
20
|
spec.require_paths = ['lib']
|
|
18
21
|
|
|
19
|
-
spec.add_dependency 'sidekiq', '>= 4.2'
|
|
22
|
+
spec.add_dependency 'sidekiq', '>= 4.2'
|
|
23
|
+
spec.add_dependency 'redis', '>= 3.2' # Required by our code (worker_metrics.rb)
|
|
20
24
|
spec.add_dependency 'statsd-instrument', '>= 2.0.4'
|
|
21
|
-
spec.add_dependency 'dogstatsd-ruby', '
|
|
22
|
-
spec.add_dependency 'activesupport', '>= 5.1'
|
|
23
|
-
|
|
25
|
+
spec.add_dependency 'dogstatsd-ruby', '>= 5.5'
|
|
26
|
+
spec.add_dependency 'activesupport', '>= 5.1'
|
|
27
|
+
# Note: redis-client is pulled in by Sidekiq 7+, no need to specify here
|
|
24
28
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
spec.add_development_dependency '
|
|
29
|
-
spec.add_development_dependency '
|
|
29
|
+
# Note: bundler is not listed as a development dependency because it's
|
|
30
|
+
# already provided by the Ruby environment. Different Ruby versions require
|
|
31
|
+
# different bundler versions (2.x for Ruby 2.7, 3.x for Ruby 3.0-3.1, 4.x for Ruby 3.2+)
|
|
32
|
+
spec.add_development_dependency 'rake'
|
|
33
|
+
spec.add_development_dependency 'rspec'
|
|
34
|
+
spec.add_development_dependency 'rubocop'
|
|
35
|
+
spec.add_development_dependency 'pry-byebug'
|
|
30
36
|
spec.add_development_dependency 'simplecov'
|
|
31
37
|
spec.add_development_dependency 'simplecov-cobertura'
|
|
38
|
+
spec.add_development_dependency 'mock_redis'
|
|
32
39
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sidekiq-instrument
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.9.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Loan Application Services
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2025-
|
|
11
|
+
date: 2025-12-18 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: sidekiq
|
|
@@ -17,9 +17,6 @@ dependencies:
|
|
|
17
17
|
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
19
|
version: '4.2'
|
|
20
|
-
- - "<"
|
|
21
|
-
- !ruby/object:Gem::Version
|
|
22
|
-
version: '7'
|
|
23
20
|
type: :runtime
|
|
24
21
|
prerelease: false
|
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -27,149 +24,134 @@ dependencies:
|
|
|
27
24
|
- - ">="
|
|
28
25
|
- !ruby/object:Gem::Version
|
|
29
26
|
version: '4.2'
|
|
30
|
-
- - "<"
|
|
31
|
-
- !ruby/object:Gem::Version
|
|
32
|
-
version: '7'
|
|
33
27
|
- !ruby/object:Gem::Dependency
|
|
34
|
-
name:
|
|
28
|
+
name: redis
|
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|
|
36
30
|
requirements:
|
|
37
31
|
- - ">="
|
|
38
32
|
- !ruby/object:Gem::Version
|
|
39
|
-
version: 2
|
|
33
|
+
version: '3.2'
|
|
40
34
|
type: :runtime
|
|
41
35
|
prerelease: false
|
|
42
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
43
37
|
requirements:
|
|
44
38
|
- - ">="
|
|
45
39
|
- !ruby/object:Gem::Version
|
|
46
|
-
version: 2
|
|
40
|
+
version: '3.2'
|
|
47
41
|
- !ruby/object:Gem::Dependency
|
|
48
|
-
name:
|
|
42
|
+
name: statsd-instrument
|
|
49
43
|
requirement: !ruby/object:Gem::Requirement
|
|
50
44
|
requirements:
|
|
51
|
-
- - "
|
|
45
|
+
- - ">="
|
|
52
46
|
- !ruby/object:Gem::Version
|
|
53
|
-
version:
|
|
47
|
+
version: 2.0.4
|
|
54
48
|
type: :runtime
|
|
55
49
|
prerelease: false
|
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
57
51
|
requirements:
|
|
58
|
-
- - "
|
|
52
|
+
- - ">="
|
|
59
53
|
- !ruby/object:Gem::Version
|
|
60
|
-
version:
|
|
54
|
+
version: 2.0.4
|
|
61
55
|
- !ruby/object:Gem::Dependency
|
|
62
|
-
name:
|
|
56
|
+
name: dogstatsd-ruby
|
|
63
57
|
requirement: !ruby/object:Gem::Requirement
|
|
64
58
|
requirements:
|
|
65
59
|
- - ">="
|
|
66
60
|
- !ruby/object:Gem::Version
|
|
67
|
-
version: '5.
|
|
68
|
-
- - "<"
|
|
69
|
-
- !ruby/object:Gem::Version
|
|
70
|
-
version: '7.2'
|
|
61
|
+
version: '5.5'
|
|
71
62
|
type: :runtime
|
|
72
63
|
prerelease: false
|
|
73
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
74
65
|
requirements:
|
|
75
66
|
- - ">="
|
|
76
67
|
- !ruby/object:Gem::Version
|
|
77
|
-
version: '5.
|
|
78
|
-
- - "<"
|
|
79
|
-
- !ruby/object:Gem::Version
|
|
80
|
-
version: '7.2'
|
|
68
|
+
version: '5.5'
|
|
81
69
|
- !ruby/object:Gem::Dependency
|
|
82
|
-
name:
|
|
70
|
+
name: activesupport
|
|
83
71
|
requirement: !ruby/object:Gem::Requirement
|
|
84
72
|
requirements:
|
|
85
73
|
- - ">="
|
|
86
74
|
- !ruby/object:Gem::Version
|
|
87
|
-
version:
|
|
75
|
+
version: '5.1'
|
|
88
76
|
type: :runtime
|
|
89
77
|
prerelease: false
|
|
90
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
91
79
|
requirements:
|
|
92
80
|
- - ">="
|
|
93
81
|
- !ruby/object:Gem::Version
|
|
94
|
-
version:
|
|
82
|
+
version: '5.1'
|
|
95
83
|
- !ruby/object:Gem::Dependency
|
|
96
|
-
name:
|
|
84
|
+
name: rake
|
|
97
85
|
requirement: !ruby/object:Gem::Requirement
|
|
98
86
|
requirements:
|
|
99
|
-
- - "~>"
|
|
100
|
-
- !ruby/object:Gem::Version
|
|
101
|
-
version: '2.0'
|
|
102
87
|
- - ">="
|
|
103
88
|
- !ruby/object:Gem::Version
|
|
104
|
-
version:
|
|
89
|
+
version: '0'
|
|
105
90
|
type: :development
|
|
106
91
|
prerelease: false
|
|
107
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
108
93
|
requirements:
|
|
109
|
-
- - "~>"
|
|
110
|
-
- !ruby/object:Gem::Version
|
|
111
|
-
version: '2.0'
|
|
112
94
|
- - ">="
|
|
113
95
|
- !ruby/object:Gem::Version
|
|
114
|
-
version:
|
|
96
|
+
version: '0'
|
|
115
97
|
- !ruby/object:Gem::Dependency
|
|
116
|
-
name:
|
|
98
|
+
name: rspec
|
|
117
99
|
requirement: !ruby/object:Gem::Requirement
|
|
118
100
|
requirements:
|
|
119
|
-
- - "
|
|
101
|
+
- - ">="
|
|
120
102
|
- !ruby/object:Gem::Version
|
|
121
|
-
version: '
|
|
103
|
+
version: '0'
|
|
122
104
|
type: :development
|
|
123
105
|
prerelease: false
|
|
124
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
125
107
|
requirements:
|
|
126
|
-
- - "
|
|
108
|
+
- - ">="
|
|
127
109
|
- !ruby/object:Gem::Version
|
|
128
|
-
version: '
|
|
110
|
+
version: '0'
|
|
129
111
|
- !ruby/object:Gem::Dependency
|
|
130
|
-
name:
|
|
112
|
+
name: rubocop
|
|
131
113
|
requirement: !ruby/object:Gem::Requirement
|
|
132
114
|
requirements:
|
|
133
|
-
- - "
|
|
115
|
+
- - ">="
|
|
134
116
|
- !ruby/object:Gem::Version
|
|
135
|
-
version: '
|
|
117
|
+
version: '0'
|
|
136
118
|
type: :development
|
|
137
119
|
prerelease: false
|
|
138
120
|
version_requirements: !ruby/object:Gem::Requirement
|
|
139
121
|
requirements:
|
|
140
|
-
- - "
|
|
122
|
+
- - ">="
|
|
141
123
|
- !ruby/object:Gem::Version
|
|
142
|
-
version: '
|
|
124
|
+
version: '0'
|
|
143
125
|
- !ruby/object:Gem::Dependency
|
|
144
|
-
name:
|
|
126
|
+
name: pry-byebug
|
|
145
127
|
requirement: !ruby/object:Gem::Requirement
|
|
146
128
|
requirements:
|
|
147
|
-
- - "
|
|
129
|
+
- - ">="
|
|
148
130
|
- !ruby/object:Gem::Version
|
|
149
|
-
version: '
|
|
131
|
+
version: '0'
|
|
150
132
|
type: :development
|
|
151
133
|
prerelease: false
|
|
152
134
|
version_requirements: !ruby/object:Gem::Requirement
|
|
153
135
|
requirements:
|
|
154
|
-
- - "
|
|
136
|
+
- - ">="
|
|
155
137
|
- !ruby/object:Gem::Version
|
|
156
|
-
version: '
|
|
138
|
+
version: '0'
|
|
157
139
|
- !ruby/object:Gem::Dependency
|
|
158
|
-
name:
|
|
140
|
+
name: simplecov
|
|
159
141
|
requirement: !ruby/object:Gem::Requirement
|
|
160
142
|
requirements:
|
|
161
|
-
- - "
|
|
143
|
+
- - ">="
|
|
162
144
|
- !ruby/object:Gem::Version
|
|
163
|
-
version: '
|
|
145
|
+
version: '0'
|
|
164
146
|
type: :development
|
|
165
147
|
prerelease: false
|
|
166
148
|
version_requirements: !ruby/object:Gem::Requirement
|
|
167
149
|
requirements:
|
|
168
|
-
- - "
|
|
150
|
+
- - ">="
|
|
169
151
|
- !ruby/object:Gem::Version
|
|
170
|
-
version: '
|
|
152
|
+
version: '0'
|
|
171
153
|
- !ruby/object:Gem::Dependency
|
|
172
|
-
name: simplecov
|
|
154
|
+
name: simplecov-cobertura
|
|
173
155
|
requirement: !ruby/object:Gem::Requirement
|
|
174
156
|
requirements:
|
|
175
157
|
- - ">="
|
|
@@ -183,7 +165,7 @@ dependencies:
|
|
|
183
165
|
- !ruby/object:Gem::Version
|
|
184
166
|
version: '0'
|
|
185
167
|
- !ruby/object:Gem::Dependency
|
|
186
|
-
name:
|
|
168
|
+
name: mock_redis
|
|
187
169
|
requirement: !ruby/object:Gem::Requirement
|
|
188
170
|
requirements:
|
|
189
171
|
- - ">="
|
|
@@ -206,11 +188,14 @@ files:
|
|
|
206
188
|
- ".github/workflows/ci.yml"
|
|
207
189
|
- ".gitignore"
|
|
208
190
|
- ".rspec"
|
|
191
|
+
- ".ruby-version"
|
|
209
192
|
- ".simplecov"
|
|
193
|
+
- CHANGELOG.md
|
|
210
194
|
- Gemfile
|
|
211
195
|
- LICENSE.txt
|
|
212
196
|
- README.md
|
|
213
197
|
- Rakefile
|
|
198
|
+
- TESTING.md
|
|
214
199
|
- bin/console
|
|
215
200
|
- bin/setup
|
|
216
201
|
- lib/sidekiq/instrument.rb
|
|
@@ -235,14 +220,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
235
220
|
requirements:
|
|
236
221
|
- - ">="
|
|
237
222
|
- !ruby/object:Gem::Version
|
|
238
|
-
version:
|
|
223
|
+
version: 2.7.8
|
|
239
224
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
240
225
|
requirements:
|
|
241
226
|
- - ">="
|
|
242
227
|
- !ruby/object:Gem::Version
|
|
243
228
|
version: '0'
|
|
244
229
|
requirements: []
|
|
245
|
-
rubygems_version: 3.
|
|
230
|
+
rubygems_version: 3.5.22
|
|
246
231
|
signing_key:
|
|
247
232
|
specification_version: 4
|
|
248
233
|
summary: StatsD & DogStatsD Instrumentation for Sidekiq
|