griffin-interceptors 0.1.6 → 0.1.11

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
- SHA1:
3
- metadata.gz: 58f96feed784d22af88a27a642d4da316988f244
4
- data.tar.gz: ae39cc0f1be3aace6ed5bd701535064abb5f16ee
2
+ SHA256:
3
+ metadata.gz: b785b3cafb37b0e0591d0711e53b26234f42e5fa030e97b1abcd0aeea1cdb7ea
4
+ data.tar.gz: 1088309028a6cc0b5ef0c9eda8d90959877104f7363bec69bc1edc74c99edee4
5
5
  SHA512:
6
- metadata.gz: df533bab1821031978249296e6b5468860fcd9475235a7332e234dab7b686589daa446abd15274069b010173852a1f725f2b4cc116077bf7fa5baf7d843675c2
7
- data.tar.gz: 6ca9a228c84ef463d4540f5d1e86e36f2b0d8c1c8df7c1a22b494500dfd12155f9e5da9d56d24087ad66a4b93596b1c0aad9a8339f652812686527f2eebd2308
6
+ metadata.gz: 185036907e1423ecbfb463ada4759865c59012e3c3fb927821f148a7cec6f5610a0398c8807e8bb44f2777ff9663a7ecdfe6bb87eef5e116c9986df9dca9e4f7
7
+ data.tar.gz: a5924cd5e8b47d68fb2ca35c0ec9274b983a7e872699921092d0e6f5546048fc583ca149f61c79bbdbfe4a8f080947baac5dbf4f5ddd9e6af8d37432fb2ed5ba
@@ -2,8 +2,8 @@
2
2
 
3
3
  require 'griffin/interceptors/server/payload_interceptor'
4
4
 
5
- # Check actionpack exists to use ActionDispatch::Http::ParameterFilter
6
- gem 'actionpack'
5
+ # Check actionpack exists to use ActionDispatch::Http::ParameterFilter if needed
6
+ gem 'actionpack' unless defined?(ActiveSupport::ParameterFilter)
7
7
 
8
8
  module Griffin
9
9
  module Interceptors
@@ -19,7 +19,13 @@ module Griffin
19
19
  end
20
20
  end
21
21
 
22
- @parameter_filter = ActionDispatch::Http::ParameterFilter.new(@filters)
22
+ # ActionDispatch::Http::ParameterFilter is deprecated and will be removed from Rails 6.1.
23
+ parameter_filter_klass = if defined?(ActiveSupport::ParameterFilter)
24
+ ActiveSupport::ParameterFilter
25
+ else
26
+ ActionDispatch::Http::ParameterFilter
27
+ end
28
+ @parameter_filter = parameter_filter_klass.new(@filters)
23
29
  end
24
30
 
25
31
  def server_streamer(call: nil, **)
@@ -19,26 +19,14 @@ module Griffin
19
19
 
20
20
  return yield if @ignored_services.include?(service_name)
21
21
 
22
- transaction_name = build_transaction_name(service_name, method.name)
23
- state = NewRelic::Agent::TransactionState.tl_get
24
-
25
22
  # gRPC's HTTP method is fixed. https://github.com/grpc/grpc/blob/af89e8c00e796f3398b09b7daed693df2b14da56/doc/PROTOCOL-HTTP2.md
26
- req = Request.new("/#{transaction_name}", call.metadata['user-agent'], 'POST')
27
- # ":controller" is not correct category name for gRPC, But since we want to categorized this transaction as web transactions.
28
- # https://docs.newrelic.com/docs/apm/transactions/key-transactions/introduction-key-transactions
29
- NewRelic::Agent::Transaction.start(state, :controller, transaction_name: "Controller/#{transaction_name}", request: req)
30
-
31
- begin
32
- resp = yield
33
- # gRPC alway returns HTTP status code 200
34
- state.current_transaction.http_response_code = '200'
35
-
36
- resp
37
- rescue => e
38
- NewRelic::Agent::Transaction.notice_error(e)
39
- raise e
40
- ensure
41
- NewRelic::Agent::Transaction.stop(state)
23
+ request = Request.new("/#{service_name}/#{method.name}", call.metadata['user-agent'], 'POST')
24
+
25
+ in_transaction("#{service_name}/#{method.name}", request) do |txn|
26
+ yield.tap do
27
+ # gRPC always returns HTTP status code 200.
28
+ txn.http_response_code = '200'
29
+ end
42
30
  end
43
31
  end
44
32
 
@@ -46,8 +34,21 @@ module Griffin
46
34
 
47
35
  private
48
36
 
49
- def build_transaction_name(service, mthd)
50
- "#{service}/#{mthd}"
37
+ if Gem::Version.new(NewRelic::VERSION::STRING) >= Gem::Version.new('6.0.0')
38
+ def in_transaction(partial_name, request)
39
+ NewRelic::Agent::Tracer.in_transaction(partial_name: partial_name, category: :web, options: { request: request }) do
40
+ yield NewRelic::Agent::Tracer.current_transaction
41
+ end
42
+ end
43
+ else
44
+ def in_transaction(partial_name, request)
45
+ state = NewRelic::Agent::TransactionState.tl_get
46
+ # Specify the controller category so that the transaction gets categorized as a web transaction.
47
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/5.7.0.350/lib/new_relic/agent/transaction.rb#L39.
48
+ NewRelic::Agent::Transaction.wrap(state, "Controller/#{partial_name}", :controller, request: request) do
49
+ yield state.current_transaction
50
+ end
51
+ end
51
52
  end
52
53
  end
53
54
  end
@@ -6,7 +6,11 @@ module Griffin
6
6
  module Interceptors
7
7
  module Server
8
8
  class RavenInterceptor < GRPC::ServerInterceptor
9
- def request_response(*)
9
+ def request_response(call: nil, **)
10
+ if call.metadata['x-request-id']
11
+ Raven.tags_context(request_id: call.metadata['x-request-id'])
12
+ end
13
+
10
14
  begin
11
15
  yield
12
16
  rescue => e
@@ -17,6 +21,9 @@ module Griffin
17
21
 
18
22
  raise GRPC::Unknown.new('Internal server error')
19
23
  end
24
+ ensure
25
+ Raven::Context.clear!
26
+ Raven::BreadcrumbBuffer.clear!
20
27
  end
21
28
 
22
29
  alias_method :server_streamer, :request_response
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ gem 'scout_apm'
4
+
5
+ require 'scout_apm/layer'
6
+ require 'scout_apm/request_manager'
7
+
8
+ module Griffin
9
+ module Interceptors
10
+ module Server
11
+ class ScoutApmInterceptor < GRPC::ServerInterceptor
12
+ # Specify the controller layer so that the transaction gets categorized as a web transaction.
13
+ LAYER_TYPE = 'Controller'
14
+
15
+ def initialize(ignored_services: [], sampling_rate: 1.0)
16
+ @ignored_services = ignored_services.map(&:service_name)
17
+ @sampling_rate = sampling_rate.to_f
18
+ end
19
+
20
+ def request_response(request: nil, call: nil, method: nil)
21
+ service_name = call.service_name
22
+ method_name = method.name
23
+
24
+ return yield if rand > @sampling_rate || @ignored_services.include?(service_name)
25
+
26
+ layer = ScoutApm::Layer.new(LAYER_TYPE, "#{service_name}/#{method_name}")
27
+
28
+ req = ScoutApm::RequestManager.lookup
29
+ req.start_layer(layer)
30
+ req.annotate_request(uri: "/#{service_name}/#{method_name}")
31
+
32
+ ScoutApm::Context.add(
33
+ request_id: call.metadata['x-request-id'],
34
+ user_agent: call.metadata['user-agent'],
35
+ )
36
+
37
+ begin
38
+ yield
39
+ rescue => e
40
+ req.error!
41
+ raise e
42
+ ensure
43
+ req.stop_layer
44
+ end
45
+ end
46
+
47
+ # For now, we don't support server_streamer, client_streamer and bidi_streamer
48
+ # alias_method :server_streamer, :request_response
49
+ # alias_method :client_streamer, :request_response
50
+ # alias_method :bidi_streamer, :request_response
51
+ end
52
+ end
53
+ end
54
+ end
@@ -1,5 +1,5 @@
1
1
  module Griffin
2
2
  module Interceptors
3
- VERSION = '0.1.6'.freeze
3
+ VERSION = '0.1.11'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: griffin-interceptors
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuta Iwama
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-03-08 00:00:00.000000000 Z
11
+ date: 2021-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: get_process_mem
@@ -125,6 +125,7 @@ files:
125
125
  - lib/griffin/interceptors/server/payload_streamer.rb
126
126
  - lib/griffin/interceptors/server/rails_exception_interceptor.rb
127
127
  - lib/griffin/interceptors/server/raven_interceptor.rb
128
+ - lib/griffin/interceptors/server/scout_apm_interceptor.rb
128
129
  - lib/griffin/interceptors/server/timeout_interceptor.rb
129
130
  - lib/griffin/interceptors/server/worker_killer_interceptor.rb
130
131
  - lib/griffin/interceptors/server/x_request_id_interceptor.rb
@@ -133,7 +134,7 @@ homepage: https://github.com/cookpad/griffin-interceptors
133
134
  licenses:
134
135
  - MIT
135
136
  metadata: {}
136
- post_install_message:
137
+ post_install_message:
137
138
  rdoc_options: []
138
139
  require_paths:
139
140
  - lib
@@ -148,9 +149,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
148
149
  - !ruby/object:Gem::Version
149
150
  version: '0'
150
151
  requirements: []
151
- rubyforge_project:
152
- rubygems_version: 2.6.14.1
153
- signing_key:
152
+ rubygems_version: 3.0.3
153
+ signing_key:
154
154
  specification_version: 4
155
155
  summary: A collection of interceptors for griffin
156
156
  test_files: []