sidekiq-instrument 0.5.6 → 0.6.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: 72c5cdbcff6df0e0af5fafd832a738c94ca639713fe370c3543c9b01907270c6
4
- data.tar.gz: 7a785e4013569f3857f404fcf6cf38656c7c0eae57e20d8154d7d9c322ddb27b
3
+ metadata.gz: 06c38373f208fd6ec2ed7d3ab01f8cd763d71cc5c44a1684eeaebc824eed489d
4
+ data.tar.gz: 5207e4868b8190e4a1501977a1736265c501b179fdb66bc0945da9128f3aff66
5
5
  SHA512:
6
- metadata.gz: b671f7aee1e48345c8e8eda768aef308782c37bc3990075a0e027fc2c3d2eb0ef9b216df928813c592db3d9d0a32c49062c145a9aff35321cd4e4e1bb6fea337
7
- data.tar.gz: 6906d370408c343e8cc283fcc61a4cf5315b6ead830108a88d27608da8c244315a790248f5301d7d448664625b02325d741ecd340d861d7cef0935066aad13d8
6
+ metadata.gz: '0380968a8a88a122fea11c487126ce03094a02db41749c663966a2317aa0892a96fd966d373160477a9855e52421bb7d7c2892dcc42ea78f27ed1a7c42704fd1'
7
+ data.tar.gz: a89416da29a199afdb5930a62ad2bb479bdccac9b4a4af378094e53d3139d41a867f0af69920a03096d43e7ed7f2e6d9145c70c9a1fc4a34e9836506dcfa0656
@@ -15,7 +15,7 @@ jobs:
15
15
  strategy:
16
16
  matrix:
17
17
  ruby-version: [2.6, 2.7, 3.0]
18
- redis-version: [7]
18
+ redis-version: [4, 5, 6, 7]
19
19
 
20
20
  steps:
21
21
  - name: Checkout project
data/README.md CHANGED
@@ -67,6 +67,9 @@ Sidekiq.configure_client do |config|
67
67
  chain.add Sidekiq::Instrument::ClientMiddleware
68
68
  end
69
69
  end
70
+
71
+ Sidekiq::Instrument::WorkerMetrics.enabled = true # Set true to enable worker metrics
72
+ Sidekiq::Instrument::WorkerMetrics.namespace = <APP_NAME>
70
73
  ```
71
74
 
72
75
  ## StatsD Keys
@@ -78,7 +81,7 @@ For each job, the following metrics will be reported:
78
81
  worker begins performing a job.
79
82
  3. **shared.sidekiq._queue_._job_.runtime**: timer of the total time spent
80
83
  in `perform`, in milliseconds.
81
- 3. **shared.sidekiq._queue_._job_.error**: counter incremented each time a
84
+ 4. **shared.sidekiq._queue_._job_.error**: counter incremented each time a
82
85
  job fails.
83
86
 
84
87
  The metric names can be changed by overriding the `statsd_metric_name`
@@ -86,7 +89,10 @@ method in your worker classes.
86
89
 
87
90
  For each queue, the following metrics will be reported:
88
91
  1. **shared.sidekiq._queue_.size**: gauge of how many jobs are in the queue
89
- 1. **shared.sidekiq._queue_.latency**: gauge of how long the oldest job has been in the queue
92
+ 2. **shared.sidekiq._queue_.latency**: gauge of how long the oldest job has been in the queue
93
+
94
+ For each worker, the following metrics and tags will be reported:
95
+ 1. **sidekiq.worker_metrics.inqueue.#{key}**: number of jobs "in queue" per worker, uses redis to track increment/decrement
90
96
 
91
97
  ## DogStatsD Keys
92
98
  For each job, the following metrics and tags will be reported:
@@ -97,12 +103,15 @@ For each job, the following metrics and tags will be reported:
97
103
  worker begins performing a job.
98
104
  3. **sidekiq.runtime (tags: {queue: _queue_, worker: _job_})**: timer of the total time spent
99
105
  in `perform`, in milliseconds.
100
- 3. **sidekiq.error (tags: {queue: _queue_, worker: _job_})**: counter incremented each time a
106
+ 4. **sidekiq.error (tags: {queue: _queue_, worker: _job_})**: counter incremented each time a
101
107
  job fails.
102
108
 
103
109
  For each queue, the following metrics and tags will be reported:
104
110
  1. **sidekiq.queue.size (tags: {queue: _queue_})**: gauge of how many jobs are in the queue
105
- 1. **sidekiq.queue.latency (tags: {queue: _queue_})**: gauge of how long the oldest job has been in the queue
111
+ 2. **sidekiq.queue.latency (tags: {queue: _queue_})**: gauge of how long the oldest job has been in the queue
112
+
113
+ For each worker, the following metrics and tags will be reported:
114
+ 1. **sidekiq.worker_metrics.inqueue.#{key}**: number of jobs "in queue" per worker, uses redis to track increment/decrement
106
115
 
107
116
  ## Worker
108
117
  There is a worker, `Sidekiq::Instrument::Worker`, that submits gauges
@@ -1,5 +1,5 @@
1
1
  module Sidekiq
2
2
  module Instrument
3
- VERSION = '0.5.6'
3
+ VERSION = '0.6.0'
4
4
  end
5
5
  end
@@ -64,8 +64,8 @@ module Sidekiq::Instrument
64
64
  return unless WorkerMetrics.enabled
65
65
 
66
66
  WorkerMetrics.workers_in_queue.each do |key, value|
67
- Statter.statsd.gauge("shared.sidekiq.trace.inqueue.#{key}", value)
68
- Statter.dogstatsd&.gauge("shared.sidekiq.trace.inqueue.#{key}", value)
67
+ Statter.statsd.gauge("shared.sidekiq.worker_metrics.inqueue.#{key}", value)
68
+ Statter.dogstatsd&.gauge("shared.sidekiq.worker_metrics.inqueue.#{key}", value)
69
69
  end
70
70
  end
71
71
  end
@@ -7,93 +7,46 @@ module Sidekiq
7
7
  # Stores worker count with a key sidekiq_instrument_trace_workers:#{namespace}:in_queue
8
8
  # Values are hash having keys as worker names.
9
9
  class WorkerMetrics
10
- class_attribute :enabled, :namespace, :redis_config
11
-
12
- class_attribute :redis_password
10
+ class_attribute :enabled, :namespace
13
11
 
14
12
  class << self
15
- def redis_pool_user
16
- @redis_pool_user ||= begin
17
- redis_client_config = RedisClient.config(**redis_config)
18
- @redis = redis_client_config.new_pool(
19
- timeout: 0.5, size: Integer(ENV.fetch('RAILS_MAX_THREADS', 5))
20
- )
21
- end
22
- end
23
-
24
- def reset_redis
25
- @redis = nil
26
- end
27
-
28
13
  def trace_workers_increment_counter(klass_name, sidekiq_redis_pool_user)
29
14
  return unless enabled?
30
15
 
31
- if redis_config?
32
- redis_pool_user.with do |redis|
33
- redis.call 'HINCRBY', worker_metric_name, klass_name, 1
34
- end
35
- else
36
- sidekiq_redis_pool_user.with do |redis|
37
- redis.hincrby worker_metric_name, klass_name, 1
38
- end
16
+ Sidekiq.redis do |redis|
17
+ redis.hincrby(worker_metric_name, klass_name, 1)
39
18
  end
40
19
  end
41
20
 
42
21
  def trace_workers_decrement_counter(klass_name)
43
22
  return unless enabled?
44
23
 
45
- if redis_config?
46
- redis_pool_user.with do |redis|
47
- redis.call 'HINCRBY', worker_metric_name, klass_name, -1
48
- end
49
- else
50
- Sidekiq.redis do |redis|
51
- redis.hincrby worker_metric_name, klass_name, -1
52
- end
24
+ Sidekiq.redis do |redis|
25
+ redis.hincrby(worker_metric_name, klass_name, -1)
53
26
  end
54
27
  end
55
28
 
56
29
  def reset_counters
57
30
  return unless enabled?
58
31
 
59
- if redis_config?
60
- redis_pool_user.with do |redis|
61
- all_keys = redis.call 'HGETALL', worker_metric_name
62
- redis.call 'HDEL', worker_metric_name, all_keys.keys
63
- end
64
- else
65
- Sidekiq.redis do |redis|
66
- all_keys = redis.hgetall worker_metric_name
67
- redis.hdel worker_metric_name, all_keys.keys
68
- end
32
+ Sidekiq.redis do |redis|
33
+ all_keys = redis.hgetall(worker_metric_name)
34
+ redis.hdel(worker_metric_name, all_keys.keys)
69
35
  end
70
36
  end
71
37
 
72
38
  def reset_counter(key)
73
39
  return unless enabled?
74
40
 
75
- if redis_config?
76
- redis_pool_user.with do |redis|
77
- redis.call 'HDEL', worker_metric_name, key
78
- end
79
- else
80
- Sidekiq.redis do |redis|
81
- redis.hdel worker_metric_name, key
82
- end
41
+ Sidekiq.redis do |redis|
42
+ redis.hdel(worker_metric_name, key)
83
43
  end
84
44
  end
85
45
 
86
46
  def workers_in_queue
87
47
  return unless enabled?
88
-
89
- if redis_config?
90
- redis_pool_user.with do |redis|
91
- redis.call 'HGETALL', worker_metric_name
92
- end
93
- else
94
- Sidekiq.redis do |redis|
95
- redis.hgetall worker_metric_name
96
- end
48
+ Sidekiq.redis do |redis|
49
+ redis.hgetall(worker_metric_name)
97
50
  end
98
51
  end
99
52
 
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
20
20
  spec.add_dependency 'statsd-instrument', '>= 2.0.4'
21
21
  spec.add_dependency 'dogstatsd-ruby', '~> 5.5'
22
22
  spec.add_dependency 'activesupport', '>= 5.1', '< 7'
23
- spec.add_dependency "redis-client", ">= 0.11.0"
23
+ spec.add_dependency "redis-client", ">= 0.14.1"
24
24
 
25
25
  spec.add_development_dependency 'bundler', '~> 2.0', '>= 2.0.2'
26
26
  spec.add_development_dependency 'rake', '~> 12.0'
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.5.6
4
+ version: 0.6.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: 2023-04-04 00:00:00.000000000 Z
11
+ date: 2023-05-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sidekiq
@@ -84,14 +84,14 @@ dependencies:
84
84
  requirements:
85
85
  - - ">="
86
86
  - !ruby/object:Gem::Version
87
- version: 0.11.0
87
+ version: 0.14.1
88
88
  type: :runtime
89
89
  prerelease: false
90
90
  version_requirements: !ruby/object:Gem::Requirement
91
91
  requirements:
92
92
  - - ">="
93
93
  - !ruby/object:Gem::Version
94
- version: 0.11.0
94
+ version: 0.14.1
95
95
  - !ruby/object:Gem::Dependency
96
96
  name: bundler
97
97
  requirement: !ruby/object:Gem::Requirement