grpc_newrelic_interceptor 0.0.1 → 0.0.2

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: 4f48d560a64c635ca1a2a5766cdfeca630f653750b42e75155c05f96440ad15e
4
- data.tar.gz: 6a3760be8b5e0d6f3661f5ff39b40e8980e91cccf2d24eb976000b9c1629fccc
3
+ metadata.gz: 52a1fa41d6cca5fe25fb6d01fec2e75323725efb6db4c49e1f14539dbcabe690
4
+ data.tar.gz: fee4b6bc62c403fc9ade21cb0cfa8f280ec1feb6bbe3d0efb20481c2c52a200a
5
5
  SHA512:
6
- metadata.gz: e211b44a114ae8f521c8168e48fec436b88fdc8295befc29f8b26b72f239332fcbad2f7ca4e3e65dfc98513ff3840b137a6a582a11caa3cd4f8011a48a11ca4c
7
- data.tar.gz: 46ebb1247039200b02bb35a6d39d5282cca0a4f2f14e74b26c317382e1b155ed4b46e9337e69a92a1e7dec4faed9226f6284cf34b5f8749dbf1142f06d11068a
6
+ metadata.gz: 066d0af34fa9e33a40691169fb3684960f78829e421d6a40d3c12e683f232d274e18be4129d00a02331b3cd0b12a23c23a3b25e3a04490be28959c9a1fb17abf
7
+ data.tar.gz: 49ba61cd669e60da4b90201fab0f409d66d15ed50ab5c20fc178b6577608ce9918da0f927fb1ed08fae254e720aa198a2c2f70f71516091d6d6b5e1357fa2865
@@ -4,4 +4,7 @@ language: ruby
4
4
  cache: bundler
5
5
  rvm:
6
6
  - 2.6.2
7
- before_install: gem install bundler -v 2.0.2
7
+ before_install:
8
+ - gem install bundler -v 2.0.2
9
+ script:
10
+ - bundle exec rspec
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- grpc_newrelic_interceptor (0.0.1)
4
+ grpc_newrelic_interceptor (0.0.2)
5
5
  grpc
6
6
  newrelic_rpm (~> 6.0)
7
7
 
@@ -10,14 +10,14 @@ GEM
10
10
  specs:
11
11
  coderay (1.1.2)
12
12
  diff-lcs (1.3)
13
- google-protobuf (3.10.0-universal-darwin)
13
+ google-protobuf (3.11.3)
14
14
  googleapis-common-protos-types (1.0.4)
15
15
  google-protobuf (~> 3.0)
16
- grpc (1.24.0)
17
- google-protobuf (~> 3.8)
16
+ grpc (1.27.0)
17
+ google-protobuf (~> 3.11)
18
18
  googleapis-common-protos-types (~> 1.0)
19
19
  method_source (0.9.2)
20
- newrelic_rpm (6.7.0.359)
20
+ newrelic_rpm (6.8.0.360)
21
21
  pry (0.12.2)
22
22
  coderay (~> 1.1.0)
23
23
  method_source (~> 0.9.0)
data/README.md CHANGED
@@ -19,6 +19,8 @@ Or install it yourself as:
19
19
 
20
20
  ## Usage
21
21
 
22
+ ### Server
23
+
22
24
  ```ruby
23
25
  require 'grpc'
24
26
  require 'grpc_newrelic_interceptor'
@@ -27,13 +29,26 @@ NewRelic::Agent.manual_start # start newrelic agent
27
29
 
28
30
  server = GRPC::RpcServer.new(
29
31
  interceptors: [
30
- GrpcNewrelicInterceptor.new,
32
+ GrpcNewrelicInterceptor::ServerInterceptor.new,
31
33
  ]
32
34
  )
33
35
  server.handle(MyHandler.new)
34
36
  server.run_till_terminated_or_interrupted(['SIGINT'])
35
37
  ```
36
38
 
39
+ ### Client
40
+
41
+ ```ruby
42
+ require 'grpc'
43
+ require 'grpc_newrelic_interceptor'
44
+
45
+ url = "dns:test-service:80"
46
+ stub = TestService::Stub.new(url, :this_channel_is_insecure, interceptors: [
47
+ GrpcNewrelicInterceptor::ClientInterceptor.new,
48
+ ])
49
+ stub.hello_rpc
50
+ ```
51
+
37
52
  ## Development
38
53
 
39
54
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `bundle exec rspec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -1,3 +1,4 @@
1
+ require "grpc_newrelic_interceptor/client_interceptor"
1
2
  require "grpc_newrelic_interceptor/server_interceptor"
2
3
  require "grpc_newrelic_interceptor/version"
3
4
 
@@ -0,0 +1,79 @@
1
+ require "newrelic_rpm"
2
+ require "grpc"
3
+
4
+ module GrpcNewrelicInterceptor
5
+ class ClientInterceptor < GRPC::ClientInterceptor
6
+ ##
7
+ # Intercept a unary request response call
8
+ #
9
+ # @param [Object] request
10
+ # @param [GRPC::ActiveCall] call
11
+ # @param [String] method
12
+ # @param [Hash] metadata
13
+ #
14
+ def request_response(request:, call:, method:, metadata:)
15
+ return yield if !newrelic_enabled?
16
+
17
+ segment = NewRelic::Agent::Tracer.start_external_request_segment(
18
+ library: "gRPC".freeze,
19
+ uri: dummy_uri(method),
20
+ procedure: get_method_name(method),
21
+ )
22
+
23
+ begin
24
+ response = nil
25
+
26
+ # TODO(south37) Set metadta as reqeust headers
27
+ # segment.add_request_headers something
28
+
29
+ # RUBY-1244 Disable further tracing in request to avoid double
30
+ # counting if connection wasn't started (which calls request again).
31
+ NewRelic::Agent.disable_all_tracing do
32
+ response = yield
33
+ end
34
+
35
+ # NOTE: Here, we can not get metadata of response.
36
+ # TODO(south37) Improve ClientInterceptor to get metadata and set it as
37
+ # response headers
38
+ # segment.read_response_headers something
39
+
40
+ response
41
+ ensure
42
+ segment.finish
43
+ end
44
+ end
45
+
46
+ # NOTE: For now, we don't support server_streamer, client_streamer and bidi_streamer
47
+
48
+ private
49
+
50
+ # @param [String] method
51
+ # @return [URI]
52
+ def dummy_uri(method)
53
+ # Here, we use service_name as domain name.
54
+ service_name = get_service_name(method)
55
+ ::NewRelic::Agent::HTTPClients::URIUtil.parse_and_normalize_url("http://#{service_name}")
56
+ end
57
+
58
+ # @param [String] method
59
+ # @return [String]
60
+ def get_service_name(method)
61
+ # Here, method is a string which represents a full path of gRPC method.
62
+ # e.g. "/wantedly.users.UserService/GetUser"
63
+ method.split('/')[1]
64
+ end
65
+
66
+ # @param [String] method
67
+ # @return [String]
68
+ def get_method_name(method)
69
+ # Here, method is a string which represents a full path of gRPC method.
70
+ # e.g. "/wantedly.users.UserService/GetUser"
71
+ method.split('/')[2]
72
+ end
73
+
74
+ # @return [bool]
75
+ def newrelic_enabled?
76
+ NewRelic::Agent.instance.started?
77
+ end
78
+ end
79
+ end
@@ -1,3 +1,3 @@
1
1
  module GrpcNewrelicInterceptor
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grpc_newrelic_interceptor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nao Minami
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-10-28 00:00:00.000000000 Z
11
+ date: 2020-02-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -141,6 +141,7 @@ files:
141
141
  - bin/setup
142
142
  - grpc_newrelic_interceptor.gemspec
143
143
  - lib/grpc_newrelic_interceptor.rb
144
+ - lib/grpc_newrelic_interceptor/client_interceptor.rb
144
145
  - lib/grpc_newrelic_interceptor/server_interceptor.rb
145
146
  - lib/grpc_newrelic_interceptor/version.rb
146
147
  homepage: https://github.com/south37/grpc_newrelic_interceptor
@@ -164,7 +165,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
164
165
  - !ruby/object:Gem::Version
165
166
  version: '0'
166
167
  requirements: []
167
- rubygems_version: 3.0.3
168
+ rubygems_version: 3.0.6
168
169
  signing_key:
169
170
  specification_version: 4
170
171
  summary: An interceptor for using New Relic with gRPC.