ruby-dogstatsd 0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 1c11b919fdc1a1987265e34fece499d93e3f24882460c411f1659701e0921494
4
+ data.tar.gz: 99db0d36302f050f00afc5266eeb40832507f801b20c3f2fc76b07bfbd27b6d9
5
+ SHA512:
6
+ metadata.gz: 29103c292ddada1d9c8c70ff7660af08466aa7bff87fb69f7495bcc17bf8a58a74b2c5e3f41708c0ebfe1ff5b2997cc7f8bca42a9c7e8ce41049196b4b181ec0
7
+ data.tar.gz: cf164dc679d1782cca7979810f16980fcda0a53f04a2328f7f27df14d96a11f58b28541b4cc6e3dffe9e3411a7dca53bc06d80d4f330e3d4a404f94f90cc0f62
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+ ruby '2.5.1'
3
+
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,54 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ ruby-dogstatsd (0.1.0)
5
+ dogstatsd-ruby (>= 2.0.0)
6
+ sidekiq
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ concurrent-ruby (1.0.5)
12
+ connection_pool (2.2.1)
13
+ diff-lcs (1.3)
14
+ dogstatsd-ruby (3.3.0)
15
+ rack (2.0.5)
16
+ rack-protection (2.0.1)
17
+ rack
18
+ rake (12.3.1)
19
+ redis (4.0.1)
20
+ rspec (3.7.0)
21
+ rspec-core (~> 3.7.0)
22
+ rspec-expectations (~> 3.7.0)
23
+ rspec-mocks (~> 3.7.0)
24
+ rspec-core (3.7.1)
25
+ rspec-support (~> 3.7.0)
26
+ rspec-expectations (3.7.0)
27
+ diff-lcs (>= 1.2.0, < 2.0)
28
+ rspec-support (~> 3.7.0)
29
+ rspec-mocks (3.7.0)
30
+ diff-lcs (>= 1.2.0, < 2.0)
31
+ rspec-support (~> 3.7.0)
32
+ rspec-support (3.7.1)
33
+ sidekiq (5.1.3)
34
+ concurrent-ruby (~> 1.0)
35
+ connection_pool (~> 2.2, >= 2.2.0)
36
+ rack-protection (>= 1.5.0)
37
+ redis (>= 3.3.5, < 5)
38
+
39
+ PLATFORMS
40
+ ruby
41
+
42
+ DEPENDENCIES
43
+ bundler
44
+ rack
45
+ rake
46
+ rspec (~> 3.0)
47
+ ruby-dogstatsd!
48
+ sidekiq
49
+
50
+ RUBY VERSION
51
+ ruby 2.5.1p57
52
+
53
+ BUNDLED WITH
54
+ 1.16.1
data/README.md ADDED
File without changes
@@ -0,0 +1 @@
1
+ require "ruby/reporters/datadog"
@@ -0,0 +1 @@
1
+ require "rails/middleware/datadog"
@@ -0,0 +1,46 @@
1
+ module Rails
2
+ module Middleware
3
+ class Datadog
4
+ def initialize(app, opts={})
5
+ @app = app
6
+
7
+ statsd_host = opts[:statsd_host] || "localhost"
8
+ statsd_port = opts[:statsd_port] || 8125
9
+ namespace = opts[:statsd_prefix] || nil
10
+
11
+ @statsd = opts[:statsd] || Ruby::Reporters::Datadog.new(opts)
12
+ end
13
+
14
+ def call(env)
15
+ start_request_time = Time.now
16
+ status, header, body = @app.call(env)
17
+ end_request_time = Time.now
18
+
19
+ report_to_statsd(start_request_time, end_request_time, env, status)
20
+
21
+ [status, header, body]
22
+ end
23
+
24
+ private
25
+ def extract_path_from_request(env)
26
+ env['PATH_INFO']
27
+ end
28
+
29
+ def extract_method_from_request(env)
30
+ env['REQUEST_METHOD']
31
+ end
32
+
33
+ def compute_elapsed_time_ms(start_request_time, end_request_time)
34
+ (end_request_time - start_request_time) * 1000
35
+ end
36
+
37
+ def report_to_statsd(start_request_time, end_request_time, env, status)
38
+ elapsed_time_ms = compute_elapsed_time_ms(start_request_time, end_request_time)
39
+ request_method = extract_method_from_request(env)
40
+ path = extract_path_from_request(env)
41
+
42
+ @statsd.response_time_ms(path, request_method, status, elapsed_time_ms)
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,58 @@
1
+ require 'datadog/statsd'
2
+
3
+ module Ruby
4
+ module Reporters
5
+ class Datadog
6
+ attr_reader :statsd, :response_time_metric_name, :default_http_tags
7
+
8
+ def initialize(opts={})
9
+ statsd_host = opts[:statsd_host] || "localhost"
10
+ statsd_port = opts[:statsd_port] || 8125
11
+ namespace = opts[:statsd_prefix] || nil
12
+
13
+ @default_http_tags = ['type:http']
14
+ @response_time_metric_name = 'response_time_ms'
15
+
16
+ @statsd = opts[:statsd] || ::Datadog::Statsd.new(statsd_host, statsd_port, namespace: namespace)
17
+ end
18
+
19
+ def response_time_ms(path, method, status, value)
20
+ tags = [
21
+ "route:#{method.upcase} #{path}",
22
+ "status:#{status}",
23
+ "error:#{from_status_to_error(status)}"
24
+ ]
25
+
26
+ histogram(response_time_metric_name, value, default_http_tags | tags)
27
+ end
28
+
29
+ def gauge(metric_name, value, tags)
30
+ statsd.gauge(
31
+ metric_name,
32
+ value,
33
+ tags: tags
34
+ )
35
+ end
36
+
37
+ def increment(metric_name, tags)
38
+ statsd.increment(
39
+ metric_name,
40
+ tags: tags
41
+ )
42
+ end
43
+
44
+ def histogram(metric_name, value, tags)
45
+ statsd.histogram(
46
+ metric_name,
47
+ value,
48
+ tags:tags
49
+ )
50
+ end
51
+
52
+ private
53
+ def from_status_to_error(status)
54
+ status.to_i < 400 ? "false" : "true"
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1 @@
1
+ require "sidekiq/middleware/datadog"
@@ -0,0 +1,109 @@
1
+ require 'datadog/statsd'
2
+ require 'socket'
3
+ require 'sidekiq'
4
+
5
+ module Sidekiq
6
+ module Middleware
7
+ class Datadog
8
+ attr_accessor :hostname, :statsd_host, :statsd_port, :statsd, :xalala
9
+ # Configure and install datadog instrumentation. Example:
10
+ #
11
+ # Sidekiq.configure_server do |config|
12
+ # config.server_middleware do |chain|
13
+ # chain.add Sidekiq::Middleware::Datadog
14
+ # end
15
+ # end
16
+ #
17
+
18
+ def initialize(opts)
19
+ statsd_host = opts[:statsd_host] || "localhost"
20
+ statsd_port = (opts[:statsd_port] || 8125).to_i
21
+ prefix = opts[:prefix] || ""
22
+
23
+ @metric_name = opts[:metric_name] || "worker"
24
+ @statsd = opts[:statsd] || ::Datadog::Statsd.new(statsd_host, statsd_port, namespace: prefix)
25
+ @tags = opts[:tags] || []
26
+
27
+ enrich_global_tags()
28
+ end
29
+
30
+ def call(worker, job, queue, *)
31
+ start = Time.now
32
+
33
+ begin
34
+ yield
35
+ record(worker, job, queue, start)
36
+ rescue => e
37
+ record(worker, job, queue, start, e)
38
+ raise
39
+ end
40
+ end
41
+
42
+ private
43
+ def enrich_global_tags
44
+ env = Sidekiq.options[:environment] || ENV['RACK_ENV']
45
+
46
+ if env && @tags.none? {|t| t =~ /^env\:/ }
47
+ @tags.push("env:#{ENV['RACK_ENV']}")
48
+ end
49
+ end
50
+
51
+ def pre_proccess_tags(tags, worker, job, name, queue, error)
52
+ tags = @tags.map do |tag|
53
+ case tag
54
+ when String
55
+ then tag
56
+ when Proc
57
+ then tag.call(worker, job, queue, error)
58
+ end
59
+ end
60
+
61
+ tags.push "name:#{name}"
62
+ tags.push "queue:#{queue}" if queue
63
+
64
+ if error
65
+ kind = replace_hifen_to_underscore(error.class.name.sub(/Error$/, ''))
66
+ tags.push "error:true", "error_kind:#{kind}"
67
+ else
68
+ tags.push "error:false"
69
+ end
70
+
71
+ tags.compact
72
+ end
73
+
74
+
75
+ def record(worker, job, queue, start, error = nil)
76
+ end_time = Time.now
77
+
78
+ elapsed_time_ms = compute_elapsed_time_ms(end_time, start)
79
+ name = replace_hifen_to_underscore(job['wrapped'] || worker.class.to_s)
80
+ tags = pre_proccess_tags(@tags, worker, job, name, queue, error)
81
+
82
+ report_queue_processing_time(elapsed_time_ms, tags)
83
+ report_queue_length(queue, tags)
84
+ end
85
+
86
+ def replace_hifen_to_underscore(word)
87
+ word = word.to_s.gsub(/::/, '/')
88
+ word.gsub!(/([A-Z\d]+)([A-Z][a-z])/,'\1_\2')
89
+ word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
90
+ word.tr!("-", "_")
91
+
92
+ word.downcase
93
+ end
94
+
95
+ def compute_elapsed_time_ms(start_time, end_time)
96
+ (end_time - start_time) * 1000
97
+ end
98
+
99
+ def report_queue_length(queue_name, tags)
100
+ queue = queue_name ? Sidekiq::Queues[queue_name] : Sidekiq::Queues["default"]
101
+ @statsd.gauge "#{@metric_name}.queue_size", queue.size, :tags => tags
102
+ end
103
+
104
+ def report_queue_processing_time(value, tags)
105
+ @statsd.timing "#{@metric_name}.run_time_ms", value, :tags => tags
106
+ end
107
+ end
108
+ end
109
+ end
@@ -0,0 +1 @@
1
+ require "sinatra/middleware/datadog"
@@ -0,0 +1,8 @@
1
+ require "rails/middleware/datadog"
2
+
3
+ module Sinatra
4
+ module Middleware
5
+ class Datadog < Rails::Middleware::Datadog
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,29 @@
1
+ # coding: utf-8
2
+
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "ruby-dogstatsd"
8
+ spec.version = "0.0.3"
9
+ spec.authors = ["Top Free Games"]
10
+ spec.email = ["backend@tfgco.com"]
11
+ spec.description = %q{Rails middleware report metrics to Datadog}
12
+ spec.summary = %q{Report basic metrics to datadog}
13
+ spec.homepage = "https://git.topfreegames.com/topfreegames/rails-datadog-middleware"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(spec)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_runtime_dependency(%q<dogstatsd-ruby>, ">= 2.0.0")
22
+ spec.add_runtime_dependency(%q<sidekiq>)
23
+
24
+ spec.add_development_dependency(%q<rake>)
25
+ spec.add_development_dependency(%q<rack>)
26
+ spec.add_development_dependency(%q<bundler>)
27
+ spec.add_development_dependency(%q<rspec>, "~> 3.0")
28
+ spec.add_development_dependency(%q<sidekiq>)
29
+ end
@@ -0,0 +1,71 @@
1
+ require 'spec_helper'
2
+ require 'sidekiq/testing'
3
+ require 'rack'
4
+
5
+ describe Rails::Middleware::Datadog do
6
+ class Datadog::Statsd
7
+ attr_accessor :socket
8
+ end
9
+
10
+ class Rails::Middleware::Datadog
11
+ def compute_elapsed_time_ms(start_request_time, end_request_time)
12
+ 10
13
+ end
14
+ end
15
+
16
+ describe 'teste reporting pre-defined metrics' do
17
+ context 'using rails middleware with dafault statsd host and port' do
18
+ before(:all) do
19
+ @statsd = Ruby::Reporters::Datadog.new(namespace: "dd_statsd_test")
20
+ @statsd.statsd.socket = Mock::FakeUDPSocket.new
21
+ end
22
+
23
+ before(:each) do
24
+ @statsd.statsd.socket.buffer.clear()
25
+ end
26
+
27
+ context 'successful request' do
28
+ let(:app) { lambda {|env| [200, {'Content-Type' => 'text/plain'}, ['OK']]} }
29
+ let(:middleware) { Rails::Middleware::Datadog.new(app, {statsd: @statsd}) }
30
+
31
+ it 'should report a response_time_ms with tag error:false and other tags' do
32
+ middleware.call env_for('http://sniper3d.tfgco.com/players')
33
+
34
+ expect(@statsd.statsd.socket.buffer).to eq([[
35
+ "response_time_ms:10|h|#type:http,route:GET /players,status:200,error:false"
36
+ ]])
37
+ end
38
+ end
39
+
40
+ context 'failed, returning 404' do
41
+ let(:app) { lambda {|env| [404, {'Content-Type' => 'text/plain'}, ['Not Found']]} }
42
+ let(:middleware) { Rails::Middleware::Datadog.new(app, {statsd: @statsd}) }
43
+
44
+ it 'should report a response_time_ms with tag error:false and other tags' do
45
+ middleware.call env_for('http://sniper3d.tfgco.com/players/xablau')
46
+
47
+ expect(@statsd.statsd.socket.buffer).to eq([[
48
+ "response_time_ms:10|h|#type:http,route:GET /players/xablau,status:404,error:true"
49
+ ]])
50
+ end
51
+ end
52
+
53
+ context 'failed, returning 503' do
54
+ let(:app) { lambda {|env| [503, {'Content-Type' => 'text/plain'}, ['Internal Server Error']]} }
55
+ let(:middleware) { Rails::Middleware::Datadog.new(app, {statsd: @statsd}) }
56
+
57
+ it 'should report a response_time_ms with tag error:false and other tags' do
58
+ middleware.call env_for('http://sniper3d.tfgco.com/players/xablau')
59
+
60
+ expect(@statsd.statsd.socket.buffer).to eq([[
61
+ "response_time_ms:10|h|#type:http,route:GET /players/xablau,status:503,error:true"
62
+ ]])
63
+ end
64
+ end
65
+ end
66
+ end
67
+
68
+ def env_for(url, opts={})
69
+ Rack::MockRequest.env_for(url, opts)
70
+ end
71
+ end
@@ -0,0 +1,71 @@
1
+ require 'spec_helper'
2
+ require 'sidekiq/testing'
3
+
4
+ describe Ruby::Reporters::Datadog do
5
+ class Datadog::Statsd
6
+ attr_accessor :socket
7
+ end
8
+
9
+ describe 'report metrics to dd-statsd' do
10
+ context 'using default values for host and port' do
11
+ before(:all) do
12
+ @statsd = Ruby::Reporters::Datadog.new(namespace: "dd_statsd_test")
13
+ @statsd.statsd.socket = Mock::FakeUDPSocket.new
14
+ end
15
+
16
+ before(:each) do
17
+ @statsd.statsd.socket.buffer.clear()
18
+ end
19
+
20
+ context 'exploring response_time_ms' do
21
+ context 'request failed, returning 404' do
22
+ it 'should report a response_time_ms with tag error:true' do
23
+ @statsd.response_time_ms("/root", "get", 404, 1230)
24
+
25
+ expect(@statsd.statsd.socket.buffer).to eq([[
26
+ "response_time_ms:1230|h|#type:http,route:GET /root,status:404,error:true"
27
+ ]])
28
+ end
29
+ end
30
+
31
+ context 'request failed, returning 503' do
32
+ it 'should report a response_time_ms with tag error:true' do
33
+ @statsd.response_time_ms("/root", "get", 503, 1230)
34
+
35
+ expect(@statsd.statsd.socket.buffer).to eq([[
36
+ "response_time_ms:1230|h|#type:http,route:GET /root,status:503,error:true"
37
+ ]])
38
+ end
39
+ end
40
+
41
+ context 'request succeeded, returning 200' do
42
+ it 'should report a response_time_ms with tag error:false' do
43
+ @statsd.response_time_ms("/root", "get", 200, 1230)
44
+
45
+ expect(@statsd.statsd.socket.buffer).to eq([[
46
+ "response_time_ms:1230|h|#type:http,route:GET /root,status:200,error:false"
47
+ ]])
48
+ end
49
+ end
50
+ end
51
+
52
+ context 'exploring native calls' do
53
+ it 'should report a gauge' do
54
+ @statsd.gauge("number-of-pitayas", 342, ['status:ready-for-consumption'])
55
+
56
+ expect(@statsd.statsd.socket.buffer).to eq([[
57
+ "number-of-pitayas:342|g|#status:ready-for-consumption"
58
+ ]])
59
+ end
60
+
61
+ it 'should increment a counter' do
62
+ @statsd.increment("number-of-pitayas", ['kind:juice'])
63
+
64
+ expect(@statsd.statsd.socket.buffer).to eq([[
65
+ "number-of-pitayas:1|c|#kind:juice"
66
+ ]])
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,70 @@
1
+ require 'spec_helper'
2
+ require 'sidekiq/testing'
3
+
4
+ Sidekiq::Testing.fake!
5
+
6
+ describe Sidekiq::Middleware::Datadog do
7
+ class Datadog::Statsd
8
+ attr_accessor :socket
9
+ end
10
+
11
+ class Sidekiq::Middleware::Datadog
12
+ def compute_elapsed_time_ms(start_time, end_time)
13
+ 21
14
+ end
15
+ end
16
+
17
+ describe 'reports metrics to dd-statsd when middleware gets called' do
18
+ before(:all) do
19
+ @statsd = Datadog::Statsd.new("localhost", 8125)
20
+ @statsd.socket = Mock::FakeUDPSocket.new
21
+
22
+ Sidekiq::Testing.server_middleware do |chain|
23
+ chain.add Sidekiq::Middleware::Datadog, hostname: "localhost", statsd: @statsd, tags: ["custom:tag", lambda{|w, *| "worker:0" }]
24
+ end
25
+ end
26
+
27
+ context 'enqueueing all two jobs' do
28
+ let(:worker) { Mock::Worker.new }
29
+
30
+ before(:context) do
31
+ @jobs = ['test-job-1', 'test-job-2']
32
+ @jobs.each { | job | Mock::Worker.perform_async(job) }
33
+ end
34
+
35
+ it 'should have two jobs at the queue' do
36
+ expect(Sidekiq::Queues["default"].size).to eq(@jobs.size)
37
+ end
38
+
39
+ context 'middleware gets called' do
40
+ before(:all) do
41
+ Mock::Worker.drain
42
+ end
43
+
44
+ it 'should have 0 jobs at the queue' do
45
+ expect(Sidekiq::Queues["default"].size).to eq(0)
46
+ end
47
+
48
+ it 'should publish metrics from the fisrt job to dogstatd' do
49
+ expect(@statsd.socket.buffer[0]).to eq([
50
+ "worker.run_time_ms:21|ms|#custom:tag,worker:0,env:test,name:mock/worker,queue:default,error:false"
51
+ ])
52
+
53
+ expect(@statsd.socket.buffer[1]).to eq([
54
+ "worker.queue_size:1|g|#custom:tag,worker:0,env:test,name:mock/worker,queue:default,error:false"
55
+ ])
56
+ end
57
+
58
+ it 'should publish metrics from the second job to dogstatd' do
59
+ expect(@statsd.socket.buffer[0]).to eq([
60
+ "worker.run_time_ms:21|ms|#custom:tag,worker:0,env:test,name:mock/worker,queue:default,error:false"
61
+ ])
62
+
63
+ expect(@statsd.socket.buffer[1]).to eq([
64
+ "worker.queue_size:1|g|#custom:tag,worker:0,env:test,name:mock/worker,queue:default,error:false"
65
+ ])
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
File without changes
@@ -0,0 +1,42 @@
1
+ ENV['RACK_ENV'] ||= 'test'
2
+
3
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
4
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
5
+
6
+ require 'sidekiq'
7
+ require 'sidekiq-middleware-datadog'
8
+ require 'rails-middleware-datadog'
9
+ require 'sinatra-middleware-datadog'
10
+ require 'datadog-client'
11
+
12
+ module Mock
13
+ class Worker
14
+ include Sidekiq::Worker
15
+ def perform(name)
16
+ end
17
+ end
18
+
19
+ class FakeUDPSocket
20
+ attr_reader :buffer
21
+
22
+ def initialize
23
+ @buffer = []
24
+ end
25
+
26
+ def send(message, *)
27
+ @buffer.push [message]
28
+ end
29
+
30
+ def recv
31
+ @buffer.shift
32
+ end
33
+
34
+ def to_s
35
+ inspect
36
+ end
37
+
38
+ def inspect
39
+ "<FakeUDPSocket: #{@buffer.inspect}>"
40
+ end
41
+ end
42
+ end
metadata ADDED
@@ -0,0 +1,164 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby-dogstatsd
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - Top Free Games
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-04-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: dogstatsd-ruby
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 2.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 2.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: sidekiq
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rack
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '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'
69
+ - !ruby/object:Gem::Dependency
70
+ name: bundler
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: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: sidekiq
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: Rails middleware report metrics to Datadog
112
+ email:
113
+ - backend@tfgco.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - Gemfile
119
+ - Gemfile.lock
120
+ - README.md
121
+ - lib/datadog-client.rb
122
+ - lib/rails-middleware-datadog.rb
123
+ - lib/rails/middleware/datadog.rb
124
+ - lib/ruby/reporters/datadog.rb
125
+ - lib/sidekiq-middleware-datadog.rb
126
+ - lib/sidekiq/middleware/datadog.rb
127
+ - lib/sinatra-middleware-datadog.rb
128
+ - lib/sinatra/middleware/datadog.rb
129
+ - ruby-dogstatsd.gemspec
130
+ - spec/rails/middleware/datadog_spec.rb
131
+ - spec/ruby/reporters/datadog_spec.rb
132
+ - spec/sidekiq/datadog_spec.rb
133
+ - spec/sinatra/datadog_spec.rb
134
+ - spec/spec_helper.rb
135
+ homepage: https://git.topfreegames.com/topfreegames/rails-datadog-middleware
136
+ licenses:
137
+ - MIT
138
+ metadata: {}
139
+ post_install_message:
140
+ rdoc_options: []
141
+ require_paths:
142
+ - lib
143
+ required_ruby_version: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
148
+ required_rubygems_version: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ requirements: []
154
+ rubyforge_project:
155
+ rubygems_version: 2.7.6
156
+ signing_key:
157
+ specification_version: 4
158
+ summary: Report basic metrics to datadog
159
+ test_files:
160
+ - spec/rails/middleware/datadog_spec.rb
161
+ - spec/ruby/reporters/datadog_spec.rb
162
+ - spec/sidekiq/datadog_spec.rb
163
+ - spec/sinatra/datadog_spec.rb
164
+ - spec/spec_helper.rb