sidekiq-datadog-monitor 0.0.1 → 0.2.1

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: 8d84d08e0320ca9b9e399bb8eff1efd74af038a534fe9936c8cfcfb3e169dc40
4
- data.tar.gz: f7cedc8a2816f04c886a2a0c8f841d7cd2819bbb916cd59737208ceff35043c1
3
+ metadata.gz: 1e6838bb59d76c94b8ca2e3ea015f7ab7af6081516f01e83e6a2d0a341d88b01
4
+ data.tar.gz: 5f209f188034fd94da47f3505eb758f264b5eb9149bdb9ffcb4ee172ad38f20c
5
5
  SHA512:
6
- metadata.gz: 6f1384e84c750d8510cc1102c9f4286276c8a6fdefa050e2576ce0baebde5da806859c8d4e34e316921260814fd4a251d8f20bd652073bb5bdee9a0af6fdbbda
7
- data.tar.gz: 489cf5542ec468a81eb8e0c218b5f34babb3a23699e444e1702cf65cd105e8326f4667d01ab5765a599564600dba8c9e4a6564dd0a4a838766f9ece447b9e707
6
+ metadata.gz: c89749c8150eecc3cde7a9c6d121c902a7dd4b67f542ca664e5b7f4f95a70b90da1ad802c3e46c461fff8010376aac6565dc24f0be45afaf622fb9845e5f54be
7
+ data.tar.gz: eef31d5da46a77f797be7ca049d4bf8656b5f888ab648ec6608c8f526a84e9282cf8f938d750dc0c6336e2b40e92cdad2ef0e9c908b2c12a2f936fa0d705bc5a
data/README.md CHANGED
@@ -1,15 +1,14 @@
1
1
  # Sidekiq::Datadog::Monitor
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/sidekiq/datadog/monitor`. To experiment with that code, run `bin/console` for an interactive prompt.
4
-
5
- TODO: Delete this and the text above, and describe your gem
3
+ Library that gather sidekiq jobs metrics (currently, only size and latency)
4
+ and send it to datadog
6
5
 
7
6
  ## Installation
8
7
 
9
8
  Add this line to your application's Gemfile:
10
9
 
11
10
  ```ruby
12
- gem 'sidekiq-datadog-monitor'
11
+ gem 'sidekiq-datadog-monitor', '0.0.1'
13
12
  ```
14
13
 
15
14
  And then execute:
@@ -22,7 +21,32 @@ Or install it yourself as:
22
21
 
23
22
  ## Usage
24
23
 
25
- TODO: Write usage instructions here
24
+ To start sending metrics
25
+
26
+ ```ruby
27
+ # Import the library
28
+ require 'sidekiq/datadog/monitor/data'
29
+
30
+ # Initiate a Sidekiq::Datadog::Monitor client instance.
31
+ Sidekiq::Datadog::Monitor::Data.initialize!(
32
+ agent_host: 'localhost',
33
+ agent_port: 8125,
34
+ queue: 'queue name',
35
+ tags: ['env:production', 'product:product_name'], # optional
36
+ cron: "*/30 * * * *" # default: "*/1 * * * *",
37
+ batch: false # optional, default: false
38
+ )
39
+ ```
40
+ `agent_host` and `agent_port` instantiate DogStatsD client
41
+
42
+ `queue` setting for background job that will gather and send Sidekiq metrics
43
+
44
+ `tags` tags for datadog metrics
45
+
46
+ `cron` - schedule settings for background job that will gather and send Sidekiq metrics
47
+
48
+ `batch` turns on sending DD metrics in batches. Make sure you don't have too many queues before enabling this option. The message with all tags must fit into [8KB of default DataDog buffer](https://docs.datadoghq.com/developers/dogstatsd/high_throughput/#enable-buffering-on-your-client) size.
49
+
26
50
 
27
51
  ## Development
28
52
 
@@ -1,4 +1,7 @@
1
- require "sidekiq/datadog/monitor/version"
1
+ require 'sidekiq/api'
2
+ require 'sidekiq-scheduler'
3
+ require 'sidekiq/datadog/monitor/data'
4
+ require 'sidekiq/datadog/monitor/metrics_worker'
2
5
 
3
6
  module Sidekiq
4
7
  module Datadog
@@ -1,28 +1,34 @@
1
- require 'datadog/statsd'
2
- require 'sidekiq/datadog/monitor/metrics_worker'
3
1
  module Sidekiq
4
2
  module Datadog
5
3
  module Monitor
6
4
  class Data
7
5
  class << self
8
- attr_reader :agent_port, :agent_host, :tag, :env, :queue, :cron
6
+ attr_reader :agent_port, :agent_host, :tags, :env, :queue, :cron, :batch
9
7
 
10
8
  def initialize!(options)
11
- @agent_port = options[:agent_port]
12
- @agent_host = options[:agent_host]
13
- @tag = options[:tag] || ''
14
- @env = options[:env] || ''
15
- @queue = options[:queue] || ''
16
- @cron = options[:cron] || "*/1 * * * *"
9
+ @agent_port, @agent_host, @queue = options.fetch_values(:agent_port, :agent_host, :queue)
10
+ @tags = options[:tags] || []
11
+ @cron = options[:cron] || '*/1 * * * *'
12
+ @batch = options[:batch] || false
17
13
 
18
- start
14
+ Sidekiq.configure_server do |config|
15
+ SidekiqScheduler::Scheduler.dynamic = true
16
+
17
+ config.on(:startup) do
18
+ start
19
+ end
20
+ end
21
+ rescue StandardError => e
22
+ raise Sidekiq::Datadog::Monitor::Error, e.message
19
23
  end
20
24
 
25
+ private
26
+
21
27
  def start
22
- Sidekiq.set_schedule('send_metrics',
23
- { "cron"=> cron, 'class' => 'Sidekiq::Datadog::Monitor::MetricsWorker', 'queue' => queue })
28
+ Sidekiq.set_schedule('send_metrics',
29
+ { 'cron' => cron, 'class' => 'Sidekiq::Datadog::Monitor::MetricsWorker', 'queue' => queue })
24
30
  end
25
- end
31
+ end
26
32
  end
27
33
  end
28
34
  end
@@ -1,35 +1,41 @@
1
+ require 'sidekiq/datadog/monitor/data'
1
2
  require 'datadog/statsd'
2
- require 'sidekiq'
3
3
 
4
4
  module Sidekiq
5
5
  module Datadog
6
6
  module Monitor
7
7
  class MetricsWorker
8
8
  include Sidekiq::Worker
9
-
9
+
10
+ sidekiq_options retry: false
11
+
10
12
  def perform
11
- Sidekiq::Stats.new.queues.each_pair do |queue_name, size|
12
- post_queue_size(queue_name, size)
13
+ statsd = ::Datadog::Statsd.new(Data.agent_host, Data.agent_port)
13
14
 
14
- post_queue_latency(queue_name)
15
- end
15
+ return send_metrics(statsd) unless Data.batch
16
+
17
+ statsd.batch { |batch_statsd| send_metrics(batch_statsd) }
16
18
  end
17
19
 
18
20
  private
19
21
 
20
- def statsd
21
- @statsd = ::Datadog::Statsd.new(Data.agent_host, Data.agent_port)
22
+ def send_metrics(statsd)
23
+ Sidekiq::Stats.new.queues.each_pair do |queue_name, size|
24
+ post_queue_size(statsd, queue_name, size)
25
+
26
+ post_queue_latency(statsd, queue_name)
27
+ end
22
28
  end
23
29
 
24
- def post_queue_size(queue_name, size)
30
+ def post_queue_size(statsd, queue_name, size)
25
31
  statsd.gauge('sidekiq.queue.size', size,
26
- tags: ["queue_name:#{queue_name}", "environment:#{Data.env}", Data.tag])
32
+ tags: ["queue_name:#{queue_name}"].concat(Data.tags))
27
33
  end
28
34
 
29
- def post_queue_latency(queue_name)
35
+ def post_queue_latency(statsd, queue_name)
30
36
  latency = Sidekiq::Queue.new(queue_name).latency
31
37
  statsd.gauge('sidekiq.queue.latency', latency,
32
- tags: ["queue_name:#{queue_name}", "environment:#{Data.env}", Data.tag])
38
+ tags: ["queue_name:#{queue_name}"].concat(Data.tags))
33
39
  end
34
40
  end
35
41
  end
@@ -1,7 +1,7 @@
1
1
  module Sidekiq
2
2
  module Datadog
3
3
  module Monitor
4
- VERSION = "0.0.1"
4
+ VERSION = '0.2.1'.freeze
5
5
  end
6
6
  end
7
7
  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: 0.0.1
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - aleksa_castle
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-10-19 00:00:00.000000000 Z
11
+ date: 2021-03-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,48 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.85.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.85.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop-performance
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop-rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 1.38.1
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 1.38.1
55
97
  - !ruby/object:Gem::Dependency
56
98
  name: sidekiq
57
99
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +108,20 @@ dependencies:
66
108
  - - ">="
67
109
  - !ruby/object:Gem::Version
68
110
  version: 2.2.1
111
+ - !ruby/object:Gem::Dependency
112
+ name: sidekiq-scheduler
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 3.0.1
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 3.0.1
69
125
  - !ruby/object:Gem::Dependency
70
126
  name: dogstatsd-ruby
71
127
  requirement: !ruby/object:Gem::Requirement
@@ -80,7 +136,7 @@ dependencies:
80
136
  - - ">="
81
137
  - !ruby/object:Gem::Version
82
138
  version: 4.8.1
83
- description:
139
+ description:
84
140
  email:
85
141
  - oleksandra.k@matic.com
86
142
  executables: []
@@ -100,7 +156,7 @@ licenses:
100
156
  - MIT
101
157
  metadata:
102
158
  allowed_push_host: https://rubygems.org
103
- post_install_message:
159
+ post_install_message:
104
160
  rdoc_options: []
105
161
  require_paths:
106
162
  - lib
@@ -115,8 +171,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
115
171
  - !ruby/object:Gem::Version
116
172
  version: '0'
117
173
  requirements: []
118
- rubygems_version: 3.0.8
119
- signing_key:
174
+ rubygems_version: 3.0.3
175
+ signing_key:
120
176
  specification_version: 4
121
177
  summary: A gem to gather and send sidekiq jobs metrics to datadog
122
178
  test_files: []