sidekiq-datadog-monitor 0.0.1 → 0.2.1

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: 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: []