sidekiq-datadog-monitor 1.0.2 → 1.0.4

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: 5b176cbc444ad443cebef16a369d2e14782a875d83f9118448146fb6c18be0f3
4
- data.tar.gz: ebaaba9e002ece8575c8a753d8324ad48b4594e892b1863fcd473838fb8f413e
3
+ metadata.gz: 3a71de3fc86dd6e570fd38bd359dfe756309acbea31e3fcfa0279a7e416c06ef
4
+ data.tar.gz: 1d0ab44f27575be1054940a3c961303cbba36e178919b56d16f389ce22d063cd
5
5
  SHA512:
6
- metadata.gz: 7f68121956dab1ca0346db4247e21979baf5338b6d097c9d0202b712c3fe93c9bcf5fa010803c0d2f77fd8ea9d966e3eb9dc86bbcebc830feb12f63b0743a5f2
7
- data.tar.gz: 37267daf3457dd9bea4acb41e86e69088221e38ab1cdd6cb65c36d2f1230cfaccdf3e872db70f1f4dee3a2b5a319be8a37add4e83b5847750944bc05fa1dfbe4
6
+ metadata.gz: 1b14f615ffa636622043efaf6731a604487c91fcefad1d709b67dacdcedea4e529d87b347878da92d0ee058b082b22e0aa077b9adec6390c45768ab0989f5a8d
7
+ data.tar.gz: 5a796a1382a874b81da0be3e24439767549e8411ea28a442790e89505139edc09b6e0ea281ce0f8373531b311b6415a33141e05b39d6386426e1e37d0f0eda19
@@ -0,0 +1,37 @@
1
+ module Sidekiq
2
+ module Datadog
3
+ module Monitor
4
+ # Prior to Sidekiq 6.5.2 - there was no beat event that fired every couple seconds
5
+ # Following Module wraps original heartbeat method on Sidekiq::Launcher fires :beat lifecycle event
6
+ module HeartbeatPatch
7
+ def heartbeat
8
+ super
9
+ fire_beat
10
+ end
11
+
12
+ def fire_beat
13
+ return unless (listeners = Sidekiq.options[:lifecycle_events][:beat])
14
+
15
+ listeners.each { |block| block.call }
16
+ end
17
+
18
+ class << self
19
+ def apply_heartbeat_patch(sidekiq_config)
20
+ require 'sidekiq/launcher'
21
+
22
+ sidekiq_config.options[:lifecycle_events][:beat] ||= []
23
+ Sidekiq::Launcher.prepend(Sidekiq::Datadog::Monitor::HeartbeatPatch)
24
+ end
25
+
26
+ def needs_patching?(sidekiq_config)
27
+ return false unless sidekiq_config.respond_to?(:options) # Unsupported config version
28
+ return false unless sidekiq_config.options[:lifecycle_events] # No events exist, Sidekiq is too old
29
+ return false if sidekiq_config.options[:lifecycle_events][:beat] # beat event exist - no need to patch
30
+
31
+ true
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -30,7 +30,7 @@ module Sidekiq
30
30
  end
31
31
 
32
32
  def post_process_stats(process)
33
- utilization = process['busy'] / process['concurrency'].to_f
33
+ utilization = (process['busy'] / process['concurrency'].to_f * 100).round(2)
34
34
  tags = tags_builder.build(process_id: process['identity'], process_tag: process['tag'])
35
35
 
36
36
  statsd.gauge('sidekiq.process.utilization', utilization, tags: tags)
@@ -1,7 +1,7 @@
1
1
  module Sidekiq
2
2
  module Datadog
3
3
  module Monitor
4
- VERSION = '1.0.2'.freeze
4
+ VERSION = '1.0.4'.freeze
5
5
  end
6
6
  end
7
7
  end
@@ -1,6 +1,8 @@
1
+ require 'sidekiq'
1
2
  require 'datadog/statsd'
2
3
  require 'sidekiq/datadog/monitor/metrics_sender'
3
4
  require 'sidekiq/datadog/monitor/tag_builder'
5
+ require 'sidekiq/datadog/monitor/heartbeat_patch'
4
6
 
5
7
  module Sidekiq
6
8
  module Datadog
@@ -49,11 +51,12 @@ module Sidekiq
49
51
 
50
52
  def add_sidekiq_listeners
51
53
  Sidekiq.configure_server do |config|
52
- metrics_event = config.options[:lifecycle_events][:beat] ? :beat : :heartbeat
54
+ patch_sidekiq_heartbeat(config)
55
+
53
56
  config.on(:startup) do
54
57
  Sidekiq::Datadog::Monitor.initialize!
55
58
  end
56
- config.on(metrics_event) do
59
+ config.on(:beat) do
57
60
  Sidekiq::Datadog::Monitor.send_metrics
58
61
  end
59
62
  config.on(:shutdown) do
@@ -61,6 +64,12 @@ module Sidekiq
61
64
  end
62
65
  end
63
66
  end
67
+
68
+ def patch_sidekiq_heartbeat(sidekiq_config)
69
+ return unless Sidekiq::Datadog::Monitor::HeartbeatPatch.needs_patching?(sidekiq_config)
70
+
71
+ Sidekiq::Datadog::Monitor::HeartbeatPatch.apply_heartbeat_patch(sidekiq_config)
72
+ end
64
73
  end
65
74
  end
66
75
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-datadog-monitor
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - aleksa_castle
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-02-15 00:00:00.000000000 Z
11
+ date: 2023-02-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.17'
19
+ version: '2.4'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.17'
26
+ version: '2.4'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -100,14 +100,14 @@ dependencies:
100
100
  requirements:
101
101
  - - ">="
102
102
  - !ruby/object:Gem::Version
103
- version: 2.2.1
103
+ version: '5'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
- version: 2.2.1
110
+ version: '5'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: dogstatsd-ruby
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -134,6 +134,7 @@ files:
134
134
  - bin/console
135
135
  - bin/setup
136
136
  - lib/sidekiq/datadog/monitor.rb
137
+ - lib/sidekiq/datadog/monitor/heartbeat_patch.rb
137
138
  - lib/sidekiq/datadog/monitor/metrics_sender.rb
138
139
  - lib/sidekiq/datadog/monitor/tag_builder.rb
139
140
  - lib/sidekiq/datadog/monitor/version.rb