datadog-notifications 0.6.1 → 0.6.6
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 +4 -4
- data/.github/workflows/ruby.yml +21 -0
- data/.rubocop.yml +7 -3
- data/Gemfile.lock +96 -71
- data/datadog-notifications.gemspec +3 -3
- data/lib/datadog/notifications/config.rb +4 -5
- data/lib/datadog/notifications/plugins/action_controller.rb +2 -4
- data/lib/datadog/notifications/plugins/active_job.rb +2 -4
- data/lib/datadog/notifications/plugins/active_record.rb +3 -4
- data/lib/datadog/notifications/plugins/base.rb +2 -3
- data/lib/datadog/notifications/plugins/grape.rb +12 -11
- data/lib/datadog/notifications/plugins/grpc.rb +2 -4
- data/lib/datadog/notifications/version.rb +1 -1
- data/spec/datadog/notifications/config_spec.rb +3 -5
- data/spec/datadog/notifications/plugins/active_record_spec.rb +2 -4
- data/spec/datadog/notifications/plugins/grape_spec.rb +6 -8
- data/spec/datadog/notifications_spec.rb +3 -4
- data/spec/spec_helper.rb +13 -13
- metadata +8 -9
- data/.rake_tasks~ +0 -9
- data/.travis.yml +0 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 299177adeebc9ed3fd6984f9725fb88ae46ab24b1582548976e8d4aa1a48f55a
|
|
4
|
+
data.tar.gz: bdea7f81d306dbb4f45d77b1870475596a3b9e04ef4675ca7ef117c03066be9a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4c7a6359a6b6abc80be605d04dd8934d7460de1a16ec1f2c7d6018c7f37c5b036658b8fa022f459117ea2367157cdc1e601c6482b72ff5ecf85e6965835e4d4e
|
|
7
|
+
data.tar.gz: f72472a2cfee96d1cb79f6ceddccdc8103ba8dffdd86465866dc17236ac95b59822558bad85cb40e848f4372a2ef588ba1bcd2fc7e3834a8e0415a2f23f0cbc7
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
name: Ruby
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
strategy:
|
|
13
|
+
matrix:
|
|
14
|
+
ruby-version: ["2.6", "2.7", "3.0"]
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v2
|
|
17
|
+
- uses: ruby/setup-ruby@v1
|
|
18
|
+
with:
|
|
19
|
+
ruby-version: ${{ matrix.ruby-version }}
|
|
20
|
+
bundler-cache: true
|
|
21
|
+
- run: bundle exec rake
|
data/.rubocop.yml
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
-
|
|
1
|
+
inherit_gem:
|
|
2
|
+
rubocop-bsm:
|
|
3
|
+
- default.yml
|
|
4
|
+
inherit_mode:
|
|
5
|
+
merge:
|
|
6
|
+
- Exclude
|
|
3
7
|
|
|
4
8
|
AllCops:
|
|
5
|
-
TargetRubyVersion: "2.
|
|
9
|
+
TargetRubyVersion: "2.6"
|
|
6
10
|
|
|
7
11
|
Naming/FileName:
|
|
8
12
|
Exclude:
|
data/Gemfile.lock
CHANGED
|
@@ -1,97 +1,122 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
datadog-notifications (0.6.
|
|
4
|
+
datadog-notifications (0.6.6)
|
|
5
5
|
activesupport
|
|
6
|
-
dogstatsd-ruby (>= 4.
|
|
6
|
+
dogstatsd-ruby (>= 4.8, < 5.0)
|
|
7
7
|
|
|
8
8
|
GEM
|
|
9
9
|
remote: https://rubygems.org/
|
|
10
10
|
specs:
|
|
11
|
-
activemodel (
|
|
12
|
-
activesupport (=
|
|
13
|
-
activerecord (
|
|
14
|
-
activemodel (=
|
|
15
|
-
activesupport (=
|
|
16
|
-
|
|
17
|
-
activesupport (5.2.3)
|
|
11
|
+
activemodel (6.1.3)
|
|
12
|
+
activesupport (= 6.1.3)
|
|
13
|
+
activerecord (6.1.3)
|
|
14
|
+
activemodel (= 6.1.3)
|
|
15
|
+
activesupport (= 6.1.3)
|
|
16
|
+
activesupport (6.1.3)
|
|
18
17
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
19
|
-
i18n (>=
|
|
20
|
-
minitest (
|
|
21
|
-
tzinfo (~>
|
|
22
|
-
|
|
23
|
-
ast (2.4.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
18
|
+
i18n (>= 1.6, < 2)
|
|
19
|
+
minitest (>= 5.1)
|
|
20
|
+
tzinfo (~> 2.0)
|
|
21
|
+
zeitwerk (~> 2.3)
|
|
22
|
+
ast (2.4.2)
|
|
23
|
+
builder (3.2.4)
|
|
24
|
+
concurrent-ruby (1.1.8)
|
|
25
|
+
diff-lcs (1.4.4)
|
|
26
|
+
dogstatsd-ruby (4.8.3)
|
|
27
|
+
dry-configurable (0.12.1)
|
|
28
|
+
concurrent-ruby (~> 1.0)
|
|
29
|
+
dry-core (~> 0.5, >= 0.5.0)
|
|
30
|
+
dry-container (0.7.2)
|
|
31
|
+
concurrent-ruby (~> 1.0)
|
|
32
|
+
dry-configurable (~> 0.1, >= 0.1.3)
|
|
33
|
+
dry-core (0.5.0)
|
|
34
|
+
concurrent-ruby (~> 1.0)
|
|
35
|
+
dry-inflector (0.2.0)
|
|
36
|
+
dry-logic (1.1.0)
|
|
37
|
+
concurrent-ruby (~> 1.0)
|
|
38
|
+
dry-core (~> 0.5, >= 0.5)
|
|
39
|
+
dry-types (1.5.1)
|
|
40
|
+
concurrent-ruby (~> 1.0)
|
|
41
|
+
dry-container (~> 0.3)
|
|
42
|
+
dry-core (~> 0.5, >= 0.5)
|
|
43
|
+
dry-inflector (~> 0.1, >= 0.1.2)
|
|
44
|
+
dry-logic (~> 1.0, >= 1.0.2)
|
|
45
|
+
grape (1.5.2)
|
|
38
46
|
activesupport
|
|
39
47
|
builder
|
|
48
|
+
dry-types (>= 1.1)
|
|
40
49
|
mustermann-grape (~> 1.0.0)
|
|
41
50
|
rack (>= 1.3.0)
|
|
42
51
|
rack-accept
|
|
43
|
-
|
|
44
|
-
i18n (1.6.0)
|
|
52
|
+
i18n (1.8.9)
|
|
45
53
|
concurrent-ruby (~> 1.0)
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
mustermann (1.0.
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
psych (3.1.0)
|
|
56
|
-
rack (2.0.7)
|
|
54
|
+
minitest (5.14.4)
|
|
55
|
+
mustermann (1.1.1)
|
|
56
|
+
ruby2_keywords (~> 0.0.1)
|
|
57
|
+
mustermann-grape (1.0.1)
|
|
58
|
+
mustermann (>= 1.0.0)
|
|
59
|
+
parallel (1.20.1)
|
|
60
|
+
parser (3.0.0.0)
|
|
61
|
+
ast (~> 2.4.1)
|
|
62
|
+
rack (2.2.3)
|
|
57
63
|
rack-accept (0.4.5)
|
|
58
64
|
rack (>= 0.4)
|
|
59
65
|
rack-test (1.1.0)
|
|
60
66
|
rack (>= 1.0, < 3)
|
|
61
67
|
rainbow (3.0.0)
|
|
62
|
-
rake (
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
rspec-
|
|
67
|
-
|
|
68
|
-
rspec-
|
|
69
|
-
rspec-
|
|
68
|
+
rake (13.0.3)
|
|
69
|
+
regexp_parser (2.1.1)
|
|
70
|
+
rexml (3.2.4)
|
|
71
|
+
rspec (3.10.0)
|
|
72
|
+
rspec-core (~> 3.10.0)
|
|
73
|
+
rspec-expectations (~> 3.10.0)
|
|
74
|
+
rspec-mocks (~> 3.10.0)
|
|
75
|
+
rspec-core (3.10.1)
|
|
76
|
+
rspec-support (~> 3.10.0)
|
|
77
|
+
rspec-expectations (3.10.1)
|
|
70
78
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
71
|
-
rspec-support (~> 3.
|
|
72
|
-
rspec-mocks (3.
|
|
79
|
+
rspec-support (~> 3.10.0)
|
|
80
|
+
rspec-mocks (3.10.2)
|
|
73
81
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
74
|
-
rspec-support (~> 3.
|
|
75
|
-
rspec-support (3.
|
|
76
|
-
rubocop (
|
|
77
|
-
jaro_winkler (~> 1.5.1)
|
|
82
|
+
rspec-support (~> 3.10.0)
|
|
83
|
+
rspec-support (3.10.2)
|
|
84
|
+
rubocop (1.11.0)
|
|
78
85
|
parallel (~> 1.10)
|
|
79
|
-
parser (>=
|
|
80
|
-
psych (>= 3.1.0)
|
|
86
|
+
parser (>= 3.0.0.0)
|
|
81
87
|
rainbow (>= 2.2.2, < 4.0)
|
|
88
|
+
regexp_parser (>= 1.8, < 3.0)
|
|
89
|
+
rexml
|
|
90
|
+
rubocop-ast (>= 1.2.0, < 2.0)
|
|
82
91
|
ruby-progressbar (~> 1.7)
|
|
83
|
-
unicode-display_width (>= 1.4.0, <
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
92
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
|
93
|
+
rubocop-ast (1.4.1)
|
|
94
|
+
parser (>= 2.7.1.5)
|
|
95
|
+
rubocop-bsm (0.5.4)
|
|
96
|
+
rubocop (~> 1.0)
|
|
97
|
+
rubocop-performance
|
|
98
|
+
rubocop-rails
|
|
99
|
+
rubocop-rake
|
|
100
|
+
rubocop-rspec
|
|
101
|
+
rubocop-performance (1.10.1)
|
|
102
|
+
rubocop (>= 0.90.0, < 2.0)
|
|
103
|
+
rubocop-ast (>= 0.4.0)
|
|
104
|
+
rubocop-rails (2.9.1)
|
|
105
|
+
activesupport (>= 4.2.0)
|
|
106
|
+
rack (>= 1.1)
|
|
107
|
+
rubocop (>= 0.90.0, < 2.0)
|
|
108
|
+
rubocop-rake (0.5.1)
|
|
109
|
+
rubocop
|
|
110
|
+
rubocop-rspec (2.2.0)
|
|
111
|
+
rubocop (~> 1.0)
|
|
112
|
+
rubocop-ast (>= 1.1.0)
|
|
113
|
+
ruby-progressbar (1.11.0)
|
|
114
|
+
ruby2_keywords (0.0.4)
|
|
115
|
+
sqlite3 (1.4.2)
|
|
116
|
+
tzinfo (2.0.4)
|
|
117
|
+
concurrent-ruby (~> 1.0)
|
|
118
|
+
unicode-display_width (2.0.0)
|
|
119
|
+
zeitwerk (2.4.2)
|
|
95
120
|
|
|
96
121
|
PLATFORMS
|
|
97
122
|
ruby
|
|
@@ -104,8 +129,8 @@ DEPENDENCIES
|
|
|
104
129
|
rack-test
|
|
105
130
|
rake
|
|
106
131
|
rspec
|
|
107
|
-
rubocop
|
|
132
|
+
rubocop-bsm
|
|
108
133
|
sqlite3
|
|
109
134
|
|
|
110
135
|
BUNDLED WITH
|
|
111
|
-
1.
|
|
136
|
+
2.1.4
|
|
@@ -14,10 +14,10 @@ Gem::Specification.new do |s|
|
|
|
14
14
|
s.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
|
15
15
|
s.test_files = s.files.grep(%r{^(spec)/})
|
|
16
16
|
s.require_paths = ['lib']
|
|
17
|
-
s.required_ruby_version = '>= 2.
|
|
17
|
+
s.required_ruby_version = '>= 2.6'
|
|
18
18
|
|
|
19
19
|
s.add_runtime_dependency 'activesupport'
|
|
20
|
-
s.add_runtime_dependency 'dogstatsd-ruby', '>= 4.
|
|
20
|
+
s.add_runtime_dependency 'dogstatsd-ruby', '>= 4.8', '< 5.0'
|
|
21
21
|
|
|
22
22
|
s.add_development_dependency 'activerecord'
|
|
23
23
|
s.add_development_dependency 'bundler'
|
|
@@ -25,6 +25,6 @@ Gem::Specification.new do |s|
|
|
|
25
25
|
s.add_development_dependency 'rack-test'
|
|
26
26
|
s.add_development_dependency 'rake'
|
|
27
27
|
s.add_development_dependency 'rspec'
|
|
28
|
-
s.add_development_dependency 'rubocop'
|
|
28
|
+
s.add_development_dependency 'rubocop-bsm'
|
|
29
29
|
s.add_development_dependency 'sqlite3'
|
|
30
30
|
end
|
|
@@ -14,22 +14,21 @@ module Datadog
|
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
# Use a plugin
|
|
17
|
-
def use(klass, opts
|
|
18
|
-
@plugins.push klass.new(opts)
|
|
17
|
+
def use(klass, **opts)
|
|
18
|
+
@plugins.push klass.new(**opts)
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
protected
|
|
22
22
|
|
|
23
23
|
def connect!
|
|
24
24
|
env = ENV['RAILS_ENV'] || ENV['RACK_ENV']
|
|
25
|
-
tags.push("env:#{env}") if env && tags.none? {|t| t =~ /^env
|
|
25
|
+
tags.push("env:#{env}") if env && tags.none? {|t| t =~ /^env:/ }
|
|
26
26
|
|
|
27
27
|
enable_hostname = hostname && hostname != 'false'
|
|
28
|
-
tags.push("host:#{hostname}") if enable_hostname && tags.none? {|t| t =~ /^host
|
|
28
|
+
tags.push("host:#{hostname}") if enable_hostname && tags.none? {|t| t =~ /^host:/ }
|
|
29
29
|
|
|
30
30
|
reporter.new statsd_host, statsd_port, namespace: namespace, tags: tags, socket_path: socket_path
|
|
31
31
|
end
|
|
32
|
-
|
|
33
32
|
end
|
|
34
33
|
end
|
|
35
34
|
end
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
module Datadog::Notifications::Plugins
|
|
2
2
|
class ActionController < Base
|
|
3
|
-
|
|
4
3
|
attr_reader :metric_name
|
|
5
4
|
|
|
6
5
|
# Options:
|
|
7
6
|
#
|
|
8
7
|
# *<tt>:metric_name</tt> - the metric name, defaults to "rails.request"
|
|
9
8
|
# *<tt>:tags</tt> - additional tags
|
|
10
|
-
def initialize(opts
|
|
9
|
+
def initialize(metric_name: 'rails.request', **opts)
|
|
11
10
|
super
|
|
12
|
-
@metric_name = opts[:metric_name] || 'rails.request'
|
|
13
11
|
|
|
12
|
+
@metric_name = metric_name
|
|
14
13
|
Datadog::Notifications.subscribe 'process_action.action_controller' do |reporter, event|
|
|
15
14
|
record reporter, event
|
|
16
15
|
end
|
|
@@ -34,6 +33,5 @@ module Datadog::Notifications::Plugins
|
|
|
34
33
|
reporter.timing "#{metric_name}.time.view", payload[:view_runtime], tags: tags
|
|
35
34
|
end
|
|
36
35
|
end
|
|
37
|
-
|
|
38
36
|
end
|
|
39
37
|
end
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
module Datadog::Notifications::Plugins
|
|
2
2
|
class ActiveJob < Base
|
|
3
|
-
|
|
4
3
|
attr_reader :metric_name
|
|
5
4
|
|
|
6
5
|
# Options:
|
|
7
6
|
#
|
|
8
7
|
# *<tt>:metric_name</tt> - the metric name, defaults to "activejob.perform"
|
|
9
8
|
# *<tt>:tags</tt> - additional tags
|
|
10
|
-
def initialize(opts
|
|
9
|
+
def initialize(metric_name: 'activejob.perform', **opts)
|
|
11
10
|
super
|
|
12
|
-
@metric_name = opts[:metric_name] || 'activejob.perform'
|
|
13
11
|
|
|
12
|
+
@metric_name = metric_name
|
|
14
13
|
Datadog::Notifications.subscribe 'perform.active_job' do |reporter, event|
|
|
15
14
|
record reporter, event
|
|
16
15
|
end
|
|
@@ -28,6 +27,5 @@ module Datadog::Notifications::Plugins
|
|
|
28
27
|
reporter.timing "#{metric_name}.time", event.duration, tags: tags
|
|
29
28
|
end
|
|
30
29
|
end
|
|
31
|
-
|
|
32
30
|
end
|
|
33
31
|
end
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
module Datadog::Notifications::Plugins
|
|
2
2
|
class ActiveRecord < Base
|
|
3
|
-
|
|
4
3
|
attr_reader :metric_name
|
|
5
4
|
|
|
6
5
|
# Options:
|
|
@@ -9,9 +8,10 @@ module Datadog::Notifications::Plugins
|
|
|
9
8
|
# *<tt>:include_schema</tt> - record schema queries, off by default
|
|
10
9
|
# *<tt>:include_generic</tt> - record general (nameless) queries, off by default
|
|
11
10
|
# *<tt>:tags</tt> - additional tags
|
|
12
|
-
def initialize(opts
|
|
11
|
+
def initialize(metric_name: 'activerecord.sql', **opts)
|
|
13
12
|
super
|
|
14
|
-
|
|
13
|
+
|
|
14
|
+
@metric_name = metric_name
|
|
15
15
|
@include_schema = opts[:include_schema] == true
|
|
16
16
|
@include_generic = opts[:include_generic] == true
|
|
17
17
|
@include_raw = opts[:include_raw] == true
|
|
@@ -38,6 +38,5 @@ module Datadog::Notifications::Plugins
|
|
|
38
38
|
reporter.timing "#{metric_name}.time", event.duration, tags: tags
|
|
39
39
|
end
|
|
40
40
|
end
|
|
41
|
-
|
|
42
41
|
end
|
|
43
42
|
end
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
module Datadog::Notifications::Plugins
|
|
2
2
|
class Grape < Base
|
|
3
|
+
DEFAULT_EXCEPTION_HANDLER = ->(e) { Grape.exception_status(e) }
|
|
3
4
|
|
|
4
5
|
def self.exception_status(err)
|
|
5
6
|
err.respond_to?(:status) ? err.status : 500
|
|
@@ -12,10 +13,11 @@ module Datadog::Notifications::Plugins
|
|
|
12
13
|
# *<tt>:metric_name</tt> - the metric name, defaults to "grape.request"
|
|
13
14
|
# *<tt>:exception_handler</tt> - a custom exception handler proc which accepts an exception object and returns a status
|
|
14
15
|
# *<tt>:tags</tt> - additional tags
|
|
15
|
-
def initialize(opts
|
|
16
|
+
def initialize(metric_name: 'grape.request', exception_handler: DEFAULT_EXCEPTION_HANDLER, **opts)
|
|
16
17
|
super
|
|
17
|
-
|
|
18
|
-
@
|
|
18
|
+
|
|
19
|
+
@metric_name = metric_name
|
|
20
|
+
@exception_handler = exception_handler
|
|
19
21
|
|
|
20
22
|
Datadog::Notifications.subscribe 'endpoint_run.grape' do |reporter, event|
|
|
21
23
|
record reporter, event
|
|
@@ -33,7 +35,7 @@ module Datadog::Notifications::Plugins
|
|
|
33
35
|
status = exception_handler.call(payload[:exception_object]) if payload[:exception_object]
|
|
34
36
|
|
|
35
37
|
path = extract_path(endpoint)
|
|
36
|
-
path.gsub!(%r{[^\w
|
|
38
|
+
path.gsub!(%r{[^\w/\-]+}, '_')
|
|
37
39
|
|
|
38
40
|
tags = self.tags + %W[method:#{method} status:#{status}]
|
|
39
41
|
tags.push "path:#{path}" if path
|
|
@@ -47,18 +49,17 @@ module Datadog::Notifications::Plugins
|
|
|
47
49
|
|
|
48
50
|
def extract_path(endpoint)
|
|
49
51
|
route = begin
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
endpoint.route
|
|
53
|
+
rescue NoMethodError
|
|
54
|
+
nil
|
|
55
|
+
end
|
|
54
56
|
return endpoint.request.path unless route
|
|
55
57
|
|
|
56
58
|
path = endpoint.route.path.dup
|
|
57
|
-
path.sub!(/\(
|
|
59
|
+
path.sub!(/\(\.:format\)$/, '')
|
|
58
60
|
path.sub!(':version/', '') if endpoint.version
|
|
59
|
-
path.gsub!(/:(\w+)/) {|m| m[1
|
|
61
|
+
path.gsub!(/:(\w+)/) {|m| m[1..].upcase }
|
|
60
62
|
path
|
|
61
63
|
end
|
|
62
|
-
|
|
63
64
|
end
|
|
64
65
|
end
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
module Datadog::Notifications::Plugins
|
|
2
2
|
class GRPC < Base
|
|
3
|
-
|
|
4
3
|
# Options:
|
|
5
4
|
#
|
|
6
5
|
# *<tt>:metric_name</tt> - the metric name, defaults to 'grpc.request'
|
|
@@ -10,10 +9,10 @@ module Datadog::Notifications::Plugins
|
|
|
10
9
|
# Notification payload should have :service (service name, string) and :action (service action/method name, string) keys.
|
|
11
10
|
#
|
|
12
11
|
# Compatible instrumentation is implemented in grpcx gem: https://github.com/bsm/grpcx (>= 0.2.0)
|
|
13
|
-
def initialize(opts
|
|
12
|
+
def initialize(metric_name: 'grpc.request', **opts)
|
|
14
13
|
super
|
|
15
|
-
@metric_name = opts[:metric_name] || 'grpc.request'
|
|
16
14
|
|
|
15
|
+
@metric_name = metric_name
|
|
17
16
|
Datadog::Notifications.subscribe 'process_action.grpc' do |reporter, event|
|
|
18
17
|
record reporter, event
|
|
19
18
|
end
|
|
@@ -34,6 +33,5 @@ module Datadog::Notifications::Plugins
|
|
|
34
33
|
reporter.timing "#{@metric_name}.time", event.duration, tags: tags
|
|
35
34
|
end
|
|
36
35
|
end
|
|
37
|
-
|
|
38
36
|
end
|
|
39
37
|
end
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
3
|
describe Datadog::Notifications::Config do
|
|
4
|
-
|
|
5
|
-
it 'should be connect!' do
|
|
4
|
+
it 'is connect!' do
|
|
6
5
|
subject.reporter = Mock::Reporter
|
|
7
6
|
subject.hostname = 'test.host'
|
|
8
7
|
subject.tags = ['custom:tag']
|
|
@@ -13,7 +12,7 @@ describe Datadog::Notifications::Config do
|
|
|
13
12
|
end
|
|
14
13
|
|
|
15
14
|
RSpec.shared_examples 'host tag is not picked up' do |hostname|
|
|
16
|
-
it '
|
|
15
|
+
it 'does not pick up the host tag' do
|
|
17
16
|
subject.reporter = Mock::Reporter
|
|
18
17
|
subject.hostname = hostname
|
|
19
18
|
subject.tags = ['custom:tag']
|
|
@@ -27,10 +26,9 @@ describe Datadog::Notifications::Config do
|
|
|
27
26
|
include_examples 'host tag is not picked up', false
|
|
28
27
|
include_examples 'host tag is not picked up', 'false'
|
|
29
28
|
|
|
30
|
-
it '
|
|
29
|
+
it 'instantiates plugins on use' do
|
|
31
30
|
subject.use Datadog::Notifications::Plugins::ActionController
|
|
32
31
|
expect(subject.plugins.size).to eq(1)
|
|
33
32
|
expect(subject.plugins.first).to be_instance_of(Datadog::Notifications::Plugins::ActionController)
|
|
34
33
|
end
|
|
35
|
-
|
|
36
34
|
end
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
3
|
describe Datadog::Notifications::Plugins::ActiveRecord do
|
|
4
|
-
|
|
5
|
-
it 'should send an increment and timing event for each query' do
|
|
4
|
+
it 'sends an increment and timing event for each query' do
|
|
6
5
|
Post.all.to_a
|
|
7
6
|
expect(buffered).to eq [
|
|
8
7
|
'activerecord.sql:1|c|#custom:tag,env:test,host:test.host,query:post.load',
|
|
@@ -10,12 +9,11 @@ describe Datadog::Notifications::Plugins::ActiveRecord do
|
|
|
10
9
|
]
|
|
11
10
|
end
|
|
12
11
|
|
|
13
|
-
it '
|
|
12
|
+
it 'supports custom queries' do
|
|
14
13
|
Post.find_by_sql('SELECT * FROM posts LIMIT 1').to_a
|
|
15
14
|
expect(buffered).to eq [
|
|
16
15
|
'activerecord.sql:1|c|#custom:tag,env:test,host:test.host,query:post.load',
|
|
17
16
|
'activerecord.sql.time:333|ms|#custom:tag,env:test,host:test.host,query:post.load',
|
|
18
17
|
]
|
|
19
18
|
end
|
|
20
|
-
|
|
21
19
|
end
|
|
@@ -14,7 +14,6 @@ describe Datadog::Notifications::Plugins::Grape do
|
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
Class.new(Grape::API) do
|
|
17
|
-
|
|
18
17
|
rescue_from unauthorized do |_e|
|
|
19
18
|
error!({ message: 'unauthorized', error: '401 Unauthorized' }, 401)
|
|
20
19
|
end
|
|
@@ -37,7 +36,7 @@ describe Datadog::Notifications::Plugins::Grape do
|
|
|
37
36
|
end
|
|
38
37
|
end
|
|
39
38
|
|
|
40
|
-
it '
|
|
39
|
+
it 'sends an increment and timing event for each request' do
|
|
41
40
|
get '/echo/1/1234'
|
|
42
41
|
expect(last_response.status).to eq(200)
|
|
43
42
|
expect(last_response.body).to eq('1 1234')
|
|
@@ -48,7 +47,7 @@ describe Datadog::Notifications::Plugins::Grape do
|
|
|
48
47
|
])
|
|
49
48
|
end
|
|
50
49
|
|
|
51
|
-
it '
|
|
50
|
+
it 'supports namespaces and versioning' do
|
|
52
51
|
get '/api/v1/sub/versioned.txt'
|
|
53
52
|
expect(last_response.status).to eq(200)
|
|
54
53
|
expect(last_response.body).to eq('OK')
|
|
@@ -59,7 +58,7 @@ describe Datadog::Notifications::Plugins::Grape do
|
|
|
59
58
|
])
|
|
60
59
|
end
|
|
61
60
|
|
|
62
|
-
it '
|
|
61
|
+
it 'supports deep nesting' do
|
|
63
62
|
get '/sub/secure/resource'
|
|
64
63
|
expect(last_response.status).to eq(403)
|
|
65
64
|
expect(last_response.body).to eq('forbidden')
|
|
@@ -70,7 +69,7 @@ describe Datadog::Notifications::Plugins::Grape do
|
|
|
70
69
|
])
|
|
71
70
|
end
|
|
72
71
|
|
|
73
|
-
it '
|
|
72
|
+
it 'handles rescued errors' do
|
|
74
73
|
get '/rescued'
|
|
75
74
|
expect(last_response.status).to eq(401)
|
|
76
75
|
|
|
@@ -80,7 +79,7 @@ describe Datadog::Notifications::Plugins::Grape do
|
|
|
80
79
|
])
|
|
81
80
|
end
|
|
82
81
|
|
|
83
|
-
it '
|
|
82
|
+
it 'handles invalid method' do
|
|
84
83
|
post '/rescued'
|
|
85
84
|
|
|
86
85
|
expect(last_response.status).to eq(405)
|
|
@@ -90,11 +89,10 @@ describe Datadog::Notifications::Plugins::Grape do
|
|
|
90
89
|
])
|
|
91
90
|
end
|
|
92
91
|
|
|
93
|
-
it '
|
|
92
|
+
it 'does not report paths on 404s' do
|
|
94
93
|
get '/sub/missing'
|
|
95
94
|
expect(last_response.status).to eq(404)
|
|
96
95
|
|
|
97
96
|
expect(buffered).to eq([])
|
|
98
97
|
end
|
|
99
|
-
|
|
100
98
|
end
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
3
|
describe Datadog::Notifications do
|
|
4
|
-
|
|
5
4
|
subject { described_class.instance }
|
|
5
|
+
|
|
6
6
|
after { ActiveSupport::Notifications.unsubscribe(subscription) }
|
|
7
7
|
|
|
8
8
|
let!(:subscription) do
|
|
@@ -18,16 +18,15 @@ describe Datadog::Notifications do
|
|
|
18
18
|
end
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
it '
|
|
21
|
+
it 'has a reporter' do
|
|
22
22
|
expect(subject.send(:reporter)).to be_instance_of(Mock::Reporter)
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
-
it '
|
|
25
|
+
it 'subscribes and report' do
|
|
26
26
|
Mock::Instrumentable.new(method: 'GET').perform
|
|
27
27
|
expect(buffered).to eq([
|
|
28
28
|
'web.render:1|c|#custom:tag,env:test,host:test.host,status:200,method:GET',
|
|
29
29
|
'web.render.time:333|ms|#custom:tag,env:test,host:test.host,status:200,method:GET',
|
|
30
30
|
])
|
|
31
31
|
end
|
|
32
|
-
|
|
33
32
|
end
|
data/spec/spec_helper.rb
CHANGED
|
@@ -10,7 +10,7 @@ require 'sqlite3'
|
|
|
10
10
|
|
|
11
11
|
### Active-record test preparation
|
|
12
12
|
|
|
13
|
-
ActiveRecord::Base.configurations
|
|
13
|
+
ActiveRecord::Base.configurations = { 'test' => { 'adapter' => 'sqlite3', 'database' => ':memory:' } }
|
|
14
14
|
ActiveRecord::Base.establish_connection(:test)
|
|
15
15
|
ActiveRecord::Base.connection.create_table :posts do |t|
|
|
16
16
|
t.string :title
|
|
@@ -22,8 +22,8 @@ end
|
|
|
22
22
|
|
|
23
23
|
module Mock
|
|
24
24
|
class Reporter < Datadog::Notifications::Reporter
|
|
25
|
-
def timing(stat, _millis, opts
|
|
26
|
-
super(stat, 333, opts)
|
|
25
|
+
def timing(stat, _millis, **opts)
|
|
26
|
+
super(stat, 333, **opts)
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
def send_stat(message)
|
|
@@ -36,7 +36,7 @@ module Mock
|
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
class Instrumentable
|
|
39
|
-
def initialize(opts
|
|
39
|
+
def initialize(**opts)
|
|
40
40
|
@opts = opts
|
|
41
41
|
end
|
|
42
42
|
|
|
@@ -71,13 +71,13 @@ Datadog::Notifications.configure do |c|
|
|
|
71
71
|
|
|
72
72
|
c.use Datadog::Notifications::Plugins::ActiveRecord
|
|
73
73
|
c.use Datadog::Notifications::Plugins::Grape,
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
74
|
+
tags: ['more:tags'],
|
|
75
|
+
metric_name: 'api.request',
|
|
76
|
+
exception_handler: lambda {|e|
|
|
77
|
+
if e.message.include?('unauthorized')
|
|
78
|
+
401
|
|
79
|
+
else
|
|
80
|
+
Datadog::Notifications::Plugins::Grape.exception_status(e)
|
|
81
|
+
end
|
|
82
|
+
}
|
|
83
83
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: datadog-notifications
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.6.
|
|
4
|
+
version: 0.6.6
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Dimitrij Denissenko
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2021-03-02 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|
|
@@ -30,7 +30,7 @@ dependencies:
|
|
|
30
30
|
requirements:
|
|
31
31
|
- - ">="
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '4.
|
|
33
|
+
version: '4.8'
|
|
34
34
|
- - "<"
|
|
35
35
|
- !ruby/object:Gem::Version
|
|
36
36
|
version: '5.0'
|
|
@@ -40,7 +40,7 @@ dependencies:
|
|
|
40
40
|
requirements:
|
|
41
41
|
- - ">="
|
|
42
42
|
- !ruby/object:Gem::Version
|
|
43
|
-
version: '4.
|
|
43
|
+
version: '4.8'
|
|
44
44
|
- - "<"
|
|
45
45
|
- !ruby/object:Gem::Version
|
|
46
46
|
version: '5.0'
|
|
@@ -129,7 +129,7 @@ dependencies:
|
|
|
129
129
|
- !ruby/object:Gem::Version
|
|
130
130
|
version: '0'
|
|
131
131
|
- !ruby/object:Gem::Dependency
|
|
132
|
-
name: rubocop
|
|
132
|
+
name: rubocop-bsm
|
|
133
133
|
requirement: !ruby/object:Gem::Requirement
|
|
134
134
|
requirements:
|
|
135
135
|
- - ">="
|
|
@@ -164,10 +164,9 @@ extensions: []
|
|
|
164
164
|
extra_rdoc_files: []
|
|
165
165
|
files:
|
|
166
166
|
- ".editorconfig"
|
|
167
|
+
- ".github/workflows/ruby.yml"
|
|
167
168
|
- ".gitignore"
|
|
168
|
-
- ".rake_tasks~"
|
|
169
169
|
- ".rubocop.yml"
|
|
170
|
-
- ".travis.yml"
|
|
171
170
|
- Gemfile
|
|
172
171
|
- Gemfile.lock
|
|
173
172
|
- MIT-LICENCE
|
|
@@ -202,14 +201,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
202
201
|
requirements:
|
|
203
202
|
- - ">="
|
|
204
203
|
- !ruby/object:Gem::Version
|
|
205
|
-
version: '2.
|
|
204
|
+
version: '2.6'
|
|
206
205
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
207
206
|
requirements:
|
|
208
207
|
- - ">="
|
|
209
208
|
- !ruby/object:Gem::Version
|
|
210
209
|
version: '0'
|
|
211
210
|
requirements: []
|
|
212
|
-
rubygems_version: 3.
|
|
211
|
+
rubygems_version: 3.1.4
|
|
213
212
|
signing_key:
|
|
214
213
|
specification_version: 4
|
|
215
214
|
summary: Generic ActiveSupport::Notifications Datadog handler
|
data/.rake_tasks~
DELETED