sidekiq-datadog-monitor 1.0.2 → 1.0.3

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: 5b176cbc444ad443cebef16a369d2e14782a875d83f9118448146fb6c18be0f3
4
- data.tar.gz: ebaaba9e002ece8575c8a753d8324ad48b4594e892b1863fcd473838fb8f413e
3
+ metadata.gz: dd2a166674a1910905fed2a8d7bfa629b22db4b806fd6f5eb863f2de58266699
4
+ data.tar.gz: 74748cd3954362be082a37ac3a82e87b4f1f23f60cadb289b6883b27543627a3
5
5
  SHA512:
6
- metadata.gz: 7f68121956dab1ca0346db4247e21979baf5338b6d097c9d0202b712c3fe93c9bcf5fa010803c0d2f77fd8ea9d966e3eb9dc86bbcebc830feb12f63b0743a5f2
7
- data.tar.gz: 37267daf3457dd9bea4acb41e86e69088221e38ab1cdd6cb65c36d2f1230cfaccdf3e872db70f1f4dee3a2b5a319be8a37add4e83b5847750944bc05fa1dfbe4
6
+ metadata.gz: 70297fb9b7019dd0467d6008c98e77c24442be0ad18791dbcc497b3ed8f9921a0a44c900c1cc0d9800723ade6c139142a89c0e7763fe4aae233c92d53c494571
7
+ data.tar.gz: 9223c4732bdf197e555d11f6a719d5ae2f8e3c452cab3e11ffeffeecaabea595871c737af828dbcce047327445fd952c544e83ccb28c9d3ebfebdbb70fc7655e
@@ -0,0 +1,36 @@
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
20
+ require 'sidekiq/launcher'
21
+
22
+ Sidekiq::Launcher.prepend(Sidekiq::Datadog::Monitor::HeartbeatPatch)
23
+ Sidekiq[:lifecycle_events][:beat] ||= []
24
+ end
25
+
26
+ def needs_patching?
27
+ return false unless Sidekiq[:lifecycle_events] # No events exist, Sidekiq is too old
28
+ return false if Sidekiq[:lifecycle_events][:beat] # beat event exist - no need to patch
29
+
30
+ true
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ 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.3'.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
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
69
+ return unless Sidekiq::Datadog::Monitor::HeartbeatPatch.needs_patching?
70
+
71
+ Sidekiq::Datadog::Monitor::HeartbeatPatch.apply_heartbeat_patch
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.3
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
@@ -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